OpenGL - 阴影立方体贴图边有不正确的旋转?

时间:2014-01-19 20:58:46

标签: opengl mapping shadow depth

这更像是一个技术问题,而不是一个实际的编程问题。

我正在尝试在我的应用程序中实现阴影贴图,这对于简单的聚光灯来说相当简单。但是,对于点光源,我使用的是阴影立方体贴图,我遇到了很多麻烦。

在立方体贴图上渲染场景后,这是我的结果:

enter image description here

(我用glReadPixels读取每一边的像素。)

现在,应该正在绘制阴影的对象正在被绘制,让我感到困惑的是立方体贴图两侧的方向。在我看来,左侧(X-)应该与底侧(y-)连接,所以基本上顺时针旋转90°:

enter image description here

我找不到阴影立方体图应该是什么样子的任何例子,所以我不确定我的实际上是否有问题,或者它是否应该看起来像那样。我相当肯定我的矩阵设置正确,并且渲染到阴影贴图的着色器尽可能简单,所以我怀疑它们有什么问题:

// 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

对我而言,任何人都可以确认/否定吗?

0 个答案:

没有答案