c++ - opengl:旋转椭圆

标签 c++ opengl 3d

我在 OpenGL 中旋转椭圆时遇到问题。所以,我有一些代码来绘制一个椭圆,如下所示:

glPushAttrib(GL_CURRENT_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glLineWidth(2.0);
glPushMatrix();
glTranslatef(0, 0, 0); // ellipse centre   
glBegin(GL_LINE_LOOP);
float inc = (float) M_PI / 500.0;
for (GLfloat i = 0; i < M_PI * 2; i+=inc)
{
    float x = cos(i) * 0.4;
    float y = sin(i) * 0.4;
    glVertex2f(x, y);
}
glEnd();
glPopMatrix();
glPopAttrib();

这会生成一张图片:enter image description here

现在我要做的是顺时针旋转这个椭圆。所以我在两者之间添加了一个 glrotate,但结果不是我所期望的。

所以,我做了类似的事情:

glPushAttrib(GL_CURRENT_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glLineWidth(2.0);
glPushMatrix();
glTranslatef(0, 0, 0);    
glRotatef(-90, 1, 1, 0);
glBegin(GL_LINE_LOOP);
float inc = (float) M_PI / 500.0;
for (GLfloat i = 0; i < M_PI * 2; i+=inc)
{
    float x = cos(i) * 0.4;
    float y = sin(i) * 0.4;
    glVertex2f(x, y);
}

glEnd();
glPopMatrix();
glPopAttrib();

这产生了一个简单折叠的图像。我想要做的是将椭圆沿其中心旋转指定的度数。此外,我尝试使用 glRotatef 的各种参数,但无法按照我的预期进行。生成的图像如下所示:

enter image description here

最佳答案

您在 XY 平面上工作,因此您无法真正围绕 XY 中的 vector 旋转。相反,您想沿单位 Z 轴旋转 (glRotate (angle, 0, 0, 1);)。想象您的屏幕是 XY 坐标系,Z 轴指向内部。你想要的是绕 Z 轴旋转,所以你的 XY 平面保​​持在 XY 平面内。

关于c++ - opengl:旋转椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223156/

相关文章:

c++ - 如何将 cv::Scalar 分配给 cv::Mat?

r - 在 R Plotly 中更改图例标题

javascript - THREE.js 未将 Material 加载到对象上

c++ - 在 C++ 中正确切片字符串字符

C++:malloc 等同于 new 吗?

java - FloatBuffer 绘制纹理四边形,但 ShortBuffer 不绘制

image - 从广角 (180) 相机拍摄的图像中消除镜头失真

c - OpenGL SOIL 连接到 Visual Studio

python - 在 Python 中计算 3D 网格的边界球

c++ - Cplex 的双值排序