Hallo
Also ich bin jetzt im Buch bei Kapitel 2. Habe das Beispielprogramm 4 schön Schritt für Schritt selbst mitgeschrieben und klappte auch alles. Danach wollte ich selbst mal ein bißchen rumprobieren und habe folgendes entworfen (leider ist der Code abhanden gekommen, aber das wichtigste weiß ich noch auswendig):
-Ein (sich drehender) "Ring" aus Dreiecken
Dazu habe ich mir dann überlegt, wie das ganze aussehen müsste.
TriangleStrip eignet sich ja hervorragend dafür.
Die "Punkte" der Dreiecke sollte gleichmäßig vom Mittelpunkt (0, 0, 0) auf eien Kreisbogen gesetzt werden. Dabei sollte ihr y-Wert immer zwischen -0,5 und 0,5 wechseln, damit der Ring am Ende eine Höhe von 1 hat.
Das ganze hab ich dann wie folgt bewerkstelligt:
|
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
|
const int g_iNumVertex=50; // die Anzahl meiner Punkte (sollte gerade sein)
SVertex g_aVertex[g_iNumVertex]; //mein Vertex-Array
struct SVertex //wie im Buch nur ohne Farbe
{ //die brauche ich nicht, da ich ja eine Textur benutze
tbVector3 vPosition; // Position des Vertex
tbVector2 vTexture; // Texturkoordinaten
static const DWORD dwFVF; // Vertexformat
};
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_TEX1;
//der wichtige Teil aus der InitSzene, wo ich die Punkte setze:
for(int iVertex = 0; iVertex < g_iNumVertex; iVertex++)
{
g_aVertex[iVertex].vPosition = tbVector3(sin(SET_DEG_TO_RAD(360/g_iNumVertex*iVertex)),
-0.5 + iVertex%2,
cos(SET_DEG_TO_RAD(360/g_iNumVertex*iVerex)));
//hier noch Texturen setzen etc
}
//Rest ist wie im Beispiel, nur das die Matrizen noch abgeändert wurden:
//mRotationX wurde auf 0.5 * g_fTime gesetzt
//mTranslation wurde auf den Vector (0,0,5) gesetzt
|
So, nun die Frage:
Alles funktioniert wunderbar... es sei denn ich stelle eine Anzahl von Vertexen > 100 ein. Woran kann das liegen?
(Überall im Code wo die Anzahl eine Rolle spielt wird mit g_iNumVertex gerechnet)
Kann es sein, dass die "Punkte" auf dem Bildschirm dann öfters den gleichen Pixel zugeteilt werden und die Dreiecke somit eine Größe von 0 bekommen und verschwinden?
Es wird nämlich überhaupt garnichts angezeigt... nur ein blauer Bildschirm.... mit tbWriteVector3ToLog zeigt er mir aber die vollkommen korrekten Werte an.