OpenGL ES 中着色器变量 sampler2D 并不是在宿主语言中指定的数字 0...
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
如题,这部分只有看得懂的才能知道下面说的是什么。
在宿主语言中给着色器程序中的全局变量设定相应的值,如下:
// 加载可用纹理单元 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 等,使用传入的纹理坐标从这个纹理对象中取适当范围内的图像颜色。
这样一个顶点的颜色,就可以由这个顶点的纹理坐标从指定的纹理中取出来。
有一点不能忽略,顶点并不是一个坐标,而是三个坐标,三个坐标构成一个顶点,不过有时也只会有一个顶点的几何坐标而已。
还有一点不太明白,即然纹理中的图片上某个范围象素是有颜色的了,那么,如果没有灯光的话,不也一样可以呈现颜色,被看到吗?
那么灯光是如何与纹理相互作用的呢?
为什么还必须要烘焙图,才可以在没有灯光作用的情况下就可以被看到呢?
灯光的几个要素,在纹理中是如何起物理或化学反应的呢?
可能也许是视觉或情神反应吧!。。。。。。
不急,不急!!!象我一样,即然很郁闷,也要调整一下心态,这样才能迸发出更多的灵感,希望你也一样。
如果您知道上面的问题答案,也请帮忙回复解答,老生在此有理了也。