在3上设置顶点后.几何对象,THREE.Shape.Utils.triangulateShape失败,TypeError
After setting vertices on THREE.Geometry objects, THREE.Shape.Utils.triangulateShape fails with TypeError
我用THREE.JS和Physijs制作了一款游戏。我创建了一个名为addBlock2的函数,它将三角形金字塔添加到场景中。它设置了适当的顶点,但当涉及到triangulateShape时,它会失败,并出现以下错误:
Uncaught TypeError: Cannot read property 'x' of undefined
THREE.Shape.Utils.triangulateShape @ three.min.js:680
Game.addBlock2 @ game.js:210
Game.update @ game.js:271
(anonymous function) @ game.js:284
onAnimationFrame @ VM3973:49
(anonymous function) @ VM3973:18
game.js:210是"triangulateShape"线。
代码如下:
Game.prototype.addBlock2 = function(x,y,z) {
var geometry = new THREE.Geometry();
geometry.vertices = [
THREE.Vector3(0,0,0),
THREE.Vector3(0,200,-100),
THREE.Vector3(100,200,100),
THREE.Vector3(-100,200,100)
]
var triangles = THREE.Shape.Utils.triangulateShape(geometry.vertices, []);
for (i in triangles){
geometry.faces[geometry.faces.length] = new THREE.Face3(triangles[i][0], triangles[i][1], triangles[i][2])
}
geometry.computeFaceNormals();
geometry.computeVertexNormals();
var material = Physijs.createMaterial(new THREE.MeshPhongMaterial({color: 0xFFFF00}),0.3,0.8);
try {
var mesh = new Physijs.ConvexMesh(geometry,material);
}
catch (e) {
console.log(e,geometry,material)
return
}
mesh.position.x = x || 0
mesh.position.y = y || 0
mesh.position.z = z || 0
mesh.__dirtyPosition = true
mesh.name = "block."+(x||0)+","+(y||0)+","+(z||0)
mesh.receiveShadow = true
this.scene.add(mesh);
this.blocks[this.blocks.length] = mesh
}
我修复了。我应该用new THREE.Vector3
而不是THREE.Vector3
。我无法得到triangulateShape来得到我想要的,所以我手动设置了面。下面是新的代码:
Game.prototype.addBlock2 = function(x,y,z) {
var geometry = new THREE.Geometry();
geometry.vertices = [
new THREE.Vector3(0,0,0),
new THREE.Vector3(0,200,-100),
new THREE.Vector3(100,200,100),
new THREE.Vector3(-100,200,100)
]
geometry.faces = [
new THREE.Face3(0,1,2),
new THREE.Face3(0,2,3),
new THREE.Face3(0,3,1),
new THREE.Face3(1,2,3)
]
geometry.computeFaceNormals();
geometry.computeVertexNormals();
var material = Physijs.createMaterial(new THREE.MeshPhongMaterial({color: 0xFFFF00, side: THREE.DoubleSide}),0.3,0.8);
try {
var mesh = new Physijs.ConvexMesh(geometry,material);
}
catch (e) {
console.log(e,geometry,material)
return
}
mesh.position.x = x || 0
mesh.position.y = y || 0
mesh.position.z = z || 0
mesh.__dirtyPosition = true
mesh.name = "block."+(x||0)+","+(y||0)+","+(z||0)
mesh.receiveShadow = true
this.scene.add(mesh);
this.blocks[this.blocks.length] = mesh
}
相关文章:
- 在Three.js中导出网格会提高性能吗
- 如何在three.js上添加两个向量
- Three.js Points Rotation
- 无法读取属性'材料'未定义的Three.js
- Potree/Three.js测量问题
- Three.JS OBJ模型未显示
- 有没有一种方法可以获得three.js的最小/lite版本
- JS和three.JS,在浏览器中进行参数测试
- 参数列表Three.js之后的未捕获语法错误:缺少)
- 如何在three.js中有效地使用TraingleStripDrawMode
- 通过拖动可以更改三维模型对象在Three.js场景中的位置
- three.js:如何让透明的png精灵投射和接收阴影
- Three.js更改材质
- three.js EffectComposer's渲染目标
- 单击以将相机放置在Three js中的对象附近
- Three.js Three.投影仪已移至
- THREE.js轨道控制不工作
- Three.js,WebGL,渲染六幅图像的全景图
- 如何在three.js中为三角形添加纹理
- 在3上设置顶点后.几何对象,THREE.Shape.Utils.triangulateShape失败,TypeError