《OpenGL编程指南(第8版)》阅读笔记01

Tags: ,

Example源码Bug备忘

第三章

ch03_drawcommands

    glUniformMatrix4fv(render_model_matrix_loc, 4, GL_FALSE, model_matrix);

应改为:

    glUniformMatrix4fv(render_model_matrix_loc, 1, GL_FALSE, model_matrix);

原因:

void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);

Parameters

location

Specifies the location of the uniform value to be modified.

count

Specifies the number of matrices that are to be modified. This should be 1 if the targeted uniform variable is > not an array of matrices, and 1 or more if it is an array of matrices.

transpose

Specifies whether to transpose the matrix as the values are loaded into the uniform variable. Must be GL_FALSE.

value

Specifies a pointer to an array of count values that will be used to update the specified uniform variable.

因为例子使用的是primitive_restart.vs.glsl顶点着色器,model_matrix不是数组,所以参数count应该为1。

还发现了一句注释: // "model_matrix" is actually an array of 4 matrices

不明白为什么model_matrix会是一个包含4个矩阵的数组。并且确实改成1后就能运行了。

(后面发现有一个shader里面的model_matrix确实是一个长度4的数组...估计是混淆了吧)

真是坑。

vmath

vmath::rotation 要改为 vmath::rotate vmath::translation 要改为 vmath::translate

绝对路径....

ch03_instancing的Initialize函数里:

    // Load the object
    object.LoadFromVBM("C:/Vermilion-Book/trunk/Code/media/armadillo_low.vbm", 0, 1, 2);

太坑了。

把vs和fs写在cpp文件里

如果是为了演示如何手动编译shader,也不用放在多个example里吧。

第四章

ch04_shadowmap的vbm.h和vbm.cpp是不对的,运行会出错

换成第三章的工程里的就OK了。

(未经授权禁止转载)
Written on February 21, 2016

写作不易,您的支持是我写作的动力!