123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport"
- content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>模型标注</title>
- <link rel="stylesheet" href="/static/hplus/css/bootstrap.min.css">
- <link rel="stylesheet" href="/admin/css/common.css">
- <style>
- html,body {
- padding: 0;
- margin: 0;
- overflow: hidden;
- }
- .red-label{
- position: fixed;
- z-index: 100;
- width: 10px;
- height: 10px;
- border-radius: 50%;
- background-color: red;
- }
- .pbtn{
- padding: 10px;
- }
- </style>
- </head>
- <body>
- <div id="label2" class="red-label"></div>
- <div class="pbtn">
- <form method="post" action="{:url('three')}" class="form-horizontal">
- <input type="hidden" name="id" value="{$id}">
- <input type="hidden" name="x" id="x" value="{$x}">
- <input type="hidden" name="y" id="y" value="{$y}">
- <input type="hidden" name="z" id="z" value="{$z}">
- <button class="btn btn-primary ajax-post" data-layer="1" target-form="form-horizontal" type="submit">保 存</button>
- </form>
- </div>
- <script src="/static/hplus/js/jquery.min.js?v=2.1.4"></script>
- <script src="/static/layer3.2.0/layer.js"></script>
- <script src="/static/threejs135/three.min.js"></script>
- <script src="/static/threejs135/js/controls/OrbitControls.js"></script>
- <script src="/static/threejs135/js/loaders/GLTFLoader.js"></script>
- <script src="/static/threejs135/js/environments/RoomEnvironment.js"></script>
- <script src="/static/threejs135/js/renderers/CSS3DRenderer.js"></script>
- <script src="/static/threejs135/jsm/loaders/GLTFLoader.js"></script>
- <script src="/admin/js/common.js"></script>
- <script>
- window.onload=function(){
- var x = '{$x}';
- var y = '{$y}';
- var z = '{$z}';
- var gltf = null;
-
- var scene = new THREE.Scene();
-
-
- var point = new THREE.PointLight(0xffffff);
- point.position.set(400, 200, 300);
- scene.add(point);
-
- var ambient = new THREE.AmbientLight(0x444444);
- scene.add(ambient);
-
- var width = window.innerWidth;
- var height = window.innerHeight;
- var k = width / height;
- var s = 150;
-
- var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 0.01, 1000);
- camera.position.set(100, 100, 100);
- camera.lookAt(scene.position);
- var renderer = new THREE.WebGLRenderer({
- antialias: true
- });
- renderer.setSize(width, height);
-
- document.body.appendChild(renderer.domElement);
- renderer.domElement.style.position = 'absolute';
- renderer.domElement.style.top = '0px';
- renderer.domElement.style.zIndex = '-1';
-
- renderer.render(scene, camera);
- var pmremGenerator = new THREE.PMREMGenerator(renderer);
- pmremGenerator.compileEquirectangularShader();
- scene.environment = pmremGenerator.fromScene(new THREE.RoomEnvironment()).texture;
-
- var CSS3Renderer = new THREE.CSS3DRenderer();
- CSS3Renderer.setSize(width, height);
- CSS3Renderer.domElement.style.position = 'absolute';
-
- CSS3Renderer.domElement.style.top = '0px';
- CSS3Renderer.domElement.style.left = '0px';
-
- CSS3Renderer.domElement.style.pointerEvents = 'none';
- document.body.appendChild(CSS3Renderer.domElement);
-
- function render() {
- CSS3Renderer.render(scene, camera);
- renderer.render(scene, camera);
- requestAnimationFrame(render);
- }
- render();
- const controls = new THREE.OrbitControls(camera, renderer.domElement);
- controls.enableZoom = false;
- console.log(controls);
- window.addEventListener('click', choose);
- if(x){
- drawPointer(x,y,z);
- }
- function choose(event) {
- const Sx = event.clientX;
- const Sy = event.clientY;
-
- const x = (Sx / window.innerWidth) * 2 - 1;
- const y = -(Sy / window.innerHeight) * 2 + 1;
-
- const raycaster = new THREE.Raycaster();
-
- raycaster.setFromCamera(new THREE.Vector2(x, y), camera);
-
-
- const intersects = raycaster.intersectObjects(gltf.scene.children);
- console.log('射线器返回的对象', intersects);
-
-
- if (intersects.length > 0) {
-
- drawPointer(intersects[0].point.x,intersects[0].point.y,intersects[0].point.z);
- $('#x').val(intersects[0].point.x);
- $('#y').val(intersects[0].point.y);
- $('#z').val(intersects[0].point.z);
- }
- }
- function drawPointer(x,y,z) {
- let worldVector1 = new THREE.Vector3(x,y,z);
- const div = document.getElementById('label2');
- div.style.display = 'block';
- const obj = new THREE.CSS3DSprite(div);
- scene.add(obj);
- obj.position.copy(worldVector1);
- obj.scale.set(0.2, 0.2, 0.2);
- }
-
-
-
- var loader = new THREE.GLTFLoader();
- loader.load('/lou.gltf', (gltfObj) => {
- console.log('控制台查看加载gltf文件返回的对象结构', gltfObj);
- gltf = gltfObj;
- scene.add(gltf.scene);
- scene.environment = pmremGenerator.fromScene(new THREE.RoomEnvironment(), 100).texture;
- gltf.scene.scale.set(0.13, 0.13, 0.13);
- }, (xhr) => {
-
-
- console.log(`加载进度${Math.floor(xhr.loaded / xhr.total * 100)}%`);
- });
- };
- </script>
- </body>
- </html>
|