http://e3dg.blog.hexun.com/10527926_d.html
以前做了不少关于OES_matrix_palette 机能相关的程序,这两天由于工作的需要,在完善opengles 桌面版的模拟库, 其中一项就是OES_matrix_palette的实现。
OES_matrix_palette 这个机能 是 opengles v1.1的扩展机能。有些和 opengl 的 ARB_vertex_blend, GL_ARB_matrix_palette 机能相类似。
OES_matrix_palette 机能是和 矩阵相关的,顾名思义 矩阵调色板,实际上和颜色不相干。可以这样理解,调色板放颜色的地方放着矩阵,调色板上有多少矩阵完全看底层显卡实现了。一般不会少于9个。
这些矩阵都是都是 4 X 4 的。
好让我们来总体上了解一下 OES_matrix_palette。 在非OES_matrix_palette模式下,一个顶点v 的运动,取决于glMatrixMode(ModeView) 的 矩阵变换T, 当然还有GL_PROJECTION 投影矩阵,在这里先忽略投影矩阵。公式为 v = Tv,(就是矩阵T和顶点v相乘)。而 在OES_matrix_palette模式下,也就是glMatrixMode(GL_MATRIX_PALETTE_OES)模式下, 顶点v, 被数个矩阵同时影响,这些矩阵被glCurrentPaletteMatrixOES(i)设置,i 就是第i个矩阵,在glCurrentPaletteMatrixOES(i);之后调用的相应的矩阵转换直接影响当前的matrix pallette矩阵。每个矩阵对顶点v的影响占有比例各不相同,那就是权重(weight), 由glWeightPointerOES()设置。
解释: 假定最多影响顶点的matrix pallette矩阵是四个,
比如有4个矩阵 matrix[4];
4个矩阵的权重值 weight[4] = { 0.2,0.3,0.15,0.35 }; 它们的和为 1
顶点 vo, ve;
for(int i=0; i<4; i++){
ve += matrix[i] X vo * weight[i]; 先矩阵和顶点相乘,然后乘以权重,再求和。
}
最后得出的顶点 ve, 就是matrix pallette矩阵变换后的新顶点。
以后我们接着说明 matrix pallette矩阵对 normal (法线)的作用。
然后详细说明一下 那些 opengl|es 函数的使用,和参数的意义。