3.js - 深度测试、深度写入、深度函数

md,艹,这玩意得理解,只看代码不管事

效果图

在这里插入图片描述

代码


// @ts-nocheck// 引入three.js
import * as THREE from 'three'// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'// 导入lil.gui
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'// 导入tween
import * as TWEEN from 'three/examples/jsm/libs/tween.module.js'// 导入exrloader
import { EXRLoader } from 'three/addons/loaders/EXRLoader.js'// 导入tif
import { LogLuvLoader } from 'three/addons/loaders/LogLuvLoader.js'// 导入rgbmloader
import { RGBMLoader } from 'three/addons/loaders/RGBMLoader.js'//#region
const scence = new THREE.Scene()const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.position.set(2, 2, 5) // 设置相机位置
camera.lookAt(0, 0, 0)const renderer = new THREE.WebGLRenderer({antialias: true // 开启抗锯齿
})
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)
//#endregion//#region
// 添加世界坐标辅助器,红色-X轴; 绿色-Y轴; 蓝色-Z轴
const axesHelper = new THREE.AxesHelper(5)
scence.add(axesHelper)const controls = new OrbitControls(camera, renderer.domElement)
// 设置带阻尼的惯性
// controls.enableDamping = true
// 设置阻尼系数
controls.dampingFactor = 0.05// 每一帧根据控制器更新画面
function animate() {// 如果,需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入`controls.update()`controls.update()// `requestAnimationFrame`:在屏幕渲染下一帧画面时,触发回调函数来执行画面的渲染requestAnimationFrame(animate)// 渲染renderer.render(scence, camera)// 更新tweenTWEEN.update()
}
animate()
//#endregion// --------------------------------------------------------------
// --------------------------------------------------------------// 平面-1
const planeGeometry = new THREE.PlaneGeometry(2, 2)
const planeMaterial = new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('../public/assets/texture/sprite0.png'),side: THREE.DoubleSide,transparent: true
})
const plane = new THREE.Mesh(planeGeometry, planeMaterial)
// 渲染顺序,小的先渲染
plane.renderOrder = 0
scence.add(plane)// 平面-2
const planeGeometry_1 = new THREE.PlaneGeometry(2, 2)
const planeMaterial_1 = new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('../public/assets/texture/lensflare0_alpha.png'),side: THREE.DoubleSide,transparent: true
})
const plane_1 = new THREE.Mesh(planeGeometry_1, planeMaterial_1)
plane_1.position.z = 2
plane_1.renderOrder = 1
scence.add(plane_1)/*
depthTest:布尔值,是否开启深度测试true:WebGL渲染器会检查每个像素的深度值,以确定它是否应该被绘制,即:它是否比当前深度缓冲区中存储的像素更接近相机。false:深度测试被忽略,所有物体都将按照它们在场景中的顺序绘制,而不管它们的实际深度如何,这通常用于创建特定的视觉效果,比如,粒子系统、某些类型的后处理效果。
*/
plane.material.depthTest = true/*
depthWrite:布尔值,绘制当前材质时,控制当前材质,是否将深度信息,写入深度缓冲区true:渲染的物体(可以理解为,每个物体都有一个深度信息,只是你看不见而已),将更新深度缓冲区中的相应像素,以反映其深度false:渲染的物体将不会更新深度缓冲区,可以用于创建叠加效果,或确保某些物体(如:玻璃或水)不会遮挡其后的物体,即使它们在几何上应该这样做。
*/
plane.material.depthWrite = true/*
depthFunc:函数,用于定义深度测试的具体行为(就是设置深度模式)`THREE.LessEqualDepth`:默认值,只有当,当前像素的深度值,小于或等于,深度缓冲区中的值时,该像素才会被绘制。这是最常见的设置,用于确保离相机较近的物体遮挡离相机较远的物体。`THREE.NeverDepth`:从不通过深度测试`THREE.AlwaysDepth`:总是通过深度测试`THREE.GreaterDepth`:仅当深度值大于缓冲区中的值时,通过测试
*/
plane.material.depthFunc = THREE.LessEqualDepthplane_1.material.depthTest = true
plane_1.material.depthWrite = true
plane_1.material.depthFunc = THREE.LessEqualDepthconst gui = new GUI()let gui_0 = gui.addFolder('plane')
gui_0.add(plane.material, 'depthTest').name('深度测试').onChange(() => {plane.material.needsUpdate = true
})gui_0.add(plane.material, 'depthWrite').name('深度写入').onChange(() => {plane.material.needsUpdate = true
})gui_0.add(plane.material, 'depthFunc', {'THREE.LessEqualDepth': THREE.LessEqualDepth, // 默认值'THREE.NeverDepth': THREE.NeverDepth,'THREE.AlwaysDepth': THREE.AlwaysDepth,'THREE.GreaterDepth': THREE.GreaterDepth, // 仅当深度值大于缓冲区中的值时,通过测试 
})let gui_1 = gui.addFolder('plane_1')
gui_1.add(plane_1.material, 'depthTest').name('深度测试').onChange(() => {plane_1.material.needsUpdate = true
})gui_1.add(plane_1.material, 'depthWrite').name('深度写入').onChange(() => {plane_1.material.needsUpdate = true
})gui_1.add(plane_1.material, 'depthFunc', {'THREE.LessEqualDepth': THREE.LessEqualDepth, // 默认值'THREE.NeverDepth': THREE.NeverDepth,'THREE.AlwaysDepth': THREE.AlwaysDepth,'THREE.GreaterDepth': THREE.GreaterDepth, // 仅当深度值大于缓冲区中的值时,通过测试 
})

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

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

相关文章

入门PHP就来我这(纯干货)05

~~~~ 有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。 1 数组及创建 数组,顾名思义,本质上就是一系列数据的组合…

高薪程序员必修课-volatile如何解决并发场景下可见性和有序性的问题

目录 前言 原理 可见性 有序性 示例 示例1:解决可见性问题 示例2:解决有序性问题 总结 前言 在Java中,volatile 关键字用于解决并发场景下的可见性和有序性问题。通过理解 volatile 的工作原理和使用示例,可以更好地应用它…

如何绕过验证码:终极指南 2024

你正在上网,突然出现了一个验证码,打断了你的浏览。是的,这就是那个确保你不是机器人的小测试,面对现实吧–它真的会拖慢你的进程。好消息是什么?你不必被卡住。你可以绕过验证码。所以,系好安全带&#xf…

Studying-代码随想录训练营day26| 491.递增子序列、46.全排列、47.全排列 II、51.N皇后、37.解数独、回溯总结

第26天,回溯part04,昨天休息复习总结回溯内容,💪(ง •_•)ง💪 目录 491.递增子序列 46.全排列 47.全排列 II 51.N皇后 37.解数独 回溯总结 491.递增子序列 文档讲解:代码随想录递增子序列 视频讲…

[数据库原理]数据库设计(er图)

xtu期末是机试,所以图形表示有点不同 实体之间的关系: 多对多:可以生成一个新的关系模型一对一:两边都要关联一对多、多对一 :一的主键可以作为多的外键 如有错误,欢迎指正!!&#x…

中画幅巡检相机-SHARE 100M A10

【毫厘之间,洞见非凡】 ——SHARE 100M A10中画幅测量相机,巡检行业的新选择 在巡检行业,精准度是关键,深圳赛尔智控科技有限公司最新推出的SHARE 100M A10中画幅测量相机,基于先进的IMX461影像传感器,拥有…

Java面试题:索引创建的原则

索引创建的原则 针对数据量较大,且查询较频繁的表建立索引 (单表超过10w) 针对于常作为 查询条件(where) 排序(order by) 分组(group by) 操作的字段建立索引 尽量选择区分度高的列作为索引,尽量选择唯一索引,区分度越高,使用索引的效率越高 字符串类型字段,字段长度越…

rmvb转mp4格式有什么好方法?这四种好方法轻松帮你完成转换!

rmvb转mp4格式有什么好方法?当大家深入探索视频格式的多元世界时,不禁会被各种格式的独特魅力所吸引,在众多选项中,RMVB和MP4无疑是两大热门选择,它们各自在不同的场合下展现出了令人瞩目的优势与局限,首先…

25考研:今年初试时间比去年更早了?

过去5年考研初试时间安排如下: 24考研:2023年12月23-24日(倒数第二个周末) 23考研:2022年12月24-25日(倒数第二个周末) 22考研:2021年12月25-26日(最后一个周末&#xf…

中英双语介绍美国的州:俄亥俄州(Ohio)

中文版 俄亥俄州简介 俄亥俄州位于美国中西部地区,是一个以其工业基础、文化遗产和教育资源而著称的州。以下是对俄亥俄州的详细介绍,包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 俄亥俄州北接密歇根州和伊利湖,东临宾…

【Linux】TCP协议【下二】{流量控制/滑动窗口/延迟应答/捎带应答/拥塞控制}

文章目录 1.流量控制--利用“窗口大小”字段协商数据量大小1. 1第一次的时候,怎么保证发送数据量是合理的1.2第三次握手ack的时候,可以携带数据!1.3流量控制,属于可靠性还是属于效率? 2.滑动窗口--利用滑动窗口解决批量…

x264 编码器分析、预测、估计模块相关结构体介绍

分析模块相关结构体 x264_mb_analysis_t 定义:在 analyse.c 文件中定义typedef struct {/* conduct the analysis using this lamda and QP */int i_lambda;int i_lambda2;int i_qp;uint16_t *p_cost_mv;uint16_t *p_cost_ref[2</

代码随想三刷动态规划篇6

代码随想三刷动态规划篇6 139. 单词拆分题目代码 多重背包题目代码 139. 单词拆分 题目 链接 代码 class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp new boolean[s.length()1];dp[0] true;for (int i 1; i < s.leng…

快速入门FreeRTOS心得(正点原子学习版)

对于FreeROTS&#xff0c;我第一反应想到的就是通信里的TDM&#xff08;时分多址&#xff09;。不同任务给予分配不同的时间间隔&#xff0c;也就是任务之间在每个timeslot都在来回切换。 这里有重要的一点&#xff0c;就是中断要短小&#xff0c;优先级是自高到底进行打断。 …

Cocos制作抖音小游戏接入侧边栏复访接口实例

本篇文章主要讲解&#xff0c;使用cocos接入抖音小游戏侧边栏接口的实例教程。 日期&#xff1a;2024年7月1日 作者&#xff1a;任聪聪 教程实例&#xff1a;https://download.csdn.net/download/hj960511/89509196 下载后可直接导入运行 上传游戏后抖音预审不通过 注意&#x…

98 - IDEA远程调试服务器Java程序

Java 提供了一套标准的调试协议&#xff08;JDWP - Java Debug Wire Protocol&#xff09;&#xff0c;允许调试器&#xff08;IDE&#xff09;与被调试程序&#xff08;应用&#xff09;之间进行通信。 1.服务器特定命令启动程序 在服务器上以以下命令启动Java程序 java -a…

南京林业大学点云相关团队论文

【1】Chen Dong, Wan Lincheng, Hu Fan, Li Jing, Chen Yanming, Shen Yueqian*, Peethambaran Jiju, 2024. Semantic-aware room-level indoor modeling from point clouds, International Journal of Applied Earth Observation and Geoinformation, 2024, 127, 103685. 语义…

【Android】【Binder】cpp 如何监听service死亡状态

前言 最近有个需求&#xff0c;需要在cpp bin中监听phone 进程异常死亡的状态。 代码 test.cpp #define LOG_TAG "BINDER_DEATH"#include <binder/IServiceManager.h> #include <binder/Binder.h> #include <binder/Parcel.h> #include <an…

人事系统不知道怎么选?这份国内外EHR系统对比收藏好了!(2000字干货)

随着信息化、数字化的发展&#xff0c;应用于企业运营的管理软件产品也越来越多。判断一个产品是否好用&#xff0c;首先应明确该产品是否能真正解决自身企业管理上的难点和痛点&#xff0c;人事系统产品理念从企业管理痛点中来&#xff0c;应用到服务企业管理中去&#xff0c;…

什么是脏读、幻读、不可重复读

数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部失败回滚&#xff0c;以保持数据库的一致性和完整性。在多线程或多用户同时操作时&#xff0c;难免会出现错乱与冲突&#xff0c;这就需要引入事务的…