这更像是一个技术问题,而不是一个实际的编程问题。
我正在尝试在我的应用程序中实现阴影贴图,这对于简单的聚光灯来说相当简单。但是,对于点光源,我使用的是阴影立方体贴图,我遇到了很多麻烦。
在立方体贴图上渲染场景后,这是我的结果:
(我用glReadPixels读取每一边的像素。)
现在,应该正在绘制阴影的对象正在被绘制,让我感到困惑的是立方体贴图两侧的方向。在我看来,左侧(X-)应该与底侧(y-)连接,所以基本上顺时针旋转90°:
我找不到阴影立方体图应该是什么样子的任何例子,所以我不确定我的实际上是否有问题,或者它是否应该看起来像那样。我相当肯定我的矩阵设置正确,并且渲染到阴影贴图的着色器尽可能简单,所以我怀疑它们有什么问题:
// Projection Matrix:
glm::perspective<float>(90.f,1.f,2.f,m_distance) // fov = 90, near plane = 1, far plane = 2, distance = the light's range
// View Matrices:
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(1,0,0),glm::vec3(0,1,0));
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(-1,0,0),glm::vec3(0,1,0));
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(0,1,0),glm::vec3(0,0,-1));
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(0,-1,0),glm::vec3(0,0,1));
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(0,0,1),glm::vec3(0,1,0));
glm::lookAt(GetPosition(),GetPosition() +glm::vec3(0,0,-1),glm::vec3(0,1,0));
顶点着色器:
#version 330 core
layout(location = 0) in vec3 vertexPosition_modelspace;
uniform mat4 depthMVP;
void main()
{
gl_Position = depthMVP *vec4(vertexPosition_modelspace,1.0);
}
Fragment Shader:
#version 330 core
layout(location = 0) out float fragmentdepth;
void main()
{
fragmentdepth = gl_FragCoord.z;
}
(我实际上是从这里发现了另一个帖子iirc)
在实际场景中使用这个立方体贴图会给我带来奇怪的结果,但我不知道我的主要片段/顶点着色器是否有问题,或者我的立方体贴图首先是不正确的,这使得调试非常困难。
我基本上只是想确认/不确认我的影子立方体贴图是否“看起来”正确,如果不是,则可能导致此类行为。
//更新:
以下是有关如何更新阴影贴图的视频:http://youtu.be/t9VRZy9uGvs
对我而言,任何人都可以确认/否定吗?