状況:ライブラリ OpenTK を使用して、C# で OpenGL を使用して描画しています。
.
問題:描画するバッファ/頂点セットを選択できません。
.
セットアップ機能:
var vertices = new Vertex[..];
頂点を作成する
foreach( .. )
{
Byte4 color = new Byte4();
color.R = 255;
color.G = 0;
color.B = 0;
color.A = 100;
Vertex vertex;
vertex.Position = new Vector3(.....);
vertex.Color = color;
vertices[index] = vertex;
}
バッファを生成/バインドします。
vbo_size = vertices.Length;
GL.GenBuffers(1, out vbo_id);
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_id);
GL.BufferData<Vertex>(BufferTarget.ArrayBuffer, (IntPtr)(vbo_size * Vertex.SizeInBytes), vertices, BufferUsageHint.StaticDraw);
GL.InterleavedArrays(InterleavedArrayFormat.C4ubV3f, 0, IntPtr.Zero);
*これが重要な場合、 Vertex.SizeInBytesは 16 です。
.
レンダリングコード:
GL.Enable(EnableCap.DepthTest);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
..
GL.Enable(EnableCap.ColorArray);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
GL.Disable(EnableCap.ColorArray);
..
glControl1.SwapBuffers();
.
やりたいこと:
セットアップ コードでは、頂点を作成します (頂点には位置と色が含まれます)。現在 1 つのセットを作成していますが、もう 1 つ作成したいと考えています (色の値が異なる同じコードのみ)。私はこれを行いました。もちろん、それを作成してセカンダリ バッファー (vbo_id/vbo_secondary_id) にバインドしても問題ありません。でもどうやって描くの?
このようなものは、私が探しているものです:
RenderNormalColors()
{
GL.UseVboId(vbo_id);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
}
RenderAlternativeColors()
{
GL.UseVboId(vbo_id_secondary);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
}
GL.DrawArrays は、何を描画するかを制御せずにすべてを取得するようです。
頂点/配列のすべては、色を除いて同一です。同じオブジェクト (何千ものポイント) を別の「配色」でレンダリングするだけです。
どんな助けでも感謝します。