tree,js的简单实现内容显示
tree,js的简单实现内容显示,对模型的gltf进行引用内容显示
加载所用资源https://github.com/mrdoob/three.js
整理后代码{
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>My first three.js app</title> <style> body { margin: 0; } canvas { width: 100%; height: 100% } #box{ width: 900px; height: 600px; background: #f00; } </style> </head> <body> <div id="box"></div> <script src="./js/three.js"></script> <script type="module"> import { GLTFLoader } from './three/examples/jsm/loaders/GLTFLoader.js'; import { OrbitControls } from './three/examples/jsm/controls/OrbitControls.js'; var renderer,scene,camera,light,loader,controls; var width,height; // 初始化渲染器 Renderer function initRenderer() { width = document.getElementById("box").clientWidth; height = document.getElementById("box").clientHeight; renderer = new THREE.WebGLRenderer({ antialias:true // canvas: document.getElementById('box') });/*生成渲染器对象(属性:抗锯齿效果为设置有效)*/ renderer.setSize(width,height); document.getElementById("box").appendChild(renderer.domElement); /*设置canvas背景色(clearColor)和背景色透明度(clearAlpha) */ renderer.setClearColor(0xFF0000, 1); //设置背景颜色 } // 初始化场景 Scene function initScene(){ scene = new THREE.Scene(); } // 初始化相机 Camera function initCamera() { camera=new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10); //定义camera的位置 camera.position.set(4, -3, 5); //这里的lookAt函数是将视角指定为看原点 camera.lookAt(new THREE.Vector3(0, 0, 0)); //将camera添加到scene中 scene.add(camera); } // 初始化光源light function initLight() { light = new THREE.DirectionalLight(0xFF0000, 1.0, 0); //平行光 light.position.set(100, 100, 200); //设置光源位置 scene.add(light); //将光源添加到场景 } // 创建一个长方体 function initCube() { //这里是创建一个长方形 var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshBasicMaterial({ color: "green", wireframe: true //这里指不使用实心材料,所以为true }) ); //这里要将这个长方形加入这个scene中 scene.add(cube); } // gltf模型加载 function initGltf() { var loader = new GLTFLoader(); loader.load( 'pathD/scene.gltf', function ( gltf ) { console.log(gltf.scene,'----gltf') // 加载出来贴片图片(加载纹理) gltf.scene.traverse( function ( child ) { if ( child.isMesh ) { child.material.emissive = child.material.color; child.material.emissiveMap = child.material.map ; } } ); // 图形缩放 gltf.scene.scale.set(0.3,0.3,0.3) // gltf.scene.rotation.set(100,100,100) // 添加到创景中 scene.add(gltf.scene); }, undefined, function ( error ) { console.error( error ); }); } // 相机空间 function initcontrols() { controls = new OrbitControls( camera, renderer.domElement ); controls.target.set( 0, 0.5, 0 ); controls.update(); controls.enablePan = false; controls.enableDamping = true; } // 全部加载 function threeExcute() { //初始化渲染器 initRenderer(); //初始化场景 initScene(); //初始化照相机 initCamera(); //初始化光源 initLight(); //相机空间 initcontrols(); //长方体 initCube(); //3d图形 initGltf(); } threeExcute() var animate = function () { requestAnimationFrame( animate ); controls.update(); renderer.render( scene, camera ); }; animate(); </script> </body> </html>
未整理,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My first three.js app</title>
<style>
body { margin: 0; }
canvas { display: block; }
</style>
</head>
<body>
<script src="./js/three.js"></script>
<script type="module">
import { GLTFLoader } from './three/examples/jsm/loaders/GLTFLoader.js';
import { OrbitControls } from './three/examples/jsm/controls/OrbitControls.js';
var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
var loader = new GLTFLoader();
let gltf2=null;
loader.load( 'pathD/scene.gltf', function ( gltf ) {
console.log(gltf,'----')
gltf2=gltf.scene
gltf.scene.traverse( function ( child ) {
if ( child.isMesh ) {
child.material.emissive = child.material.color;
child.material.emissiveMap = child.material.map ;
}
} );
gltf.scene.scale.set(0.3,0.3,0.3)
scene.add( gltf.scene);
}, undefined, function ( error ) {
console.error( error );
} );
// 相机空间
const controls = new OrbitControls( camera, renderer.domElement );
controls.target.set( 0, 0.5, 0 );
controls.update();
controls.enablePan = false;
controls.enableDamping = true;
addEventListener('click', onMouseDblclick, false);
function onMouseDblclick(a){
console.log(a,'------nero')
}
// 窗口变动触发的方法
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
camera.position.z = 5;
renderer.setClearColor(0xcccccc, 1); //设置背景颜色
var animate = function () {
requestAnimationFrame( animate );
controls.update();
// if(gltf2)gltf2.rotation.y += 0.01;
// position位置 rotation 角度
renderer.render( scene, camera );
};
animate();
</script>
</body>
</html>

浙公网安备 33010602011771号