Ich schaffe es nicht die Maske des Spiegelbilds in den Stencil Buffer zu zeichnen. Ein Spiegelbild zu mithilfe von glScale zu erschaffen. Stellt kein Problem dar, aber der sehe nachdem ich den Stencil Buffer einschalte nur das Orginal Objekt.
Code:
glclearcolor(1,1,1,0);
glclear(gl_color_buffer_bit);
glclear(GL_DEPTH_BUFFER_BIT);
glclear(GL_STENCIL_BUFFER_BIT);
//---------------------------------------------
glEnable(GL_CLIP_PLANE0);
glClipPlane(GL_CLIP_PLANE0,@ClipPlane);
//Stencil setzen
glColorMask(False,False,False,False);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS,1,1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
//DrawMirror;
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glPushMatrix;
glScale(1,-1,1);
glTranslate(-15+side,up,0);
glColor3f(1,0,0);
w:=gluNewQuadric();
gluSphere(w,10,20,20);
glPopMatrix;
//Mirror setzen
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glColorMask(True,True,True,True);
glStencilFunc(GL_EQUAL,1,1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glDisable(GL_CLIP_PLANE0);
glDisable(GL_STENCIL_TEST);
//Orginal Bild
glPushMatrix;
glTranslate(-15+side,up,0);
glColor3f(1,0,0);
w:=gluNewQuadric();
gluSphere(w,10,10,10);
glPopMatrix;
//----------------------------------------------
OpenGLFrame1.SwapBuff;
Die Variablen up und side sind zur Steuerung. w ist ein Pointer und Clipplane erklärt sich selber.
Ich muss das mit dem DrawMirror falsch verstanden haben. Das Spiegelbild ist jetzt da es wird nur nicht abgeschnitten wenn es aus dem Spiegel herausragt. Ich habe den Spiegel aus eine gl_Quads gemacht. Dann mit aktivierten Stenciltest das Spiegelbild gezeichnet und dann ohne Stenciltest das richtige Bild. Trotzdem wird das Spiegelbild außerhalb der Maske gezeichnet.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wenn das da oben dein kompletter Quellcode ist, dann hast du was falsch verstanden. In DrawMirror wird nicht die gespiegelte Szene gezeichnet, sondern nur die Spiegelfläche (also dein Quad). Dort wird wie zu erkennen nämlich nur der Stencil auf "sichtbar" gesetzt wo du deine Spiegelfläche renderst.
Deine Clippingplane setzt du auch an der falschen Stelle, das sollte erst dann geschehen wenn du deine Spiegelfläche bereits im Stencil drinne hast, da es sonst sein kann das die Spiegelfläche durch den Clippingtest nicht gerendert wird.
Erst nach folgenden Zeilen Code :
Code:
glColorMask(True,True,True,True);
glStencilFunc(GL_EQUAL,1,1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
darfst du dann deine gespiegelte Szene zeichnen.
Aber ich versteh auch nicht warum du da einfach im Code Sachen umpositionierst, steht doch alles Wort für Wort und warum es da ist wo es ist im Tutorial drin.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.