これはhttp://pyopengl.sourceforge.net/context/tutorials/shader_1.xhtmlからの例です。
vbo を作成し、ビンジングし、シェーダーで実行していますが、途中で正しく動作しません。私はインターネットで多くのことを検索しましたが、私の問題に対する正確な答えは見つかりませんでした (私が持っていた最良の選択は、StackOverflow のこのトピックに関するものでした: Why is this tutorial example of a shader notdisplay any geometry as it should ?著者が同じチュートリアルに取り組んでいても、同じ問題は発生せず、自分で解決しました...)
from OpenGLContext import testingcontext
BaseContext = testingcontext.getInteractive()
from OpenGL.GL import *
from OpenGL.arrays import vbo
from OpenGLContext.arrays import *
from OpenGL.GL import shaders
class TestContext( BaseContext ):
def OnInit( self ):
VERTEX_SHADER = shaders.compileShader("""#version 330
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}""", GL_VERTEX_SHADER)
FRAGMENT_SHADER = shaders.compileShader("""#version 330
void main() {
gl_FragColor = vec4( 0, 3, 6, 1 );
}""", GL_FRAGMENT_SHADER)
self.shader = shaders.compileProgram(VERTEX_SHADER,FRAGMENT_SHADER)
self.vbo = vbo.VBO(
array( [
[ 0, 1, 0 ],
[ -1,-1, 0 ],
[ 1,-1, 0 ],
[ 2,-1, 0 ],
[ 4,-1, 0 ],
[ 4, 1, 0 ],
[ 2,-1, 0 ],
[ 4, 1, 0 ],
[ 2, 1, 0 ],
],'f')
)
def Render( self, mode):
shaders.glUseProgram(self.shader)
try:
self.vbo.bind()
try:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointerf(self.vbo)
glDrawArrays(GL_TRIANGLES, 0, 9)
finally:
self.vbo.unbind()
glDisableClientState(GL_VERTEX_ARRAY);
finally:
shaders.glUseProgram(0)
if __name__ == "__main__":
TestContext.ContextMainLoop()
Windows コマンドラインからこのプログラムを実行すると、次のエラーが表示されます。
Traceback(most recent call last):
File "openGL-test.py', line 70, in <module>
TestContext.ContextMainLoop()
File "C:\Python27\lib\site-package\openglcontext-2.2.0a2-py2.7.egg\OpenGLContext\glutcontext.py", line 159, in ContextMainLoop
render = cls( *args, **named)
File "C:\Python27\lib\site-package\openglcontext-2.2.0a2-py2.7.egg\OpenGLContext\glutcontext.py", line 35, in __init__
glutInitDisplayMode( self.DISPLAYMODE )
File "C:\Python27\lib\site-package\OpenGL\platform\baseplatform.py", line 384, in __call__
self.__name__, self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInitDisplayMode, check for bool(glutInitDisplayMode) before calling
それが何を意味するのか分かりますか?正確に言うと、私は 2 か月前に Python を学び始めたので、インターンシップ期間中に多くの作業をしなければならなかったとしても、かなりの初心者です。(ほら、それがStackOverflowに関する私の最初の質問です:)