gpt4 book ai didi

javascript - 将 png 转换为 Three.js 平面中的高度

转载 作者:行者123 更新时间:2023-12-01 00:48:52 26 4
gpt4 key购买 nike

我在 Three.js 中可视化该图像 /image/EzfcS.png使用平面几何图形,我想向与该图像对应的平面添加高度 /image/hMj91.png(白色区域高度较高)

我怎样才能实现这个目标?

这是我当前的简单的 Three.js 代码:

<!DOCTYPE html>
<html lang="en">

<head>
<title>Vis</title>
<style>
body {
margin: 0;
height: 100vh;
}
canvas {
display: block;
}
</style>
</head>

<body>
<script src="lib/three.js"></script>
<script src="lib/OrbitControls.js"></script>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 10;
var renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
var geometry = new THREE.PlaneGeometry(15, 12);
var loader = new THREE.TextureLoader();
var material = new THREE.MeshLambertMaterial({
map: loader.load('https://i.imgur.com/hHZICLa.jpg', render),
side: THREE.DoubleSide
});
var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(0, 0, 0);
scene.add(mesh);
var light = new THREE.DirectionalLight(0xffffff);
light.position.set(1, 1, 1);
scene.add(light);
var controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.addEventListener('change', render); // call this only in static scenes (i.e., if there is no animation loop)
controls.minDistance = 5;
controls.maxDistance = 50;
controls.minPolarAngle = 0.05;
controls.maxPolarAngle = Math.PI / 1.01;
controls.minAzimuthAngle = -Math.PI / 2.02;
controls.maxAzimuthAngle = Math.PI / 2.02;

function render() {
renderer.render(scene, camera);
}
</script>

我想我应该向geometry添加段,但当前图像和高度图的尺寸为1500 x 1200,并使用new THREE.PlaneGeometry(15, 12, 1500, 1200); 需要大量内存并使浏览器崩溃。

我想我应该将高度图读取为像素并在像这样的循环中应用它们的值

for (var i = 0; i <  i < mesh.geometry.vertices.length; i++) {
mesh.geometry.vertices[i].z = pixelvalue;
}

但我不知道如何将像素值加载为高度,以及如何使其对应于图像的完全相同的像素(或本例中的顶点)。

感谢您的阅读

最佳答案

您可以在顶点着色器中使用displacementMap执行这种类型的顶点位移。 。您只需切换到 MeshPhongMaterial 即可使用这种纹理。

Material 属性displacementScaledisplacementBias允许您根据您的要求调整效果。

关于javascript - 将 png 转换为 Three.js 平面中的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57148291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com