Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Vertices

Iniciado por zupervaca, 03 de Agosto de 2005, 12:55:55 PM

« anterior - próximo »

zupervaca

 me encuentro ante una situacion algo complicada y queria saber como lo solucionasteis vosotros, tengo unos indices y unos vertices, algunos vertices se deben de duplicar por las coordenas de textura, pero ahora resulta que me he puesto a meterle las normales y ningun vertice tiene una normal igual, antiguamente tenia buffers separados y no era ningun problema, pero con el tema de querer aprovechar los shaders toda la info tiene que estar en el vertice, ¿como hago para no tener que duplicar todos los vertices? es que me encuentro en que los indices no valdrian para nada  :huh:

saludos

AK47

 Yo tambien me encontre con ese problema, y lo "solucione"  dibujando los modelos como listas de triangulos sin indices, es decir, duplicando vertices. Ocupa un poco mas pero es mucho mas simple y sencillo  :huh:  

vincent

 yo también opté por la solución a lo bruto...  :rolleyes:  
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

zupervaca

 por ahora podre un indexbuffer de 0 a X por si acaso luego encuentro una solucion al problema tocho, pero no hay duda que por ahora duplicar todo es la unica solucion  :(

gracias

_Grey

 Lo que tienes que hacer hacer es que esos vertices duplicados tengan la misma normal, si los calcula tu programa, podrias calcular las normales antes de duplicarlos y mantener esa misma normal para los duplicados.

Lo normal seria que al cargar la malla los vertices ya esten duplicados y con su normal correcta, pero claro, eso dependera de los formatos y editores graficos que uses.

Saludos.

Pogacha

 Hasta donde yo se un buen formato de mallas deberia tener una lista de vectores 3d como vertices una lista de vectores 2d como texcoords y una lista de de poligonos/triangulos ( dependiendo del caso: separados como islas de stips o fans ), cada uno indicando sus pares de indices de posicion/texcoords correspondientes a cada vertice como así otras propiedades unicas del vertice como la normal, color, lista de pesos, etc ...

Saludos
PD: Dado el cruce con haddd, un buen formato debe ser independiente del API, cosa que uno construlla para su API la información que este necesite de la manera mas apropiada.

Haddd

 Bueno, estás metiendote de lleno en los problemas de base de DX  B)

El problema es que el hardware necesita esa información por vértice. Así que en lugar de una estructura lógica de indices de vértices, índices de texturas, índices de normales, pues tenemos esta "horrorosa" forma de definir los vértices.

Tienes que tener en cuenta una cosa llamada smoothing groups. Si en el programa de dibujo quieres que te aparezca por ejemplo una esfera facetada, tienes que duplicar las normales en cada cara, si por el contrario quieres una esfera soft, las normales se tienen que promediar entre las caras y no necesitarás duplicarlas. Así que a veces depende del grafista si tienes o no que duplicar las normales. :blink:

Nosotros exportamos desde MAX la estructura lógica y después construimos un mesh de triángulos. Finalmente convertimos estos triángulos a indexado.

Por cierto, a ver si tienes una forma elegante de resolver el FVF, porque nosotros no lo hemos resuelto todavía  ;)  

zupervaca

 ¿entonces un smothing group seria una media de las normales de los tres posibles triangulos adyacentes al vertice? no se si formulo bien la pregunta

el tema del fvf no se exactamente a que te refieres, yo por ahora estoy utilizando los vertexelement para definir su estructura, si es como acceder a el sin realizar comprobaciones y sin tener su estructura ya definida la cosa esta chunga ... muuu chunga :lol:, no obstante puedes hacer pequeñas chapucillas con el CustomVertex, pero esta claro que este es el gran fallo que tenemos con c-sharp y que no sucedia con c++ ;)

saludos

Pogacha

 Un smothing group es un conjunto de triangulos/faces/caras que tienen lados difumados ... o sea ... vertices en los cuales su normal se calcula interpolando las normales de los triangulos que lo usan, de esta manera se define la normal al vertice mediante un conjunto de caras que lo usan, esto es mas util para la etapa de edición.

Saludos.

Mandelbrot

 pues ya que estamos, ¿alguien puede poner la formula para calcular la normal interpolada de un vertice compartido por un numero indeterminado de triangulos?

gracias y saludos.



zupervaca

 teoricamente es sumar las dos normales y dividir el resultado entre 2, luego sumas al resultado otra normal y divides entre 2 y asi sucesivamente

Mandelbrot

  (nooo)  si ya me decia mi madre que estudiase

_Grey

 
Citarteoricamente es sumar las dos normales y dividir el resultado entre 2, luego sumas al resultado otra normal y divides entre 2 y asi sucesivamente

Yo sumaria las normales de todos los poligonos adyacentes, y dividiria por la cantidad de normales calculadas, y luego mas vale que normalices la normal resultante :P

Hay un truco para que los poligonos de mas area "arrastren" la normal hacia ellos, haciendo la misma operacion, pero las normales de los poligonos que sumaras no deben estar normalizadas, pero recuerda otra vez normalizar la normal resultante :P

Saludos.

zupervaca

 yo no te recomiendo hacer esto ya que cuando te metas en temas de colisiones tendras problemas, normalmente hacemos ese calculo durante la lectura de un archivo y no sabemos todas las normales que tiene con lo que por eso se lo dije asi

Mandelbrot

 Me parece interesante lo de calcular las colisiones a partir de las normales, no estoy muy puesto en eso y algun dia tendre que meterme de lleno, ¿se supone que entonces las comprobaciones son hechas a partir de los vertices de cada plano en lugar de el plano en si?.

En ese caso seria bienvenido el que la colision tenga en cuenta tambien el arrastre de cada poligono, seria ideal para juegos tipo pinball u otros que requieran de colisiones muy precisas sobre todo tipo de superficies,  supongo, no se.






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.