BlenderでGLSL 簡単なシェーダ
wikibooksのマニュアルの要点まとめです。
参照先は GLSL Programming/Blender/Minimal Shader
Creating GLSL Shader
まずはBlenderの開始から。エラーメッセージを確認できるように
- windowsの場合は起動後に Help > Toggle System Console
- Linuxの場合はコンソールから起動
Text Editor を開き、 Text > Create Text Block を選んで、適当な名前をつける。
infoウィンドウから、Add > Mesh > Cube
3D View から View > Tool Shelf を選ぶ(もしくはショートカット t )。Object Tools > Shading > Smooth を実行。
3D ViewのViewPort ShadingをTextureにする。
3D View から View > Properties を選ぶ (もしくはショートカット n) 。さらに Display > Shading > GLSL を開いたメニューから選ぶ。
Logic Editorから (メッシュは選択した状態), Add Sensor > Always 。
Logic EditorからAdd Controller > Pythonを選択して、Text Editorでつけた名前を選択。
Logic EditorからSensorとControllerをつなげる。
Text Editorに下のコードを書いて3D Viewにてショートカットpを実行。終了はEsc。
import bge cont = bge.logic.getCurrentController() VertexShader = """ void main() // all vertex shaders define a main() function { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; // this line transforms the predefined attribute gl_Vertex // of type vec4 with the predefined uniform // gl_ModelViewProjectionMatrix of type mat4 and stores // the result in the predefined output variable gl_Position // of type vec4. (gl_ModelViewProjectionMatrix combines // the viewing transformation, modeling transformation and // projection transformation in one matrix.) } """ FragmentShader = """ void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // this fragment shader just sets the output color to opaque // red (red = 1.0, green = 0.0, blue = 0.0, alpha = 1.0) } """ mesh = cont.owner.meshes[0] for mat in mesh.materials: shader = mat.getShader() if shader != None: if not shader.isValid(): shader.setSource(VertexShader, FragmentShader, 1)