説明を簡単にするために、ベジエ曲線のテッセレーションで説明します。
ベジエ曲線 1本当たりの座標は始点、制御点、終点で3点が必要になります。
また、1本毎にvec4形式で線色を指定するものとします。
1本当たりのCPUからGPUへの転送データーは
vec3形式の座標が3点で3×3×4(Float型のため)=36バイト
vec4形式の線色情報で4×4=16バイト
ストライドは36+16=52バイトです。
'openGLの制御部 openTK使用 vaoは省略
’po As Single() に上記の転送データーが2本分、52×2=104バイト入っています。
Dim vbo As Integer
GL.GenBuffers(1, vbo)
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo)
GL.BufferData(BufferTarget.ArrayBuffer, po.Length * 4, po, BufferUsageHint.StaticDraw) '4はsingle型のバイト数
GL.VertexAttribPointer(AttribLocation_頂点, 3, VertexAttribPointerType.Float, False, 52, 0)
GL.EnableVertexAttribArray(AttribLocation_頂点)
'36は線色情報のオフセット
GL.VertexAttribPointer(AttribLocation_color, 4, VertexAttribPointerType.Float, False, 52, 36)
GL.EnableVertexAttribArray(AttribLocation_color)
'↓これで、poに格納された頂点情報から2本をバッチ描画する
GL.DrawArrays(PrimitiveType.Patches, 0, 3*2) '3は頂点の数 始点、制御点、終点 この2本分
ここで分からないのが、
データーが1本分(52バイト)ならば正常に動作しますが、104バイトの様に複数入れると2本目以降を描画しないのです。
仕方無く、
GL.DrawArrays(PrimitiveType.Patches, 0, 32) ’3*2と記述していますが32と誤表示されます
GL.DrawArrays(PrimitiveType.Patches, 1, 32) ’3*2と記述していますが32と誤表示されます
と記述していますが、2本目からは線色は正常ですが、始点、制御点、終点がズレます。
知りたいこと
GL.VertexAttribPointer(AttribLocation_頂点, 3, VertexAttribPointerType.Float, False, 52, 0)
GL.VertexAttribPointer(AttribLocation_color, 4, VertexAttribPointerType.Float, False, 52, 36)
この様に記述しましたが、数値パラメーターはこれでどこが誤りですか?
GL.DrawArrays(PrimitiveType.Patches, 0, 3*2)
これも誤りですか?
自分では、どこに誤りがあるか全く分からなくなってきました。上の質問について御教授をお願い致します。