この問題の原因はよくわかりません。シェーダーの経験があまりないので、実際のシェーダーとは無関係かもしれません (ほとんどの場合、シェーダーに問題はありません)。
私はこの結果を持っています
フラグメントシェーダー
#version 120
void main(void) {
gl_FragColor[0] = 0.0;
gl_FragColor[1] = 0.0;
gl_FragColor[2] = 0.0;
}
頂点シェーダー
#version 120
attribute vec2 coord2d;
void main(void) {
gl_Position = vec4(coord2d, 0.0, 1.0);
}
私のレンダリング機能
(define (renderFunc)
(gl:Clear gl:COLOR_BUFFER_BIT)
(gl:UseProgram program)
(gl:EnableVertexAttribArray attribute_coord2d)
(gl:Begin gl:TRIANGLES)
(gl:Vertex3f 0.0 0.8 0)
(gl:Vertex3f -0.8 -0.8 0)
(gl:Vertex3f 0.8 -0.8 0)
(gl:End)
(gl:DisableVertexAttribArray attribute_coord2d)
(glut:SwapBuffers))
そして私のInit関数
(define (initFunc)
(gl:ClearColor 1 1 1 1)
(gl:Enable gl:TEXTURE_2D)
(gl:Enable gl:LIGHTING)
(gl:Enable gl:BLEND)
(gl:BlendFunc gl:SRC_ALPHA gl:ONE_MINUS_SRC_ALPHA)
(set! program (CreatePorgram (list
(CreateShader gl:VERTEX_SHADER (LoadScript "vs.glsl"))
(CreateShader gl:FRAGMENT_SHADER (LoadScript "vf.glsl")))))
(set! attribute_coord2d (gl:GetAttribLocation program "coord2d"))
(print "attribute_coord2d: " attribute_coord2d)
(print "vbo_triangle: " vbo_triangle)
(print "program: " program)
(print (gl:GetError)))
正確な理由はわかりませんが、シェーダーが正しくロードされるなどです。glGetError
エラーは返されず、すべて正常に動作しているようです。
私のマシンでコンパイルして正常に動作するこのチュートリアルに基づいてコードを作成しました。
http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Introduction
このエラーは私のスキーム バインディングに関連しているように感じます。シェーダーがメモリにバインドされている場合、opengl に送信されたソースを解放できますか。シェーダーが生成されると、シェーダーのソース コードが解放されると確信しています。
私は自分のコードで何が違うのかを見つけるのにかなり迷っています.glUniformについて聞いたことがありますが、私の場合はそれほど重要ではないと思います.
VBO の作成に問題があったためglBegin
、 andを使用しました。glEnd
vbos が必要な場合は、まずそれが機能することを確認します。
ちなみに、黒い点の三角形ではなく、黒い三角形が表示されるはずです。
100個の三角形を重ねるとこんな感じ。黒くレンダリングされるピクセルは、完全にランダムではありません。それらは実際にはある種のパターンを形成しますが、まだ白いピクセルはほとんどの場合常に白いです。