threejs 几何体的本质 顶点
几何体的线框模式,
一个正方平面最少可以由4个顶点组成,两个三角形组成(公用了 2个顶点,使用了索引创建顶点属性) 。
// 导入 threejs
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
// 引入dat.gui.js的一个类GUI
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
// 创建场景 scene
const scene = new THREE.Scene();
// console.log(scene,'scene');
// 创建相机 -- 观看物体的不同视角
const camera = new THREE.PerspectiveCamera(
45, // 视角
window.innerWidth / window.innerHeight, // 宽高比
0.1, // 近平面
1000 // 远平面
);
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
// 置canvas画设布的尺寸 -- 设置threejs渲染区域的尺寸 像素 px
renderer.setSize(window.innerWidth,window.innerHeight);
// domElement 就是一个 canvas 标签 结果 -- 把 canvas 渲染到了页面上
document.body.appendChild(renderer.domElement); // 添加坐标轴
const axesHelper = new THREE.AxesHelper(5); // 参数为轴的长度
scene.add(axesHelper);
// 设置相机的位置 position
camera.position.set(10,10,10); // 远距离和近距离
// camera.position.y = 50; // 远距离和近距离
camera.lookAt(0,0,0);
// camera.lookAt(mesh.position);// 指向mesh对应的位置 // 引入相机控件 -- 轨道控制器
const controls = new OrbitControls(camera,renderer.domElement); // 浏览器大小调整事件监听 -- 监听窗口的变化
window.addEventListener("resize", () => {
// console.log('test');
renderer.setSize(window.innerWidth,innerHeight); // 根据缩放的窗口重新设置画布的大小
// 垂直相机宽高比
camera.aspect = window.innerWidth / window.innerHeight;
// 更新相机投影矩阵
camera.updateProjectionMatrix();
}); // 使用 GUI 放入全屏和退出全屏功能
const gui = new GUI();
const objFun = {
requestFullscreen:function(){
document.body.requestFullscreen();
},
exitFullscreen:function(){
document.exitFullscreen();
},
};
gui.add(objFun,"requestFullscreen");
gui.add(objFun,"exitFullscreen"); // 集合体 -- 顶点
//类型化数组创建顶点数据
const vertices = new Float32Array([
0, 0, 0, //顶点1坐标
2, 0, 0, //顶点2坐标
0, 2, 0, //顶点3坐标
2, 0, 0, //顶点2坐标
0, 2, 0, //顶点3坐标
2, 2, 0, //顶点3坐标
]);
// 通过索引创建顶点 -- 公用了 2 个顶点
const vertices1 = new Float32Array([
0, 0, 0, //顶点1坐标
2, 0, 0, //顶点2坐标
0, 2, 0, //顶点3坐标
2, 2, 0, //顶点3坐标
]);
const indices = new Uint16Array([0,1,2,1,2,3]);
// 创建空几何体
const geometry = new THREE.BufferGeometry();
// 创建顶点属性
geometry.setAttribute("position",new THREE.BufferAttribute(vertices1,3));
geometry.setIndex(new THREE.BufferAttribute(indices,1)); // 创建材质
const material01 = new THREE.MeshBasicMaterial({
color: 0x00ff00,
side: THREE.DoubleSide, // 设置可以看到二面的材质
});
const plane = new THREE.Mesh(geometry,material01);
scene.add(plane); // 添加带阻尼的惯性
controls.enableDamping = true; // 设置后会有滑动的效果
controls.dampingFactor = 0.2011; // 时间越小 滑动的时间越小 controls.autoRotate = false; // 自动旋转 // 动态的渲染函数
function animate() {
controls.update(); // 如果使用了 autoRotate 属性等 需要在动画中执行 update 方法
requestAnimationFrame(animate); // 逐帧渲染
// 旋转
// mesh.rotation.x += 0.01;
// mesh.rotation.y += 0.01;
renderer.render(scene,camera);
}
animate()

threejs 几何体的本质 顶点的更多相关文章
- threejs三角形Geometry的顶点时针顺序会导致三角形看不见
var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75,winSize.width/winSize.hei ...
- WebGL three.js学习笔记 自定义顶点建立几何体
自定义顶点建立几何体与克隆 Three.js本身已经有很多的网格模型,基本已经够我们的使用,但是如果我们还是想自己根据顶点坐标来建立几何模型的话,Three.js也是可以的. 基本效果如图: 点击查看 ...
- Three.js三维模型几何体旋转、缩放和平移
创建场景中的三维模型往往需要设置显示大小.位置.角度,three.js提供了一系列网格模型对象的几何变换方法,从WebGL的角度看,旋转.缩放.平移对应的都是模型变换矩阵,关于矩阵变换内容可以观看本人 ...
- ThreeJs 绘制点、线、面
所有的三位物体都是由点构成,两点构成线,三点构成面,ThreeJs又如何绘制出点.线.面呢 ? 在ThreeJs中: 模型由几何体和材质构成 模型以何种形式(点.线.面)展示取决于渲染方式 1. 几何 ...
- Three.js开发指南---创建,加载高级网格和几何体(第八章)
本章的主要内容: 一, 通过Three.js自带的功能来组合和合并已有的几何体,创建出新的几何体 二, 从外部资源中加载网格和几何体 1 前面的章节中,我们学习到,一个几何体创建的网格,想使用多个材质 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记5——Direct3D中的顶点缓存和索引缓存
第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物 ...
- DirectX 11---从空间变换来看3D场景如何转化到2D屏幕
DirectX 11---从空间变换来看3D场景如何转化到2D屏幕 在看<Introduction to 3D Game Programming with DirectX 11>的时候,发 ...
- SAP C/4HANA与人工智能和增强现实(AR)技术结合的又一个创新案例
今天这篇迟到的文章,来自我的同事Aviva. 去年SAP C/4HANA发布之后,SAP的从业者们可能或多或少都读过一些来自SAP官方渠道,比如微信公众号"SAP天天事"发布的一些 ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记10——三维天空的构建&三维粒子的实现&多游戏模型的载入
第23章 三维天空的构建 目前描述三维天空的技术主要包括三种类型,直接来介绍使用最广泛的模拟技术,详细的描述可以见作者的博文. 天空盒(Sky Box),即放到场景的是一个立方体.它是目前使用最广泛的 ...
- OpenGL阴影,Shadow Mapping(附源程序)
实验平台:Win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): 本文描述图形学的两个最常用的阴影技术之一,Shadow Mapping方法(另一种是Sh ...
随机推荐
- 英语词汇:simplistic和simple区别
"Simplistic" 和 "simple" 都表示简单,但它们有不同的含义和语境: Simplistic: 含义: 过于简单化的,有贬义,表示忽略了复杂性或 ...
- 如何配置域名的 CNAME —— 添加记录集时,为什么会提示“与已有解析记录冲突”?
参考: https://support.huaweicloud.com/dns_faq/dns_faq_016.html https://developer.qiniu.com/fusion/kb/1 ...
- 【转载】 解决VSCode运行或调试python文件无反应的问题
---------------- 版权声明:本文为CSDN博主「姜行者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn. ...
- maven配置阿里云镜像与修改默认仓库地址
1.背景 通常来说maven的默认镜像很慢,我们需要一个国内镜像,拉取jar包的时候从国内下载, 当然阿里云镜像是很好的一个候选 2.安装 官网下载一个maven解压即可使用 3.修改配置 第一步,找 ...
- 武汉市委郭元强书记、盛阅春代市长会见白鲸开源CEO郭炜等嘉宾代表
2024年6月14日,第二届软件创新发展大会在中国武汉举行.大会云集了来自全国的书数百位院士.专家.知名软件企业负责人,包括中国工程院院士倪光南.中国科学院院士陈十一.国家工业信息安全发展研究中心总工 ...
- CUDA常见编译器配置问题一览
CUDA常见编译器配置问题一览 关注TechLead,复旦博士,分享云服务领域全维度开发技术.拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,复旦机器人智能实验室成员,国家级大学生赛事评审 ...
- Camera | 7.瑞芯微rk3568平台摄像头控制器MIPI-CSI驱动架构梳理
因为有拍照.录制视频.直播等刚需,现在手机的摄像头基本都是高清,支持高清摄像头的SoC都支持MIPI-CSI. 不同SoC的MIPI-CSI在实现上有一定差别,即使同一厂家设计生产的芯片也都不尽相同. ...
- 【VMware VCF】VCF 5.2:部署整合架构的SDDC。
VMware 前不久发布了 VMware Cloud Foundation 5.2 版本,并带来了许多功能的升级,比如支持 vSAN Max 分解存储,管理工作负载域支持 vSAN ESA 延伸集群, ...
- CVSS(Common Vulnerability Scoring System)打分规则解读
CVSS(Common Vulnerability Scoring System)提供了一种根据漏洞的主要特征进行打分,反映其严重性的方法.CVSS 已成为被广泛使用的标准. 下面是CVSS 3.1版 ...
- dfs剪枝与优化
搜索树 剪枝方法 1.优化搜索顺序 2.排除等效冗余 3.可行性 4.最优性(估价) 5.记忆化(树形不会重复计算时不需要) A.针对每个维度边界信息缩放.推倒 B.计算未来最少花费 C.结合各维度的 ...