0

この問題の原因はよくわかりません。シェーダーの経験があまりないので、実際のシェーダーとは無関係かもしれません (ほとんどの場合、シェーダーに問題はありません)。

私はこの結果を持っています

ここに画像の説明を入力

フラグメントシェーダー

#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を使用しました。glEndvbos が必要な場合は、まずそれが機能することを確認します。

ちなみに、黒い点の三角形ではなく、黒い三角形が表示されるはずです。

100個の三角形を重ねるとこんな感じ。黒くレンダリングされるピクセルは、完全にランダムではありません。それらは実際にはある種のパターンを形成しますが、まだ白いピクセルはほとんどの場合常に白いです。

ここに画像の説明を入力

4

1 に答える 1