mam zagadkę, może ktoś ma pomysł
Shadow mapa jest renderowana z projekcją depthproj i macierzą depthcam. Do GL jako modelview jest przesyłana tylko obrót depthcam, czyli mat3(depthcam).
To samo ze światem, renderowany jest z projekcją perspective i macierzą worldcamera. Do GL jako modelview jest przesyłany tylko obrót worldcamera, czyli mat3(worldcamera)
Teraz: przez jaki macierz trzeba przemnożyć (mat3(worldcamera) * wierzchołek) żeby powstały współrzędna wierzchołka widziana przez światło?
    glm::mat4 depthproj = glm::ortho(-10.0f, 10.0f, -10.0f, 10.0f, 0.1f, 100.0f);
	glm::vec3 playerpos = glm::vec3(World.Camera.Pos.x, World.Camera.Pos.y, World.Camera.Pos.z);
	glm::vec3 shadoweye = playerpos - Global::daylight.direction * 50.0f;
	Global::SetCameraPosition(Math3D::vector3(shadoweye));
    glm::mat4 depthcam = glm::lookAt(shadoweye,
			playerpos,
            glm::vec3(0.0f, 1.0f, 0.0f));
    m_camera.update_frustum(depthproj, depthcam);
    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(glm::value_ptr(depthproj));
    glMatrixMode(GL_MODELVIEW);
    glMultMatrixf(glm::value_ptr(glm::mat4(glm::mat3(depthcam))));
		
    glm::mat4 perspective = glm::perspective(
        glm::radians(Global::FieldOfView / Global::ZoomFactor),
        std::max( 1.0f, (float)Global::ScreenWidth ) / std::max( 1.0f, (float)Global::ScreenHeight ),
        0.1f * Global::ZoomFactor,
        m_drawrange * Global::fDistanceFactor );
	glm::dmat4 worldcamera;
	World.Camera.SetMatrix( worldcamera );
	m_camera.update_frustum( OpenGLMatrices.data( GL_PROJECTION ), worldcamera);
	glMatrixMode(GL_PROJECTION);
	glLoadMatrixf(glm::value_ptr(perspective));
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glMultMatrixd( glm::value_ptr( glm::dmat4( glm::dmat3(worldcamera))));
Próbowałem już różne kombinacje, m. in. tak, ale nie mogę trafić.
glm::vec3 transdiff = glm::vec3(worldcamera[3]) - glm::vec3(depthcam[3]);
glm::mat3 rotdiff = glm::mat3(worldcamera) * glm::mat3(depthcam);
glm::mat4 lv = depthproj * glm::translate(glm::mat4(rotdiff), transdiff);