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 - Hari

#1
General Programadores / Colores al renderizar
01 de Enero de 1970, 01:00:00 AM
                                Antes del SetIndices:

// establecemos el formato de los vertices
cD3D->SetVertexShader( D3DFVF_MIVERTICE );

// establecemos el vertex buffer
cD3D->SetStreamSource( 0, cObjTemp->g_pVB,
 sizeof(CObjeto::MIVERTICE) );

Obvio el BEGIN/END SCENE                                
#2
General Programadores / Colores al renderizar
01 de Enero de 1970, 01:00:00 AM
                                Pegaré extractos del código, ya que lo he modificado dentro de lo que estoy haciendo y esto algo desperdigado en clases, espero que se entienda.

Nada mas sencillo:

1) Inicializo el material

// Material: Rojo
ZeroMemory( &mtrlRojo, sizeof(SO_MATERIAL) );
mtrlRojo.Ambient.r = mtrlRojo.Diffuse.r = mtrlRojo.Emissive.r = 1.0f;
mtrlRojo.Ambient.g = mtrlRojo.Diffuse.g = mtrlRojo.Emissive.g = 0.0f;
mtrlRojo.Ambient.b = mtrlRojo.Diffuse.b = mtrlRojo.Emissive.b = 0.0f;
mtrlRojo.Ambient.a = mtrlRojo.Diffuse.a = mtrlRojo.Emissive.a = 1.0f;

2) Proceso de render normal

// Establecemos material
cD3D->SetMaterial( &mtrlRojo );

// Index buffer
cD3D->SetIndices( cGeomTemp->g_IB , 0 );

// dibujamos
cD3D->DrawIndexedPrimitive( SO_PT_TRIANGLELIST, 0,
   cObjTemp->m_dwNumVertex , 0, cGeomTemp->m_dwNumFaces );

PD:

// Format FVF
#define D3DFVF_MIVERTICE (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )

Los objetos en la prueba no tienen textura.
Ningun RenderState, excepto Zbuffer y Dither. Luz desactivada.

                               
#3
General Programadores / Colores al renderizar
01 de Enero de 1970, 01:00:00 AM
                                Es mas sencillo de lo que estais comentando, si teneis un objeto con material (diffuse, ambient y specular) y no hay luces, se ve negro. Los render states D3DRS_DIFFUSEMATERIALSOURCE y similares, solo sirven cuando usamos color_vertex, que creo que no es el caso.

Ahora bien, si modificamos la propiedad Emissive del material, entonces emitirá el color que definamos, sin necesidad de activar las luces. Acabo de hacer un ejemplo sencillo y funciona.                                
#4
                                No veo la necesidad de mantener tantas matrices, porque al fin y al cabo se aplica una sola matriz de transformación, y si cambia algo, la tienes que recalcular. Yo mantengo los tres ángulos de rotación y un vector con su posición, aunque en cuestión de optimización todo dependerá de cada caso concreto.

Un Saludo.                                
#5
General Programadores / Algo de álgebra
01 de Enero de 1970, 01:00:00 AM
                                Exactamente, el caso en concreto es el que comenta Dracula (3ds -> dx), igual es que no estoy interpretando bien la información que da en LOCAL_MATRIX, pero según he visto por ahí almacena la matriz de transformación del objeto. Con respecto a lo que me comentas _Grey, las dos formas de convertir de un sistema de coordenadas de right a left son las que dices, o cambias la y por la z, con lo cual rotas el objeto, o inviertes la z, correcto, yo he implementado las dos y funcionan, el problema que comentaba es el siguiente, igual no me he explicado con claridad. Supongamos que tenemos una matriz de transformación en "left", centremonos en la traslación, sabemos que la x,y,z están respectivamente en la [4,1] [4,2] [4,3], obviamente si al transformar de "right" los vertices invertimos z o alternamos la y por la z, la matriz de transformación en ese sistema de coordenadas no nos sirve después de hacer el cambio; y este caso es el mas sencillo, ya que si hablamos de rotaciones por eje ya la matriz se va complicando. Entonces, mi pregunta es sencilla, y centremonos en la solución de invertir la z, ¿habrá que realizar alguna conversión a la matriz original, no? De hecho, es que hay algunos objetos que no me salen correctamente situados, y creo casi con toda seguridad, por lógica, que la matriz de transformación no puede seguir siendo válida si estamos invirtiendo o sustituyendo el orden de los vertices.

Gracias y un saludo.                                
#6
General Programadores / Algo de álgebra
01 de Enero de 1970, 01:00:00 AM
                                En este caso no es antes, importando de un formato que almacena la geometría en "right-handed", puedo convertir los vertices, las coord. de textura, etc, pero la matriz de transformación está en "right-handed", por eso debo transformarla a posteriori, por eso la pregunta.

Gracias y un saludo.                                
#7
General Programadores / Algo de álgebra
01 de Enero de 1970, 01:00:00 AM
                                Hola a todos,

Os mando a todos un saludo, ya que hace bastante tiempo que no entro por el chat por cuestiones laborales.

Así que vamos a probar el foro :sonriendo:

Necesito convertir una matriz de transformación en "right-handed" a "left-handed", ¿alguien lo ha hecho? ¿hay que descomponerla primero en sus respectivas rotación, traslación y escala?

Gracias y un saludo.                                





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.