webgl基于Three.js的开发——点选几何图形并读取几何信息

首先第一步:创建四个几何图形。

//几何物体
        function initObject() {

            var geometry = new THREE.CylinderGeometry(100, 100, 100);
            mesh = createMesh(geometry, "brick.jpg", "brickbump.jpg");
            mesh.position.set(-200, 0, 0);
            mesh.name = "bbb";
            scene.add(mesh);
            objects.push(mesh);

            var geometry2 = new THREE.CylinderGeometry(100, 100, 100);
            var material = new THREE.MeshPhongMaterial({ color:new THREE.Color(1,0,0)});
            mesh2 = new THREE.Mesh(geometry2, material);
            mesh2.position.set(200, 0, 0);
            mesh2.name = "aaa";
            scene.add(mesh2);
            objects.push(mesh2);

            var geometry3 = new THREE.CylinderGeometry(100, 100, 100);
            var material3 = new THREE.MeshPhongMaterial({ color: new THREE.Color(1, 0, 0) });
            mesh3 = new THREE.Mesh(geometry3, material3);
            mesh3.position.set(600, 0, 0);
            mesh3.name = "ccc";
            scene.add(mesh3);
            objects.push(mesh3);

            var geometry4 = new THREE.CylinderGeometry(100, 100, 100);
            var material4 = new THREE.MeshPhongMaterial({ color: new THREE.Color(1, 0, 0) });
            mesh4 = new THREE.Mesh(geometry4, material4);
            mesh4.position.set(1000, 0, 0);
            mesh4.name = "ddd";
            scene.add(mesh4);
            objects.push(mesh4);
        }


        //创建凹凸贴图材质
        function createMesh(geom,imageFile,bump)
        {
            var texture = THREE.ImageUtils.loadTexture("../Textures/" + imageFile);
            var mat = new THREE.MeshPhongMaterial();
            mat.map = texture;

            var bump = THREE.ImageUtils.loadTexture("../Textures/" + bump);
            mat.bumpMap = bump;
            mat.bumpScale = 0.2;

            var mesh = new THREE.Mesh(geom, mat);
            return mesh;
        }

然后是鼠标的click事件:

function onDocumentClick(event) {


            event.preventDefault();
            select = true;


            mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
            mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;                      
        }

接着注册事件:

 renderer = new THREE.WebGLRenderer();
renderer.domElement.addEventListener('mouseClick', onDocumentClick, false);

最后需要注册用到射线来碰撞:

raycaster.setFromCamera(mouse, camera);


            // calculate objects intersecting the picking ray
            var intersects = raycaster.intersectObjects(scene.children);
            if (select && intersects.length>0)
            {
                alert("构件名称:" + intersects[0].object.name);
                select = false;
            }

最后效果如图:可以点击构件,显示其名称。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值