Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





To stride or not to stride?

Iniciado por Pogacha, 16 de Junio de 2007, 02:46:52 PM

« anterior - próximo »

Pogacha

Buenas, pregunto entonces a los gurus de DX ...

¿Que es mejor?
¿Usar strided o usar custom vertex formats para dibujar primitivas?
Segun mi intuicion, los customs son por comodidad y a fin de cuentas terminan haciendo lo mismo, pero cabe la posibilidad de que halla una optimización al usarlos.
El strided me viene bien para compatibilizar con OpenGL.

Target: computadoras de 6 años de antiguedad. Pentium 3 1Ghz + video de 8/16mb en DX 7.0.

Gracias por adelantado!

senior wapo

Si usas arrays y no vertex buffers, te da igual, asi que usa strided por el parecido a opengl y la versatilidad.

La cosa cambia si quieres usar vertex buffers.

Si usas strided olvidate de usar vertex buffers en DX7 e inferior. Sus vertex buffers son todos FVF empaquetados, lo que llamas custom. Todas las primitvas usan un único buffer que por tanto ha de contener todos los componentes del vértice (posición, UV, color, normal, especular,etc...).

Si hubieses optado por basar tu motor en formatos de vértice empaquetados propios te encontrarias con que pierdes muchas de las ventajas de velocidad cuando quieras pasar a DX8+ y escenas complejas a cambio de poder usar vertex buffers en DX7.

La ventaja de tener las componentes por separado es que te permite dibujar varias versiones del modelo subiendo los datos que no cambian (casi todos excepto posición y normal) una sola vez.

Imaginate 100 soldados en pantalla, todos del mismo modelo pero en diferentes fases de animación. Todos tendrán el mismo array de coordendas de textura, mismos colores especulares por vértice (posiblemente color de vertice también si no usas lighting) y solamente cambiarán sus posiciones de vértices y normales entre una instancia del soldado y la siguiente.

Si usas vértices empaquetados tienes que subr todas las componentes (color, especular, textura...) para cada una de las copias pero si usas las componentes por separado, solo cambias (subes a la tarjeta) el vertex buffer que contiene la posición y la normal. Los otros no los cambias y posiblemente siguen en memoria de video.

La compatibilidad la desconozco.

En resumen, quieres a toda costa vertex buffers en DX7? Si la respuesta no es un SI rotundo, basa tu motor en strided y encapsula cada array como un objeto con Lock/Unlock tal que si fuese un vertex buffer real. En el futuro lo agradecerás aunque ahora tengas que subir la geometría cada vez que pintas.

Pogacha

En realidad el tema de vertexs buffers no lo estoy usando en este momento por que la cantidad de geometria es baja, menos de 3 mil triangulos, y a las posiciones y texcoords de los vertex los calculo al vuelo por razones internas.

Muchisimas gracias!
Me lo has dejado muy claro.






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.