三.js透明物体遮挡

2024-03-02

在 Three.js 场景中,我希望有一个不可见的对象,但仍然遮挡场景中的其他对象,就好像它是可见的一样。

这可以通过 Three.js 库实现吗?这是一个例子:

Suppose I have a three.js scene that contains 3 objects: object a, object b and object c and a camera. I would like object c to be invisible to the camera, but still occlude object b... Scenario 1: scenario 1 overview In scenario 1, here is what I would like the camera to see: scenario 1 camera view

Scenario 2: enter image description here In scenario 2, here is what I would like the camera to see: enter image description here

任何人都可以建议使用一种技术来实现这种效果吗?


是的,在 Three.js 中,您可以创建一个不可见的对象,但仍然遮挡其他对象,就像它是可见的一样。

为此,您需要使用 Three.js 中提供的两个功能:Object3D.renderOrder and Material.colorWrite.

您需要确保不可见对象在它必须遮挡的对象之前渲染。

您可以使用以下命令控制渲染顺序renderOrder财产。

您可以通过设置遮挡对象的材质来使其不可见colorWrite财产给false.

// material
var material = new THREE.MeshPhongMaterial();

// mesh a
var geometry = new THREE.PlaneGeometry( 10, 10, 4, 4 );
mesh = new THREE.Mesh( geometry, material.clone() );
mesh.material.color.set( 0xff0000 );
mesh.renderOrder = 0; // <===================
mesh.position.z = - 10;
scene.add( mesh );

// mesh b
var geometry = new THREE.BoxGeometry( 2, 2, 2 );
mesh = new THREE.Mesh( geometry, material.clone() );
mesh.material.color.set( 0x606060 );
mesh.renderOrder = 3;
mesh.position.z = 0;
scene.add( mesh );

// mesh c
var geometry = new THREE.BoxGeometry( 3, 3, 3 );
mesh = new THREE.Mesh( geometry, material.clone() );
mesh.material.color.set( 0x0000ff );
mesh.material.colorWrite = false; // <=================
mesh.renderOrder = 2;
mesh.position.z = 10;
scene.add( mesh );

三.js r.143

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三.js透明物体遮挡 的相关文章

随机推荐

  • 如何使 C 语言的排序程序对于大型输入集更快

    对于非常大的输入文件数据 此排序代码会失败 因为它需要很长时间才能完成 rewind ptr j 0 while fread temp sizeof temp 1 ptr 1 j lines 1 read object by object
  • 受信任网站列表中的 iframe

    我对 iframe 及其安全缺陷不熟悉 我有网站 A 需要嵌入到网站列表的 iframe 中 这是有趣的部分 受信任网站列表和 iframe 共享同一域 只有受信任的网站列表才能 iframe A 如果不受信任的网站尝试使用 iframe
  • 是否可以使用 jquery ajax 调用来伪造多部分/表单数据帖子?

    我希望能够将多部分 表单数据消息发布回服务器 现在我知道我无法直接使用 ajax 调用发送文件 并且我不想发送任何实际文件 我想格式化帖子 以便它模拟文件传输this is the file data字符串就好像它是文件的内容一样test
  • 获取图像上显示屏4个角的坐标

    我正在尝试获取图像上屏幕 显示 的 4 个角 我有从同一位置拍摄的两张图像 所以我认为好的起点是提取两张图像 第一张图像和第二张图像 之间的差异 只是屏幕上的图像发生了变化 所以我想获取显示屏角的上 下左 右 X Y 坐标 我正在使用带有
  • cURL 和 Golang POST 的不同响应 - 无法理解为什么

    我正在尝试使用 golang 从服务器获取响应http客户 我希望通过 go 执行的请求应与以下内容相同curl命令 curl data fulladdress 22280 S 209th Way 2C Queen Creek 2C AZ
  • 如何在 Android 中将评级栏居中

    I have created a custom RatingBar as described in one of the tutorials given here on stack overflow and it s looking gre
  • 收集要安装的项目时发生错误

    当我尝试更新 Android SDK 时 出现以下错误 我应该怎么办 An error occurred while collecting items to be installed session context was profile
  • 通过 Python API 加载 JSONL 数据时检索 BigQuery 验证错误

    将 JSONL 文件加载到 BigQuery 时 如何检索与验证错误相关的更多信息 问题不是为了解决问题 示例代码 from google cloud bigquery import LoadJobConfig QueryJobConfig
  • 什么 ABI(如果有)限制 [u]intmax_t 的大小?

    从1999年版开始 ISO C标准定义了一个标准头
  • 使用 SFINAE 在 GCC 和 Clang 上给出不同的结果

    我正在学习如何利用 SFINAE 来发挥我的优势 我试图用它来根据是否存在来选择函数实现serialize 对象中的函数 这是我用来确定类型是否定义了 serialize 函数的代码 template
  • Crashlytics 报告错误的行号

    在过去的几周里 我在导入语句行中看到了很多与行号有关的崩溃 例如 这个堆栈跟踪在第 2 行发生崩溃 Fatal Exception java lang IllegalArgumentException Unexpected TLS vers
  • VanillaJS 到 VueJS 错误:Flickity 的错误元素:轮播

    我想得到这个轻快的例子 https codepen io desandro pen RNQgpB CodePen 在 VueJS 组件中工作 HTML div class carousel div class carousel cell d
  • Laravel ORM从自引用表获取N级层次结构JSON

    我在用LARAVEL 4 with MySQL后端 我有一个self referencing带列的表id name type and parent Here parent is foreign key列的Id 表中数据如下 id name
  • 使用 Angular-CLI 安装第 3 方应用程序

    我是 angular cli 的新手 我想安装 npm 库 mdbootstrap 我按照这里的说明进行操作 Angular CLI 说明 https github com angular angular cli global librar
  • WebStorm错误:表达式语句不是赋值或调用

    我正在使用 WebStorm 但收到一个我无法理解的错误 Node js MongoDB var mongoose require mongoose mongoose Promise global Promise mongoose conn
  • 正确检查 nil sqlite 文本列

    我有一个分配给字符串的 sqlite 字符串列 我需要在分配之前确保它不为零 我正在这样做 char isNil sqlite3 column text selectstmt 2 if isNil nil myName NSString s
  • OS X Byobu 垂直分割

    我目前在 OS X 上使用 iTerm2 和 byobu 但我不知道如何在 OS X 上垂直分割屏幕 在 Linux 上 我可以使用 Ctrl F2 垂直分割屏幕 但在 OSX 上则不行 不行 这要归功于苹果的不同键盘 我用谷歌搜索了所有解
  • java 缓冲图像:检测黑色像素

    我有这个简单的代码来浏览 24 位彩色 Windows bmp 文件 BufferedImage mapa BMPDecoder read new File maps map bmp final int xmin mapa getMinX
  • 什么时候会发生下溢?

    我陷入了计算的情况1 77e 308 10触发下溢异常 但计算1 777e 308 10才不是 这很奇怪 因为 当浮点的真实结果发生下溢 操作的幅度小于 即接近于零 可表示为普通浮点数的最小值 目标数据类型 来自算术下溢 维基百科 换句话说
  • 三.js透明物体遮挡

    在 Three js 场景中 我希望有一个不可见的对象 但仍然遮挡场景中的其他对象 就好像它是可见的一样 这可以通过 Three js 库实现吗 这是一个例子 Suppose I have a three js scene that con