Python与OpenGL的简单介绍
我们准备好了进行编写OpenGL相关的代码了,启动DrPython,从第一行开始输入下面的代码:
#First Python
OpenGL Program
#ogl1.py
这几行代码是用来干什么的呢?记住,它们是注释语句,它们不做任何事情,除了提示你或者任何后面来阅读这段代码的人。没有比这更重要的了,当你的代码的复杂度和长度不断增长的时候。
接下来就是保存你的代码,一个好的习惯就是,当你在代码有一些更改的时候,就保存一下。 我们给代码再增加一些:
from OpenGL.GL
import *
from OpenGL.GLU
import *
from OpenGL.GLUT
import *
import sys
记住python有一些可以直接使用的内置的命令可以直接使用,import
声明添加了一些额外的函数。除了import
sys,其它三个命令看起来和我们在第一个程序里使用的有些不一样。第一个程序里,我们必须使用string.find命令,所以我们导入了string模块。在这个新的命令里,from
…import
*格式,我们可以直接使用它们的命令,而不用像第一个程序那样,每次都加一个前缀,像:OpenGL.GL,如果我们使用import
OpengGL.GL,那么,每次都要使用:OpenGL.GL.glVertex2f(x, y)。如果使用from …import
*格式,我们可以简单地使用:glVertex2f(x, y)。简单了好多,你认为呢?最后的import
sys声明,提供了一些常用的命令,但图形程序只需要几个而已,所以我们直接使用了import sys而不是from sys import
*。就像super-3程序一样,我们只需要string模块的一个函数,所以我们使用了import
string。相反,我们想要所有的OpenGL GL,GLU和GLUT库中的函数,所以使用了from … import
*,这会节约很多时间。
总结一下,每一个OpengGL的声明,.GL,.GLU,.GLUT,都导入了一些OpenGL的函数,当你使用这些命令的时候,你可以看函数的前缀很容易地区分它们来自哪一个包,比如:glClear(),肯定是来自GL包。gluPerspective()则来自GLU包,glutWireTeapot()则来自GLUT包,这一节你会看到很多来自这些包的函数。好了,我们继续:
def draw():
glutWireTeapot(0.5)
glFlush()
def是一个新的关键字,它定义了一个新的函数块。函数就是一个代码块,看起来就像一个代码集一样。这个函数的名字是draw,我们可以在其它地方使用它,通过它的名字。注意一下def
draw():之后的缩进的代码,它们就是这个函数的函数体。Draw函数干了两件事情,第一,画了一个0.5大小的茶壶,第二,glFlush(),把画显示到了屏幕上,所以我们能看到它。保存你的工作。
最后,加入下面的代码,保证缩进格式的正确性。
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutCreateWindow("My first OGL Program")
glutDisplayFunc(draw)
glutMainLoop()
保存你的工作,第一行,glutInit(sys.argv),告诉Python我们在保用GLUT进行绘图。GLUT就是“GL
Utilities
Toolkt”,它是一个跨平台的工具包来计算背景图像,比我们自己来写这些要简单得多。它隐藏了很多繁琐的细节。sys.argv可以允许我们在命令行下输入一些参数,如果我们想输入的话。下一行,glutInitDisplayMode(GLUT_SINGLE
|
GLUT_RGB),告诉了图像向导,我们只需要使用一个单显示屏,而且我们将使用RGB颜色模式,GLUT_SINGLE与GLUT_RGB之间的|,表示and,和的意思。glutCreateWindow(“My
First OGL Program”),使用GLUT工具包创建了一个窗口,标题是”My First OGL
Program”。glutDisplayFunc(draw)告诉GLUT工具到哪儿去找函数创建图像的场景。这个程序里就是我们定义的draw函数。最后,glutMainLoop()开始程序的循环,允许GLUT自动检测程序的输入,输出。
你肯定已经完成了它了,运行它!你应该看到和下图类似的窗口,当然,背景可能不一样,它取决于你的桌面。
至少,你能看到一个像茶壶一样的东西。发生了什么事情呢?我们创建了一个图像窗口,我们没有定义背景,所以背景就是你的桌面,然后在上面画了一个茶壶。用你的鼠标拖动窗口,你会发现背景也在变化。
我们可以使用一行简单的代码来修正这个问题,在def
draw():后面加一行:glClear(GL_COLOR_BUFFER_BIT),记住是函数的内容,缩进格式不要弄错了。保存它,再次运行它试试,你应该看到和下面类似的图像:
移动你的窗口,就像我们预期的那样。最后,我们再加两行代码到我们的程序,再glutInitDisplayMode函数下面:
glutInitWindowSize(250, 250)
glutInitWindowPosition(100, 100)
保存你的工作,这两行让我们窗口的大小(250X250),初始位置(100,100)。执行程序,你会发现和原来的位置有点差别了。
#First Python
OpenGL program
#ogl1.py
from OpenGL.GL
import *
from OpenGL.GLU
import *
from OpenGL.GLUT
import *
def draw():
glClear(GL_COLOR_BUFFER_BIT)
glutWireTeapot(0.5)
glFlush()
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowISize(250, 250)
glutInitWindowPosition(100, 100)
glutCreateWindow("My Second OGL Program")
glutDisplayFunc(draw)
glutMainLoop()
#End of
program