Hola compañeros, estoy intentando dibujar "a mano" un objeto (mesh) en vez de pasárselo entero al DirectX, pero me dibuja una auténtica guarrada...
lo que intento es:
Mesh->GetVertexBuffer( &Vertices ):
Num = Mesh->GetNumVertices();
Vertices->Lock( 0, 0, (void**)&pVertices, 0 );
Vertices->Unlock();
Vertices->Release();
//
//..
//..
//
3D->SetStreamSource( 0, VerticesParedes, 0, sizeof(D3DVERTEX) );
3D->SetFVF( D3DVERTEX::FVF );
3D->DrawPrimitive(D3DPT_TRIANGLELIST ,0,Num/3);
El fin de todo esto es (una vez consiga como mínimo dibujar correcamente algo :P ) optimizar el renderizado, ya que dibujo un mapa muy grande y el directX me dibuja toooodo... y evidentemente los fps caen en picado....
gracias de antemano!
Hola.
Ese código que has puesto no parece tener ningún sentido.
Primero recoges un vertex buffer (Vertices) al que haces un Lock/Unlock pero entre medias no haces nada (se supone que el buffer se rellenaría con los datos de los vértices). Y además, justo después haces un Release (eliminas el vertex buffer).
Y luego renderizas utilizando un vertex buffer (VerticesParedes) que no se sabe muy bien de dónde sale. Tal vez sea el del fragmento de código previo, pero es que ese se supone que no lo has rellenado y además lo has eliminado, ¿no?.
Saludos.
joer que pajarillo estoy... todo son errores al copiar...
resumiendo, tengo un Mesh cargado, y lo que quiero es obtener la informaíón de sus vértices para dibujar con la función DrawPrimitive. Y un resumen de lo que hago es:
struct D3DVERTEX
{
D3DXVECTOR3 p;
D3DXVECTOR3 n;
FLOAT tu, tv;
static const DWORD FVF;
};
const DWORD D3DVERTEX::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
//
//
//
LPDIRECT3DVERTEXBUFFER9 Vertices;
DWORD dwNumVertices;
Mesh->GetVertexBuffer( &Vertices );
dwNumVertices = Mesh->GetNumVertices();
//
//
//
DXUTGetD3DDevice()->SetRenderState(D3DRS_LIGHTING, FALSE );
DXUTGetD3DDevice()->SetFVF( D3DVERTEX::FVF );
DXUTGetD3DDevice()->SetStreamSource( 0, Vertices, 0, sizeof(D3DVERTEX) );
DXUTGetD3DDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, dwNumVertices );
El caso es que me dibuja algo; un puñado de triángulos dibujado por "ahí" al tuntún y sin ningún orden... si alguien me pudiese ayudar... gracias!!
Asegúrate de tener bien puestas las matrices de transformación (world, view y projection).
También asegúrate de que los vértices que estás pasando a DrawPrimitive están ordenados de tal forma que formen triangle strips (o cualquier primitiva que quieras).
Saludos.
Como no sea que está indexado..., desde luego no creo que sea un STRIP.
Pusiste los Begin/EndScene ?
Prueba con un mesh simple como un cubo.
Perdonar mi ignorancia pero... como puedo saber si los vértices están ordenados? y si no lo están, como los puedo ordenar?
Sí, sí he puesto el Begin/EndScene... la verdad es que el mesh ya es simple, es "suelo" , un rectángulo enorme sin desniveles de momento...
En la documentación del SDK mírate el apartado titulado Primitives. También puedes echarle un vistazo al apartado Rendering from Vertex and Index Buffers.
Saludos.