在学习OpenGL的过程中总会碰到各种各样奇怪的错误,每次都会检查半天,搞得很心烦,故现在整理一下。
可以大致分为三个阶段的错误:
* 编译前的错误
* 编译时发现的错误
* 运行结果的错误
首先是编译前的错误:
1.GLM: perspective function taking degrees as a parameter is deprecated. #define GLM_FORCE_RADIANS before including GLM headers to remove this message.
当没有在开头预定义GLM_FORCE_RADIANS 时候,会出现类似的警告。
glm::mat4 projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);
ourShader.setMat4("projection", projection);
其中的glm::radians(45.0f)导致上面的warning的出现,现在版本的GLM已经采用degree来做默认单位,当我们强行把一个degree(45)转换成一个radians,并传递给GLM的时候,就会和我们设想不一样的效果。
错误的效果
所以当在开头预定义#define GLM_FORCE_RADIANS 可以恢复到正确的效果
正确的效果
编译时的错误
1. error C5145: must write to gl_Position
——很有可能这个时候的vertex shader 文件中的gl_Position 写错了,甚至就是忘记写了。
运行时的错误
1.出现物体放的很大,同时呈现破碎状态,如下图:
要考虑 是否 有可能是
——perspective中的near平面设置的太大 导致物体被截取了
——是否可能是第一种情况中提到的 角度 和 弧度 的转换关系 导致视角过小
——可能是glUniformMatrix4fv当中的参数设置错误,GL_FALSE 变为 GL_FLOAT 也会导致错误。
突然就只想到这些。。。
想起日后补充