gpt4 book ai didi

javascript - Three.js 光线拾取平面/网格面段 v69

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:59 27 4
gpt4 key购买 nike

由于 three.js 不再支持四边形面。我在将 4 个顶点点之间的线段拾取为正方形时遇到麻烦,因为它们现在由三 Angular 形面组成。

所以我的选择返回三 Angular 形而不是正方形:

                var faces = 10;
var myplane = new THREE.Mesh(
new THREE.PlaneGeometry(1000, 1000, faces, faces),
new THREE.MeshNormalMaterial({
color: 0x993333,
wireframe: false
}));

objects.push(myplane);
scene.add(myplane);

//raycast code


if ( intersects.length > 0 ) {

_controls.noRotate = true;
var face = intersects[0].face;
var temp = intersects[0].object;
var geo = temp.geometry;

geo.vertices[face.a].z -= 20;
geo.vertices[face.b].z -= 20;
geo.vertices[face.c].z -= 20;
//want other face verts below basically
geo.vertices[face.d].z -= 20;
geo.vertices[face.e].z -= 20;
geo.vertices[face.f].z -= 20;
geo.verticesNeedUpdate = true;

if(intersects[ 0 ].faceIndex % 2 == 0){
// geo.vertices[intersects[0].faceIndex + 1].z = 40;
// console.log("Even face Index: " + intersects[ 0 ].faceIndex);

}else{
// console.log("Odd face Index: " + intersects[ 0 ].faceIndex -1);
//geo.vertices[intersects[0].faceIndex - 1].z = 40, of course doest work
}

}

下面是一个更好的 vsual 的 2d 示例...目前我得到了红色的结果,但我想像绿色的例子一样选择:

example of plane segments

最佳答案

试试这段代码来获取相交面

if ( intersects.length > 0 )
{
var faceIndex = intersects[0].faceIndex;
var obj = intersects[0].object;
var geom = obj.geometry;
var faces = obj.geometry.faces;
var facesIndices = ["a","b","c"];
facesIndices.forEach(function(indices){
geom.vertices[faces[faceIndex][indices]].setZ(-10);
});
if(faceIndex%2 == 0){
faceIndex = faceIndex+1;
}else{
faceIndex = faceIndex-1;
}
facesIndices.forEach(function(indices){
geom.vertices[faces[faceIndex][indices]].setZ(-10);
});
geom.verticesNeedUpdate = true;
}

关于javascript - Three.js 光线拾取平面/网格面段 v69,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29274674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com