threejs官方demo学习(2):相机

news2025/2/24 20:58:36

webgl_camera

不知道是哪里写的有问题,最终的效果,跟官方案例有比较大的差距。不过可以学到的知识点挺多的。

知识点

CameraHelper

相机辅助对象,用于模拟相机视锥体

// 创建透视相机
cameraPerspective = new THREE.PerspectiveCamera(50, aspect, 150, 1000);
// 创建相机视锥体辅助对象
cameraPerspectiveHelper = new THREE.CameraHelper(cameraPerspective);
scene.add(cameraPerspectiveHelper);

在这里插入图片描述

OrthographicCamera

正交相机,在这种投影模式下,无论物体距离相机距离远或者近,在最终渲染的图片中物体的大小都保持不变。

线框小球

mesh = new THREE.Mesh(
   new THREE.SphereGeometry(30, 16, 8), // 几何体
   new THREE.MeshBasicMaterial({ color: 0xffffff, wireframe: true }) // 材质,wireframe是否将物体渲染为线框
);

wireframe属性设置为true时会被渲染成线框,默认为false渲染为实心物体。

将物体添加到另一个物体中

最开始学习的时候知道,场景里可以添加多个物体,原来物体里也可以添加物体。

// 将小球添加到大球里
mesh.add(mesh2);

生成大量的点

// 生成1000个随机点
let geometry = new THREE.BufferGeometry(); // 缓冲几何体
let vertices = []; // 坐标点 x、y、z
for (let i = 0; i < 10000; i++) {
    // THREE.MathUtils.randFloatSpread( 2000 )生成-1000~2000之间的随机数
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // x
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // y
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // z
}
geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
let particles = new THREE.Points(geometry, new PointsMaterial({ color: 0xffffff }));
scene.add(particles);

在这里插入图片描述

// 生成1000个随机点
let geometry = new THREE.BufferGeometry(); // 缓冲几何体
let vertices = []; // 坐标点 x、y、z
let colorList = []; // 颜色值
for (let i = 0; i < 10000; i++) {
    // THREE.MathUtils.randFloatSpread( 2000 )生成-1000~2000之间的随机数
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // x
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // y
    vertices.push(THREE.MathUtils.randFloatSpread(1000)); // z
    // 颜色是0~1,不是0~255
    colorList.push(THREE.MathUtils.randInt(0, 1)); // r
    colorList.push(THREE.MathUtils.randInt(0, 1)); // g
    colorList.push(THREE.MathUtils.randInt(0, 1)); // b
}
// 设置位置
geometry.setAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
// 设置颜色
geometry.setAttribute('color', new THREE.Float32BufferAttribute(colorList, 3));
let particles = new THREE.Points(geometry, new PointsMaterial({
    size: 2,
    vertexColors: true, // 使用点设置的颜色,旧版本值是THREE.VertexColors
    sizeAttenuation: false // 设置为false后,点的大小一致
}));
scene.add(particles);

在这里插入图片描述

Group

官方的解释不太清楚,百度了一下可以这样理解:

如果你要实现一个机器人在跑步,那么机器人的头、四肢、躯干等都是要整体移动的,group可以将一系列的mesh模型组成一个整体,这样就可以实现整体移动了。

webgl_camera_array

效果
这个感觉还好,按照官方的代码敲出来了
在这里插入图片描述

知识点

viewport

 let subcamera = new THREE.PerspectiveCamera(40, ASPECT_RATIO, 0.1, 10);
 subcamera.viewport = new THREE.Vector4(Math.floor(x * WIDTH), Math.floor(y * HEIGHT), Math.ceil(WIDTH), Math.ceil(HEIGHT));

viewport 视窗,不设置的话就只会显示一个物体。另外一开始必须设置为:

subcamera.viewport = new THREE.Vector4(Math.floor(x * WIDTH), Math.floor(y * HEIGHT), Math.ceil(WIDTH), Math.ceil(HEIGHT));

不能像监听方法里的使用subcamera.viewport.set() 进行设置。

setViewport是渲染器的方法,用于在画布上定义一个矩形的局部区域。如果没有设置局部区域时,threejs执行render方法时会以整个画布为准。

ArrayCamera
ArrayCamera 摄像机阵列,用于更加高效的使用一组已经预定义的摄像机来渲染一个场景。这将能更好的提升VR场景的渲染性能。

// 相机列表
let cameras = [];
// 循环创建相机
for (let y = 0; y < AMOUNT; y++) {
    for (let x = 0; x < AMOUNT; x++) {
        // 透视相机
        let subcamera = new THREE.PerspectiveCamera(40, ASPECT_RATIO, 0.1, 10);

        subcamera.viewport = new THREE.Vector4(Math.floor(x * WIDTH), Math.floor(y * HEIGHT), Math.ceil(WIDTH), Math.ceil(HEIGHT));
        // 相机的位置
        subcamera.position.x = (x / AMOUNT) - 0.5;
        subcamera.position.y = 0.5 - (y / AMOUNT);
        subcamera.position.z = 1.5;
        subcamera.position.multiplyScalar(2);
        // 可以理解为相机朝那个点看
        subcamera.lookAt(0, 0, 0);
        // 更新相机矩阵
        subcamera.updateMatrixWorld();
        cameras.push(subcamera);
    }
}
// 创建相机矩阵
camera = new THREE.ArrayCamera(cameras);

MeshPhongMaterial
MeshPhongMaterial具有镜面高光的光泽表面的材质
在这里插入图片描述
CylinderGeometry
CylinderGeometry 圆柱缓冲几何体

const geometry = new THREE.CylinderGeometry( 5, 5, 20, 32 );
const material = new THREE.MeshBasicMaterial( {color: 0xffff00} );
const cylinder = new THREE.Mesh( geometry, material );
scene.add( cylinder );

常用参数:(圆柱顶部半径、圆柱底部半径、圆柱高度、圆柱侧面分段数,值越大,越光滑)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树路径和(c#)

问题描述 给定一个二叉树的根和一个整数值&#xff0c;如果二叉树中有根节点到叶子节点的路径上节点值的和等于给定的整数值&#xff0c;则返回真&#xff0c;否则返回假。 叶子节点:没有孩子的节点。 示例 示例1 Input: root [5,4,8,11,null,13,4,7,2,null,null,null,1], t…

两个List<Integer>在相同的值比较返回值为false的问题解析

写在前面:今天刷LeetCode的时候发现一个测试用例始终过不去&#xff0c;代码出问题处大概表述如下: List<Integer> a new ArrayList<>(); a.add(300); List<Integer> b new ArrayList<>(); b.add(300); if(a.get(0) b.get(0)){ 代码块B } else{ 代…

[生成 pdf 详解]

目录 前言: pom需要的依赖: 测试类: 效果: 生成表格PDF: 其他复杂的格式就去研究那个 如何生成吧 测试类代码: 前言: 摸鱼来的 pom需要的依赖: <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><vers…

【计算机毕业设计】76.垃圾分类系统源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多国有企业的之中&#xff0c;随之就产生了“垃圾分类系统”&#xff0c;这样就让垃圾分类系统更…

web前端大作业:旅游网页主题网站设计——武汉旅游网页设计(11页)HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

AWS CodeCommit SSH公钥配置

在本地计算机上的终端中&#xff0c;运行 ssh-keygen 命令&#xff0c;并按照说明将文件保存到您的配置文件的 .ssh 目录中。 其中windows用户可以使用git bash。 这会生成&#xff1a; codecommit_rsa 文件&#xff0c;该文件为私有密钥文件。 codecommit_rsa.pub 文件&#…

Android 搜索匹配的文字之后显示成红色

先简单看一下效果&#xff1a; 实现的主要代码&#xff1a; /*** * param color 需要提示的演示* param txt 字符串信息* param keyword 搜索的关键字* return*/ private SpannableString matchSearchText(int color, String txt, String keyword) {SpannableString spannableS…

基于springboot vue前后端分离的赛事疫情管理系统源码

开发工具&#xff1a;idea (eclipse) 环境&#xff1a;jdk1.8 mysql5.7&#xff0c; navcat 演示视频&#xff1a; 【java毕业设计】基于springboot vue前后端分离的赛事疫情管理系统源码许多年以前&#xff0c;人们在对数据进行统计和记录时候&#xff0c;使用的是纸和笔&…

抄袭、侵权、刷单,谁在洗地机的风口自乱了阵脚?

文|螳螂观察 作者| 陈淼 又一记法律重锤落下&#xff0c;追觅再次被敲在行业的耻辱柱上。 日前&#xff0c;添可和追觅的专利纠纷案迎来最新进展。根据裁定结果&#xff0c;追觅最终向宁波市中级人民法院作出承诺&#xff0c;于2022年10月30日起停止生产、销售四款涉案产品及…

基于碳库模拟、机器学习方法、生命周期评价法(LCA)、经验模型和过程模型的生态与农田温室气体排放的模拟

当前全球温室气体大幅升高&#xff0c;过去170年CO2浓度上升47%&#xff0c;这种极速变化使得物种和生态系统的适应时间大大缩短&#xff0c;进而造成全球气候变暖、海平面上升、作物产量降低、人类心血管和呼吸道疾病加剧等种种危害。生态与农业是甲烷&#xff08;CH4&#xf…

JMeter 的17种逻辑控制器,你用过哪个?

JMeter提供了17种逻辑控制器&#xff0c;它们各个功能都不尽相同&#xff0c;其作用域只对其子节点的sampler有效&#xff0c;作用是控制采样器的执行顺序。 控制测试计划执行过程中节点的逻辑执行顺序&#xff0c;如&#xff1a;Loop Controller、If Controller等&#xff1b…

2022世界物联网博览会|中国电信5G+AIoT创新科技齐上阵,亮点纷呈看不够

2022年无锡世界物联网博览会 正式拉开序幕 本次中国电信展台 以“智联万物 点亮未来”为主题 于无锡太湖国际博览中心B1-01展台 万里鹏翼&#xff0c;振翅而飞 为数智未来插上硬核翅膀&#xff01; 本次展会中国电信展台围绕“云改数转”、“网信安全”、“红色通信”、“…

SpringBoot+Vue实现前后端分离的校园外卖配送系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

networkx学习(一) 图论

1.创建一个简单网络&#xff08;图&#xff09; # 导入库 import networkx as nx import matplotlib.pyplot as plt# 创建一个空图 G nx.Graph() # 向该图中添加节点和连边 G.add_nodes_from([1,2,3,4]) G.add_edges_from([(1,2),(1,3),(2,3),(2,4)])# 可视化图 nx.draw(G, n…

《Linux运维实战:MongoDB数据库逻辑备份恢复(方案四)》

一、备份与恢复方案 Percona Server for MongoDB Percona Server for MongoDB是一个免费的、增强的、完全兼容的、源代码可用的、带有企业级功能的MongoDB Community Edition的替代品。它不需要对MongoDB应用程序或代码进行更改。 参考官方&#xff1a;Percona Backup for Mon…

【漏洞复现】Docker runC 容器逃逸漏洞(CVE-2019-5736)

文章目录声明一、漏洞描述二、漏洞原理三、漏洞分析四、POC分析五、利用方式六、影响版本七、环境搭建八、漏洞复现九、修复建议声明 本篇文章仅用于技术研究和漏洞复现&#xff0c;切勿将文中涉及攻击手法用于非授权下渗透攻击行为&#xff0c;操作有风险&#xff0c;出现任何…

初识mysql

文章目录为什么要学习数据库什么是数据库数据库的分类MySQL简介连接数据库为什么要学习数据库 ①岗位需求 ②现在的世界&#xff0c;大数据时代&#xff0c;得数据者得天下 ③被迫需求&#xff1a;存数据 ④数据库是所有软件体系中最核心的存在 什么是数据库 数据库&…

java设计模式(2):UML图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图…

kerberos环境下Flink on Yarn集群部署 基于flink1.15.3 hadoop 3.0CDH6.3.2

1.1 概要介绍 Flink on Yarn的HA高可用模式&#xff0c;首先依赖于Yarn自身的高可用机制&#xff08;ResourceManager高可用&#xff09;&#xff0c;并通过Yarn对JobManager进行管理&#xff0c;当JobManager失效时&#xff0c;Yarn将重新启动JobManager。其次Flink Job在恢复…

微服务框架 SpringCloud微服务架构 29 ES 集群 29.2 搭建集群

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.2 搭建集群29.2.1 搭建ES 集群29 ES 集群 29.2 搭建集群 2…