0

ジオメトリを正しく表示するインスタンスを作成しましたが、グラフィックが正しくありません。

私のVSはこのように見えます

#version 410

#include "engine-variables.inc"
#include "functions.inc"

in vec3 POSITION;
in vec3 NORMAL;
in vec2 TEXCOORD0;
in mat4 INSTANCE_TRANSFORM;

out vec2 vTexCoord; 
out vec3 vNormal;

void main() 
{ 
    gl_Position = CalcPositionInWorld_Instance(POSITION, INSTANCE_TRANSFORM);

    vNormal = NORMAL;   

    vTexCoord.x = TEXCOORD0.x; 
    vTexCoord.y = 1.0 - TEXCOORD0.y; 

}

注:#include私のアプリによって処理されます - glsl の一部ではありません

私は単純なフラグメントシェーダーを持っています

#version 410

in vec2 vTexCoord; 
in vec3 vNormal;

out vec4 fCol;

uniform sampler2D en_texModel;

void main() 
{ 

  vec4 texVal = texture2D(en_texModel, vTexCoord);

  fCol = vec4(1, 0, 0, 1) + 0.00001 * texVal + vec4(0.00001 * vNormal, 0);

}

注: 0.00001 の値は、アプリ内で屈折させるために texVal 変数と vNormal 変数を保持する必要があるときのデバッグのためです。

結果の色が正しくありません。モデルは赤ではなく、白黒 (三角形にランダムに分散) - 赤の三角形はほとんどありません

ここに画像の説明を入力

4

1 に答える 1

1

犯人は次の行でした:

fCol = vec4(1, 0, 0, 1) + 0.00001 * texVal + vec4(0.00001 * vNormal, 0);

texVal.x または vNormal.x のいずれかが大きくて負の場合、vec4(1,0,0,1) から赤色が相殺され、依然として黒色になる可能性があります。

于 2013-10-27T19:03:32.313 に答える