Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: killgates en 19 de Abril de 2016, 11:56:04 PM

Título: indices vt y vn con gldrawelements -ficheros obj-
Publicado por: killgates en 19 de Abril de 2016, 11:56:04 PM
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!
Título: Re:indices vt y vn con gldrawelements -ficheros obj-
Publicado por: TrOnTxU en 11 de Mayo de 2016, 09:06:20 PM
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.
Título: Re:indices vt y vn con gldrawelements -ficheros obj-
Publicado por: Gallo en 26 de Julio de 2016, 03:14:13 PM
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.