Hallo,
ich habe ein Problem mit den Funktionen GetVertex und SetVertex. Ich wollte, einen Vertex-Shader "simulieren". Ich weiß nicht, wie man das sonst nennen könnte, wenn man im Programm die Koordinaten der Vertices eines Modells verändert.
Hier mein Quellcode:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// ******************************************************************
// Vertex-Struktur
struct SVertex
{
tbVector3 vPosition; // Position
tbVector3 vNormal; // Normalenvektor
tbVector2 vTexture; // 2D-Texturkoordinaten
static DWORD dwFVF; // Vertexformat
};´
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
// ******************************************************************
// Simuliert einen Shader
tbResult SimulateShader()
{
SVertex Vertex;
for (unsigned int i = 0; i < g_pModel->GetVertexBuffer()->GetMaxVertices(); i++)
{
g_pModel->GetVertexBuffer()->GetVertex(i, &Vertex);
// Position verändern
Vertex.vPosition += tbVector3(((sinf(Vertex.vPosition.x * 0.2f + g_fTime * 3.0f) * cosf(Vertex.vPosition.z * 0.2f + g_fTime * 3.0f)) * sinf(g_fTime + Vertex.vPosition.x * 0.1f + Vertex.vPosition.z * 0.1f) * 2.0f + sinf(g_fTime) * 0.5f),
((sinf(Vertex.vPosition.x * 0.2f + g_fTime * 3.0f) * cosf(Vertex.vPosition.z * 0.2f + g_fTime * 3.0f)) * sinf(g_fTime + Vertex.vPosition.x * 0.1f + Vertex.vPosition.z * 0.1f) * 2.0f + sinf(g_fTime) * 0.5f),
((sinf(Vertex.vPosition.x * 0.2f + g_fTime * 3.0f) * cosf(Vertex.vPosition.z * 0.2f + g_fTime * 3.0f)) * sinf(g_fTime + Vertex.vPosition.x * 0.1f + Vertex.vPosition.z * 0.1f) * 2.0f + sinf(g_fTime) * 0.5f));
g_pModel->GetVertexBuffer()->SetVertex(i, &Vertex);
}
return TB_OK;
}
|
g_pModel wurde davor schon initalisiert.
Jedoch sieht man nichts davon, dass sich irgendetwas an den Vertices ändert. Und beim Schließen des Programmes, bekomme ich einen NullPointer beim entladen des VertexBuffers.
Ich hoffe mir kann jemand helfen
Grüße Patrick.