首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将光应用于openGL中的对象

将光应用于openGL中的对象
EN

Stack Overflow用户
提问于 2015-08-10 13:02:45
回答 1查看 374关注 0票数 0

我把光加到我的物体上。但是我有很多关于互联网的例子,我想了解我在做什么。有人能详细解释一下代码中的每一步都做了什么吗?

片段程序,

  • 光色:我们需要的光线(以红色为例)
  • 光泽度:我们想用多少光,也可以把图片变成黑暗的光。
  • gl_FragColor =写全色。但是为什么我们要做texture2D(.)+ facingRatio *?

顶点程序,

-Why gl_MultiTexCoord0.xy?-有人能解释一下光方向是如何计算的吗?

代码语言:javascript
复制
  varying vec2 Texcoord;
    uniform sampler2D baseMap;
    uniform vec4 lightColor;
    uniform float shininess;
    varying vec3 LightDirection;
    varying vec3 Normal;
    void main(void)
    {
float facingRatio = dot(normalize(Normal), normalize(LightDirection));
gl_FragColor = texture2D(baseMap, Texcoord) + facingRatio * lightColor * shininess;
    }






varying vec2 Texcoord;
uniform mat4 modelView;
uniform vec3 lightPos;
varying vec3 Normal;
varying vec3 LightDirection;
void main(void)
{  
   gl_Position =  gl_ProjectionMatrix * modelView * gl_Vertex;
   Texcoord =  gl_MultiTexCoord0.xy;
   Normal = normalize( gl_NormalMatrix * gl_Normal);
   vec4 objectPosition = gl_ModelViewMatrix * gl_Vertex;
   LightDirection = (gl_ModelViewMatrix * vec4(lightPos, 1)).xyz - objectPosition.xyz;

}
EN

回答 1

Stack Overflow用户

发布于 2015-08-10 13:39:01

顶点着色器

我猜使用的是OpenGL的旧版本,这就是使用gl_MultiTexCoord0.xy的原因。看看这个页面来理解多纹理化和内置变量。

变量LightDirection很容易计算,因为它只是指从物体指向光源的矢量。因此,您可以从当前位置减去光线的位置(此处:objectPosition)。在本例中,这是在眼睛空间中完成的,它的优点是视图方向易于计算(它只是vec3(0.00.01.0))。

其他的线条只是从顶点的对象空间到眼睛空间的一些通常的图形转换。为了将法线变换成眼睛空间,需要用法向矩阵代替模型视图矩阵。这是模型视图矩阵的逆和转置。

片段着色器

facingRatio定义了当前片段应该具有多强的启发性。因此,用法向和光方向之间的标量乘积来测量它。在下一行中,通过从纹理中读取该片段的颜色并从光线中添加颜色来计算片段颜色。

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

https://stackoverflow.com/questions/31920324

复制
相关文章

相似问题

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