【发布时间】: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中。
标签: opengl codeblocks scale glut glu