gpt4 book ai didi

c++ - 透视矩阵不显示我的对象

转载 作者:行者123 更新时间:2023-11-30 03:22:12 26 4
gpt4 key购买 nike

在添加透视矩阵(正交或透视)之前,我的对象可以完全打印出来,但在添加它们之后我无法再查看我的对象。我已经对程序进行了足够的调试,知道正在使用对象的正常绘图程序;但是我不知道它是否被删除/未加载,或者它是否只是在 View 之外。我已经包括了我声明矩阵和我的动画循环的地方。任何帮助将不胜感激!

//enables matrix uniform
GLuint uTransform = glGetUniformLocation(mProgram, "u_transform");

//enables depth testing
glEnable(GL_DEPTH_TEST);

//creates aspect ratio variable
float aspect = 500.0f / 500.0f;
//enables projection matrix
glm::mat4 pmat = glm::perspective(70.0f, aspect, 0.01f, 1000.0f);
//enables view matrix
glm::vec3 eye(0, -5, 2);
glm::vec3 center(0, 0, 0);
glm::vec3 up(0, 0, 1);
glm::mat4 vmat = glm::lookAt(eye, center, up);

while (!glfwWindowShouldClose(mWindow)) //animation loop
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
tmat = pmat * vmat * tmat;
glUniformMatrix4fv(uTransform, 1, GL_FALSE, glm::value_ptr(tmat)); //sets data type of matrix
for(int i = 0; i <= numberofshapes; i++)
{
glBindVertexArray(shapes[i].vao);
glDrawArrays(shapes[i].drawtype, 0, shapes[i].numOfvertices);
}
if(w==true){
tmat = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.001f, 0.0f)) * tmat;
}if(a==true){
tmat = glm::translate(glm::mat4(1.0f), glm::vec3(-0.001f, 0.0f, 0.0f)) * tmat;
}if(s==true){
tmat = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, -0.001f, 0.0f)) * tmat;
}if(d==true){
tmat = glm::translate(glm::mat4(1.0f), glm::vec3(0.001f, 0.0f, 0.0f)) * tmat;
}if(r==true){
tmat = glm::rotate(glm::mat4(1.0f), glm::radians(0.1f), glm::vec3(0.0f, 1.0f, 0.0f)) * tmat;
}
glfwSwapBuffers(mWindow);
counter+=1;
glfwPollEvents();
}

最佳答案

遵循 glm::perspective 的文档, 视野角度必须以弧度为单位而不是以度为单位(自 glm version 0.9.4 起)。

将角度从度数转换为弧度:

glm::perspective(glm::radians(70.0f), aspect, 0.01f, 1000.0f);

代码

tmat = pmat * vmat * tmat;
glUniformMatrix4fv(uTransform, 1, GL_FALSE, glm::value_ptr(tmat));

您不断地将 View 和投影矩阵连接到每一帧中的最终模型 View 投影矩阵。

将其更改为:

glm::mat4 mvp = pmat * vmat * tmat;
glUniformMatrix4fv(uTransform, 1, GL_FALSE, glm::value_ptr(mvp));

关于c++ - 透视矩阵不显示我的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com