假设我使用以下从GLM网站获取的代码来设置摄像机:
glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
{
glm::mat4 Projection = glm::perspective(glm::radians(60.0f),float(width())/float(height()), 0.1f, 100.f);
glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));
View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));
View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));
return Projection * View * Model;
}当我使用上述函数产生的矩阵时,我必须针对哪个矩阵堆栈?我该用吗
glMatrixMode(GL_PROJECTION);或
glMatrixMode(GL_MODELVIEW);或者我应该只是加载产生的矩阵?
发布于 2017-04-19 20:33:21
都不是。Projection矩阵进入GL_PROJECTION,View*Model进入GL_MODELVIEW。当然,这只适用于固定函数管道。如果使用着色器,它完全取决于您,特别是您如何编写您的着色器。
发布于 2017-04-19 21:11:26
不幸的是,当有人把相机转换成GL_PROJECTION矩阵(而不是它所属的GL_MODELVIEW )时,其后果是相当微妙的:
https://stackoverflow.com/questions/43504024
复制相似问题