Also ich habe mich nochmal hingesetzt und versucht eire Fehler nech zu vollziehen.
Die Skybox ist bei mir allerdings immer da wieso das bei euch nicht der Fall ist ist mir schleierhaft.
Allerdings könntet ihr mir mal euer Betriebsystem nennen dann kann ich es da mal versuchen.
Mein Programm stürtzt tatsächlich ab, das konnte ich auch feststellen , leider.
Da ich es immer über den Compiler Zpocke gabs da bei mir ein CPU fenster . Habe F9 gedrückt und es ging problemlos weiter.
Woran der Fehler liegen soll weis ich aber leider nicht, einzige vermutung das
OpenGL vielleich irgendwann Fehler erzeugt wenn man viele sich schneidende Kanten hat.
Das die Fans so durchscheinen ist mir bewusst.
Das liegt daran das ich nicht weis wie man Transparente Bilder malt. bitte vergesst nicht das ich die
OpenGL Programmeirung erst mit diesem Spiel gelernt habe.
Da ich aber offen für verbesserungen bin , poste ich euch mal den Orginal Quellcode der die Fans rendert, zumindest ist das der Teild er die Paritkel zeichnet.
Delphi-Quellcode:
gltranslatef(fposition.x + 0.5, fposition.y + 1, fposition.z + 0.5);
glShadeModel(GL_SMOOTH); // Povolí jemné stínování
glClearColor(0.0, 0.0, 0.0, 0.0); // Černé pozadí
glClearDepth(1.0); // Nastavení hloubkového bufferu
glDisable(GL_DEPTH_TEST); // Vypne hloubkové testování
glEnable(GL_BLEND); // Enable Blending
glBindTexture(GL_TEXTURE_2D, FFireTexture); // Vybere texturu
glBlendFunc(GL_SRC_ALPHA, GL_ONE); // Type Of Blending To Perform
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); // Really Nice Point Smoothing
inc(ffpscount);
For i := 0 To high(fparticles) Do Begin
x := fparticles[i].x; // x pozice
y := fparticles[i].y; // y pozice
z := fparticles[i].z; // z pozice
// Setzen des Alpha Kanals
// glColor4f(fparticles[i].r, fparticles[i].g, fparticles[i].b, fparticles[i].life);
glColor3f(fparticles[i].r, fparticles[i].g, fparticles[i].b {, fparticles[i].life});
// Wir malen jedes Paticel 2 Mal damit wir es bei Drehungen auch sehen.
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(1, 1);
glVertex3f(x + 0.1, y + 0.1, z);
glTexCoord2d(0, 1);
glVertex3f(x - 0.1, y + 0.1, z);
glTexCoord2d(1, 0);
glVertex3f(x + 0.1, y - 0.1, z);
glTexCoord2d(0, 0);
glVertex3f(x - 0.1, y - 0.1, z);
glEnd;
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(1, 1);
glVertex3f(x, y + 0.1, z + 0.1);
glTexCoord2d(0, 1);
glVertex3f(x, y - 0.1, z + 0.1);
glTexCoord2d(1, 0);
glVertex3f(x, y + 0.1, z - 0.1);
glTexCoord2d(0, 0);
glVertex3f(x, y - 0.1, z - 0.1);
glEnd;
If ffps <= ffpscount Then Begin
fparticles[i].x := fparticles[i].x + fparticles[i].xi / (fslowdown * 1000); // Pohyb na ose x
fparticles[i].y := fparticles[i].y + fparticles[i].yi / (fslowdown * 1000); // Pohyb na ose y
fparticles[i].z := fparticles[i].z + fparticles[i].zi / (fslowdown * 1000); // Pohyb na ose z
fparticles[i].xi := fparticles[i].xi + fparticles[i].xg; // Gravitační působení na ose x
fparticles[i].yi := fparticles[i].yi + fparticles[i].yg; // Gravitační působení na ose y
fparticles[i].zi := fparticles[i].zi + fparticles[i].zg; // Gravitační působení na ose z
fparticles[i].life := fparticles[i].life - fparticles[i].fade; // Sníží život o stárnutí
If (fparticles[i].life < 0.0) Then Begin
fparticles[i].life := 1.25;
fparticles[i].fade := (random(100) / 1000.0) + 0.006;
fparticles[i].x := Random(60) / 100 - 0.3;
fparticles[i].y := Random(100) / 100;
fparticles[i].z := Random(60) / 100 - 0.3;
fparticles[i].xi := (random(60) - 30.0) / 2;
fparticles[i].yi := (random(60) - 30.0) / 2;
fparticles[i].zi := (random(60) - 30.0) / 2;
End;
End;
End;
If ffps <= ffpscount Then
ffpscount := 0;
glDisable(GL_BLEND); // Disable Blending
glenable(GL_DEPTH_TEST); // Enable Dethtest
glColor4f(1, 1, 1, 1);
ich hoffe es ist verständlich, wer genau hinsieht merkt das es mehr oder weniger ein Sample Code von nehe.gamedev.net ist.
Wie gesagt ich kann nicht wirklich gut
OpenGl Programmieren.