使用three.js渲染第一个场景和物体

2023-11-09

一、效果图:

在这里插入图片描述

二、渲染场景和物体的步骤

  1. 创建场景(Scene):在 three.js 中创建场景通过调用 THREE.Scene() 方法,然后将其赋值给变量。
var scene = new THREE.Scene(); 
  1. 创建相机(Camera):在 three.js 中创建相机通过调用 THREE.PerspectiveCamera() 方法,然后将其赋值给变量。需要设定相机的视角、宽高比、近截面和远截面。
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); 
camera.position.z = 5; // 设置相机位置,使物体置于相机前方
  1. 创建渲染器(Renderer):在 three.js 中创建渲染器通过调用 THREE.WebGLRenderer() 方法,然后将其赋值给变量。
var renderer = new THREE.WebGLRenderer(); 
renderer.setSize( window.innerWidth, window.innerHeight ); //设置渲染器大小
document.body.appendChild( renderer.domElement ); //将渲染器加入文档流
  1. 创建物体(Object):在 three.js 中创建物体可以通过多种方式,比如通过调用 THREE.BoxGeometry()方法创建立方体,调用 THREE.Mesh() 方法将几何体(Geometry)转换为网格(Mesh),并设置不同的材质(Material)。
var geometry = new THREE.BoxGeometry(1, 1, 1); // 创建立方体
var material = new THREE.MeshBasicMaterial( {color: 0xff0000} ); // 创建材质
var cube = new THREE.Mesh( geometry, material ); // 将几何体和材质传入Mesh生成物体实例
scene.add( cube ); // 将物体添加到场景中
  1. 渲染场景(Render):最后通过调用 THREE.Render() 方法将场景和相机传入进行渲染。
function animate() {
    requestAnimationFrame( animate ); //帧动画
    cube.rotation.x += 0.01; //旋转物体
    cube.rotation.y += 0.01; 
    renderer.render( scene, camera ); //渲染
}
animate();

三、完整代码如下

  • main.js
// 导入three
import * as THREE from 'three'

// 创建场景
const scene = new THREE.Scene()

// 创建相机
// 参数:视野角度,长宽比,近平面,远平面
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)

// 设置相机位置
// 参数:x轴,y轴,z轴
camera.position.set(0, 0, 5)

// 将相机添加到场景中
scene.add(camera)

// 创建几何体
const geometry = new THREE.BoxGeometry(1, 1, 1)
// 创建材质
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
// 根据几何体和材质创建物体
const cube = new THREE.Mesh(geometry, material)
// 将物体添加到场景中
scene.add(cube)

// 创建渲染器
const renderer = new THREE.WebGLRenderer()
// 设置渲染器大小
renderer.setSize(window.innerWidth, window.innerHeight)
console.log(renderer)
// 将渲染器添加到页面中
document.body.appendChild(renderer.domElement)

// 使用渲染器,通过相机渲染场景
function animate() {
    requestAnimationFrame( animate ); //帧动画
    cube.rotation.x += 0.01; //旋转物体
    cube.rotation.y += 0.01; 
    renderer.render( scene, camera ); //渲染
}
animate();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用three.js渲染第一个场景和物体 的相关文章

随机推荐

  • Openwrt开发笔记(2)—— 创建自己的模块HelloWord

    创建自己的包 开发的第一步来自于模仿 我们模仿openwrt内部的软件包来创建自己的软件包helloword 这里为了更好的展示 我们使用uhttpd openwrt默认的web服务器 来运行helloword 这里就需要将hellowor
  • 【SpringBoot新手篇】SpringBoot优雅文件上传方式

    SpringBoot文件上传 Pom yml controller UploadController FileController 文件上传 多文件上传 文件下载 页面 BUG 封装版 工具类 StringUtil MimeTypeUtil
  • JAVA&狂神学习笔记_9.类型转换

    由于JAVA是强类型语言 所以在不同类型进行混合运算的时候 需要用到类型转换 byte short char int long float double 这个图表内的7个类型 从左至右优先级递增 在类型转换方面由涉及到了强制类型转换以及自动
  • 虚拟化技术 - CPU虚拟化

    这里写自定义目录标题 虚拟化技术 cpu虚拟化 kvm for x86 虚拟化技术 cpu虚拟化 物理机器是由CPU 内存和I O 设备等一组资源构成的实体 虚拟机也一样 由虚拟CPU 虚拟内存和虚拟IO设备组成 VMM VM Monito
  • 深度学习实战10-数学公式识别-将图片转换为Latex(img2Latex)

    大家好 我是微学AI 今天给大家带来一个关于数学公式识别的实战案例 解决大家在写论文中遇到很多latex输入的问题 而且可以无限次识别哦 因为是代码实现 不用调用外部API 以前我们知道一个latex识别网页 latex识别网页神器 htt
  • VS2015 python配置文件出错

    VS2015 python配置文件出错 昨天安装了anacond2 再打开以前的python项目运行 发现了这个问题 原因是anaconda修改了默认的python2 7这个环境 一堆路径什么的 明明cmd anaconda prompt都
  • Git恢复之前版本的两种方法reset、revert(图文详解)【学习】

    一 问题描述 在利用github实现多人合作程序开发的过程中 我们有时会出现错误提交的情况 此时我们希望能撤销提交操作 让程序回到提交前的样子 本文总结了两种解决方法 回退 reset 反做 revert 二 背景知识 git的版本管理 及
  • 关于C++中switch- case的问题

    如果switch语句在C 中这样写 case 1 printf 计算概论 double book1 28 9 total book1 break case 2 printf 数据结构与算法 double book2 32 7 total b
  • 基于深度学习方法与张量方法的图像去噪相关研究

    目录 1 研究现状 1 1 基于张量分解的高光谱图像去噪 1 2 基于深度学习的图像去噪算法 1 3 基于深度学习的高光谱去噪 1 4 小结 2 基于深度学习的图像去噪算法 2 1 深度神经网络基本知识 2 2 基于深度学习的图像去噪网络
  • matlab巴特沃斯滤波器用法

    基于matlab 的数字滤波器 clear clc fs 22050 wp 0 1 pi 通带截止频率 ws 0 4 pi 阻带截止频率 Rp 3 通带衰减率 Rs 75 阻带衰减率 Fs 22050 Ts 1 Fs wp1 2 Ts ta
  • 查看jar包工具——JByteMod学习及分享

    Aspose于2002年3月在澳大利亚悉尼创建 公司网站于2002年10月对外发布 Aspose 一直致力于成为全球最大的 Net 组件提供商 为全球 NET 程序员提供最丰富的选择 数十个国家的数千机构选择了Aspose的产品 这包括微软
  • 前端开发者需要去了解的一些Node.js知识以及应用场景

    注意 后续技术分享 第一时间更新 以及更多更及时的技术资讯和学习技术资料 将在公众号CTO Plus发布 请关注公众号 CTO Plus Node js系列文章推荐阅读 JavaScript匿名函数的定义 特性 作用和使用场景详解 Node
  • Ubuntu下安装mysql笔记

    1 首先更新本地存储库索引 执行sudo apt update 2 执行安装命令 sudo apt install mysql server y 遇到下面的报错 E Could not get lock var lib dpkg lock
  • flutter 自己发消息,列表跳到最底部,收到消息,如果不在底部就显示“有未读消息”,点击跳到最底部

    先判断该消息是否时自己发的 如果是自己发的 列表就跳到底部 如果不是自己发的消息 就判断是否在底部 如果不在底部就显示 有未读消息 如果在底部就不用显示 有未读消息 点击 有未读消息 跳转到列表底部 因为列表反转了 所以底部是0 顶部是列表
  • 常见的#pragma预处理命令

    pragma comment 将一个注释记录放置到对象文件或可执行文件中 pragma pack 用来改变编译器的字节对齐方式 pragma code seg 它能够设置程序中的函数在obj文件中所在的代码段 如果未指定参数 函数将放置在默
  • VLP-16 velodyne + kinect dk 复现 LeGO-LOAM

    参考 使用自己的激光雷达 数据集运行lego loam 修改代码教程 和道一文字 的博客 CSDN博客 LeGO LOAM 编译安装与运行 Yeah2333的博客 CSDN博客 lego loam运行 一 配置VLP16 sudo apt
  • Inkscape插入LaTeX公式

    Inkscape插入LaTeX公式 Inkscape软件自身没有插入公式的功能 在一些需要公式配合的图片 Inkscape无法正常制图 为了解决该问题 本文采用Inkscape中安装TexText扩展的方法 使得Inkscape在制图过程中
  • 在阿里云的生产环境下:nginx同一域名下配置多个静态页面

    背景说明 这两天公司前端开发工程师提出要求 在公司的主业务域名中加一个静态页面进去 在这里我就不透露公司的域名是什么 我们把域名估且为www ganbing com 这种需求很多公司是经常有的 写一个重定向啊 加个静态页面啊 实现跨域访问啊
  • java的值传递

    java中只有值传递 1 对于基本数据类型 改变形参的值不会影响实参的值 2 对于引用类型 改变形参的值会不会影响实参的值 这个我们得分情况 情况1 修改的是形参的指向的话就不改变原来实参的值 情况2 修改的是形参的值的话就会改变原来实参的
  • 使用three.js渲染第一个场景和物体

    一 效果图 二 渲染场景和物体的步骤 创建场景 Scene 在 three js 中创建场景通过调用 THREE Scene 方法 然后将其赋值给变量 var scene new THREE Scene 创建相机 Camera 在 thre