OpenGL - glDrawElementsInstanced - 片段着色器和不正确的颜色

时间:2013-10-27 18:12:28

标签: opengl

我创建了实例化,正确显示几何体,但其图形不正确。

我的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);

}

注意:由于调试,我需要在我的应用程序中保存texVal和vNormal变量以进行折射,因此有0.00001值。

结果颜色不正确。模型不是红色,而是黑色和白色(随机分布在三角形上) - 只有少数三角形为红色

enter image description here

1 个答案:

答案 0 :(得分:1)

罪魁祸首是:

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

如果texVal.x或vNormal.x很大且为负,仍会导致黑色,从vec4(1,0,0,1)中取消红色。