three.js - Three.js 光线投射在非全屏的 DIV 上不起作用
问题描述
我编写了一个显示 3D 骨骼的简单网页,并使用 Three.js 光线投射在其上绘制点和线,效果非常好。在全屏网页上使用 raycast 的结果
但是当我将它移植到另一个具有多个窗口的网页时,该过程不起作用。
我按照小提琴http://jsfiddle.net/cn7ecoaa/的说明进行操作,但仍然失败。
这是CSS:
.column2 {
float: right;
width: 80%;
position: static;
}
#w3-container {
width: 1522px;
height: 1001px;
position: static;
}
我加载了模型并检查了它,它肯定包含网格和缓冲区几何体: 加载 3D 模型后 console.log 的结果
这是加载程序代码:
gltfLoader.load (
inputModel,
function(gltf)
{
scene.add(gltf.scene);
model = gltf.scene;
mesh = gltf.scene.children[0];
mesh.name = "tibia_glTF_01";
model.traverse
( function ( child )
{
if ( child.isMesh && child.geometry.isBufferGeometry)
{
const material = new THREE.MeshPhongMaterial( {color:0x3c3c3c, emissive: 0x000000 } );
child.material = material;
const bg = child.geometry;
console.log("Do not change geometry.");
}
}
);
getItem(); // Refresh the item list to be displayed
objects.push( mesh );
});
这是处理 onmousedown 事件的代码:
函数 onMouseDown(事件){
if ( !DRAWLINE ) return;
var raycaster = new THREE.Raycaster();
event.preventDefault();
mouse.x = (( event.clientX - renderer.domElement.offsetLeft) / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - (( event.clientY - renderer.domElement.offsetTop) / renderer.domElement.clientHeight ) * 2 + 1;
console.log("mouse.x", mouse.x, "mouse.y", mouse.y);
console.log("Objects", objects);
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
alert("HIT!");
dot.visible = true;
// Copy the intersection points to be used in functions addPoint()
mouse.copy( intersects[0].point );
intersects.length = 0; // reset the variable
addPoint();
} else {
console.log( "<<NO Intersection!!>>" );
}
}
无论我使用什么组合来满足偏移,光线投射的结果仍然是“<<NO Intersection!!>>”。
任何有关如何解决此问题的想法将不胜感激!谢谢你的帮助!
解决方案
尝试像这样计算鼠标坐标:
const rect = renderer.domElement.getBoundingClientRect();
mouse.x = ( ( event.clientX - rect.left ) / ( rect. right - rect.left ) ) * 2 - 1;
mouse.y = - ( ( event.clientY - rect.top ) / ( rect.bottom - rect.top) ) * 2 + 1;
推荐阅读
- matlab - fmincon(Matlab)方程组中的不等式约束
- java - Docker Compose Tomcat 无法连接到 postgresql
- python - Whatsapp 聊天导出的编码是否发生了变化?
- javascript - 在 props 接收 Redux 状态之前受保护的 React 路由重定向
- macos - 我无法通过 Visual Studio for Mac 安装教程的 remotebuild 部分
- docker - 什么是 docker run -r 标志
- ios - Obj-C - 关闭所有推送的视图控制器会导致崩溃?
- javascript - 如何在另一个函数中使用地图函数和箭头函数?
- python - Selenium 找不到输入元素
- vba - 如何使打开文档时按下的功能区切换按钮在首次切换时表现正常?