Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Und die alte wird gelöscht und verursacht kein Speicherloch?
Community-Fossil
Zitat
Die alte musst Du schon selbst löschen.
Zitat
Darum kümmert sich der Treiber.
Community-Fossil
Zitat
Ähnlich funktioniert das z.B. auch bei VBOs mit glBufferData(), um so etwas wie D3DLOCK_DISCARD-Semantik für glMapBuffer() zu erreichen.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Zitat
Ja, dot, genau darum ging es mir. Denn es klang so als wolle er einfach mit glGenTextures neue Texturen anlegen und die alten einfach... vergessen. Das geht natürlich nicht, die werden nicht von allein aufgeräumt.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
void setTextureMatrix() { static double modelView[16]; static double projection[16]; // This is matrix transform every coordinate x,y,z // x = x* 0.5 + 0.5 // y = y* 0.5 + 0.5 // z = z* 0.5 + 0.5 // Moving from unit cube [-1,1] to [0,1] const GLdouble bias[16] = { 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 1.0}; // Grab modelview and transformation matrices glGetDoublev(GL_MODELVIEW_MATRIX, modelView); glGetDoublev(GL_PROJECTION_MATRIX, projection); glMatrixMode(GL_TEXTURE); glActiveTextureARB(GL_TEXTURE7); glLoadIdentity(); glLoadMatrixd(bias); // concatating all matrice into one. glMultMatrixd (projection); glMultMatrixd (modelView); // Go back to normal matrix mode glActiveTextureARB(GL_TEXTURE0); glMatrixMode(GL_MODELVIEW); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
// Renderfunktion void display(){ ////// Shadowmap erstellen // mit der Standard Pipeline in einen Framebuffer rendern ohne Farbe rendern, es keinen Farbbuffer gibt glBindFramebuffer(GL_FRAMEBUFFER, depthFBO); glUseProgram(0); glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDisable(GL_TEXTURE_2D); // FBO clearen glClear(GL_DEPTH_BUFFER_BIT); //setOrthographicMatrix(); // Kameramatrix erstellen glLoadIdentity(); float xCam = cos(alpha/100); float yCam = 3.0f; float zCam = sin(alpha/100); gluLookAt(xCam, yCam, zCam, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0); glCullFace(GL_FRONT); renderScene(); //Kameramatrix in Texturmatriz#7 kopieren setTextureMatrix(); ////// Szene mit Schatten rendern // in StandardBackBuffer rendern mit dem Schattenshader glBindFramebuffer(GL_FRAMEBUFFER, 0); glUseProgram(shadowShaderProgram); // BiasModelViewProjectionMatrix von der Shadowmap und die Shadowmap selber in Shader kopieren glUniform1i(shadowMapUniform,7); glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D, depthTexture); // Wieder mit Farbe rendern glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // Backbuffer clearen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //setPerspectiveMatrix(); // Kameramatrix erstellen glLoadIdentity(); float x = dist * sin(theta) * cos(phi); float y = dist * cos(theta); float z = dist * sin(theta) * sin(phi); if(!camView) gluLookAt(x, y, z, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); else gluLookAt(xCam, yCam, zCam, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0); glCullFace(GL_BACK); renderScene(); // Lichtquelle visualisieren if(!camView){ glUseProgram(0); glPushMatrix(); glTranslatef(xCam,yCam,zCam); glUseProgram(0); glColor3f(1,1,1); glutSolidSphere(0.2,10,10); glPopMatrix(); } glutSwapBuffers(); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//////VERTEX////// varying vec4 shadowCoord; void main(){ gl_Position = ftransform(); shadowCoord = gl_TextureMatrix[7] * gl_Vertex; gl_FrontColor = gl_Color; } //////FRAGMENT////// uniform sampler2D shadowMap; varying vec4 shadowCoord; void main(){ vec4 shadowCoordinateWdivide = shadowCoord / shadowCoord.w ; // Used to lower moiré pattern and self-shadowing shadowCoordinateWdivide.z += 0.0005; float distanceFromLight = texture2D(shadowMap,shadowCoordinateWdivide.xy).z; float shadow = 1.0; if (shadowCoord.w > 0.0) shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.1 : 1.0 ; gl_FragColor = shadow * gl_Color; } |
Werbeanzeige