12. Threejs案例-绘制颜色渐变圆柱体

2024-02-05 06:12

本文主要是介绍12. Threejs案例-绘制颜色渐变圆柱体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

12. Threejs案例-绘制颜色渐变圆柱体

实现效果

效果

知识点

CylinderGeometry (圆柱缓冲几何体)

一个用于生成圆柱几何体的类。

构造器

CylinderGeometry(radiusTop : Float, radiusBottom : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)

参数类型描述
radiusTopFloat圆柱的顶部半径,默认值是1。
radiusBottomFloat圆柱的底部半径,默认值是1。
heightFloat圆柱的高度,默认值是1。
radialSegmentsInteger圆柱侧面周围的分段数,默认为32。
heightSegmentsInteger圆柱侧面沿着其高度的分段数,默认值为1。
openEndedBoolean指明该圆锥的底面是开放的还是封顶的。默认值为false,即其底面默认是封顶的。
thetaStartFloat第一个分段的起始角度,默认为0。
thetaLengthFloat圆柱底面圆扇区的中心角,默认值是2*Pi。

MeshNormalMaterial (法线网格材质)

一种把法向量映射到RGB颜色的材质。

构造器

MeshNormalMaterial(parameters : Object)

参数类型描述
parametersObject用于定义材质外观的对象
属性
bumpMap : Texture

用于创建凹凸贴图的纹理。
黑色和白色值映射到与光照相关的感知深度。
凹凸实际上不会影响对象的几何形状,只影响光照。
如果定义了法线贴图,则将忽略该贴图。

bumpScale : Float

凹凸贴图会对材质产生多大影响。
典型范围是 0-1
默认值为 1

displacementMap : Texture

位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象,以及充当真实的几何体。
位移纹理是指:网格的所有顶点被映射为图像中每个像素的值 (白色是最高的) ,并且被重定位。

displacementScale : Float

位移贴图对网格的影响程度 (黑色是无位移,白色是最大位移) 。
如果没有设置位移贴图,则不会应用此值。
默认值为 1

displacementBias : Float

位移贴图在网格顶点上的偏移量。
如果没有设置位移贴图,则不会应用此值。
默认值为 0

flatShading : Boolean

定义材质是否使用平面着色进行渲染。
默认值为 false

normalMap : Texture

用于创建法线贴图的纹理。
RGB 值会影响每个像素片段的曲面法线,并更改颜色照亮的方式。
法线贴图不会改变曲面的实际形状,只会改变光照。

normalMapType : Integer

法线贴图的类型。
选项为 THREE.TangentSpaceNormalMapTHREE.ObjectSpaceNormalMap
默认值是 THREE.TangentSpaceNormalMap

normalScale : Vector2

法线贴图对材质的影响程度。
典型范围是 0-1
默认值是 Vector2 设置为 (1,1)

wireframe : Boolean

将几何体渲染为线框。
默认值为 false (即渲染为平滑着色) 。

wireframeLinewidth : Float

控制线框宽度。
默认值为 1

代码

<!DOCTYPE html>
<html lang="zh">
<head><title></title><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/jquery.js"></script>
</head>
<body>
<div id="myContainer"></div>
<script>// 创建一个WebGL渲染器实例,并开启抗锯齿处理const myRenderer = new THREE.WebGLRenderer({antialias: true});// 设置渲染器的大小为窗口的宽度和高度myRenderer.setSize(window.innerWidth, window.innerHeight);// 设置渲染器的背景颜色为白色myRenderer.setClearColor('white', 1.0);// 将渲染器的DOM元素 (即canvas元素) 添加到ID为"myContainer"的HTML元素中$("#myContainer").append(myRenderer.domElement);// 创建一个透视相机,设置其视野角度、长宽比、近裁剪面和远裁剪面const myCamera = new THREE.PerspectiveCamera(45,window.innerWidth / window.innerHeight, 0.1, 1000);// 设置相机的初始位置myCamera.position.set(400, 300, 200);// 使相机朝向场景的原点myCamera.lookAt(new THREE.Vector3(0, 0, 0));// 创建一个新的Three.js场景const myScene = new THREE.Scene();// 创建一个圆台几何体,设置其底面半径、顶面半径、高度和分段数const myGeometry = new THREE.CylinderGeometry(40, 80, 100, 150, 20);// 创建一个法线材质,用于显示几何体的原始表面纹理const myMaterial = new THREE.MeshNormalMaterial();// 使用几何体和材质创建一个新的网格 (Mesh) 对象,即圆台模型const myMesh = new THREE.Mesh(myGeometry, myMaterial);// 在X、Y和Z方向上放大几何体 (圆台) 的大小,使其变为原来的两倍大小myMesh.scale.set(2, 2, 2);// 将圆台模型添加到场景中myScene.add(myMesh);// 开始渲染动画,不断地更新和渲染场景animate();function animate() {// 使用渲染器将场景和相机渲染到屏幕上,并显示圆台模型myRenderer.render(myScene, myCamera);// 请求下一帧动画,实现动画的循环播放效果requestAnimationFrame(animate);}
</script>
</body>
</html>

演示链接

示例链接

这篇关于12. Threejs案例-绘制颜色渐变圆柱体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679961

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

springboot项目redis缓存异常实战案例详解(提供解决方案)

《springboot项目redis缓存异常实战案例详解(提供解决方案)》redis基本上是高并发场景上会用到的一个高性能的key-value数据库,属于nosql类型,一般用作于缓存,一般是结合数据... 目录缓存异常实践案例缓存穿透问题缓存击穿问题(其中也解决了穿透问题)完整代码缓存异常实践案例Red

QT6中绘制UI的两种方法详解与示例代码

《QT6中绘制UI的两种方法详解与示例代码》Qt6提供了两种主要的UI绘制技术:​​QML(QtMeta-ObjectLanguage)​​和​​C++Widgets​​,这两种技术各有优势,适用于不... 目录一、QML 技术详解1.1 QML 简介1.2 QML 的核心概念1.3 QML 示例:简单按钮