Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - efreet

#1
Programación gráfica / Formato de vertices - Iluminacion
01 de Enero de 1970, 01:00:00 AM
                                Hola a todos ,

Me gustaria saber que componentes mínimos , debe llevar un formato de vertices para
que funcione la iluminacion con luces direccionales , puntuales , de Direct3D

yo actualmente uso este formato
(D3DFVF_XYZ|D3DFVF_TEX2)
y con este formato no me funciona la iluminacion.
¿es necesario incluir la componente D3DFVF_NORMAL para que funcione la iluminacion?

Por supuesto tengo activado el D3DRS_LIGHTING a TRUE
y he creado y activado algunas luces.

¿Pueden influir las componentes de los materiales?

Gracias por anticipado.


                               
#2
                                Hola  ,
Me gustaria saber como calcular una matriz
que me transforme un vertice no transformado ( D3DFVF_XYZ ) un vertice transformado ( D3DFVF_XYZRHW )

O sea , que a partir de las matrices VIEW , WORLD y PROYECTION , pueda convertir un d3dxvector3 (x,y,z) a ( x, y , zrw) mediante
D3DXVec3TransformCoord(...)


Gracias y un saludo ,
Efreet.
                               
#3
General Programadores / Indexed vs Non-Indexed
01 de Enero de 1970, 01:00:00 AM
                               
Hi Lord Trancos ,

La primitivas indexadas son mucho más rapidas que las no indexadas , solo que hay que utilizarlas correctamente , si no puede ser incluso más lentas que las no indexadas.

La primitivas indexadas son mas rapidas porque unicamente en este modo  utilizan una caché con los ultimos vertices transformados.

Por eso es muy importante en el rendimiento ,
el ORDEN en que se envian a la tarjeta ,los datos de los indices:
( Los indices de los vertices deben ser los mas "adyacentes" posibles )

Por ejemplo:

caso A: (caso no optimo)
Tenemos un VB de 2000 vertices
y tenemos un IV de 1000 triangulos
El orden de los indices es el siguiente:
Triangulo 1: 1 , 1000 ,23
Triangulo 2: 100 , 300 ,503
Triangulo 3: 7 , 100 ,223
Triangulo 4: 110 , 1100 ,723
....

caso B: (caso optimo)
Tenemos un VB de 2000 vertices
y tenemos un IV de 1000 triangulos
El orden de los indices es el siguiente:
Triangulo 1: 1 , 2 ,3
Triangulo 2: 3 , 2 ,4
Triangulo 3: 4 , 5 ,1
Triangulo 4: 8 , 4 ,5
....

Al enviar el IV (index buffer) del caso A ,
no aprovecha las ventajas de la cache.( normalmente las caches no suelen ser muy grandes , mas o menos 10 vertices de cache )
la tarjeta ya que no reutiliza valores ya precalculados. En este caso para los 4 triangulos calcularia 12 vertices.

En el caso B para los 4 triangulos que se muestran solo calcularia 6 vertices.


!Imaginate esto para 10000 triangulos! , la diferencia de rendimiento es abismal.

Un saludo ,
          Efreet.
                               
#4
General Programadores / MFC en DirectX
01 de Enero de 1970, 01:00:00 AM
                                Hay un modo muy sencillo de renderizar varias vistas en la misma pantalla ,sin tener que copiar surfaces y sin MFC´s

El pseudocodigo seria algo así:

D3DVIEWPORT8 Vista1= {0,0,100,100};
D3DVIEWPORT8 Vista2= {100,0,100,100};

Device->SetViewport(&Vista1);
Device->SetTrasform(MatrizVista1);

RenderizarEscena(...);

Device->SetViewport(&Vista2);
Device->SetTrasform(MatrizVista1);

RenderizarEscena(...);

Solo tienes que cambiar los valores del viewport con los valores de las vistas que quieres renderizar y ya está.


No se si esto es lo que querias ,
espero haberte ayudado.

Un saludo.
Efreet


                               





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.