gpt4 book ai didi

c++ - 如何在 OpenGL 中将对象旋转一定度数?是否有内置命令或我必须使用公式?

转载 作者:行者123 更新时间:2023-11-28 08:11:09 26 4
gpt4 key购买 nike

如何在 OpenGL 中将对象旋转一定度数?是否有内置命令或我必须使用公式?我已经在这个问题上停留了好几天了。它是一个程序,可以在我的鼠标移动时在鼠标下方绘制一个形状。

假设我有一个绘图函数:

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glColor3f ( 1, 1, 1 );
glBegin (toggle_type );

//Where cur_x and cur_y is the current mouse location that gets auto-updated
//ratiox is 0.7 and ratioy is 0.6
if (toggle_type==GL_QUADS) //rectangle from (-length, -length) to (length,length)
{
glVertex2f ( cur_x- length*ratiox, cur_y + length*ratioy );
glVertex2f ( cur_x+ length*ratiox, cur_y + length*ratioy );
glVertex2f ( cur_x+ length*ratiox, cur_y- length*ratioy );
glVertex2f ( cur_x- length*ratiox, cur_y- length*ratioy );
}
else if (toggle_type==GL_TRIANGLES)//triangle with vertices (-length, -length), (length, -length), (0, length).
{
glVertex2f ( cur_x- length, cur_y - length );
glVertex2f ( cur_x+length, cur_y - length );
glVertex2f ( cur_x, cur_y + length );
}

else if (toggle_type==GL_LINES) //line brush with vertices (0,-length), (0,length)
{

glVertex2f ( cur_x, cur_y - length );
glVertex2f ( cur_x, cur_y + length );
}

我不能在使用 glBegin 之前只使用 glRotatef() 可以吗?我想将它围绕我的鼠标绘制的方式旋转一定的度数。没有内置函数吗?如果不能,我应该考虑使用什么公式?

最佳答案

您需要学习如何使用 OpenGL 变换:glTranslate、glRotate 和 glScale。

翻译的意思是“移动东西”。规模意味着“让东西变大或变小”。旋转意味着它听起来的意思。

借助 OpenGL 变换,每次发出变换时都可以从更改坐标系的角度进行思考。

所以要做到这一点,假设您要在光标周围画一个框。首先翻译成鼠标光标的位置。那就是你想画画的地方。然后围绕光标旋转坐标系,这样你就可以轻松地绘制一个盒子,而不必用正弦、余弦和角度做一些有趣的事情。然后,将对象缩放到您想要的任何大小——这将缩小或扩展坐标系。最后,只需围绕原点 (0,0) 绘制一个单位跨度的框,它就会以您想要的位置、旋转和大小出现在屏幕上。

如果您在翻译前尝试旋转,您将得到不正确的结果。这样做的技术原因是 OpenGL 后乘变换矩阵乘以顶点 vector 。

而且,是的,您应该在开始/结束 block 之外进行所有转换。您的开始/结束 block 仅用于指定顶点、法线等。

关于c++ - 如何在 OpenGL 中将对象旋转一定度数?是否有内置命令或我必须使用公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com