我正在尝试使用raycaster使对象变得可点击。我已经看到了无数这样的例子,并且我已经多次尝试了这段代码,但都没有成功。我看到的例子和我遇到的其他例子之间的唯一区别是我在一个球体内。
我通过创建一些变量开始我的代码(有些变量可能不是使用过去例子剩下的)。
var container, stats;
var camera, controls, scene, renderer, projector;
var isUserInteracting = false;
var mouse = { x: 0, y: 0, z: 0 }, intersected;
var fov = 70,
texture_placeholder,
isUserInteracting = false,
onMouseDownMouseX = 0, onMouseDownMouseY = 0,
lon = 0, onMouseDownLon = 0,
lat = 0, onMouseDownLat = 0,
phi = 0, theta = 0;
init();
animate();
我继续设置init()函数,在其中设置摄影机并创建球体。
function init() {
var container, mesh1;
container = document.getElementById( 'container' );
camera = new THREE.PerspectiveCamera( fov, window.innerWidth / window.innerHeight, 1, 1100 );
camera.target = new THREE.Vector3( 0, 0, 0 );
scene = new THREE.Scene();
projector = new THREE.Projector();
mesh1 = new THREE.Mesh( new THREE.SphereGeometry( 500, 60, 40 ), new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( "spherical_map_small.jpg" )} ) );
mesh1.scale.x = -1;
mesh1.side = THREE.DoubleSide;
scene.add( mesh1 );
仍然在init()函数中,我创建了一个立方体几何体(这是我希望可以单击的)。
meshMaterial = new THREE.MeshBasicMaterial({ color: 0x33CC00});
var geometry = new THREE.CubeGeometry( 20, 20, 20 );
var object = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { color: 0x33CC00} ) );
object.position.x = 75;
object.position.y = 10;
object.position.z = 0;
object.rotation.y = 45;
scene.add( object );
objects.push( object );
仍然在init()中,我设置了渲染器,并添加了一些事件侦听器。
renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'mouseup', onDocumentMouseUp, false );
document.addEventListener( 'mousewheel', onDocumentMouseWheel, false );
document.addEventListener( 'DOMMouseScroll', onDocumentMouseWheel, false);
//
window.addEventListener( 'resize', onWindowResize, false );
现在问题来了。下一步是使我的框“对象”可点击的功能,这似乎不起作用。我想我是在告诉它说“行”每次单击场景中的对象时。
我已经读到了关于光线投射的三篇文章。js的几个小时,并相信我有一个体面的理解,它应该如何工作,我只是不能得到它的工作。
function onDocumentMouseUp( event ) {
isUserInteracting = false;
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
var vector = new THREE.Vector3( mouse.x, mouse.y, .5 );
var raycaster = new THREE.Raycaster();
raycaster.setFromCamera(vector, camera);
var intersects = raycaster.intersectObjects(scene, true);
if ( intersects.length ) {
alert('works.');
}
}
任何帮助都将不胜感激。非常感谢。
只是一个想法,尝试使用:
raycaster.intersectObjects(scene.children, true);
你设置了递归(真)吗?否则它将不会检查子体
我有一个多边形的顶点列表,我试图在一个较大的三角形内创建一个等边三角形网格,以输入多边形的当前顶点为中心。 内部三角形边的大小由确定,它将容器边划分为相等的部分。最后,我想在Python的列表中存储所有这些三角形(包括原来的大三角形)顶点的坐标。 我提出的一个方法是: null
我有完整的等矩形图像,可以很好地处理三个。js: 但我的图像实际上只包含180x180度(球体的一半),因此我尝试在不拉伸整个球体的情况下,在球形网格上部分应用方形纹理。我想这和纹理有关。抵消xyz参数,但我没有成功。虽然我可以继续填充图像以符合2x1等矩形标准,但我宁愿将此步骤从处理工作流中删除。 在下面,你会看到完整的等矩形图像和我正在努力工作的正方形图像。有人对如何做到这一点有任何线索吗?谢
x Number - 矩形原点的x坐标 y Number - 矩形原点的y坐标 width Number height Number
我正在寻找一种方法来创建一组多边形(rechtangles),沿着一条线在多个多边形中创建一组多边形(rechtangles),并将其水平隔开,如图所示。 我尝试生成点并将其用作多边形的中点,但问题是,通过创建等间距的点光栅,除了180度之外,不可能以任何其他方向旋转。 例子 给出了一个多多边形形状的对象和由宽度和高度以及每个多边形之间的垂直和水平间距定义的多边形。多边形应仅放置在多多边形内,且不
我想将立方体贴图[图1]转换为等矩形全景图[图2]。 从球形到立方体是可能的(通过以下步骤:将2:1等矩形全景图转换为立方体贴图),但在如何反转它上迷失了方向。 使用Unity将图2渲染成一个球体。
我正在做一个WebGL(带有2d画布后备照片编辑器)。 我决定将旋转直接纳入裁剪工具,以类似于iOS8照片裁剪器的方式。也就是说,当您旋转照片时,照片的大小和位置会动态变化,以便裁剪区域始终包含在照片本身中。 但是,我正在为一些数学而苦苦挣扎。 我有两个矩形,照片和裁剪区域。 两者都被定义为: 定义照片本身的矩形也有一个以弧度表示的< code>rotation属性,它当然描述了照片的角度(以弧度