THREEJS渲染七要素

1|0渲染两步骤:

  1. 初始化;
  2. 定义用户接口;
  3. 开启渲染循环;
  4. 调用用户接口。


2|0渲染循环七要素:

  1. 定义渲染器和渲染窗口;
  2. 定义场景;
  3. 定义摄像机;
  4. 定义光照;
  5. 定义几何体;
  6. 定义材质贴图;
  7. 将所有物体添加到场景中。

下面是上述过程的具体代码(注意其中的框架结构):

import * as THREE from './threejs_lib/build/three.module.js'; var camera, cube, scene, renderer; var defaultMaterial; init(); renderLoop(); function init() { // renderer definition renderer = new THREE.WebGLRenderer({ canvas: document.getElementById('mainCanvas') }); renderer.setClearColor(0x000000); // black // scene definition scene = new THREE.Scene(); // camera definition //camera = new THREE.OrthographicCamera(-2, 2, 1.5, -1.5, 1, 10); // or THREE.PerspectiveCamera(45, 4 / 3, 1, 1000); camera = new THREE.PerspectiveCamera(-2, 2, 1.5, -1.5, 1, 10); // or THREE.PerspectiveCamera(45, 4 / 3, 1, 1000); camera.position.set(0, 0, 5); scene.add(camera); // 2. material definition defaultMaterial = new THREE.MeshBasicMaterial({ color: 0xff0055, flatShading: true, vertexColors: THREE.VertexColors }); // 1. geometry definition cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3), defaultMaterial ); cube.position.x = 0; cube.position.y = 0; cube.position.z = 0; cube.rotation.x = 0; cube.rotation.y = 0; cube.rotation.z = 0; scene.add(cube); } function operation() { cube.rotation.y += 0.1; console.log(cube.position.x); if (cube.position.x < 0) { cube.position.x += 0.01; } else if (cube.position.x >= 0) { cube.position.x -= 0.5; } if (cube.position.x >= 2) { cube.position.x -= 0.01; } } function renderLoop() { // operate via user interaction operation(); // render renderer.render(scene, camera); requestAnimationFrame(renderLoop); }

[将上方代码添加到HTML文件中即可查看效果]





作者:艾孜尔江


__EOF__

本文作者艾孜尔江
本文链接https://www.cnblogs.com/ezhar/p/13780930.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   艾孜尔江  阅读(971)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示