opengl - 将 glScalef() 应用于多边形时,它会改变它的位置,如何摆脱它?
问题描述
是一个简单的多边形。
glPushMatrix();
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
glVertex3f(-150, 150, 0);
glVertex3f(150, 150, 0);
glVertex3f(150, 450, 0);
glVertex3f(-150, 450, 0);
glEnd();
glPopMatrix();
将 glScalef() 应用于多边形时,它会改变它的位置,如何摆脱它?我的意思是……如果他在同一个高度,他会改变它。
解决方案
glScalef()
不缩放多边形,它缩放整个坐标系。一切都将围绕坐标点缩放(0, 0, 0)
,而不是围绕多边形的中心。
如果要围绕其他点进行缩放(x, y, z)
,可以使用以下代码:
glTranslatef(x, y, z);
glScalef(your, scale, here);
glTranslatef(-x, -y, -z);
尽管更强大的解决方案是使多边形的坐标相对于其中心,但在这种情况下,您不再需要第二个 glTranslatef() 了。在您的具体示例中:
glPushMatrix();
glTranslatef(0, 300, 0);
glScalef(your, scale, here);
glBegin(GL_POLYGON);
glColor3f(1, 1, 1);
glVertex3f(-150, -150, 0);
glVertex3f(150, -150, 0);
glVertex3f(150, 150, 0);
glVertex3f(-150, 150, 0);
glEnd();
glPopMatrix();
推荐阅读
- java - 为什么使用 system.out.println 函数后 java 中没有输出?
- java - Java 进度条显示后端执行完成的时间
- spring - 如何为 OneToOne 关系设置值?
- javascript - 如何使用 JavaScript 将纪元时间戳转换为正常的日期时间格式?
- c - 变量看起来像一个函数指针
- java - Jar 没有在其他人的电脑上执行 [JDBC 外部 jar/maven 依赖问题,连接未建立]
- node.js - 在节点(快速)服务器中修改正文后是否可以重定向发布请求?
- node.js - 打包和解包要修补的 Electron Native 应用程序的 node_modules
- c# - 将路由和正文中的多个参数绑定到 ASP.NET Core 中的模型
- python - 如何在 Ursina Python 游戏引擎中添加延迟