最初加载没有morphTargets的模型并克隆几何体。 使用webworker读取包含morphTargets的文件,并使用此代码转换为THREE对象
i = timeStep;
dstVertices = [];
srcVertices = morphTargets.vertices;
for (v = 0, vl = srcVertices.length; v < vl; v += 3) {
var vertex = new THREE.Vector3();
vertex.x = srcVertices[ v ];
vertex.y = srcVertices[ v + 1 ];
vertex.z = srcVertices[ v + 2 ];
dstVertices.push(vertex);
}
geo.morphTargets.push(dstVertices);
timeStep += 1;
在稍后阶段创建的新几何体包括克隆几何体的顶点和面以及dstVertices作为morphTargets。
从场景中删除了先前创建的网格,并添加了新创建的包含morphTargets的网格。
控制台抛出此错误:
Uncaught TypeError: Cannot read property '52' of undefined
at setMeshBuffers (three_70.js:18797)
at updateObject (three_70.js:21142)
at THREE.WebGLRenderer.renderBuffer (three_70.js:19970)
at renderObjects (three_70.js:20681)
at THREE.WebGLRenderer.render (three_70.js:20544)
at animate (index1.php:70)
任何人都可以指导我出错的地方吗?
答案 0 :(得分:0)
我假设你解析了一个图形文件,并且你试图在web worker中创建webgl对象。当我使用web worker解析3d文件和启动WebGL的对象时,我遇到了同样的问题。首先,我遇到了像你这样的错误然后我意识到每个web工作者都有自己的范围。所以,我将(postMessage)值传递给触发了web worker的main.js,然后我就可以在main.js的onmessage方法上定义对象了。
您可以使用postmessage方法发布v,v + 1和v + 2值,并且可以在定义和调用Web worker的位置创建三个verctor对象。
我想说的是你不应该在web worker中初始化three.vectors对象,因为它很难处理。不要忘记web worker支持postmessage上的简单对象传输。因此,您应该尝试简化。使用postmessage时不要尝试发布three.vector对象。