c++ - OpenGL 红皮书示例中的错误,第 3 章

标签 c++ opengl glsl

我阅读了 OpenGL Readbook 8th Editor。但是我无法创建第 3 章“绘图命令示例”中的示例。作者在示例中使用了自己的库 vmath.h。但它不起作用。他们忘记添加到库函数“vmath::translation(GLfloat, GLfloat, GLfloat>);”,尽管使用了它。作者使用了自己的库“vapp.h”,这让我很困惑。有很多宏,通过它来定义类。我真的很困惑。 我没有使用他们的库,而是使用了线性代数的“Eigen”库。

Here is my code on GitHub

我编译并运行了这个程序。这行得通。但是我看到一个黑色的窗口,但我应该看到一个四个三角形。我做错了什么? 附言我通过用于矩阵和顶点的“特征库”重新编写了作者的程序。我只看到黑屏。为什么?! Here is code on GitHub 我有两个着色器:
顶点着色器:

#version 400 core

uniform mat4 model_matrix;
uniform mat4 projection_matrix;

layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;

out vec4 vs_fs_color;

void main(void)
{
    vs_fs_color = color;
    gl_Position = projection_matrix * (model_matrix * position);
}

和片段着色器:

#version 400 core

in vec4 vs_fs_color;

layout (location = 0) out vec4 color;

void main(void)
{
    color = vs_fs_color;
}


我确实使用了这些着色器。 Here is what I should see.
This is original project(MSVC++)
This is a include files(including vapp.h and vapp.h)

最佳答案

当您设置 model_matrix 时,glUniformMatrix4fv 的第二个参数应该是 1,而不是 4。另外,您在 frustum 中使用了错误的索引。将 result(2, 0) 更改为 result(0, 2) 并对所有其他对执行相同的操作。

关于c++ - OpenGL 红皮书示例中的错误,第 3 章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20328677/

相关文章:

c++ - wglShareLists 失败并出现错误 6 : ERROR_INVALID_HANDLE The handle is invalid

opengl-es - GLSL 将片段着色器蒙版拟合到顶点坐标中

opengl - 使用 block 索引作为 UniformBufferObject、ShaderStorageBufferObjects 等的绑定(bind)点是否安全?

c++ - 了解 Webkit 中使用的 C++ 模板代码

c++ - 澄清琐碎的破坏者

OpenGL 顶点属性重用

ios - 仅在 iOS 上存在 GLSL 透明度问题

c++ - 使用 libc++ 和 libstdc++ 的 void* 类型的字符串流行为差异

c++ - Reversi 二维阵列打印

opengl - 是否可以在 gl_FragColor 中写入一堆像素?