OpenGL学习笔记(2)第一个程序——犹他茶壶(Teapot)

好了,python+opengl的开发环境搭建好后,我们就可以开始学习了。

这里,我们先学习一个常见的例子——犹他茶壶。

先贴代码

 
   
  1. from OpenGL.GL import *
  2. from OpenGL.GLU import *
  3. from OpenGL.GLUT import *
  4. def drawFunc():
  5. glClear(GL_COLOR_BUFFER_BIT)
  6. #glRotatef(1, 0, 1, 0)
  7. glutWireTeapot(0.5)
  8. glFlush()
  9. glutInit()
  10. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
  11. glutInitWindowSize(400, 400)
  12. glutCreateWindow("First")
  13. glutDisplayFunc(drawFunc)
  14. #glutIdleFunc(drawFunc)
  15. glutMainLoop()

效果图


(Linux 下可以用scrot来截图

Linux Mint 安装:sudo apt-get install scrot 

用法:请自行百度

程序

初始化窗口

11~17行基本也是固定的,

glutInit()是用glut来初始化OpenGL的,所有的问题都交给这个函数吧,基本不用管,虽说可以接受参数的,基本无用。

glutInitDisplayMode(MODE)非常重要,这里告诉系统我们需要一个怎样显示模式。至于其参数GLUT_RGBA就是使用(red, green, blue)的颜色系统。

glutInitWindowSize(400, 400)这个函数很容易理解,设置出现的窗口的大小。实际上还有个glutInitWindowPosition()也很常用,用来设置窗口出现的位置。

glutCreateWindow(“Teapot”),一旦调用了,就出现一个窗口了,参数就是窗口的标题。

glutDisplayFunc(drawFunc)是glut非常讨人喜欢的一个功能,它注册了一个函数,用来绘制OpenGL窗口,这个函数里就写着很多OpenGL的绘图操作等命令,也就是我们主要要学习的东西。

glutMainLoop(),主循环,一旦调用了,我们的OpenGL就一直运行下去了。和很多程序中的主循环一样,不停的运行,画出即时的图像,处理输入等。

绘图

看看drawFunc里的几句话,这里是实际绘图的函数。

glClear(GL_COLOR_BUFFER_BIT)是把先前的画面给清除,这基本是定律,每次重绘之前都要把原来的画面擦除,否则叠加起来什么都看不出了。

glutWireTeapot(0.5)是glut提供的绘制犹他茶壶的工具函数,这是一个别人写好的代码,咱们直接拿过来用就好,茶壶还是相当复杂的一个几何体,用这个函数一下子就画出来了,不过基本也就演示用用。这里是用的线模型,因为没有说光照和材质,如果glutSolidTeapot()画出来就成纸片儿了。

glFlush()似乎不用多说,画了那么多,自然要刷新一下显示。不过,这里的刷新不仅仅是屏幕上的更新,实际上,它是处理OpenGL的渲染流水线,让所有排队中的命令得到执行


小惊喜


现在你可以把注释的两个语句打开了,执行一下看到旋转的茶壶!

glutIdleFunc(drawFunc)又是一个激动人心的函数,可以让OpenGL在闲暇之余,调用一下注册的函数,这是是产生动画的绝好方法。

glRotatef(1, 0, 1, 0)四个参数第一个是角度,后三个是一个向量,意义就是绕着这个向量旋转,这里是绕着Y轴旋转1°。这一度一度的累加,最后使得茶壶围绕Y轴不停的旋转。从这里我们也能看出来,我们指定了一个旋转的角度后,重新绘制并不会复位,而是在上一次旋转的结果上继续旋转。这是一个非常重要的概念,OpenGL是一个状态机,一旦你指定了某种状态,知道再指定位置,它会保持那种状态。不仅仅是旋转,包括以后的光照贴图等等,都遵循这样的规律。


你可能感兴趣的:(OpenGL学习笔记)