OpenGL期末考试作业最后一个…

题目:在场景中画一个三角形,让这个三角形绕着垂直于它的中心轴不停的自动旋转。

(首先需要使用一个双缓冲区。双缓冲区通过在后一个缓冲区里绘画,并不停交换前后缓冲区(可见缓冲区),来产生平滑的动画,使用双缓冲区可以有效的预防闪烁。)

可以使用定时器来做,当然也可以不使用定时器,可以使用GLUT提供的一个函数:glutIdleFunc.这个函数使另一个函数在程序空闲的时候就会被调用。

#include <GL/glut.h>
#include "stdlib.h"

double angle=0.0;

void Init(void)
{
     glClearColor(0.0,0.0,0.0,0.0);
}
void display(void)
{
      //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glClear(GL_COLOR_BUFFER_BIT);
      glTranslatef(0.0f, 0.0f, -5.0f);
      glRotatef(angle,0.0,0.0,1.0);
      glBegin(GL_TRIANGLES);
           glColor4f(1.0,0.0,0.0,1.0);
           glVertex3f(-1.73,-1.0,0.0);
           glColor4f(0.0,1.0,0.0,1.0);
           glVertex3f(1.73,-1.0,0.0);
           glColor4f(0.0,0.0,1.0,1.0);
           glVertex3f(0.0,2.0,0.0);
      glEnd();

      glutSwapBuffers();
      angle+=1.0;
      glLoadIdentity();
}

void reshape(int w,int h)
{
      glViewport (0, 0, (GLsizei) w, (GLsizei) h);
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity();
      gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 0.1, 20.0);
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
}
void keyboard (unsigned char key, int x, int y)
{
      switch(key)
     {
        case 27:    // 按ESC键时退出程序
             exit (0);
             break;
        default:
             break;
 }
}
int main(int argc, char** argv)
{
       glutInit(&argc, argv);
       glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE| GLUT_DEPTH);
       glutInitWindowPosition(200, 200);
       glutInitWindowSize(300, 300);
       glutCreateWindow("OpenGL程序");
       Init();
       glutDisplayFunc(display);
       glutReshapeFunc(reshape);
       glutIdleFunc(display);  // 这里让程序空闲时调用display

       glutKeyboardFunc(keyboard);
       //glEnable(GL_DEPTH_TEST);
       glutMainLoop();
       return 0;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值