OpenGL相机/投影

时间:2016-03-11 12:01:21

标签: c++ opengl projection glm-math

我正在尝试使用C ++和OpenGL实现一个小型渲染系统。我以前实现了一个,但现在我正在尝试改变它背后的结构,所以我开始新鲜。

我已经有点陷入困境了 因为投影/相机有错误,但我根本找不到它。 在Z方向上没有移动,我认为剪裁平面搞砸了,因为沿前向矢量移动只操纵渲染的部分而不是距离物体的距离(或它们的大小)。这就是导致我的原因认为我的投影是错误的。

这就是我用glm设置矩阵的方法。

m_view = glm::lookAt(m_pos, m_pos +  m_forward, m_up);
m_projection = glm::perspective(m_fov, (float)Engine::getInstance()->getWindowWidth()/(float)Engine::getInstance()->getWindowHeight(), 0.1f, 1000.0f);

这就是我的顶点着色器

#version 330 core


uniform mat4 model; 
uniform mat4 view; 
uniform mat4 projection;
varying vec4 worldPos;

layout (location = 0) in vec3 position;

void main()
{
    worldPos =   projection*view *  model   * vec4(position, 1.0);
    gl_Position = vec4(worldPos.x, worldPos.y, worldPos.z, 1.0);
}

这就是我如何设置制服

 glUniformMatrix4fv(m_uniforms[VIEW_U],1,GL_FALSE,glm::value_ptr(view_matrix) );

只有在初始化GLEW时才会抛出错误,但从我读过的内容中可以忽略错误。

我知道这只是小代码部分,但整个代码都可以在我的github项目中找到。

https://github.com/pastad/PSEngine.git这里是我项目的链接。 我从http://learnopengl.com/#!Getting-started/Camera获取的部分代码,旨在消除潜在的错误来源。

我知道那些非常基本的东西,但我找不到我的错误。 谢谢你的时间!

图为当前输出。但应该有一些小立方体 should render whole cubes

1 个答案:

答案 0 :(得分:0)

顶点着色器错了。我正确地计算了worldPos然后再将其转换为vec4,其中w为1.0导致错误。

git log --author=<name> --no-merges