javascript - 使用three.js的视差效果
问题描述
我想使用深度图从 2D 图像构建视差效果,类似于this或 this但使用three.js。
问题是,我应该从哪里开始?仅使用PlaneGeometry
带有 a 的 a 可以MeshStandardMaterial
渲染我的 2D 图像而没有视差遮挡。添加depth map
asdisplacementMap
属性后,我可以看到某种位移,但它的分辨率非常低。(也许,因为置换贴图不是用来做这个的?)
我的第一次尝试
import * as THREE from "three";
import image from "./Resources/Images/image.jpg";
import depth from "./Resources/Images/depth.jpg";
[...]
const geometry = new THREE.PlaneGeometry(200, 200, 10, 10);
const material = new THREE.MeshStandardMaterial();
const spriteMap = new THREE.TextureLoader().load(image);
const depthMap = new THREE.TextureLoader().load(depth);
material.map = spriteMap;
material.displacementMap = depthMap;
material.displacementScale = 20;
const plane = new THREE.Mesh(geometry, material);
或者我应该使用一个Sprite
物体,它的脸总是指向相机?但是如何应用depth map
到它呢?
我已经用我目前所拥有的东西建立了一个代码沙盒。它还包含event listener
用于鼠标移动并在移动时按原样旋转相机work in progress
。
更新 1
所以我想通了,我似乎需要一个定制ShaderMaterial
。在查看了pixjs 的实现后,我发现它是基于自定义着色器的。
由于我可以访问源代码,我需要做的就是重写它以与threejs兼容。但最大的问题是:如何
如果有人能指出我正确的方向,那就太棒了,谢谢!
解决方案
推荐阅读
- javascript - 如何提取页面的实际href,在检查该页面时显示为#
- command-line - 使用命令行或 WMI 查询(无 powershell)获取分配给 AD 中安全组的打印机列表
- php - 如何在首字母日期中将日期拆分为间隔
- javascript - 无法更新反应状态
- reactjs - 如何在反应应用程序中按属性选择嵌套层次结构中的所有对象?
- python-3.6 - python3.6 导入简历失败
- mysql - 查询mysql获取最大值和分组依据
- jquery - 如何使用 JQuery 查找 HTML 类的数组索引的最大值
- javascript - nodejs中zip的多线程
- python - 我想在 jupyter notebook 中显示一个数据框,它在微秒内频繁更新