Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





indices vt y vn con gldrawelements -ficheros obj-

Iniciado por killgates, 19 de Abril de 2016, 11:56:04 PM

« anterior - próximo »

killgates

Hola,

Ya se leer un fichero obj que contiene coordenadas de vértices.. y más adelante los índices de vértice para dibujar con gldrawelements().
Utilizo shaders cómo método de render.. y voy pasando los atributos de vértice a las variables "in" del shader..

Mi problema es al dibujar el objeto 3d con gldrawelements().. ya que utilizo los índices de vértice.. pero no los índices de textura ni de normales.. me refiero a que en el fichero tengo: f 1/1/1 2/2/2 3/3/3f     1/2/3 1/2/3 1/2/3f  ....

Yo pensaba que sólo con cargar los 'v' y 'vt' y'vn'.. y dibujar utilizando el gldrawelements() usando los índices de vértices ('v's) ya era suficiente..
Pero imagino que algo no he entendido porqué también hay índices de 'vt' y 'vn'..

Cómo puedo utilizar estos índices también?
Gracias!

TrOnTxU

Respondo muy tarde, pero que es que hacia mil que no me pasaba por aquí.

No sé si lo entendido muy bien, pero me dices que tienes varios indices (unos para atributos de posición, otros para coordenadas de textura, etc), No recuerdo ya como era el formato obj, pero puede que sea así. En Collada te puedes encontrar atributos compartidos como la posición, pero otros como las normales que son diferentes dependiendo del polígono en el que estes dibujado (por ejemplo los vertices de un cubo).

Si este es tu caso vas a tener que procesar el formato que te llegue, porque solo puedes tener una lista de indices, de manera que tendrás que "separar" los vertices que compartan posición, pero no color o textura, y reindexar todo.
Recuerda que un vértice es un conjunto de atributos (pos, normal, color, etc.).

Si no te aclaras, mi consejo es que utilices Assimp u otra libreria por el estilo que te ahorre el currote de hacer esto por ti mismo. (es mejor utilizar obj, fbx, etc. solo para exportar, y utilizar tu propio formato, u otro pensado para aplicaciones "real-time" para cargar desde el juego/aplicación).

Un saludo, espero haberte ayudado.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

Gallo

Yo te aconsejo que resuelvas todo lo de los indices en CPU y subas simplemente una lista de vértices con los atributos de cada uno y lo pintes con glDrawArrays, se que con glDrawElements parece mas optimo por que la cantidad de vertices del buffer es mucho menor ya que no repites, pero a la práctica esto no funciona bien, para un mismo vértice probablemente necesites diferentes normales, incluso diferentes UVs, según la face que estas pintando, y eso significa que por cojones has de repetir el vértice (mas bien repetir la posición y cambiando la normal u otros atributos que varíen para esa misma posición en otra face) ya que no puedes tener una lista de indices para un atributo y otra lista de indices para otro.

En resumen, mi consejo, resuelve los indices de los atributos en CPU y sube una array con todos los atributos resueltos a la GPU, te será mas fácil y más cómodo para futuras operaciones.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.