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
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
glPushMatrix(); glTranslatef(object->getX(), object->getY(), object->getZ()); glScalef(object->getScale().x, object->getScale().y, object->getScale().z); glRotatef(object->getXRotation(), 1, 0, 0); glRotatef(object->getYRotation(), 0, 1, 0); glRotatef(object->getZRotation(), 0, 0, 1); mat4 m; glGetFloatv(GL_MODELVIEW_MATRIX, m.getArray()); glPopMatrix(); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
mat4 mod; mod.translate(object->getX(), object->getY(), object->getZ()); mod.scale(object->getScale().x, object->getScale().y, object->getScale().z); mod.rotate(object->getXRotation(), 1, 0, 0); mod.rotate(object->getYRotation(), 0, 1, 0); mod.rotate(object->getZRotation(), 0, 0, 1); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
mat4 bias = mat4(0.5, 0.0, 0.0, 0.0, // Shadowmapping bias-Matrix 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 1.0); mat4 shadowMatrix = bias*lightsource->getProjection()*lightsource->getModelview()*modelview.inverse(); |
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 |
// VERTEX // [...] shadowCoord0 = shadow_matrix0*object_modelview*vec4(a_Vertex, 1.0); // vec4 an fragment shader // [...] // FRAGMENT float shadowmapping(vec2 offset){ return textureProj(shadowMap0, shadowCoord0+vec4(offset.x*xPixelOffset*shadowCoord0.w, offset.y*yPixelOffset*shadowCoord0.w, -0.005, 0.0)); } void main(void){ color = texture(texture0, texCoord0.st); // color = Ausgabe Pixel float shadow = 1.0; if(shadowCoord0.w > 0.0){ float x, y; for(y = -1.5; y <= 1.5; y += 1.0){ for(x = -1.5; x <= 1.5; x += 1.0){ shadow += shadowmapping(vec2(x, y)); } } shadow /= 16.0; } color *= shadow; } |
Zitat
C-/C++-Quelltext
1 2 3 4 5 mod.translate(object->getX(), object->getY(), object->getZ()); mod.scale(object->getScale().x, object->getScale().y, object->getScale().z); mod.rotate(object->getXRotation(), 1, 0, 0); mod.rotate(object->getYRotation(), 0, 1, 0); mod.rotate(object->getZRotation(), 0, 0, 1);
Community-Fossil
Zitat
Stimmt denn die Multiplikationsreihenfolge dieser mod.Rotate(), Scale() etc. Methoden?
Zitat
Was genau macht eine ModelView Matrix bei einer Lichtquelle, wie genau wird sie berechnet?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
mat4 bbLight::getModelview(){ mat4 modelview = mat4(); modelview.setIdentity(); modelview.lookAt(m_information.position.x, m_information.position.y, m_information.position.z, m_information.direction.x, m_information.direction.y, m_information.direction.z, m_up.x, m_up.y, m_up.z); return modelview; } |
Zitat
Wieso die inverse ModelView Matrix vom Objekt draufmultiplizieren, wenn du sie im Shader dann erst wieder wegrechnest?
Zitat
Vermutlich weisst du die Matrix bei jedem Methodenaufruf neu zu?
Zitat
OpenGL multipliziert die Matrix intern mit jedem Aufruf.
Zitat
In OpenGL ist die Reihenfolge der Matrizenoperationen umgekehrt, als man es intuitiv erwarten würde (bzw. je nach dem, was man für eine Intuition hat). Stichwort "Matrizen rechts bzw. links dran multiplizieren".
Zitat
Gut möglich also, dass du einfach nur die Reihenfolge deiner Matrizenmultiplikationen ändern musst.
C-/C++-Quelltext |
|
1 |
mat4 shadowMatrix = modelview.inverse()*lightsource->getModelview()*lightsource->getProjection()*bias; |
Community-Fossil
Haha, ich liebe es wenn ihr ratlos seit
Nee Spaß. Warum steht in der OpenGL Matrix nach glPushMatrix() ... auslesen ... glPopMatrix() eigentlich etwas (also keine 0en)?
"Schiebe" ich dann nicht die aktuelle zurück und bekomme eine leere (vorausgesetzt es wurde noch nicht in diese geschrieben)?
Community-Fossil
Zitat
Vielleicht liegt es aber auch einfach an den Informationen die du lieferst...
Zitat
Identitätsmatrix
Community-Fossil
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45, 1.0*windowSize[0]/windowSize[1], 0.1, 10000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(view[0], view[1], view[2], view[3], view[4], view[5], view[6], view[7], view[8]); mat4 bias = mat4(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); mat4 modelview; glGetFloatv(GL_MODELVIEW_MATRIX, modelview.getArray()); modelview.inverse(); shadowMatrix = bias*ligProjection*ligModelview*modelview; |
Community-Fossil
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (13.12.2011, 20:24)
Werbeanzeige