![]() |
Texture nach vorne
Hab gesucht nichts gefunden :(
Kennt jemand den Befehl wie ich eine Texture die verdeckt ist beim click nach vorne bringen kann ? gruss Emil |
Re: Texture nach vorne
Was für eine Texture? Der komplette Zusammenhang fehlt.
|
Re: Texture nach vorne
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:
Hoffe, du hast das gemeint.
// 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)); |
Re: Texture nach vorne
Zitat:
gruss Emil |
Re: Texture nach vorne
@littleDave
Zitat:
Deine abfrage ![]() 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 |
Re: Texture nach vorne
Wieder ein positions problem
Befinde mich innerhalb der RenderAlbum
Delphi-Quellcode:
würde ich jetzt
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;
Delphi-Quellcode:
aufrufen dann wäre das recursiv führt unweigerlich zum AV
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; 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
Delphi-Quellcode:
StayOnTop(aPos, QuadSize);
Delphi-Quellcode:
setzt sich aber nicht OnTop
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; gruss Emil |
Re: Texture nach vorne
Hier:
Delphi-Quellcode:
Edit: hab dein Edit nicht gesehen :oops:
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; 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. |
Re: Texture nach vorne
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:
muss mal schaun was da jetzt wieder querschießt. :)
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; PS: Das mit dem Speicher funktioniert jetzt ordnungsgemäß Du hattest recht habe die Texturen doppelt eingeladen... :wall: 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz