Hi alle miteinander *wink*
Endlich bin ich wieder mal dazugekommen ein bisschen in Davids genialem Buch weiterzumachen.
Ich bin gerade dabei die Beispiele des Vertex/Index-Buffer-Kapitel zu machen. Beispiel 1 und 2 hab ich geschafft aber nun hänge ich beim 3. fest.
Aufgabe war eine Funktion zu schreiben, der man einen VertexBuffer und eine Matrix übergibt. Danach soll man die Positionskoordinaten aller Vertizes mit der Matrix transformieren.
Das Problem, welches ich jetzt habe ist folgendes:
Sobald ich das Programm starte und alle Einstellungen vornehme, sieht man zwar die Würfeln kurz aber sie bewegen sich extrem schnell weg, bis der gesamte Bildschirm schwarz ist.
Ich hab schon probiert die Bewegung um Faktoren wie 0.0001 oder noch weniger zu verringern. Hat aber nichts gebracht.
Mit dem Debuger hab ich mir die Funktion auch schon mal angesehen, aber mir wären keinen "abnormalen" Koordinaten aufgefallen.
Hier der Code der Funktion:
|
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
32
33
34
35
36
|
tbResult TransformVertexPosition(IDirect3DVertexBuffer9* pVertexBuffer, const tbMatrix& mTransform)
{
// Beschreibung des Vertex-Buffers
D3DVERTEXBUFFER_DESC VBDesc;
pVertexBuffer->GetDesc(&VBDesc);
if(VBDesc.FVF & D3DFVF_XYZ) // Besitzt Positionskoordination
{
// Anzahl der Vertices berechnen
unsigned int iVertexSize = D3DXGetFVFVertexSize(VBDesc.FVF);
unsigned int iNumVertices = VBDesc.Size / iVertexSize;
// Vertex Buffer sperren und Daten lesen
BYTE* pVertexData;
pVertexBuffer->Lock(0, 0, reinterpret_cast<void**>(&pVertexData), D3DLOCK_NOSYSLOCK);
for(unsigned int iVertex = 0; iVertex < iNumVertices; iVertex++)
{
// Positionsdaten auslesen
tbVector3 vPosition(reinterpret_cast<float*>(&pVertexData[iVertex * iVertexSize]));
// Vektor transformieren
vPosition = tbVector3TransformCoords(vPosition, mTransform);
// Positionsdaten schreiben
float* pfPosition = reinterpret_cast<float*>(&pVertexData[iVertex * iVertexSize]);
pfPosition[0] = vPosition.x;
pfPosition[1] = vPosition.y;
pfPosition[2] = vPosition.z;
}
pVertexBuffer->Unlock();
}
return TB_OK;
}
|
Wenn noch mehr Code erforderlich ist, kann ich ihn natürlich auch Posten.
Da der selbe Code (bis auf die Fkt) im vorigen Beispiel aber funktioniert hat, würde es mich wundern wenn da wo ein Fehler wäre.
lg
Phil