如何防止缩放低于定义(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)的主要内容,如果未能解决你的问题,请参考以下文章