首页 > 代码库 > OpenGLES 与 WebGL 中顶点属性的组织格式的误解 - 一个不好笑的笑话

OpenGLES 与 WebGL 中顶点属性的组织格式的误解 - 一个不好笑的笑话

OpenGLES 与 WebGL 中顶点属性的组织格式的误解 - 一个不好笑的笑话

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

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

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


WebGL 中立方体顶点坐标数组:

    vertices = [
        // Front face
        -3.0, -3.0, 3.0,
        3.0, -3.0, 3.0,
        3.0, 3.0, 3.0,
        -3.0, 3.0, 3.0,

        // Back face
        -3.0, -3.0, -3.0,
        -3.0, 3.0, -3.0,
        3.0, 3.0, -3.0,
        3.0, -3.0, -3.0,

        // Top face
        -3.0, 3.0, -3.0,
        -3.0, 3.0, 3.0,
        3.0, 3.0, 3.0,
        3.0, 3.0, -3.0,

        // Bottom face
        -3.0, -3.0, -3.0,
        3.0, -3.0, -3.0,
        3.0, -3.0, 3.0,
        -3.0, -3.0, 3.0,

        // Right face
        3.0, -3.0, -3.0,
        3.0, 3.0, -3.0,
        3.0, 3.0, 3.0,
        3.0, -3.0, 3.0,

        // Left face
        -3.0, -3.0, -3.0,
        -3.0, -3.0, 3.0,
        -3.0, 3.0, 3.0,
        -3.0, 3.0, -3.0,
    ];

WebGL 中立方体面顶点坐标索引数组:

    var cubeVertexIndices = [
        0, 1, 2, 0, 2, 3,    // Front face
        4, 5, 6, 4, 6, 7,    // Back face
        8, 9, 10, 8, 10, 11,  // Top face
        12, 13, 14, 12, 14, 15, // Bottom face
        16, 17, 18, 16, 18, 19, // Right face
        20, 21, 22, 20, 22, 23  // Left face
    ];

iOS 中与上面的差别:

一是顶点坐标数组中有重复的三角形顶点组合;

二是面顶点坐标数组中仅是顶点坐标,未提供该点取纹理像素的坐标,也未提供灯光照射到该到上时光线反射计算的法线坐标;不过,WebGL 中分别提供了两个与顶点坐标数组对应的数组,分别对应顶点坐标数组中每个顶点坐标配对的纹理坐标和法线坐标;


茫然一阵后,放下,再捡起来,从稍外一层来看这个问题,

首先,对于使用顶点索引式绘制时,实际绘制是从面顶点索引缓存中来找绘制顺序,而顶点坐标缓存只是一个容器,并不决定顺序;

其次,使用顶点索引缓存的目的,就是避勉重复的顶点坐标存于缓存中,而代以坐标的索引的重复,大幅度降低了对 GPU 内存的占用;

最后,其实这是一个别人的测试代码,顶点坐标数组之所以那样存储,一是针对不使用索引方式绘制时使用,这叫做复用吗?哈哈,看您怎么理解了,方便呗,至少原作者非常的清楚其中的运行机理,所以敢于这样来写,以简化其测试的目的,这也给俺设了个难题,也正因为这个难题,让我深入理解了一些东西。二是,我好像看到它是用的四个点来表示一个未使用索引方式绘制的面?有木有?俺未做过 OpenGL 的四边形的东东,不太好说,行家们可能看得出来吧,至少不是 OpenGLES 的,这个在我了解的范围人,俺敢肯定!但,您别忘了,俺了解的范围,俺都不知道多还是少,所以您就别肯定了,还是再咨询下室外高人吧。


笑话讲完了,其实真的不好笑,不过俺刚明白的时侯,确实大气不出,小气不断地哼了几声,出人意料到是,元芳,你怎么看?有木有!