0

次のような設定があります。

頂点シェーダー (... 無関係なもの):

#version 330 core

uniform mat4 ModelViewMatrix;
...

in vec4 position;
...

out vec4 out_position;

...

void main()
{
    ...
    out_position = ModelViewMatrix * position;
    ...
}

ジオメトリ シェーダー (... 無関係なもの):

#version 330 core

...

uniform mat4 ProjectionMatrix;

...

layout(lines) in;
layout(triangle_strip, max_vertices = 4) out;

in vec4 out_position[];

...

void main()
{
    vec4 lineDirection = out_position[1] - out_position[0];
    vec4 scaledLineWidthDir = ...;

    ...

    gl_Position = ProjectionMatrix * (lineDirection - scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (lineDirection + scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (-lineDirection + scaledLineWidthDir);
    EmitVertex();

    gl_Position = ProjectionMatrix * (-lineDirection - scaledLineWidthDir);
    EmitVertex();

    EndPrimitive();
}

しかし、シェーダーを実行しようとすると、ModelViewMatrix が使用されていないように見えます (セットアップしようとすると、「非アクティブなユニフォームの位置を取得しています」というメッセージが表示されます)。シェーダー。何を与える?

ここのジオメトリ シェーダは 2 つの頂点を取り、フラグメント シェーダが使用するために 4 つを出力することを理解していますが、ジオメトリ シェーダを正しく理解して使用していますか?

4

1 に答える 1

0

わかりました私は自分の問題を理解しました。

使用しようとしているシェーダーと同じ頂点シェーダーを持っていた間違ったシェーダーを使用していたため、一部のユニフォームは機能し、他のものは機能せず、混乱しました。

于 2014-04-01T20:15:23.750 に答える