私は赤でペイントしたい非常に単純な2Dの星型を作成しました。 2つのVBOと1つのVAOを作成しました。 1つのVBOは星の頂点に対応し、1つはシェーダーに渡すカラー値に対応します。ここでOpenGL - フラグメントシェーダを使って奇妙な結果を得る
私はカラーデータを作成する方法である:(さんは、私は赤に興味があるとしましょう)
struct CArray {
static const GLuint numColor = 1;
glm::vec4 color[numColor];
CArray() {
color[0] = glm::vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
};
CArray starColor;
これは私のバッファ結合するプロセスです:
glEnableVertexAttribArray(12);
glGenBuffers(1, &g_bufferObject3);
glBindBuffer(GL_ARRAY_BUFFER, g_bufferObject3);
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4), starColor.color, GL_STATIC_DRAW);
glVertexAttribPointer(12, 4, GL_FLOAT, GL_FALSE, 0, 0);
これは私の頂点シェーダであります:
layout (location=0) in vec4 position;
layout(location=12) in vec4 color;
out vec4 colorVertFrag;
uniform mat4 ModelViewMatrix;
uniform mat4 ProjectionMatrix;
void main() {
gl_Position = ProjectionMatrix * ModelViewMatrix * position;
colorVertFrag = color;
}
これは私のフラグメントシェーダです:
012ここin vec4 colorVertFrag;
out vec4 color;
void main() {
color = colorVertFrag;
}
そしては私が得る結果である:代わりに、あなたが見ることができるように
(星の目、鼻、笑顔を形成するドットを無視し、それらが黒になっています)固体赤色を取得する、私は奇妙な黒赤い勾配のいくつかの並べ替えを取得しています。私は私の頂点シェーダに次の行を置く場合 は:
colorVertFrag = vec4(1.0, 0.0, 0.0, 1.0);
スターは完全に赤出てきます。
何が問題なのですか? ありがとう!
ハハハ、それは笑顔です! :-P –
私はまだOpenGLを新しくしています:D – gambit20088
あなたのカラーVBOには各頂点の色が含まれていませんか? –