Einzelnen Beitrag anzeigen

Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#35

Re: Balanced das Spiel für Starke Nerven und Starke Graphikk

  Alt 15. Jul 2006, 10:10
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.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat