Как повернуть компьютерный рисунок на 90 градусов

0

В моем пустом окне я создал кролика и изображение утки. Мой план состоял в том, чтобы отобразить его дважды: один раз сам по себе и другое изображение, как будто оно повернулось на 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
}
Теги:
opengl

1 ответ

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();

}

Удалить функцию glClear() функции glFlush() из функции drawBunny. И, наконец, в вашей основной функции измените эту строку:

glutDisplayFunc(drawBunny);  // register redraw function

в

glutDisplayFunc(display);  // register redraw function
  • 2
    +1 - Однако есть одно небольшое замечание: glutSwapBuffers (...) в этом сценарии glutSwapBuffers (...) . Пиксельный формат с одиночной буферизацией. Хотя я бы не GLUT_SINGLE использовать пиксельный формат с одной буферизацией ( GLUT_SINGLE ) для начала, это то, что мы имеем здесь: - \
  • 1
    @ AndonM.Coleman Спасибо за предупреждение. Я прочитал документацию, в которой вы правы. Написано, что в случае с одиночной буферизацией эта функция не действует.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню