Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Thu Mar 28, 2024 1:14 pm

All times are UTC




Post new topic Reply to topic  [ 20 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: Question sous blender
PostPosted: Thu Sep 21, 2006 10:53 am 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

Lorsque je cree un objet non texturé sous blender, il est exporté en gris sous raydium.

Comment puis je faire pour mettre un peu de couleur sans forcement texturer ?

J'arrive a avoir des rendus avec des beau rouges/jaunes/vert sous blender et du gris sous raydium :(

Quelqu'un peut-il me renseigner ?

A+
ouille


Last edited by ouille on Wed Nov 23, 2011 1:52 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 21, 2006 11:29 am 
Offline

Joined: Thu Sep 07, 2006 1:49 am
Posts: 99
le script exporte la géométrie et les coordonnées uv. Les materaixu ne sont pas exportés ( en fait je n'ai fait des essais qu'avec des objets tetxurés )

Donc il faut les uvmappés.

Si c'ets juste pour avoir une couleur me plus simple est de créer une texture avec ta palette de couleur.

Tu passe ton objet en mode uv ( touche F) et tu tu faix une projection au 1/1. toutes les faces seront mappées aux 4 coins d ela texture. ensuite dans l'uv editor tu sélectionnes l'ensemble et tu le reduis/deplace de manière à le placer sur la bonne couleur.


Top
 Profile  
 
 Post subject: blender
PostPosted: Thu Sep 21, 2006 12:06 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

Merci pour la reponse je vais essayer.

Je pensais que c'etait possible directement puisque le fichier tri contient le code de la couleur.

A+
ouille


edit:grammaire


Last edited by ouille on Wed Nov 23, 2011 1:53 pm, edited 2 times in total.

Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 21, 2006 12:11 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
La réponse de SamB est la bonne : les scripts ne tiennent pas compte de la couleur des vertices (ni à l'import, ni à l'export). La modification ne serait pas particulièrement complexe à mon avis, la syntaxe dans le fichier TRI étant simple : rgb(R,G,B) ou R,G et B sont dans l'intervalle [0,1].


Top
 Profile  
 
 Post subject: Couleur a l'export
PostPosted: Fri Sep 22, 2006 12:55 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

La modif est faite dans le script d'export:

Code:
                if(face.image):
               u=face.uv[i][0]
               v=face.uv[i][1]
               self.file.write("%f %f %f %f %f %f %f %f %s\n" % (vlist[indx].co[0],vlist[indx].co[1],vlist[indx].co[2],vlist[indx].no[0],vlist[indx].no[1],vlist[indx].no[2],u,v,face.image.name))
                else:
               self.file.write("%f %f %f %f %f %f 0 0 rgb(%3.3f,%3.3f,%3.3f)\n" % (vlist[indx][0],vlist[indx][1],vlist[indx][2],vlist[indx].no[0],vlist[indx].no[1],vlist[indx].no[2],face.col[i].r/255.0,face.col[i].g/255.0,face.col[i].b/255.0))



Seule la deuxieme partie du if le else est modifiée.
J'ai testé ca marche ici !

C'est mas première contribution ;o)
je regarde l'import !

A+
ouille


Last edited by ouille on Wed Nov 23, 2011 1:52 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 22, 2006 4:07 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Très bien ! :) Dès que tu estimes que tu as terminé, tu poses tout ici, on vérifie vite fait que c'est OK et je te file un accès SVN.


Top
 Profile  
 
PostPosted: Fri Sep 22, 2006 8:42 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Voici le script python d'export en couleur
Code:
#!BPY

"""
Name: 'Raydium Export (.tri format)'
Blender: 2.36"
Group: 'Export'
Tooltip: 'Export to .tri format with normals'
"""

#import rpdb2;
#rpdb2.start_embedded_debugger("test",True)

import Blender

from Blender import NMesh

class source:
   def __init__(self,filename):
      self.file=open(filename,"w")

   def writeFaces(self):
      scene=Blender.Scene.getCurrent()
      self.file.write("1\n") #tri version
      
      for object in scene.getChildren():
          objtype=object.getType()
          if objtype == "Mesh":
         print "ok, it's a mesh"
         mesh=object.getData()
         vlist=mesh.verts
         for face in mesh.faces:
            if len(face)!=3:
                print "ERROR: NOT A TRIANGLE ONLY MESH ! (select all vertices and use CTRL+T)"
                      for i in range(3): #triangles only ! (CTRL+T)
                          indx=vlist.index(face[i])
                if(face.image):
               u=face.uv[i][0]
               v=face.uv[i][1]
               self.file.write("%f %f %f %f %f %f %f %f %s\n" % (vlist[indx].co[0],vlist[indx].co[1],vlist[indx].co[2],vlist[indx].no[0],vlist[indx].no[1],vlist[indx].no[2],u,v,face.image.name))
                else:
               self.file.write("%f %f %f %f %f %f 0 0 rgb(%3.3f,%3.3f,%3.3f)\n" % (vlist[indx][0],vlist[indx][1],vlist[indx][2],vlist[indx].no[0],vlist[indx].no[1],vlist[indx].no[2],face.col[i].r/255.0,face.col[i].g/255.0,face.col[i].b/255.0))
               


# get the face normals
#         self.file.write("GLfloat normals[%d][3] = {\n" % len(mesh.normals) )
#         for normal in mesh.normals:
#            self.file.write("{ %ff, %ff, %ff },\n" % (normal[0],normal[1],normal[2]))
#         self.file.write("};\n\n")

# get the mesh colors
#         if mesh.colors:
#            self.file.write("char OBJ_HAVE_COLORS=1;\n")
#            self.file.write("GLfloat colors[%d][3] = {\n" % len(mesh.colors) )
#            for color in mesh.colors:
#               self.file.write("{ %ff, %ff, %ff },\n" % (color[0],color[1],color[2]))
#            self.file.write("};\n\n")
#         else:
#            self.file.write("char OBJ_HAVE_COLORS=0;\nGLfloat *colors;\n")


   def close(self):
         self.file.flush()
         self.file.close()

def fs_callback(filename):
   if filename.find('.tri', -4) <= 0: filename += '.tri'
   obj=source(filename)
   obj.writeFaces()
   obj.close
   print "Exported to %s. Textures must be .tga, uncompressed, origin NOT at lower-left.\n" % (filename)

#fs_callback("tt.tri")
Blender.Window.FileSelector(fs_callback, "Export Raydium Tri")

La modif est consiste juste a rajouter les couleurs des vertices dans le cas d'une face non texturée.

Pour importer il faut utiliser le code suivant:
Code:
#!BPY

"""
Name: 'Raydium Import (.tri format)'
blender: 2.31
Group: 'Import'
Tooltip: 'Import a .tri'
"""
#import rpdb2;
#rpdb2.start_embedded_debugger("test",True)

try:
  import nt
  os=nt
  os.sep='\\'
except:
  import posix
  os=posix
  os.sep='/'

import sys
import Blender
from Blender import NMesh

# This script will include .tri files (Raydium mesh files)
# Do not supports multitexturing yet.
# Python puxxor :)

def fileExists(f):
     try:
        file = open(f)
     except IOError:
         exists = 0
     else:
         exists = 1
     return exists

class source:
   def __init__(self,filename):
      self.filename=filename
      self.file=open(filename,"r")

   def readFaces(self):
      lines = self.file.readlines();
      #p,f = os.path.split(self.filename)
      #p,f = Blender.sys.splitext(self.filename)
      p = Blender.sys.dirname(self.filename)
      #f = Blender.sys.basename(self.filename)
      os.chdir(p)
      print "CWD is now %s" % (p)
      scene=Blender.Scene.getCurrent()
      mesh = Blender.NMesh.New()
      
      n = 0
      bvert = [0, 0, 0]
      bu = [0, 0, 0]
      bv = [0, 0, 0]
      textures = []
      textures_index = []

      for line in lines:         
          words = line.split()
          if len(words) == 1:
         if float(words[0]) != 1.0:
             print "ERROR ! must be a .tri version 1 ! use raydium_modler."
          else:
         vx = float(words[0])
         vy = float(words[1])
         vz = float(words[2])
         nx = float(words[3])
         ny = float(words[4])
         nz = float(words[5])
         bu[n] = float(words[6])
         bv[n] = float(words[7])
         vert=Blender.NMesh.Vert(vx,vy,vz)
         bvert[n]=vert
                   mesh.verts.append(vert)
         n = n + 1

          if n == 3:
         textured = 1
         if words[8][0:4] == "rgb(":
             textured = 0
#             print words[8][4:-1].split(",")
             couls=words[8][4:-1].split(",")
             r= float(couls[0])*255
                            g= float(couls[1])*255
                            b= float(couls[2])*255
#             r = float(words[8][
             #print "Raydium rgb() material found.. ignoring !"
         #else:
             #print "textured face"
         bface = Blender.NMesh.Face()
         #bface.mode |= Blender.NMesh.FaceModes['TWOSIDE']

         if textured == 1:
                 bface.mode |= Blender.NMesh.FaceModes['TEX']
         bface.materialIndex=0
         bface.v.append(bvert[0])
         bface.v.append(bvert[1])
         bface.v.append(bvert[2])
         bface.uv.append( (bu[0], bv[0]) )
         bface.uv.append( (bu[1], bv[1]) )
         bface.uv.append( (bu[2], bv[2]) )

         if textured ==0:
                       bface.mode &= ~Blender.NMesh.FaceModes['TEX']
                           for n in range(3):
                             col =NMesh.Col()
                             col.r=int(r)
                             col.g=int(g)
                             col.b=int(b)
                             col.a=255
                             bface.col.append(col)

         if textured == 1:
             found = -1
             for t in range(len(textures)):
            if textures[t] == words[8]:
                found = textures_index[t]

             if found == -1:
            print "texture (%s)is not cached yet: loading" % (words[8])
            if fileExists(words[8]) == 0:
                print "Cannot access to %s" % (words[8])
                sys.exit(3)
            found = Blender.Image.Load(words[8])
            textures.append(words[8])
            textures_index.append(found)
            
             bface.image = found
         mesh.faces.append(bface)
         n = 0

      object = Blender.NMesh.PutRaw(mesh)
      object.name = "tri"
      print "end."
      

   def close(self):
         #self.file.flush()
         self.file.close()

def importTRI(filename):
    if filename.find('.tri', -4) <= 0: filename += '.tri'
    obj=source(filename)
    obj.readFaces()
    obj.close
    print "Imported."

def filesel_callback(filename):
  test = importTRI(filename)

Blender.Window.FileSelector(filesel_callback, "Import TRI")
 


Les modifs etaient plus complete, et je n'ai jamais fait de python, alors n'hesite pas a y regarder à deux fois.
Les modifs n'ont lieu que si textured=0
D'apres ce que j'ai lui il faut affecter les valeurs UV avant les couleurs.

Bon tests.

J'aurais bien aimé y rajouter la transparence, mais elle ne sera pas lu par les texture raydium.

Bon maitenant je teste le deuxième viewport !

A+
ouille


Last edited by ouille on Wed Nov 23, 2011 1:53 pm, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 12, 2006 6:54 pm 
Offline

Joined: Sat Oct 29, 2005 12:43 pm
Posts: 65
Je n'ai pas voulu créer un nouveau post pour ça, mais j'aimerai confirmation que mon blender bug ^^
Je pars du cube de depart, je le selectionne, je vais dans "matérial", add new, puis dans "texture", add new, image, load image, choisis une image...
et là, ben l'image n'apparait pas dans la fenêtre preview et le nom de l'image n'apparait pas à côté de "load image"...
J'ai tout essayé, plusieurs format d'image (dont celle fourni dans Raydium)...
Par defaut c'est le selecteur de fichier normal qui apparait, pas celui des images... J'ai aussi essayé ce dernier.. je clique sur l'image puis sur enter... rien... :cry:
Y a t'il une option cachée ?
J'ai parcouru plein de tutoriaux (dont les 3/4 obsolètes ^^)... mais il veut pas ce #!@"$ de blender :evil:


Top
 Profile  
 
 Post subject:
PostPosted: Sun Nov 12, 2006 9:00 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Je n'arrive même pas à refaire le chemin que tu donnes dans ton post, c'est dire mes compétences avec cet animal ;)
C'est ou "materials", "add new", etc ... ?

Est-tu certain que ce genre de manipulation va bien te générer un UV mapping (seul type de mapping utilisé par Raydium) ?
Pour ma part, quand je dois texturer, j'utilise les outils UV sans passer par un "material" (mode "face" (touche F en mode objet), Shift+F10 pour l'éditeur UV et zou ...). Je dis pas que c'est la bonne méthode, mais c'est la seule que je connaisse ;)


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 13, 2006 1:23 pm 
Offline

Joined: Sat Oct 29, 2005 12:43 pm
Posts: 65
Alors, avec ta méthode, j'arrive à texturer le cube de départ :D
Mais impossible de texturer (comme je voudrais) la sphere... Je fait une UVSphere, et je voudrais la recouvrir avec une texture (rock03.tga par exemple).. Pour le moment, il me répète la texture pour chaque face de la sphère... comment lui dire de ne pas répèter la texture, mais de l'étendre sur toute la sphère?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 13, 2006 1:42 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
En mode "faces", place ta souris dans la vue la plus adaptée, et utilise la touche "u" ... et voilà plein de modes de mapping UV ! :) Pour une shpère, le mode "sphère from view" est probablement le plus intéressant (avec le vue "de coté"). Je sais pas si je suis clair :)


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 13, 2006 6:25 pm 
Offline

Joined: Sat Oct 29, 2005 12:43 pm
Posts: 65
Merci, ça fonctionne bien :D

Une autre petite question pour la route ^^ :
Sous Raydium le rendu est en flat + texture.. comment avoir un rendu style Gouraud (ou Phong) + texture ?


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 13, 2006 6:43 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
"Smooth" ton modèle avant l'export, c'est le mieux : F9, et "set smooth" dans le cadre "Link and Materials". Note que ça n'a rien avoir avec le style d'éclairage ou Raydium, c'est juste une histoire de normales ;) (on parle aussi de smoothing groups aussi)


Top
 Profile  
 
 Post subject:
PostPosted: Mon Nov 13, 2006 7:50 pm 
Offline

Joined: Sat Oct 29, 2005 12:43 pm
Posts: 65
C'est ok pour le smooth ^^
Je viens de me rendre compte que j'utilisais des vieux export TRI... qui ne géraient pas tout :roll:

Merci pour ton aide :)


Top
 Profile  
 
 Post subject:
PostPosted: Wed Nov 15, 2006 6:38 pm 
Offline
User avatar

Joined: Thu Sep 29, 2005 2:59 pm
Posts: 828
For english speakers, what is that plugin for? Is a new version of the tri importer?


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 20 posts ]  Go to page 1, 2  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group