1

私は小さな 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 に保存していますが、これが正しい方法ではないことは間違いありません。どこかで間違っていることはわかっていますが、何ができるのかわかりません (そして、私が言うように、おそらくそれは不可能でさえあります)。

あなたの助け/アドバイスをありがとう!

4

1 に答える 1

0

わかりました、今日はの他のバージョンglVertexAttribについて学びました。今ならお答えできます ;)

整数の頂点属性をそのままシェーダーに渡したい場合は、(明らかに) を使用する必要があります。浮動小数点入力 (例: ) を受け取りたい場合は、リンクされたページと適用された変換を確認してください。glVertexAttribIPointervec3

于 2013-02-19T14:11:16.207 に答える