Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Continuación Frustrada

Iniciado por pacomix, 24 de Octubre de 2003, 09:11:44 PM

« anterior - próximo »

pacomix

 Ante todo gracias por el interés de todos los que contestaron a mi anterior post (Comienzo frustrado).
Ahora el problema es otro, no consigo visualizar colores en un triángulo.
Lo he copiado tooooooooooooooooooooooooooodo tal como aparece en el ejemplo de las directXsdk9 pero nada.. nohay manera de que saque color (no tiene lógica).
El caso es que los ejemplos nunca está hecho con clases, así que con permiso copio el trozo de código que se encarga de meter los datos en los Vb a ver si me podéis ayudar...
El renderstate de iluminación lo tengo desactivado (pa que me pille los colores) pero con todo y eso lo único que consigo sacar es un triángulo negrete. Un saludo a todos y gracias!!!

void Scene::InitGeometry()
{   
  // Initialize three vertices for rendering a triangle
   MIVERTICETEST g_Vertices[] =
   {
       { -1.0f,-1.0f, 2.0f, 0xffff0000, },
       {  1.0f,-1.0f, 2.5f, 0xff0000ff, },
       {  0.0f, 1.0f, 45.0f, 0xffffffff, },
   };

   // Create the vertex buffer.
   if( FAILED( lpD3dDev9->CreateVertexBuffer( 3*sizeof(MIVERTICETEST), 0, D3DFVF_CUSTOMVERTEX1,
                                                 D3DPOOL_DEFAULT, &lpVertexTest, NULL ) ) )
   {
       return;
   }

   // Fill the vertex buffer.
   VOID* pVertices;
   lpVertexTest->Lock( 0, sizeof(g_Vertices), (void**)&pVertices, 0 );
      memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
   lpVertexTest->Unlock();

   return;
}

La descripción de la estructura de vértices MIVERTICETEST la tengo en un .h en el que meto otras definiciones (D3DFVF_CUSTOMVERTEX1) y las incluyo al principio de este .cpp

A continuación tenéis las funciones de visualizar:
void Scene::RenderEntity()
{   
     //we start to draw all the people in the world !!!  (uoh)
    lpD3dDev9->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

     lpD3dDev9->BeginScene();

   D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/2, 1.0f, 1.0f, 100.0f);
   lpD3dDev9->SetTransform(D3DTS_PROJECTION, &matProj);
   // Render the vertex buffer contents
               lpD3dDev9->SetStreamSource( 0, lpVertexTest, 0, sizeof(MIVERTICETEST) );
               lpD3dDev9->SetFVF( D3DFVF_CUSTOMVERTEX1 );
               lpD3dDev9->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
      
      lpD3dDev9->EndScene();

   return;
}
=El verdadero guerrero de la luz se levanta cuando todos los demás han caído=-

MChiz

 
Citar
lpD3dDev9->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );

No se mucho de Direct3D, pero estas seguro que esta llamada esta bien?

Tambien puede ser porque no estas poniendo ninguna matriz de vista.

NeLo

 Pon tu definición de D3DFVF_CUSTOMVERTEX1.

Saludos.
Drowning deep in my sea of loathing

NeLo

 Y otra cosa, usa D3DPT_TRIANGLELIST en vez de TRIANGLESTRIP, por si los vértices no están en el orden adecuado.

Saludos.
Drowning deep in my sea of loathing

NeLo

 Y otra cosa aún más importante si cabe, añade esta función después de EndScene:

lpD3dDev9->Present(NULL, NULL, NULL, NULL);

Saludos.
Drowning deep in my sea of loathing

pacomix

 La definición de D3DFVF_CUSTOMVERTICE1 es:

#define D3DFVF_CUSTOMVERTEX1 (D3DFVF_XYZ | D3DFVF_DIFFUSE)

Lo demás está ya todo probado. En teoría debería de funcionar, es que es el ejemplo copiado del tutorial 3 de las directX sdk9. Ya no sé que más hacer...
Todo esto de la orientación a objetos no me ha traído mas que problemas desde que la uso...
=El verdadero guerrero de la luz se levanta cuando todos los demás han caído=-

NeLo

 ¿Has puesto todo lo que he dicho?

Bueno mañana lo miro, que ahora es muy tarde.

Saludos.
Drowning deep in my sea of loathing

MChiz

 Dos cosas:

Creo que estas pintando el triangulo en el sentido de las agujas del reloj. Prueba esto:

MIVERTICETEST g_Vertices[] =
{
{ -1.0f,-1.0f, 2.0f, 0xffff0000, },
{ 0.0f, 1.0f, 45.0f, 0xffffffff, },
{ 1.0f,-1.0f, 2.5f, 0xff0000ff, }, // Por cierto. El compilador no se queja de esta ultima coma??
};

Tambien prueba a limpiar el ZBuffer:

lpD3dDev9->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

A ver si hay suerte.

_Grey

 XXX->SetRenderState(D3DRS_COLORVERTEX , TRUE);

Quizas...... :ph34r:


y... si no, prueba: XXX->SetRenderState(D3DRS_SHADEMODE , D3DSHADE_GOURAUD);

pacomix

 ¿Alguien se ofrecería a revisar mi código? Es un projecto sencillo para aprender nada más. Si es así dejad dirección de hotmail y nos pondremos en contacto.
He probado todo lo que habéis dicho y nada, no hay manera. Gracias por vuestro interés de todas formas.
¡¡¡Un saludo a todos!!!
=El verdadero guerrero de la luz se levanta cuando todos los demás han caído=-






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.