当前位置: 首页 > news >正文

3.Three.js程序基本框架结构和API说明

Three.js程序基本框架结构和API说明

1.基本框架结构代码

一个基本的Three.js程序,基本都需要设置场景、渲染器、相机、灯光等等通用操作,因而我们可以把Three.js基本程序框架进行整理,如下。其中,我们可以用Three.js提供的OrbitControls拓展库对Three.js场景进行鼠标操作。代码如下:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>Three框架</title><script src="../three.js-master/build/three.js"></script><script src="../three.js-master/examples/js/controls/OrbitControls.js"></script><style type="text/css">body{margin: 0;padding: 0;overflow-y: hidden;overflow-x: hidden;}div#webgl {width: 100vw;height: 100vh;}</style><script>var renderer;function initThree() {let dom = document.getElementById('webgl');width = dom.clientWidth;height = dom.clientHeight;renderer = new THREE.WebGLRenderer({antialias : true});renderer.setSize(width, height);dom.appendChild(renderer.domElement);renderer.setClearColor(0xFFFF00, 1.0);}var camera;function initCamera() {camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000);camera.position.x = 0;camera.position.y = 1000;camera.position.z = 0;camera.up.x = 0;camera.up.y = 0;camera.up.z = 1;camera.lookAt({x : 0,y : 0,z : 0});}var scene;function initScene() {scene = new THREE.Scene();}var light;function initLight() {light = new THREE.DirectionalLight(0xFF0000, 1.0, 0);light.position.set(100, 100, 200);scene.add(light);}var cube;function initObject() {var geometry = new THREE.CubeGeometry(100,100,100);var material = new THREE.MeshBasicMaterial({color: 0x00ff00});var cube = new THREE.Mesh(geometry, material); scene.add(cube);console.log("1111");}function threeStart() {initThree(); //初始化Three.js渲染器等初始操作initCamera(); //初始化相机initScene(); //初始化场景initLight(); //初始化灯光initControls(); //初始化控制器initObject(); //初始化渲染物体render(); //执行渲染}function initControls(){// 设置相机控件轨道控制器OrbitControlsconst controls = new THREE.OrbitControls(camera, renderer.domElement);// 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景controls.addEventListener('change', function () {renderer.render(scene, camera); //执行渲染操作});//监听鼠标、键盘事件}function render() {renderer.render(scene, camera);requestAnimationFrame(render);}</script></head><body onload="threeStart();"><div id="webgl"></div></body>
</html>

在这里插入图片描述

视频演示地址:https://www.bilibili.com/video/BV1AXmKYUEFP/?vd_source=0f4eae2845bd3b24b877e4586ffda69a


http://www.mrgr.cn/news/51338.html

相关文章:

  • Unity之XR Interaction Toolkit 射线拖拽3DUI
  • 自适应过滤法—初级
  • KNN算法及KDTree树
  • 数据分析分段折线图
  • 【C++常见错误】0xC0000005: 读取位置 0x00000000 时发生访问冲突
  • .Net的潘多拉魔盒开箱即用,你学废了吗?
  • 【面经】2024年软件测试面试题,精选100 道(附答案)
  • OpenGauss学习笔记
  • 【开源】Appium:自动化移动应用测试的强大工具
  • 10月报名 | 海克斯康Adams二次开发培训
  • 前端全栈混合之路Deno篇:Deno 2.0 的权限系统详解和多种权限配置权限声明方式 -一次性搞懂和学会用
  • vulhub复现记录
  • 面试记录一
  • 概率测试:用随机性来发现难以复现的问题
  • STM32 QSPI接口驱动GD/W25Qxx配置简要
  • 瞬时存取,无限可能:顺序表的独特魅力
  • 代码随想录训练营Day35 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间
  • 富格林:竭力击退欺诈守卫出金
  • Integer中的getInteger()方法和parseInt()方法有什么区别?
  • 【数据分享】全国文化-限额以上文化批发和零售业企业情况(2017-2021年)