Thema: Delphi Texture nach vorne

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#6

Re: Texture nach vorne

  Alt 23. Mai 2008, 14:15
Wieder ein positions problem

Befinde mich innerhalb der RenderAlbum

Delphi-Quellcode:
    if i = CurrentQuad then
    begin
      // Blendung einschalten
      glEnable(GL_BLEND);
      // Blend Funktion setzen
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glColor4f(1, 1, 1, 0.7);
      // Texture nach vorne holen
      StayOnTop; //<<-----
      // Info Fenster anzeigen
      Win.IMGTexture := quadTexture[i];
      Win.bRenderGUI := True;
    end else
    begin
     // Original Farben setzen
     glColor4f(1, 1, 1, 1);
     // Blenden ausschalten
     glDisable(GL_BLEND);
    end;
würde ich jetzt

Delphi-Quellcode:
procedure StayOnTop;
begin
  // Depth-Buffer auf Read-Only setzen
  glDepthMask(ByteBool(False));
  // Depth-Buffer deaktivieren
  glDisable(GL_DEPTH_TEST);


  // Polygon Zeichnen , Quader funtion zum zeichen befindet sich hier
  RenderAlbum(QuadSpeed / 1000.0);


  // und nun den Depth-Buffer reaktivieren
  glEnable(GL_DEPTH_TEST);
  glDepthMask(ByteBool(True));
end;
aufrufen dann wäre das recursiv führt unweigerlich zum AV
Das ist eigentlich mein problem mit OpenGl da man manchmal nicht weiss
an welcher stelle man eine funktion ausführen soll ohne mit anderen zu kollidieren.

EDIT:
Habs mal umgestellt

StayOnTop(aPos, QuadSize);
Delphi-Quellcode:
procedure StayOnTop(aPos: TGLVectord3; QuadSize: single);
begin
  // Depth-Buffer auf Read-Only setzen
  glDepthMask(ByteBool(False));
  // Depth-Buffer deaktivieren
  glDisable(GL_DEPTH_TEST);

  // Quad zeichnen
  glBegin(GL_QUADS);
    glTexCoord2f(0, 1); glVertex3f(aPos[0] - QuadSize, aPos[1] + QuadSize*2, aPos[2]);
    glTexCoord2f(0, 0); glVertex3f(aPos[0] - QuadSize, aPos[1] , aPos[2]);
    glTexCoord2f(1, 0); glVertex3f(aPos[0] + QuadSize, aPos[1] , aPos[2]);
    glTexCoord2f(1, 1); glVertex3f(aPos[0] + QuadSize, aPos[1] + QuadSize*2, aPos[2]);
  glEnd();

  // und nun den Depth-Buffer reaktivieren
  glEnable(GL_DEPTH_TEST);
  glDepthMask(ByteBool(True));
end;
setzt sich aber nicht OnTop

gruss Emil
  Mit Zitat antworten Zitat