OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0...

OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0...

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


如题,这部分只有看得懂的才能知道下面说的是什么。


在宿主语言中给着色器程序中的全局变量设定相应的值,如下:

    // 加载可用纹理单元
    glUniform1i(_sampler0Slot, 0);
    glUniform1i(_sampler1Slot, 1);

着色器中这两个变量的声明如下:

uniform sampler2D Sampler0;
uniform sampler2D Sampler1;

当进行绘制时,渲染管线在适当时机调用相应的着色器程序,并传入相应的以上变量在宿主语言中设置的值。

着色器中这两个变量的使用如下:

void main()
{
    vec4 dst = texture2D(Sampler0, vTextureCoordOut);
    vec4 src = texture2D(Sampler1, vTextureCoordOut);
    ......

}

这里使用的 Sampler0 和 Sampler1 并不像其它类型变量一样,按宿主语言中给定的值,直接换成相应的数值,就能跑起来。

这中间渲染管线根据宿主语言中设置的数值指定的位置,找到相应的纹理单元,并把该纹理单元上挂载的纹理对象取出来,传给相应的  Sampler0 和 Sampler1 。

而且得使用着色器语言内置的取纹理方法 texture2D 等,使用传入的纹理坐标从这个纹理对象中取适当范围内的图像颜色。


这样一个顶点的颜色,就可以由这个顶点的纹理坐标从指定的纹理中取出来。

有一点不能忽略,顶点并不是一个坐标,而是三个坐标,三个坐标构成一个顶点,不过有时也只会有一个顶点的几何坐标而已。


还有一点不太明白,即然纹理中的图片上某个范围象素是有颜色的了,那么,如果没有灯光的话,不也一样可以呈现颜色,被看到吗?

那么灯光是如何与纹理相互作用的呢?

为什么还必须要烘焙图,才可以在没有灯光作用的情况下就可以被看到呢?

灯光的几个要素,在纹理中是如何起物理或化学反应的呢?

可能也许是视觉或情神反应吧!。。。。。。


不急,不急!!!象我一样,即然很郁闷,也要调整一下心态,这样才能迸发出更多的灵感,希望你也一样。

如果您知道上面的问题答案,也请帮忙回复解答,老生在此有理了也。



 

你可能感兴趣的:(OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0...)