AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Texture nach vorne

Ein Thema von EWeiss · begonnen am 23. Mai 2008 · letzter Beitrag vom 23. Mai 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Texture nach vorne

  Alt 23. Mai 2008, 13:03
Hab gesucht nichts gefunden

Kennt jemand den Befehl wie ich eine Texture die verdeckt ist
beim click nach vorne bringen kann ?

gruss Emil
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Texture nach vorne

  Alt 23. Mai 2008, 13:35
Was für eine Texture? Der komplette Zusammenhang fehlt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#3

Re: Texture nach vorne

  Alt 23. Mai 2008, 13:39
Ich geh mal davon aus, dass du OpenGL meinst
So ganz ersichtlich ist mir deine Frage nicht. Ich geh mal davon aus, dass das Polygon, dass du selektiert hast "StayOnTop" haben willst.
Dafür gibt es einen Trick: du musst den Tiefenpuffer temporär deaktivieren, so dass beim Zeichnen des Polygons der Tieferwert nicht beachtet und nicht geschrieben wird. Dafür gibt es einen einfachen Befehl.

Immer im Vordergrund:
Delphi-Quellcode:
// Depth-Buffer auf Read-Only setzen
glDepthMask(ByteBool(False));
// Depth-Buffer deaktivieren
glDisable(GL_DEPTH_TEST);


// Polygon Zeichnen
RenderQuad;


// und nun den Depth-Buffer reaktivieren
glEnable(GL_DEPTH_TEST);
glDepthMask(ByteBool(True));
Hoffe, du hast das gemeint.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Texture nach vorne

  Alt 23. Mai 2008, 13:40
Zitat von Medium:
Was für eine Texture? Der komplette Zusammenhang fehlt.
OpenGl Texture auf die ich klicke soll wenn verdeckt nach vorne gebracht werden.

gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Texture nach vorne

  Alt 23. Mai 2008, 13:50
@littleDave
Zitat:
Hoffe, du hast das gemeint.
Ja

Deine abfrage http://www.delphipraxis.net/internal...=891363#891363
funktioniert gut hast nur nicht gesehen das der eigentliche Cover der ja auf dem Hintergrund
angezeigt wird nicht addiert werden darf .. muss also abgezogen werden.
Aber nicht tragisch will das sowieso ändern jetzt soll er addiert werden und zwar jedes was nachträglich abgespielt wird.

So kann man dann informationen des Albums abrufen und eventuell dann
einen anderen Titel abspielen wenn gewünscht.

Aber das mach ich schon

gruss Emil
  Mit Zitat antworten Zitat
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
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#7

Re: Texture nach vorne

  Alt 23. Mai 2008, 14:41
Hier:
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;

{ .............. }

  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);
  
    // Hervorhebung aktivieren
    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;

  glBegin( // .... hier das Quad Rendern
  glEnd(); // das ende des Quad-Renderings

  // Hervorhebung wieder deaktivieren (falls es an war)
  if i = CurrentQuad then
     EndStayOnTop;
Edit: hab dein Edit nicht gesehen
Also der Code sollte eigentlich funktionieren. Ich weiß nicht, was du dir unter dem "StayOnTop" vorstellt: Der Code ist nur dafür da, um den Tiefentest zu deaktivieren. Wenn du jetzt das Quad noch größer machen willst, musst du das schon von Hand machen.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Texture nach vorne

  Alt 23. Mai 2008, 15: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz