gpt4 book ai didi

javascript - Three.js 立方体,每个面都有不同的纹理

转载 作者:IT王子 更新时间:2023-10-29 03:22:14 25 4
gpt4 key购买 nike

我正在尝试创建一个每个面上都有不同纹理的 three.js 立方体。

基本上是一个骰子。这是在我的沙盒环境中,所以应该只生成一个旋转的立方体,每边都有骰子图像 (1-6)。完成后,我打算将其用于浏览器基础游戏。这个例子我只在 Chrome 中测试过,尽管考虑将其更改为 Canvas 渲染器以获得额外的浏览器支持。

在这里查看了一些关于 SO 的问题和大量其他谷歌搜索,虽然我得到了答案(实际上看起来相当简单)但我就是无法让它工作。

我是 three.js 的新手,但不是 JavaScript。

我用作引用的页面是

SO - three.js cube with different texture on each face

SO - three.js cube with different texture faces

evanz - Test three.js cube

enriquemorenotent.com - three.js building a cube with different materials on each face

我的代码

var camera, scene, renderer, dice;

init();
animate();

function init() {
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

scene = new THREE.Scene();

camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(110, 110, 250);
camera.lookAt(scene.position);
scene.add(camera);


var materials = [
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-1-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-2-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-3-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-4-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-5-hi.png')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('/Content/Images/dice-6-hi.png')
})
];
dice = new THREE.Mesh(
new THREE.CubeGeometry(562, 562, 562, 1, 1, 1, materials),
new THREE.MeshFaceMaterial());
scene.add(dice);

}

function animate() {
requestAnimationFrame(animate);
dice.rotation.x += .05;
dice.rotation.y += .05;
dice.rotation.z += .05;
renderer.render(scene, camera);
}

我得到的错误是

Uncaught TypeError: Cannot read property 'map' of undefined 

来自 three.js 19546 行(不是最小版本),其中是 bufferGuessUVType(material) 函数 - material 未定义。这让我相信在我的一个/所有 Material 定义中有些东西是不正确的。

使用 three.js r58。

此时真的没有 HTML 或 CSS,只有 JS

我可以很高兴地看到一个立方体在所有六个面上旋转时都显示相同的图像,但不会显示不同的图像。这些图像只是一个骰子点的图像,1 - 6。

再给我一点时间,如果需要我可以做一个 fiddle

最佳答案

编辑:THREE.MultiMaterial 已被弃用。您现在可以将 Material 数组直接传递到构造函数中。像这样:

dice = new THREE.Mesh( new THREE.BoxGeometry( 562, 562, 562, 1, 1, 1 ), materials );

scene.add( dice );

小心不要从网上复制旧示例。

始终检查 Migration Wiki寻求升级到当前版本的帮助。

three.js r.85

关于javascript - Three.js 立方体,每个面都有不同的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17418118/

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