首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开放GL (GLSL) -定向照明废墟纹理

开放GL (GLSL) -定向照明废墟纹理
EN

Stack Overflow用户
提问于 2016-10-27 12:00:13
回答 1查看 119关注 0票数 0

我一直在和OpenGL合作做一件课程,我的片段着色器有问题。我试图添加一些基本的方向照明到一个纹理网格。我可以得到的纹理看起来很好,没有照明。

然而,当我增加照明,它保持了纹理的覆盖颜色,但删除了纹理的细节在一起。

我不知道是什么原因造成的,我似乎无法在网上找到解决方案。谢谢你的帮助。

顶点着色器

代码语言:javascript
复制
#version 440

uniform mat4 uModel; //Model Location, Rotation, Scale
uniform mat4 uView; //Camera Location, Rotation, Scale
uniform mat4 uProjection; //Projection Matrix

in vec3 vPosition;
in vec3 vNormal;
in vec2 vTexCoords;

out vec3 oNormal;
out vec3 oFragPos;
out vec2 oTexCoords;

void main()
{
    gl_Position = vec4(vPosition, 1) * uModel  * uView * uProjection;
    oFragPos = vec3(vec4(vPosition, 1) * uModel);

    oNormal = normalize(vNormal * mat3(transpose(inverse(uModel))));
    oTexCoords = vTexCoords;
}

片段着色器

代码语言:javascript
复制
#version 440

//Ins
in vec3 oNormal;
in vec3 oFragPos;
in vec2 oTexCoords;

//Outs
out vec4 fragColour;

//Uniforms
uniform sampler2D uTextureSampler;

void main()
{   
    vec3 norm = normalize(oNormal);

    // Phase 1: Directional lighting
    float result = max(dot(norm, -vec3(0,0,1)),0.0);

    fragColour = vec4(vec3(result),1.0) * texture(uTextureSampler, oTexCoords);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-27 15:40:27

纹理的颜色还在这里。它看起来像一个像素在你的纹理中被采样。这个问题似乎来自"oTexCoords“值。

你可以尝试:

代码语言:javascript
复制
fragColour = vec4(vec3(result),1.0) * vec4(oTexCoords, 0.0, 1.0);

并检查是否在立方体上看到一个红色/绿色梯度。

因此,当您删除照明时,不要在您的着色器中使用照明组件(“结果”值),大多数编译器将删除所有导致计算“结果”的代码。

“结果”将被删除。所以"norm","oNormal","vNormal“都会从你的着色器里消失。

属性位置将发生变化,我的猜测是,您的问题来自您获取程序属性位置和“vertexAttribPointer”位置的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40284073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档