如何旋转90度的计算机绘图

时间:2014-11-15 13:48:44

标签: c++ c opengl

我在空白窗口中创建了一个兔子和一个鸭子图像。我的计划是将它显示两次:一次单独显示,另一个图像像90度一样旋转。我已经尝试过第二次创建图像并通过更改值来转换图像,但很难并且根本无法工作。需要使用哪些轴来旋转平面中的图像以及完成它的正确方法。

void myInit(void){
        glClearColor(1.0, 1.0, 1.0, 0);  // the background is white
        glColor3f(0.0f, 0.0f, 0.0f);  // set drawing color
        gluOrtho2D(0.0, (GLdouble) screenWidth, 0.0, (GLdouble) screenHeight);
    }

void drawBunny(){
    glClear(GL_COLOR_BUFFER_BIT);
    // draw the outline of box (bunny)
    glLineWidth(2);
    glBegin(GL_LINE_LOOP);
        glVertex2i(50,50);
        glVertex2i(150,50);
        glVertex2i(150,100);
        glVertex2i(50,100);

    glEnd();

    //draw bunny tail
    glLineWidth(1);
    glBegin(GL_LINE_STRIP);
     glVertex2i(50,50);
     glVertex2i(50,35);//2nd wider top/bottom
     glVertex2i(70,35);//1st- shrink tail left/right
    glVertex2i(70,50);//1st- shrink tail left/right
    glEnd();

    // draw first ear
    glBegin(GL_LINE_LOOP);
        glVertex2i(175,85);
        glVertex2i(175,100);
        glVertex2i(150,100);
        glVertex2i(150,85);
    glEnd();

    //draw second ear
    glBegin(GL_LINE_LOOP);
        glVertex2i(175,70);
        glVertex2i(175,100);
        glVertex2i(150,100);
        glVertex2i(150,70);
    glEnd();

    // draw the head
    glBegin(GL_LINE_LOOP);
        glVertex2i(150,100);
        glVertex2i(150,110);
        glVertex2i(125,110);
        glVertex2i(125,100);
    glEnd();

    // draw first feet
    glBegin(GL_LINE_LOOP);
        glVertex2i(110,60);
        glVertex2i(110,75);
        glVertex2i(30,75); //decrease value increase feet
        glVertex2i(30,60);
    glEnd();

    //draw second feet
    glBegin(GL_LINE_LOOP);
        glVertex2i(50,100);
        glVertex2i(50,85);
        glVertex2i(30,85); //decrease value increase feet
        glVertex2i(30,100);
    glEnd();

     //* draw eyes
    glBegin(GL_LINE_LOOP);
        glVertex2i(140,100);
        glVertex2i(140,105);
        glVertex2i(135,105);
        glVertex2i(135,100);
    glEnd();
    glFlush();
}

int main (int argc, char** argv){
    glutInit(&argc, argv);  // initialize the toolkit
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  // set display mode
    glutInitWindowPosition(100,150);  // set window position
    glutInitWindowSize(screenWidth,screenHeight); // set window size
    glutCreateWindow("House");  // create & open window
    glutDisplayFunc(drawBunny);  // register redraw function
    myInit();
    glutMainLoop();  // loop forever
}

1 个答案:

答案 0 :(得分:2)

写一个由2个兔子组成的显示功能并旋转它们:

void display()
{
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);

    drawBunny();

    glPushMatrix();
    glRotatef(degreetoreturn,x,y,z); // Adjust parameters according to what you need
    drawBunny();
    glPopMatrix();

    glutSwapBuffers();

}

从drawBunny函数中删除glClear()函数和glFlush()函数。最后在你的主要功能中改变这一行:

glutDisplayFunc(drawBunny);  // register redraw function

glutDisplayFunc(display);  // register redraw function