5. Threejs案例-制作半色调和旋转效果

5. Threejs案例-制作半色调和旋转效果

实现效果

效果

代码

<!DOCTYPE html>
<html lang="en">
<head><title></title><meta charset="UTF-8"><script src="ThreeJS/three.js"></script><script src="ThreeJS/EffectComposer.js"></script><script src="ThreeJS/RenderPass.js"></script><script src="ThreeJS/ShaderPass.js"></script><script src="ThreeJS/CopyShader.js"></script><script src="ThreeJS/HalftoneShader.js"></script><script src="ThreeJS/HalftonePass.js"></script>
</head>
<body>
<div id="myContainer"></div>
<script>// 获取ID为'myContainer'的HTML元素,用于在其中渲染3D场景const myContainer = document.getElementById('myContainer');// 创建一个WebGL渲染器实例renderer = new THREE.WebGLRenderer();// 设置渲染器的像素比率,以匹配设备的像素密度,提高图像清晰度renderer.setPixelRatio(window.devicePixelRatio);// 设置渲染器的大小,宽度和高度与浏览器窗口的大小一致renderer.setSize(window.innerWidth, window.innerHeight);// 将渲染器所用的HTML元素(一个canvas)添加到之前获取的'myContainer'元素中myContainer.appendChild(renderer.domElement);// 创建一个透视相机实例,参数分别是:视野角度、长宽比、近裁剪面距离和远裁剪面距离camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);// 设置相机的位置,Z轴距离为400camera.position.z = 400;// 创建一个新的3D场景scene = new THREE.Scene();// 在场景中添加雾效果,颜色为黑色,近雾距离为1,远雾距离为1000scene.fog = new THREE.Fog(0x000000, 1, 1000);// 创建一个立方体的几何体,参数分别是:长度、宽度和高度,段数在X、Y和Z轴上分别是2、2和2const geometry = new THREE.BoxBufferGeometry(150, 150, 150, 2, 2, 2);// 创建一个网格材质,用于给几何体上色,这里没有特别指定材质的颜色或属性,所以默认是使用几何体的法线作为表面的颜色const material = new THREE.MeshNormalMaterial();// 使用几何体和材质创建一个网格(即3D模型),并将其添加到场景中mesh = new THREE.Mesh(geometry, material);scene.add(mesh);// 创建一个EffectComposer实例,用于在渲染过程中应用后期效果composer = new THREE.EffectComposer(renderer);// 创建一个RenderPass实例,用于将场景渲染到帧缓冲中renderPass = new THREE.RenderPass(scene, camera);// 定义HalftonePass效果所需的参数,包括形状、半径、旋转角度等视觉效果参数params = {shape: 1,radius: 4,rotateR: Math.PI / 12,rotateB: Math.PI / 12 * 2,rotateG: Math.PI / 12 * 3,scatter: 0,blending: 1,blendingMode: 1,greyscale: false,disable: false};// 创建一个HalftonePass实例,用于在渲染过程中应用半色调效果,并将该效果添加到EffectComposer中halftonePass = new THREE.HalftonePass(window.innerWidth, window.innerHeight, params);composer.addPass(renderPass); // 将主渲染效果添加到EffectComposer中composer.addPass(halftonePass); // 将HalftonePass效果添加到EffectComposer中// 定义一个动画函数,用于持续更新场景并渲染画面function animate() {requestAnimationFrame(animate); // 使用requestAnimationFrame函数来持续调用这个动画函数,以实现动画效果mesh.rotation.x += 0.005; // 让立方体绕X轴旋转,旋转角度为0.005弧度/帧mesh.rotation.y += 0.01; // 让立方体绕Y轴旋转,旋转角度为0.01弧度/帧composer.render(); // 使用EffectComposer来渲染场景并应用后期效果,将结果输出到屏幕中显示出来}// 开始动画循环,调用animate函数开始动画效果animate(); // 调用animate函数开始动画循环
</script>
</body>
</html>

演示链接

示例链接

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

X-tile的使用选择最适cut-off值

数据准备&#xff1a; 将此数据存成txt&#xff08;文本文件&#xff0c;制表符分隔&#xff09;。 打开x-tile并点击分析&#xff1a; 然后File-open-选择数据导入。 Censor对应OS即生存状态&#xff0c;Survivaltime对应OS.time生存时间&#xff0c;marker1就是要研究的变量…

房屋租赁系统-java

思维导图&#xff1a;业务逻辑 类的存放&#xff1a; 工具类 Utility package study.houserent.util; import java.util.*; /***/ public class Utility {//静态属性。。。private static Scanner scanner new Scanner(System.in);/*** 功能&#xff1a;读取键盘输入的一个菜单…

储能柜控制单元|EsccUnit8300储能柜控制单元功能简介及定制开发|储能EMS能量控制单元|储能控制单元|储能柜EMS系统|储能协调控制器

储能柜控制单元&#xff5c;EsccUnit8300储能柜控制单元功能简介及定制开发|储能EMS能量控制单元|储能控制单元|储能柜EMS系统|储能协调控制器 一&#xff1a;什么叫储能柜 Energy storage cabinet 储能柜包含柜体、由池组单元、由池管理单元、储能变流器、控制单元、消防单元…

光辉之元素:新生儿的硒之旅

引言&#xff1a; 硒作为一种微量元素&#xff0c;对于新生儿的健康发育起着不可忽视的作用。在这个神奇的元素的帮助下&#xff0c;新生儿能够更好地适应外界环境&#xff0c;增强免疫力&#xff0c;迎接充满希望的未来。本文将深入探讨硒的作用、补充时机&#xff0c;以及在…

【pytorch】nn.linear 中为什么是y=xA^T+b

我记得读教材的时候是yWxb, 左乘矩阵W&#xff0c;这样才能表示线性变化。 但是pytorch中的nn.linear中&#xff0c;计算方式是yxA^Tb&#xff0c;其中A是权重矩阵。 为什么右乘也能表示线性变化操作呢&#xff1f;因为pytorch中&#xff0c;照顾到输入是多个样本一起算的&…

Ubuntu-22.04上ToDest设置开机不弹出图形界面

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、开始操作1.设置图形端 总结 前言 有时候远程成为开发必不可少的工具&#xff0c;目前国内有很多相关的软件&#xff0c;比较有名的是向日葵、ToDesk、Rust…

15.Golang中的反射机制及应用

目录 概述实践基本应用复杂应用 结束 概述 Golang中的反射用法还是比较简单的 reflect.TypeOf(arg)reflect.ValueOf(arg) 实践 基本应用 package mainimport ("fmt""reflect" )func reflectNum(arg interface{}) {fmt.Println("type ", re…

基于开发板的单片机实验教学改革与实践

摘 要&#xff1a;分析单片机实验的特点及其教学中存在的问题&#xff0c;提出以单片机开发板为实验平台进行单片机实验教学&#xff0c;从教学内容、授课方式和课程考核3 方面介绍对现有单片机实验教学的改革和创新&#xff0c;最后说明实践效果。 关键词&#xff1a;单片机实…

【Git】02 仓库、区域与基本操作

文章目录 一、Git仓库二、Git区域三、操作3.1 git add3.2 更改文件名3.3 清空暂存区3.4 帮助文档 四、版本历史4.1 日志时间格式4.2 查看版本演变历史 五、总结 一、Git仓库 Git仓库&#xff0c;可简单理解为项目代码存放的位置&#xff0c;Git将该项目目录中的内容纳入版本管…

Linux第40步_移植ST公司uboot的第1步_创建配置文件_设备树_修改电源管理和sdmmc节点

ST公司uboot移植分两步走&#xff1a; 第1步&#xff1a;完成“创建配置文件&#xff0c;设备树&#xff0c;修改电源管理和sdmmc节点&#xff0c;以及shell脚本和编译”。 第2步“完成”修改网络驱动、USB OTG设备树和LCD驱动&#xff0c;以及编译和烧写测试“。 移植太复杂…

拳打视频、脚踢图文,VR全景霸榜朋友圈广告Top榜

不知道大家有没有关注过近几年的朋友圈广告榜单&#xff0c;在入围的朋友圈Top10的广告中&#xff0c;VR全景广告的身影频繁出现&#xff0c;俨然有霸榜趋势。 央视新闻 早前央视新闻曾投放的360赏樱花&#xff0c;一经发出就瞬间刷屏全网&#xff0c;一举登榜季度Top10。 创…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1&#xff1a;自动打包到新分支前端案例2&#xff1a;自动打包推送到gitee的build分支案例3&#xff1a;暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点&#xff0c;就是摸索到凌晨两三点第二天要8点起床感觉要…