Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

02.01.2005, 15:31

Meine Dreiecke "verschwinden"

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.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

2

02.01.2005, 16:27

Du könntest mal 360 durch 360.0 ersetzen, um eine Fließkommadivision zu erzwingen.
"Games are algorithmic entertainment."

Anonymous

unregistriert

3

02.01.2005, 23:03

alles schon versucht... hilft leider auch nicht.

Das komische ist ja, dass er mir die richtigen Werte ins Log schreibt, aber einfach ab einer Anzahl von 100 nichts mehr anzeigt...

Werbeanzeige