首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变焦在正投影中不起作用

变焦在正投影中不起作用
EN

Stack Overflow用户
提问于 2017-06-26 20:35:47
回答 1查看 1.7K关注 0票数 0

我已经在Opengl中实现了下面的代码来为我的模型做缩放。不幸的是,它并没有像预期的那样出现在正射投影中。当我点击"+“或"-”并从透视切换到正交时,它只显示一个步骤,当我放大和缩小。当我从正交到透视,然后它放大和缩小,当只点击"+“比它放大和输出和键"-”根本不工作。

有人能帮忙吗?提前谢谢。

代码语言:javascript
复制
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;  
    }
EN

回答 1

Stack Overflow用户

发布于 2017-06-26 22:16:50

不幸的是,它并没有像预期的那样出现在正射投影中。当我点击"+“或"-”并从透视切换到正交时,当我放大和缩小时,它只显示了一步。

那是因为在你的case 's'

代码语言:javascript
复制
case 's':
    if (perspective){
        projection = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1000.0f, 1000.0f);
        perspective = false;
    }
    break;

您没有在此开关上计算缩放因子。只有当您按“+”或“-”时,才会发生这种情况:

代码语言:javascript
复制
projection = glm::ortho(-0.1 - zoom, 0.1 + zoom, -0.1 - zoom, 0.1 + zoom, -1000.0, 1000.0);

当我从正交到透视,然后它放大和缩小,当只点击"+“比它放大和输出和键"-”根本不工作。

让我们说,你是在正字法视图,和zoom = 0.5236f;。你按“-”键。按照您的程序,一旦缩放小于3.0236f,您将在if语句中获得。所以,你的变焦变成zoom = 0.5236f + 500 = 500.5236

在那之后,我不知道为什么,你给它加了0.1,所以zoom = 500.6236f。然后切换到透视投影。现在,每次按'+',一旦缩放> 0.0236,它就会下降0.6f。

然而,当你按“-”键时,你的变焦值大约是500,这比3.0236f还大。因此,您将不会进入if语句。

正如你所看到的,你的逻辑是错误的。你需要改进它。很抱歉这么说

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44768254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档