相关疑难解决方法(0)

如何在片段着色器中使用gl_FragCoord.z在现代OpenGL中线性渲染深度?

我阅读了很多关于使用片段着色器获取深度的信息.

http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=234519

但我还是不知道这是否gl_FragCoord.z是线性的.

GLSL规范称屏幕上的范围为[0,1]而未提及线性与否.

我认为线性是至关重要的,因为我将使用渲染模型来匹配Kinect的深度图.

那么如果它不是线性的,那么如何在世界空间中线性化呢?

opengl shader glsl depth-buffer depth

9
推荐指数
3
解决办法
9822
查看次数

如何在给定视图空间深度值和ndc xy的情况下恢复视图空间位置

我正在写一个延迟着色器,我正试图更紧密地收拾我的gbuffer.但是,我似乎无法正确计算视图空间深度的视图位置

// depth -> (gl_ModelViewMatrix * vec4(pos.xyz, 1)).z; where pos is the model space position
// fov -> field of view in radians (0.62831855, 0.47123888)
// p -> ndc position, x, y [-1, 1]
vec3 getPosition(float depth, vec2 fov, vec2 p)
{
vec3 pos;
pos.x = -depth * tan( HALF_PI - fov.x/2.0 ) * (p.x);
pos.y = -depth * tan( HALF_PI - fov.y/2.0 ) * (p.y);
pos.z = depth;
return pos;
}
Run Code Online (Sandbox Code Playgroud)

计算出的位置是错误的.我知道这是因为我仍然在gbuffer中存储正确的位置并使用它进行测试.

c++ glsl perspectivecamera coordinate-transformation

7
推荐指数
2
解决办法
3743
查看次数

raycasting:如何正确应用投影矩阵?

我目前正在研究GLSL中的一些光线投射,效果很好.无论如何我现在想从正交投影到透视投影,但我不知道如何正确地做到这一点.关于如何使用投影矩阵与光线投射有任何良好的联系吗?我甚至不确定我应该将矩阵应用到(以某种方式对射线方向?).现在我这样做(伪代码):

vec3 rayDir = (0.0, 0.0, -1.0); //down the negative -z axis in parallel;
Run Code Online (Sandbox Code Playgroud)

但是现在我想使用一个类似于gluPerspective函数的projMatrix,这样我就可以简单地定义宽高比,fov以及近和远平面.所以基本上,任何人都可以为我提供一大堆代码来设置类似的proj矩阵gluProjection吗?其次告诉我将它与rayDirection相乘是否正确?

opengl 3d raytracing glsl perspectivecamera

3
推荐指数
2
解决办法
3371
查看次数

OpenGL - 鼠标坐标到空间坐标

我的目标是将球体放置在鼠标指向的位置(Z-coord为0).

我看到了这个问题,但我还没有理解MVP矩阵的概念,所以我研究了一下,现在我有两个问题:

如何从相机设置创建视图矩阵,如查找,眼睛和向上矢量?

我还阅读本教程的几种类型的相机,这一个WebGL的.

我仍然可以把它放在一起我不知道如何获得投影矩阵...

我应该采取哪些措施来实现所有这些目标?

c++ opengl graphics glut glfw

1
推荐指数
1
解决办法
1736
查看次数

变换模型矩阵

使用 glm 设置 ViewMatrix 很容易:

glm::lookAt(Position, Direction, UpVector);
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试将 funktion 与 modelMatrix 一起使用,我会得到令人困惑的值(模型的位置不正确,而且旋转看起来也不正确)。我只想以与设置相机相同的方式设置对象。我可以使用 lookAt 功能并在之后进行一些更改吗?还是我必须为此编写自己的功能?如果是这样,如何?

我用这个固定了位置:

m_Orientation = glm::lookAtLH(Position, Direction, UpVector);
m_Orientation[3][0] = -m_Orientation[3][0];
m_Orientation[3][1] = -m_Orientation[3][1];
m_Orientation[3][2] = -m_Orientation[3][2];
Run Code Online (Sandbox Code Playgroud)

也在 vertexshader 里面我用这个:

gl_Position = CameraMatrix * ModelMatrix * Pos;
Run Code Online (Sandbox Code Playgroud)

其中 CameraMatrix 是一个 viewProjectionMatrix,ModelMatrix(我的问题)和 Pos 是我的顶点在模型空间中的位置

c++ opengl coordinate-transformation glm-math

0
推荐指数
1
解决办法
1999
查看次数