【发布时间】:2017-06-26 20:35:47
【问题描述】:
我在 Opengl 中实现了以下代码来对我的模型进行放大和缩小。不幸的是,它在正交投影中没有按预期显示。当我单击“+”或“-”并从透视切换到正交时,当我放大和缩小时,它只显示一个步骤。当我从正交切换到透视时,它会放大和缩小,只需单击“+”而不是放大和缩小,而“-”键根本不起作用。
有人可以帮忙吗?提前致谢。
glm::mat4 view = glm::lookAt(glm::vec3(4, 4, -3), glm::vec3(0, 1, 0), glm::vec3(0, 1, 0));
glm::mat4 projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.2f, 1000.0f);
float zoom = 0.5236f;
case 'w':
if (!(perspective)){
projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f);
perspective = true;
}
break;
case 's':
if (perspective){
projection = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1000.0f, 1000.0f);
perspective = false;
}
break;
case '+':
if (zoom >= 0.0236){
if (perspective){
//step of zooming
zoom = zoom - 0.5;
zoom -= 0.1f;
projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f);
}
else{
//step of zooming
zoom = zoom - 500;
zoom -= 0.1f;
projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0);
}
}
break;
case '-':
if (zoom <= 3.0236f){
if (perspective){
// step of zooming
zoom = zoom + 0.5;
zoom += 0.1f;
projection = glm::perspective(zoom, 1.0f, 0.1f, 1000.0f);
}
else{
//step of zooming
zoom = zoom + 500;
zoom += 0.1f;
projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0);
}
}
break;
}
【问题讨论】:
标签: c++ opengl zooming projection orthographic