因爲只是爲了驗證原理和想法,實在不願意折騰 C++ 去編譯、鏈接找庫......,並且爲了配合今後一系列關於 CG 的文章,決定用 python 的 opengl wrapper 來進行實踐,所以第一步就是安裝 pyopengl 了。
pip install PyOpenGL PyOpenGL-accelerate
我的電腦是 Mac, 安裝以後可以驗證一下,粘貼下面這個代碼,然後運行這個腳本,看看是否可以正常打開窗口,並且可以繪製一個粉色的正方形。
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
w,h= 500,500
def square():
glBegin(GL_QUADS)
glVertex2f(100, 100)
glVertex2f(200, 100)
glVertex2f(200, 200)
glVertex2f(100, 200)
glEnd()
def iterate():
glViewport(0, 0, 500, 500)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
glMatrixMode (GL_MODELVIEW)
glLoadIdentity()
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
iterate()
glColor3f(1.0, 0.0, 3.0)
square()
glutSwapBuffers()
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
我用的是 Mac ,可能會遇到了找不到 opengl 和 glut 庫的問題,如下:
找不到 opengl
...
...
raise ImportError("Unable to load OpenGL library", *err.args)
ImportError: ('Unable to load OpenGL library', "dlopen(OpenGL, 0x000A): tried
找不到 glut
...
...
_base_glutInit(ctypes.byref(count), holder)
File "/usr/local/anaconda3/envs/opengl/lib/python3.8/site-packages/OpenGL/platform/baseplatform.py", line 423, in __call__
raise error.NullFunctionError(
OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
找到 OpenGL/platform/ctypesloader.py
這個文件,在你 python 環境中的 lib 中,將下面的第一行,改爲下面的代碼,這樣就可以順利找到 opengl 和 glut 的庫了。
# -----------
fullName = util.find_library( name )
# -----------
# |
# v
# ------------
if name == 'OpenGL':
fullName = '/System/Library/Frameworks/OpenGL.framework/OpenGL'
elif name == 'GLUT':
fullName = '/System/Library/Frameworks/GLUT.framework/GLUT'
# -------------