Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: CoLSoN2 en 21 de Noviembre de 2002, 07:03:51 PM

Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 21 de Noviembre de 2002, 07:03:51 PM
                                tengo el siguiente codigo que genera los vertices: (no ai cara suelo)



// CARA FONDO

Log("Face 1");

verts[0].x = center.x;

verts[0].y = center.y + width;

verts[0].z = center.z + width;

verts[0].tu = 0; verts[0].tv = 0;

verts[1].x = center.x + width;

verts[1].y = center.y + width;

verts[1].z = center.z + width;

verts[1].tu = 1; verts[0].tv = 0;

verts[2].x = center.x + width;

verts[2].y = center.y;

verts[2].z = center.z + width;

verts[2].tu = 1; verts[0].tv = 1;

verts[3].x = center.x;

verts[3].y = center.y;

verts[3].z = center.z + width;

verts[3].tu = 0; verts[0].tv = 1;

// CARA IZQUIERDA

Log("Face 2");

verts[4].x = center.x;

verts[4].y = center.y + width;

verts[4].z = center.z;

verts[4].tu = 0; verts[0].tv = 0;

verts[5].x = center.x;

verts[5].y = center.y + width;

verts[5].z = center.z + width;

verts[5].tu = 1; verts[0].tv = 0;

verts[6].x = center.x;

verts[6].y = center.y;

verts[6].z = center.z + width;

verts[6].tu = 1; verts[0].tv = 1;

verts[7].x = center.x;

verts[7].y = center.y;

verts[7].z = center.z;

verts[7].tu = 0; verts[0].tv = 1;

// CARA DERECHA

Log("Face 3");

verts[8].x = center.x + width;

verts[8].y = center.y + width;

verts[8].z = center.z;

verts[8].tu = 0; verts[0].tv = 0;

verts[9].x = center.x + width;

verts[9].y = center.y + width;

verts[9].z = center.z + width;

verts[9].tu = 1; verts[0].tv = 0;

verts[10].x = center.x + width;

verts[10].y = center.y;

verts[10].z = center.z + width;

verts[10].tu = 1; verts[0].tv = 1;

verts[11].x = center.x + width;

verts[11].y = center.y;

verts[11].z = center.z;

verts[11].tu = 0; verts[0].tv = 1;

// CARA FRONTAL

Log("Face 4");

verts[12].x = center.x;

verts[12].y = center.y + width;

verts[12].z = center.z;

verts[12].tu = 0; verts[0].tv = 0;

verts[13].x = center.x + width;

verts[13].y = center.y + width;

verts[13].z = center.z;

verts[13].tu = 1; verts[0].tv = 0;

verts[14].x = center.x + width;

verts[14].y = center.y;

verts[14].z = center.z;

verts[14].tu = 1; verts[0].tv = 1;

verts[15].x = center.x;

verts[15].y = center.y;

verts[15].z = center.z;

verts[15].tu = 0; verts[0].tv = 1;

// CARA TECHO

Log("Face 5");

verts[16].x = center.x;

verts[16].y = center.y + width;

verts[16].z = center.z;

verts[16].tu = 0; verts[0].tv = 0;

verts[17].x = center.x + width;

verts[17].y = center.y + width;

verts[17].z = center.z;

verts[17].tu = 1; verts[0].tv = 0;

verts[18].x = center.x + width;

verts[18].y = center.y + width;

verts[18].z = center.z + width;

verts[18].tu = 1; verts[0].tv = 1;

verts[19].x = center.x;

verts[19].y = center.y + width;

verts[19].z = center.z + width;

verts[19].tu = 0; verts[0].tv = 1;



for (int i=0;i<20;i++)

{

 verts[i].color = D3DCOLOR_XRGB(255,255,255);

}



y este para renderizarlo..



if (FAILED(dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE)))

 Log("ERROR! SetRemderState: CULLING MODE");



   if (m_texture->Set(dev) == false)

 Log("ERROR! Setting Texture");



if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE)))

 Log("ERROR! SetTextureStageState: D3DTSS_COLOROP");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE)))

 Log("ERROR! SetTextureStageState: D3DTSS_COLORARG1");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE)))

 Log("ERROR! SetTextureStageState: D3DTSS_COLORARG2");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR)))

 Log("ERROR! SetTextureStageState: D3DTSS_MINFILTER");

if (FAILED(dev->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR)))

 Log("ERROR! SetTextureStageState: D3DTSS_MAGFILTER");





if (FAILED(dev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 10, endlist,

sizeof(sVERTEX))))

{

 Log("ERROR! Rendering object");

 if (FAILED(dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW)))

  Log("ERROR! SetRemderState: CULLING MODE");

 return false;

}



if (FAILED(dev->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW)))

 Log("ERROR! SetRemderState: CULLING MODE");



el problema está que io le aplico esta texturA:

(http://www.warcraft3es.com/sky1.GIF)

y me sale esto ..
(http://www.warcraft3es.com/skyShot.JPG)

alguien sabe k leches pasa? oO

NOTA: lo que se renderiza no es negro negro, sino negro con unas lineas gris claro, nose, como si se hiciese un motion blur a la textura :                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 21 de Noviembre de 2002, 07:44:51 PM
                                Estás modulando la textura con el diffuse. ¿Tienes diffuse?, porque si no lo tienes, te saldrá todo negro. No modules si no lo necesitas, utiliza SELECT_ARG1                                
Título: Texturizar Skyboxes
Publicado por: Mars Attacks en 21 de Noviembre de 2002, 08:11:16 PM
                                A mí me recuerda a cuando tratas de cargar una imagen que, o bien no es potencia de 2, o no es del mismo formato (ya sea en cuanto a profundidad de color o compresión) que el que admite el cargador.                                
Título: HM
Publicado por: CoLSoN2 en 21 de Noviembre de 2002, 08:34:08 PM
                                si tengo diffuse, todo blanco:




for (int i=0;i<20;i++)

{

 verts[i].color = D3DCOLOR_XRGB(255,255,255);

}



la textura es 128x128 y RGB 24bits                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 21 de Noviembre de 2002, 08:47:24 PM
                                ¿tienes la iluminación activada?                                
Título: Texturizar Skyboxes
Publicado por: Mars Attacks en 21 de Noviembre de 2002, 08:53:32 PM
                                ¿Es un tga?                                
Título: hm
Publicado por: CoLSoN2 en 21 de Noviembre de 2002, 09:36:53 PM
                                es bmp
no tengo iluminacion activada

una pregunta, ai algo que pueda hacer para que en una sola sentencia se pongan a Default todos los TextureStageStage?                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 22 de Noviembre de 2002, 12:03:29 AM
                                ¿ y el FVF como lo tienes?                                
Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 22 de Noviembre de 2002, 07:32:48 AM
                                el mismo que uso para todo:


#define FVF_VERTEX1 (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE|D3DFVF_TEX1)
                               
Título: Texturizar Skyboxes
Publicado por: Mars Attacks en 22 de Noviembre de 2002, 11:41:57 AM
                                ¿Y el bmp está guardado sin compresión? A veces pasan cosas curiosas y basta con editar el bmp y volver a guardarlo sin cambiar nada.                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 22 de Noviembre de 2002, 01:20:36 PM
                                Si en el FVF tienes FVF_NORMAL y no defines la normal en el cubo, es lógico que te salga mal. Quítale lo de FVF_NORMAL.                                
Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 22 de Noviembre de 2002, 03:38:44 PM
                                ombre, no uso nada de iluminacion, y tampoco uso normales en el terreno usando ese mismo FVF y se me ve perfectamente, pero voi a probar..... nop, sigue =                                
Título: Normales
Publicado por: Repoker en 22 de Noviembre de 2002, 05:40:39 PM
                                Hola Colson :)

Emm.. no estoy nada puesto en Direct3D pero en OpenGL me ha pasado alguna vez algo parecido y era por culpa de que las normales estaban apuntando hacia el interior del cubo ! XD prueba a mirar si ell error viene de ahi :P

Posiblemente no lo sea, pero es relativamente facil de ver :P                                
Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 22 de Noviembre de 2002, 06:58:12 PM
                                para ke sirven las normales aparte de para iluminacion ? (t recuerdo k la tengo desactivada)                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 22 de Noviembre de 2002, 08:22:01 PM
                                ¿Porque no pones la estructura sVertex?
¿Puede ser que tengas un problema al cargar la textura y poer eso se vea negro, puesto que le pasas un NULL?                                
Título: Normales
Publicado por: Repoker en 22 de Noviembre de 2002, 08:39:12 PM
                                BUeno, creo que las normales a parte de las luces indican por que cara se mapea la textura no ? uyy me parece que la estoy cagando XD                                
Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 22 de Noviembre de 2002, 11:27:08 PM
                                pa eso tan las coordenadas de textura.

sVERTEX: el ke usaba al principio:


struct sVERTEX {

float x,y,z;

float nx, ny, nz;

D3DCOLOR color;

float tu,tv;

};



sVERTEX2, el que uso aora:


struct  sVERTEX2 {

float x,y,z;

float tu,tv;

};



Citar
¿Puede ser que tengas un problema al cargar la textura y poer eso se vea negro, puesto que le pasas un NULL?

podria ser si fuera negro, pero ya e dicho que lo raro es que no es negro, es negro pero desde el centro y cada vez mas difuminado hacia los lados hay columas grises. es decir, imagina un degradado lineal de negro a gris oscuro y luego negro, pos algo asi.                                
Título: Texturizar Skyboxes
Publicado por: Haddd en 23 de Noviembre de 2002, 08:58:53 AM
                                Creo que he visto el problema. Joder nos ponemos a pensar cosas raras y la solución a veces es TRIVIAL.

Tu has puesto esto:

verts[12].tu = 0; verts[0].tv = 0;


¿NO DEBERIA SER verts[12].tv=0 ?

ESTAS ASIGNANDO SOLO EL ELEMENTO DEL ARRAY 0 A LA COORDENADA V!!!                                
Título: Texturizar Skyboxes
Publicado por: CoLSoN2 en 23 de Noviembre de 2002, 06:33:32 PM
                                DING DING DING!!
Premio para el caballero xDDDDDDD

vaya tonteriaaa

si, ia sale bien thxxxx a to2