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

1

08.07.2005, 13:56

Übungsaufgaben Dreieck

Hallo

Ich habe mal eine Verständnisfrage zum den Übungen auf der 149 in der neuen Auflage. Dort wird unter anderem die Aufgabe gestellt, dass das Dreieck pulsieren soll und seine Farbe ändern soll. Ich habe mich daran gemacht und bekomme es auch nach langen probieren nicht hin. Wahrscheinlich brauch ich mal eine Anregung von außen. Ich habe so probiert die Größe zu ändern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
tbResult Move(float fNumSecPassed)
{
    float afFeld[3];
    for(int i=0;i<3;i++)
        afFeld[i]=sin((float)(time(NULL)))+1;
    g_aTriangleVertex[0].vPosition  = tbVector3( 0.0f,  afFeld[0], 0.0f);
    g_aTriangleVertex[1].vPosition  = tbVector3( afFeld[1],-(afFeld[1]) , 0.0f);
    g_aTriangleVertex[2].vPosition  = tbVector3(-(afFeld[2]), -(afFeld[2]), 0.0f);
    
    g_fTime +=fNumSecPassed;
    return TB_OK;
}


Ich dachte mir es wäre Quatsch die Positionsbestimmungen für die Vertizies in der InitScene zu lassen, da dies ja nur einmal aufgerufen wird, also habe ich sie in die Move-Funktion geschrieben. Leider pulsiert das Dreieck nicht. Ich habe die Drehung des Dreiecks auskommentiert, damit ich eine mögliche Vergrößerung auch wirklich nicht übersehen kann. Dasselbe Problem hatte ich auch mit den Farben. Auch da hat sich die Farbe nicht geändert.

Wisst Ihr wo mein Fehler liegt

Danke für die Hilfe
chrische

2

08.07.2005, 15:41

Also ich würde das mit einer Skalierungsmatrix machen.
z.B. so:

C-/C++-Quelltext

1
tbMatrix mWorld=tbMatrixScaling(sinf(fTime))*tbMatrixTranslation(0.0f,0.0f,4.0f);
Mein Projekt: Rise of the Sylvan

3

09.07.2005, 17:37

Hallo

Ich schaffe es auch damit nicht. Kann mir vielleicht mal jemand sein Quellcode posten? Gibt es im Netz irgendwo alle Lösungen zu den Übungen?

Danke
chrische

4

09.07.2005, 19:40

schau dir die source des beiliegenden spiels galactika an, da wird im intro deine Aufgabe mit einem viereck gelöst. 8)

5

16.10.2015, 12:08

Ich weiß zwar, das dieser Thread schon ein wenig in die Jahr gekommen ist (10 Jahre :D ) aber trotzdem
bin ich beim Googlen recht schnell auf diese Seite gestoßen, deswegen poste ich hier mal meine Lösung
zu dem pulsierendem Dreieck.

Dein Fehler lag daran, dass du die Position der Vertizes verändern wolltest und nicht die Farbe. Also ich hab
einfach den Rot-Grün-Blau Absolutfarben eine Sinusfunktion aufgezwungen ^^ da aber eine Sinusfunktion mal
im Plus und mal im Minus ist und bei Minus bzw Null keine Farbe ausgeben wird, habe ich wenn zb Rot auf 0 oder
negativ ist, eine negierte Sinusfunktion auf Grün gelegt, damit wieder eine Farbe angezeigt wird.

Man kann auch die Werte die ich auf 0.0f gesetzt habe auf zb 0.5f ändern, somit wird das Dreieck nie richtig schwarz
aber di Farben sind halt nich so intensiv, aber da kann man sich ja spielen wie man will :)

Natürlich hab ichs auch in die Move Funktion gepackt, da die Farben ja ständig neu berechnet werden sollen...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ******************************************************************
// Move-Funktion
tbResult Move(float fNumSecsPassed)
{
    // Farben sinusförmig verschieben ("wabbeln")
    g_aTriangleVertex[0].vPosition = tbVector3(0.0f, 1.0f, 0.0f);
    g_aTriangleVertex[1].vPosition = tbVector3(1.0f, -1.0f, 0.0f);
    g_aTriangleVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f);
    g_aTriangleVertex[0].dwColor = tbColor(sinf(1.0f*g_fTime), -(sinf(1.0f*g_fTime)), 0.0f);
    g_aTriangleVertex[1].dwColor = tbColor(0.0f, sinf(1.0f*g_fTime), -(sinf(1.0f*g_fTime)));
    g_aTriangleVertex[2].dwColor = tbColor(-(sinf(1.0f*g_fTime)), 0.0f, sinf(1.0f*g_fTime));


    // Zeitzähler erhöhen
    g_fTime += fNumSecsPassed;

    return TB_OK;
}

Werbeanzeige