我正在为游戏探索WebGL的功能,并正在各种设备上对其进行测试。现在,我正在使用Turbulenz引擎,该引擎为我处理所有此类渲染。
但是,在我测试过的某些移动设备和标签设备(三星Galaxy和三星Galaxy Tab II)上,纹理无法正确渲染。它们要么不显示,要么变成黑色或空白。
我的设置如下:
看一下我制作的这张屏幕截图:
我进行了一些重新搜索,发现此页面描述了完全相同的问题。不幸的是,为什么会发生这种现象的一个很好的解释,而没有提供解决方案。
您是否在这些“旧”设备上有此主题的经验,为什么会出现此问题?我读过某个地方,操作系统在加载纹理时正在缩放纹理,是这样吗?那如何避免呢?
先感谢您!
错误
bindAttribLocation: index out of range
建议代码尝试使用太多属性。找出GPU支持多少个属性
maxAttributes = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
WebGL实现必须支持的最低要求是8。
该错误为bindAttribLocation
表示代码调用bindAttribLocation
的值> =maxAttributes
这有点令人惊讶,因为对于大多数常见的3D应用程序,它们将具有位置,法线,纹理坐标,然后可能具有切线,双法线和顶点颜色。那只是6个属性。第二或第三组纹理坐标并没有不同寻常,但是看起来似乎很少见。但是,这仍然是错误消息的提示。
仅仅为了它,我检查了动荡的游戏Score Rush。它正在使用属性0、3和8。为什么不使用0、1和2我不知道,但是在仅支持最少8个属性的任何设备上尝试使用属性8都会失败,因为7是最高属性。
更新:我查看了湍流的来源。按照目前的设计,它需要16个属性。它给每个属性0到15特定的用途。因此,例如,第一组纹理坐标始终位于属性8上(这就是为什么看到纹理消失的原因)。第一组切线始终位于属性14上。等等。这是作业列表
SEMANTIC_POSITION = 0;
SEMANTIC_POSITION0 = 0;
SEMANTIC_BLENDWEIGHT = 1;
SEMANTIC_BLENDWEIGHT0 = 1;
SEMANTIC_NORMAL = 2;
SEMANTIC_NORMAL0 = 2;
SEMANTIC_COLOR = 3;
SEMANTIC_COLOR0 = 3;
SEMANTIC_COLOR1 = 4;
SEMANTIC_SPECULAR = 4;
SEMANTIC_FOGCOORD = 5;
SEMANTIC_TESSFACTOR = 5;
SEMANTIC_PSIZE0 = 6;
SEMANTIC_BLENDINDICES = 7;
SEMANTIC_BLENDINDICES0 = 7;
SEMANTIC_TEXCOORD = 8;
SEMANTIC_TEXCOORD0 = 8;
SEMANTIC_TEXCOORD1 = 9;
SEMANTIC_TEXCOORD2 = 10;
SEMANTIC_TEXCOORD3 = 11;
SEMANTIC_TEXCOORD4 = 12;
SEMANTIC_TEXCOORD5 = 13;
SEMANTIC_TEXCOORD6 = 14;
SEMANTIC_TEXCOORD7 = 15;
SEMANTIC_TANGENT = 14;
SEMANTIC_TANGENT0 = 14;
SEMANTIC_BINORMAL0 = 15;
SEMANTIC_BINORMAL = 15;
要使它在属性少于16个的GPU上运行,需要进行一些重新设计或间接设计。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句