一个简单的OpenGL程序

      开始学习计算机图形学了,虽然本科也开过一门图形学课程,不过当时讲课比较枯燥,用的教材也不行。好像是电子工业出版社的教材,居然在一个短短几十行的程序里面出现了7、8个goto,简直不知所云,暴汗!

    “ 工欲善其事,必先利其器”,我选择的图形编程接口就是OpenGL。虽然现在DirectX来势汹汹,不过基本的原理想来也差不多,而且手头的OpenGL资料比较丰富,所以还是采用OpenGL来开始我的图形学之旅。

     OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。

     买了两本书,都是外文书的中译本,一本是《OpenGL Programming Guide》,一本是《OpenGL SuperBible》。篇幅都不小,够看很久的了,呵呵。还去借了一本《 Interactive Computer Graphics:A Top-Down Approach with OpenGL》,外文原版,好像也有点意思,主要讲图形学的原理。

     利用OpenGL提供的函数,只用少量的程序就可以画出复杂的图形,下面就是我画的茶壶和相应的程序,是不是很有意思呢?^_^

    

#include <GL/glut.h>
#include <GL/gl.h>

void display()         //画图
{
   glClear(GL_COLOR_BUFFER_BIT);
   glColor3f(0.0,0.1,1.0);
   glLineWidth(2.0);
   glBegin(GL_LINES);
       glColor3f(0.0,0.0,0.0);     //x轴,黑色
       glVertex3f(0.0,0.0,0.0); glVertex3f(30.0,0.0,0.0);
       glColor3f(1.0,0.0,0.0);     //y轴,红色
       glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,30.0,0.0);
       glColor3f(0.0,1.0,0.0);     //z轴,绿色
       glVertex3f(0.0,0.0,0.0); glVertex3f(0.0,0.0,30.0);
   glEnd();
   glLineWidth(1.0);
   glColor3f(0.0,0.1,1.0);
   glutWireTeapot(3.0);      //画一个半径3的茶壶
   glFlush();
}
void reshape(GLsizei w,GLsizei h)    //窗口大小改变时调用
{
   glViewport(0,0,w,h);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,50.0);  //设置视野
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glTranslatef(0.0,0.0,-10.0);        //z轴方向平移
   gluLookAt(0.8,0.5,1.6,0.0,0.0,0.0,0.0,1.0,0.0);    //设置视点
}
int main()
{
   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);     //直接描画
   glutInitWindowSize(500,400);
   glutInitWindowPosition(100,100);
   glutCreateWindow("Draw a Teapot");
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glClearColor(0.8,0.8,0.8,0.0);        //灰色背景
   glutMainLoop();
   return 0;
}

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值