繁体   English   中英

立方体每个面上的 ThreeJs 不同文本

[英]ThreeJs different Text on each face of cube

我正在使用 Threejs 为每个立方体表面上的不同文本制作一个立方体动画。 我使用 DynamicTexture 在立方体的面上放置文本,但它在立方体的每一侧放置相同的文本。 我不知道如何在每一侧放置不同的文字。 有什么办法可以通过用户输入在运行时放置文本吗? 谢谢。

主程序

var scene = new THREE.Scene();
scene.background = new THREE.Color('white');
var camera = new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 1000);
camera.position.set(4, 4, 4);
camera.lookAt(0, 0, 0);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('display').appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera);
var dynamictexture = new THREEx.DynamicTexture(512, 512);
dynamictexture.context.font = "bolder 90px verdana";
dynamictexture.texture.needsUpdate = true;
dynamictexture.clear('#d35400').drawText('Text', undefined, 256, 'green');
var geometry = new THREE.BoxGeometry(2, 2, 2);
var material = new THREE.MeshBasicMaterial({color: 0xffffff, map: dynamictexture.texture, opacity:1, 
transparent: true});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
function animate() {
requestAnimationFrame(animate);
controls.update();
dynamictexture.texture
renderer.render(scene, camera);
};
animate();

您可以使用THREE.MeshFaceMaterial(materials)来完成此操作。 您需要做的就是传递一个包含材质的数组并为每个面指定贴图。

var face_textures = [];
function createFaceTextures() {
  var i;
  for(i = 0; i < 6; i++) {
    var dynamictexture = new THREEx.DynamicTexture(512, 512);
    dynamictexture.context.font = "bolder 90px verdana";
    dynamictexture.texture.needsUpdate = true;
    dynamictexture.clear('#d35400').drawText(i.toString(), undefined, 256, 'green');
    face_textures.push(dynamictexture);
  }
}
createFaceTextures();

var scene = new THREE.Scene();
scene.background = new THREE.Color('white');
var camera = new THREE.PerspectiveCamera(50, window.innerWidth/window.innerHeight, 1, 1000);
camera.position.set(4, 4, 4);
camera.lookAt(0, 0, 0);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('display').appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera);
var dynamictexture = new THREEx.DynamicTexture(512, 512);
dynamictexture.context.font = "bolder 90px verdana";
dynamictexture.texture.needsUpdate = true;
dynamictexture.clear('#d35400').drawText('Text', undefined, 256, 'green');
var geometry = new THREE.BoxGeometry(2, 2, 2,);
var material = new THREE.MeshBasicMaterial({color: 0xffffff, map: dynamictexture.texture, opacity:1, transparent: true});

var materials = [
  new THREE.MeshBasicMaterial({map: face_textures[0].texture}),
  new THREE.MeshBasicMaterial({map: face_textures[1].texture}),
  new THREE.MeshBasicMaterial({map: face_textures[2].texture}),
  new THREE.MeshBasicMaterial({map: face_textures[3].texture}),
  new THREE.MeshBasicMaterial({map: face_textures[4].texture}),
  new THREE.MeshBasicMaterial({map: face_textures[5].texture})
];

var cube = new THREE.Mesh(geometry, materials);
scene.add(cube);
function animate() {
    requestAnimationFrame(animate);
    controls.update();
    dynamictexture.texture
    renderer.render(scene, camera);
}
animate();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM