私は小さな Voxed ベースのゲームに取り組んでいます。私は Minecraft のコピーを作成する予定はありませんが、ここで重要なことではありません。
C++ OpenGL と VBO を使用して、「非標準」タイプを GLSL シェーダーに送信できません。3 つの uint8_t 属性で構成される構造体を想定して、この構造体の配列を glsl に送信しようとしています。しかし、正しい値を取得できません。
私が見つけた最も正確なものは次のとおりです。WebGL - 符号なしバイトの頂点属性の色の値を渡すには?
しかし、それは私が持っている質問に実際には答えません。
私がやろうとしていることを理解するのに役立つコードを次に示します。それを達成するための解決策があるかどうかさえわかりません...
私の構造
struct Color
{
uint8_t r, g, b;
// Getter and setter etc...
};
VBO にバインドする方法
//_colors contains an array of Color
//_colors.array = new Color[SIZE];
glBind(GL_ARRAY_BUFFER, _colors.buffer);
glBufferData(GL_ARRAY_BUFFER,
sizeof(Color) * _colors.size,
&(_colors.array[0]),
GL_STATIC_DRAW);
それらを GPU に送信する方法
glBind(GL_ARRAY_BUFFER, _colors.buffer);
glVertexAttribPointer((GLint)1, 3, GL_UNSIGNED_BYTE, GL_FALSE, 0, 0);
値をシェーダーの vec3 に保存していますが、これが正しい方法ではないことは間違いありません。どこかで間違っていることはわかっていますが、何ができるのかわかりません (そして、私が言うように、おそらくそれは不可能でさえあります)。
あなたの助け/アドバイスをありがとう!