c++ - OpenGL 相机/投影

标签 c++ opengl projection glm-math

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

我已经有点卡住了, 因为投影/相机有错误,但我根本找不到。 Z 方向上没有移动,我认为剪切平面搞砸了,因为沿着前向 vector 移动只操纵渲染的部分,而不是到对象的距离(或它们的大小)。这就是导致我的原因认为我的投影有问题。

这就是我使用 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

最佳答案

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

    gl_Position =   projection*view *  model   * vec4(position, 1.0f);

关于c++ - OpenGL 相机/投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939770/

相关文章:

c++ - 计算光栅化片段的数量

hibernate - 在JPA 2中使用投影

math - 逆 3D(三角形)投影

c++ - 在 Ubuntu 上为 Raspberry Pi 交叉编译 opencv 项目

c++ - 为什么这个列表实现比 STL 列表占用更多空间?

c++ - 某些窗口大小的 OpenGL 图像无法正确显示

c++ - 使用顶点数组、四边形数组创建四边形网格

linq - 什么是 LINQ 中的投影,如 .Select()

c# - IndexOutOfRangeException - 无法使用 PInvoke 查看调用堆栈

c++ - 快速将 "MFC Extension DLL"转换为 "Regular DLL with MFC statically linked"