C++ opengl中旋转对象的问题
我不明白为什么我的画不能正确旋转。我看了很多其他的例子,希望能完成和我一样的事情,但我尝试过的都没有成功。出于某种原因,它会被转换到另一个位置,除非我从0,0开始,然后它工作得很好C++ opengl中旋转对象的问题,c++,opengl,rotation,C++,Opengl,Rotation,我不明白为什么我的画不能正确旋转。我看了很多其他的例子,希望能完成和我一样的事情,但我尝试过的都没有成功。出于某种原因,它会被转换到另一个位置,除非我从0,0开始,然后它工作得很好 void drawBolt(Point p, GLfloat rotation){ glColor3f(1,0,0); glPushMatrix(); glTranslatef(p.x, p.y,.0f); glRotatef(rotation,0,0,1); int poin
void drawBolt(Point p, GLfloat rotation){
glColor3f(1,0,0);
glPushMatrix();
glTranslatef(p.x, p.y,.0f);
glRotatef(rotation,0,0,1);
int pointArray[] = {
p.x - 7, p.y + 10,
p.x + 7, p.y + 10,
p.x + 4, p.y + 2,
p.x + 6, p.y + 2,
p.x + 1, p.y - 5,
p.x + 3, p.y - 5,
p.x - 1, p.y - 12,
p.x - 3, p.y - 5,
p.x - 4, p.y - 5,
p.x - 2, p.y + 2,
p.x - 5, p.y + 2,
p.x - 4, p.y + 13,
p.x - 7, p.y + 14
};
glBegin(GL_TRIANGLE_FAN);
for(int i = 0; i < 22; i++){
glVertex2i(pointArray[i] * 2, pointArray[i + 1] * 2);
i++;
}
glEnd();
glPopMatrix();
glFlush();
glColor3f(0,0,0);
}
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
Point a(50, 50);
drawBolt(a, 180.0f);
}
为什么要应用glTranslate,然后在顶点位置的每个元素上再次执行相同的转换操作?这可能是你看到这个的部分原因。对不起,我是opengl的初学者。我到底做错了什么?如果代码是这样写的,那么我就不知所措了。在我的图形学课上,这是唯一教我的方法,我正在努力学习这些例子online@anthonyPorter:提示:glTranslatef P.X,P.Y,…以及稍后的P.X+…,P.Y+…。此外,不应使用glBegin、glVertex和glEnd。它们已经被弃用超过15年,并且已经从OpenGL-3和更高版本中全部删除。如果您想学习现代OpenGL,请使用@datenwolf上的现代教程,谢谢我将开始阅读。以旧的方式学习图形有什么好处吗?还是我的导师只是在浪费我的时间?我不认为我在用P.x+翻译任何东西。。。我正在制作一个整数数组用作点。我明白这不是解决这个问题的方法,但是我将开始阅读教程。谢谢again@anthonyPorter:还要注意,现代的可编程管道OpenGL比FFP更易于使用。在FFP中,你有一个几乎无法控制的过多的状态开关,你必须记住。为了获得某种结果/效果,您必须想出一种通常聪明的方法来连接固定功能管道的硬连线部分。你们甚至可以用FFP进行水波模拟和纹理控制的伪折射,但这是一项非常艰苦的工作。使用着色器,您只需在几行代码中写下所需内容,即可完成。