Thema: Delphi Texture nach vorne

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Texture nach vorne

  Alt 23. Mai 2008, 14:02
Danke habe es genau nach deiner anweisung gemacht funktioniert nicht.
Da kommt sich irgendwas in die quere.
Sieht aus als wenn sich das mit dem quader nicht verträgt auf dem die spiegelung ausgeführt wird.

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


procedure EndStayOnTop;
begin
  // und nun den Depth-Buffer reaktivieren
  glEnable(GL_DEPTH_TEST);
  glDepthMask(ByteBool(True));
end;


procedure RenderAlbum(aDeltaTime: single);

const
  QuadSize = 1.5; // die Größe der Quader

  // Diese Funktion zeichnet die Quader. ColorScale skaliert dabei die Farbwerte der oberen beiden Ecken
  procedure DrawQuads();
  var i : integer; // index der for-schleife
      QuadAngle : single; // die Rotation des aktuellen Quads
      aPos : TGLVectord3; // die finale Position des aktuellen Quads [aPos = array[0..2] of single]
  begin

  glEnable(GL_TEXTURE_2D);

  glInitNames;
  glPushName(0);

  // alle Quads durchgehen
  for i := 0 to QuadCount - 1 do
  begin

    // Position initialisieren (aPos[0] = 0, aPos[1] = 0, aPos[2] = 10)
    aPos := Vector_Make3f(0, 0, 12);

    // Die Rotation des Quads (um den Mittelpunkt des Kreises, der durch die Quads gebildet wird)
    // + ListAnge, also die Rotation, die mit der Maus gemacht wird
    QuadAngle := DegToRad( 360 / (QuadCount) * i) + ListAngle;

    // Den Positionvektor um den Mittelpunkt des Kreises um die Y-Achse rotieren
    aPos := Vector_Rotatef3(aPos, Vector_Make3f(0, 0, 0), QuadAngle, False, True, False);

    glBindTexture(GL_TEXTURE_2D, quadTexture[i]);

    if i = CurrentQuad then
    begin
      // Jetzt brauchen wir Blending
      glEnable(GL_BLEND);
      // nun die Blending-Funktion setzen
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glColor4f(1, 1, 1, 0.7);
      BeginStayOnTop;
      Win.IMGTexture := quadTexture[i];
      Win.bRenderGUI := True;
    end else
    begin
     // Original Farben setzen
     glColor4f(1, 1, 1, 1);
     // Blenden ausschalten
     glDisable(GL_BLEND);
    end;

    // 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();

    if i = CurrentQuad then
     EndStayOnTop;

    QuadName[i] := IntToStr(i + 1);
    glLoadName(i + 1);
  end;
  glPopName;

end;
muss mal schaun was da jetzt wieder querschießt.

PS: Das mit dem Speicher funktioniert jetzt ordnungsgemäß
Du hattest recht habe die Texturen doppelt eingeladen...
Macht sich schon beim start bemerkbar dauert nicht mehr so lange bis die Vis aktiviert ist.

EDIT:
Hmm jo hab mich schon gewundert das es nicht gehen soll..
Ich habe ja den Coverkreis in dem die Texturen hintereinander angeordnet werden
Ich wollte nichts anderes die Texture welche von einer anderen verdeckt wird nachvorne holen
Nicht vergrößern..

EDIT2
Jetzt gehts allerdings nur die rechte seite .. das sollte reichen
Danke

gruss Emil
  Mit Zitat antworten Zitat