我从Archive3D下载了一个3D网格,然后使用these settings将其转换为3DS MAX中的.obj
,最后我将.obj
转换为.js
使用Three.js editor。
然后我创建场景并添加模型,如图here所示。
这些是我在控制台中遇到的错误:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2 fly.html:1
WebGL: too many errors, no more errors will be reported to the console for this context.
问题是什么,可能是.js
中的问题,我该如何解决?
答案 0 :(得分:1)
这很可能意味着数据中存在错误。许多转换器都没有验证数据实际上是否正确。
错误表示数据中的一个或多个索引超出了给定数据的范围。换句话说,假设你有3个顶点。这意味着您只能拥有0到2范围内的索引。如果索引大于2,则会出现该错误。
错误是否在原始数据中,在.obj
的转换器中,在从.obj
到.js
的转换器中,我们无法通过每个调试来了解错误脚步。
您可以在加载数据时编写代码来遍历数据,并检查没有任何索引超出范围。如果它们是由您决定该怎么做。您可以尝试删除它们。假设您正在绘制三角形,则需要以3个为一组删除它们。换句话说,弄清楚数据中最小的缓冲区(位置,法线,texcoords)然后一次遍历索引3。如果3个指数中的任何一个超出范围,则删除这3个指数。
将文件加载到Three.js编辑器中时,文件是否显示?如果在导出时Three.js编辑器中存在错误的情况就是这样的情况,或者数据中的某些错误会以某种方式被破坏。
您还提到code from this page该页面与three.js没有任何关系。该页面上包含该代码的数据格式与three.js AFAIK无关。使用Three.js编辑器导出的数据仅适用于Three.js