如何防止缩放低于定义(OpenGL)

Posted

技术标签:

【中文标题】如何防止缩放低于定义(OpenGL)【英文标题】:How to prevent scaling lower than defined (OpenGL) 【发布时间】:2021-01-23 21:20:34 【问题描述】:

我有一个简单的 OpenGL 对象,它定义了特定的 glScalef 大小。它需要 glutMouseFunc 让它像我想象的那样工作。所以,这就是我的想象:

GLUT_LEFT_BUTTON 上,对象需要为 0.1 变大,所以: glScalef(scalesize+0.1,scalesize+0.1,0.0.); polygon();

GLUT_RIGHT_BUTTON 上,对象需要缩小为 0.1,因此: glScalef(scalesize-0.1,scalesize-0.1,0.0); polygon();

这是我的多边形函数:

void polygon(void)
    glBegin(GL_POLYGON);
        glColor3f(1.0,0.0,0.0);
        glVertex2f(-0.15, -0.15);
        glColor3f(0.0,0.0,0.0);
        glVertex2f(-0.15, 0.15);
        glColor3f(0.0,0.0,1.0);
        glVertex2f(0.15, 0.15);
        glColor3f(0.0,1.0,0.0);
        glVertex2f(0.15, -0.15);
    glEnd();

    glEnable (GL_LINE_STIPPLE);
    glLineWidth(3.0);
    glLineStipple (6, 0x1C47);
    glBegin(GL_LINES);
        glColor3f(0.0,0.0,0.0);
        glVertex2f(-0.25, -0.25);
        glVertex2f(-0.25, 0.25);
        glVertex2f(0.25, 0.25);
        glVertex2f(0.25, -0.25);

        glVertex2f(-0.25, 0.25);
        glVertex2f(0.25, 0.25);
        glVertex2f(-0.25, -0.25);
        glVertex2f(0.25, -0.25);
    glEnd();

这是我的场景功能:

void scene(void)
    glClear(GL_COLOR_BUFFER_BIT);

    glPushMatrix();
    glScalef(scalesize,scalesize,0.0);
    polygon();
    glPopMatrix();

    glFlush();

float scalesize = 1.0;

现在我不确定如何防止缩放低于 0.15,关于我的对象大小。我尝试使用 if 语句来检查 scalesize 是否大于 1.0,但没有奏效。有什么解决办法吗?

谢谢

【问题讨论】:

假设scalesize 是一个全局变量,在glutMouseFunc 中更新并验证它的值。例如,在按下左键时执行scalesize -= .1(按下右键时的操作类似),在退出glutMouseFunc 之前,只需执行std::clamp(或几个if 语句)确保scalesize 不是太大或太小(例如,if (scalesize < 0.15) scalesize = 0.15。你不想做的是在你的鼠标函数中调用glScalef;让它发生在scene 中。 【参考方案1】:

好的,感谢@radical7,我已经弄清楚了。已经按照他说的做了,但真正的解决方案是让 scene 函数完成它的工作,我不必在我的鼠标函数中调用 glScalef。

再次感谢。

【讨论】:

以上是关于如何防止缩放低于定义(OpenGL)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL 中缩放模型?

opengl中如何实现图象的缩放

如何在缩放投影矩阵Opengl的同时平移光标位置

OpenGL:加载 3d 模型(比如 obj 文件)后如何找到正确的缩放因子? [关闭]

如何使缩放图像在 Java/OpenGL 中看起来更好?

如何在不缩放其内容的情况下调整 opengl 视口大小