【发布时间】:2015-09-03 18:50:06
【问题描述】:
我有一个用 THREE.CanvasRenderer() 渲染的 3D 立方体,我试图打开一个特定的网页,具体取决于双击立方体的哪个面。但是,无论单击哪个面,都会打开相同的页面。一些被黑的调试(我不知道如何使用控制台)显示 intersects[0].faceIndex 总是'11'。我怎样才能让它返回立方体最近的面。
这是我的 js 中处理这个的部分;
document.addEventListener('dblclick', onDocumentMouseDblClick, false);
function onDocumentMouseDblClick(event) {
event.preventDefault();
mouse.x = (event.clientX / renderer.domElement.width) * 2 - 1;
mouse.y = -(event.clientY / renderer.domElement.height) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObject(cube);
if (intersects.length > 0) {
if (intersects[0].faceIndex = 1 || 2) {
window.open("About.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
if (intersects[0].faceIndex = 3 || 4) {
window.open("Mondrian.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
if (intersects[0].faceIndex = 5 || 6) {
window.open("page3.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
if (intersects[0].faceIndex = 7 || 8) {
window.open("page4.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
if (intersects[0].faceIndex = 9 || 10) {
window.open("page5.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
if (intersects[0].faceIndex = 11 || 12) {
window.open("page6.html", "_self")
//title.innerHTML = intersects[ 0 ].faceIndex;
}
我从关注THREE.js interactive cubes example 开始,阅读THREE.raycaster documentation 显示交叉点应按最近距离排序。我已经阅读了一些使用 Vector3 和 unprojections 的 SO 帖子,这些帖子要么不起作用,要么我误解了它们。由于声誉,无法链接它们。
【问题讨论】:
-
您可以随时在问题中添加链接,无论是否有声誉...
-
不超过两个链接,没有代表超过零
-
您不是在检查相等性,而是在 if 语句中进行赋值。
-
那太尴尬了:/。实际上我经常犯这个错误,从现在开始我要格外警惕。已经解决了,谢谢!
-
@dlseanan 我今天学到了一些东西 :)
标签: javascript canvas three.js