Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opengl中旋转对象的问题_C++_Opengl_Rotation - Fatal编程技术网

C++ opengl中旋转对象的问题

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

我不明白为什么我的画不能正确旋转。我看了很多其他的例子,希望能完成和我一样的事情,但我尝试过的都没有成功。出于某种原因,它会被转换到另一个位置,除非我从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 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进行水波模拟和纹理控制的伪折射,但这是一项非常艰苦的工作。使用着色器,您只需在几行代码中写下所需内容,即可完成。