在opengl中旋转对象

时间:2016-04-02 11:17:30

标签: c++ c visual-studio opengl visual-studio-2008

我需要在按下左箭头键的同时旋转矩形对象。

我无法旋转它,或者可能是旋转它。使用缓冲区时可能会出现问题。

天气正确放置rotatef()功能或问题所在。

#include<stdlib.h>
#include<glut.h>
#include<stdio.h>
#include<math.h>
#include<time.h>


void rot()
{   glMatrixMode(GL_MODELVIEW);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity();
    glPushMatrix();

    glRotatef(30,0.0,0.0,1.0);
    glBegin(GL_POLYGON);
                glVertex2i(50,50);
                glVertex2i(170,50);
                glVertex2i(170,100);
                glVertex2i(50,100);
                glEnd();


    glPopMatrix();
}

void shape()
{

    glColor3f(1.0,0.0,0.0);


                glBegin(GL_POLYGON);
                glVertex2i(50,50);
                glVertex2i(170,50);
                glVertex2i(170,100);
                glVertex2i(50,100);
                glEnd();
}
void display()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    shape();
    glutSwapBuffers();
    glFlush();
}
void init()
{
    glClearColor(1.0,1.0,1.0,1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glOrtho(0,700,0,700,-1,1);
    glMatrixMode(GL_MODELVIEW);
}


void Keys(int key,int x,int y)
{
    if(key==GLUT_KEY_LEFT)
        rot();
     glutPostRedisplay();
}

void main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
    glutInitWindowSize(700,700);
    glutCreateWindow("tetris");

    glutDisplayFunc(display);

    glutSpecialFunc(Keys);
    init();
    glutMainLoop();
}

1 个答案:

答案 0 :(得分:1)

在绘制旋转顶点后立即发布重新显示。 因此,在绘制旋转顶点之后,在显示回调函数中,清除窗口然后不旋转地绘制顶点。这就是你将看到的(没有轮换),直到下一次更新。

一种方法是:

  1. 在显示功能中完成所有绘图
  2. 作为对按键的反应,只需更新角度(我想你想逐步旋转)并发布重新显示。不要绘制任何东西,你的显示功能将使用更新的角度。