3

Java と LWJGL で GLSL を学習しようとしていますが、現在、基本的な Vertex Shader に問題があります。

頂点シェーダー:

#version 120

void main() {
    gl_Position = gl_Vertex * 0.5;
}

フラグメント シェーダー:

#version 120

void main() {
    gl_FragColor = vec4(1.0, 0.4, 0.4, 1.0);
}

レンダリング コード:

public void draw() {
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glVertexPointer(3, GL_FLOAT, 0, 0L);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);

    glEnableClientState(GL_VERTEX_ARRAY);
    glDrawElements(GL_TRIANGLES, size, GL_UNSIGNED_INT, 0);
    glDisableClientState(GL_VERTEX_ARRAY);
}

コンパイルでエラーは発生せず、フラグメント シェーダーは正常に動作し、私が描いた単純な三角形に色を付けます。唯一の問題は、三角形が期待どおりに縮小 (0.5 係数) されていないことです。頂点は変更されません。私は何を間違っていますか?

4

1 に答える 1

2

問題は、それgl_Vertexが 4 次元ベクトルであることです。スカラーで直接乗算しても、意図したスケーリング結果は得られません。gl_PositionOpenGL は、同次座標をデカルト座標に変換するときに、x、y、z を w コンポーネントで除算します。0.5 / 0.5 = 1.0 なので、結果はスケーリングされません。

gl_Position = gl_Vertex * 0.5;

これにより、x、y、z、および w コンポーネントが 0.5 倍されます。x、y、z のみをスケーリングするようにコードを変更します。

gl_Position = vec4(gl_Vertex.xyz * 0.5, gl_Vertex.w);
于 2013-08-22T20:14:20.983 に答える