[CG從零開始] 1. 安裝 pyopengl

因爲只是爲了驗證原理和想法,實在不願意折騰 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'
# -------------
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章