Three.js - CanvasRenderer 不使用多种材质渲染网格
Three.js - CanvasRenderer not rendering Mesh with multiple materials
我在使用 CanvasRenderer 渲染具有多个 material 应用于 BoxBufferGeometry 的网格时遇到问题。它呈现一个没有应用 materials 的网格。这只是 CanvasRenderer 的问题,当我将相同的 Mesh 与 WebGLRenderer 一起使用时,一切都按预期工作。
这是一个示例代码:
// three.js: multiple materials on a single mesh
var renderer, scene, camera, mesh;
init();
render();
function init() {
// renderer
renderer = new THREE.CanvasRenderer( { alpha: true } );
renderer.setSize( window.innerWidth / 2, window.innerHeight );
document.body.appendChild( renderer.domElement );
// scene
scene = new THREE.Scene();
// camera
camera = new THREE.PerspectiveCamera( 40, (window.innerWidth / 2) / window.innerHeight, 1, 1000 );
camera.position.set( 15, 20, 30 );
camera.lookAt(scene.position);
scene.add( camera );
// ambient
scene.add( new THREE.AmbientLight( 0xffffff, 0.1 ) );
// light
camera.add( new THREE.PointLight( 0xffffff, 1 ) );
// geometry
var geometry = new THREE.BoxBufferGeometry( 10, 10, 10 );
// materials
var material0 = new THREE.MeshBasicMaterial({ color: 0xff0000 });
var material1 = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
var material2 = new THREE.MeshBasicMaterial({ color: 0x0000ff });
var material3 = new THREE.MeshBasicMaterial({ color: 0xffff00 });
var material4 = new THREE.MeshBasicMaterial({ color: 0x00ffff });
var material5 = new THREE.MeshBasicMaterial({ color: 0xff00ff });
var materials = [ material0, material1, material2, material3, material4, material5 ];
// mesh
mesh = new THREE.Mesh( geometry, materials );
scene.add( mesh );
}
function render() {
requestAnimationFrame(render);
mesh.rotation.x += 0.005;
mesh.rotation.y += 0.01;
renderer.render( scene, camera );
}
我也做过这个fiddle
在哪里你可以准确地看到我在说什么。在 fiddle 中有一个 Mesh(立方体),所有 6 个组(边)都在不同的 material(颜色)中,并且相同的 Mesh 是用 WebGLRenderer(左)和 CanvasRenderer(右)渲染的。
有经验的人可以帮助我理解这一点吗?
难道我做错了什么?
CanvasRenderer 是否有一些限制使其无法渲染这样的网格,如果是这样,我将如何以其他方式实现这种效果?
这是一个错误吗,我应该将其报告为 three.js 存储库中的问题吗?
感谢您的帮助!
注意:
我是 Three.js 的新手,所以如果我犯了一些明显的错误,我深表歉意。
CanvasRenderer 对我来说至关重要,因为我使用 phantom.js 来捕捉一些屏幕截图。
Three.jsr93
CanvasRenderer
似乎不支持 BufferGeometry
和多材质。
解决方法是改用 Geometry
。
var geometry = new THREE.BoxGeometry( 10, 10, 10 );
three.js r.93
我在使用 CanvasRenderer 渲染具有多个 material 应用于 BoxBufferGeometry 的网格时遇到问题。它呈现一个没有应用 materials 的网格。这只是 CanvasRenderer 的问题,当我将相同的 Mesh 与 WebGLRenderer 一起使用时,一切都按预期工作。
这是一个示例代码:
// three.js: multiple materials on a single mesh
var renderer, scene, camera, mesh;
init();
render();
function init() {
// renderer
renderer = new THREE.CanvasRenderer( { alpha: true } );
renderer.setSize( window.innerWidth / 2, window.innerHeight );
document.body.appendChild( renderer.domElement );
// scene
scene = new THREE.Scene();
// camera
camera = new THREE.PerspectiveCamera( 40, (window.innerWidth / 2) / window.innerHeight, 1, 1000 );
camera.position.set( 15, 20, 30 );
camera.lookAt(scene.position);
scene.add( camera );
// ambient
scene.add( new THREE.AmbientLight( 0xffffff, 0.1 ) );
// light
camera.add( new THREE.PointLight( 0xffffff, 1 ) );
// geometry
var geometry = new THREE.BoxBufferGeometry( 10, 10, 10 );
// materials
var material0 = new THREE.MeshBasicMaterial({ color: 0xff0000 });
var material1 = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
var material2 = new THREE.MeshBasicMaterial({ color: 0x0000ff });
var material3 = new THREE.MeshBasicMaterial({ color: 0xffff00 });
var material4 = new THREE.MeshBasicMaterial({ color: 0x00ffff });
var material5 = new THREE.MeshBasicMaterial({ color: 0xff00ff });
var materials = [ material0, material1, material2, material3, material4, material5 ];
// mesh
mesh = new THREE.Mesh( geometry, materials );
scene.add( mesh );
}
function render() {
requestAnimationFrame(render);
mesh.rotation.x += 0.005;
mesh.rotation.y += 0.01;
renderer.render( scene, camera );
}
我也做过这个fiddle
在哪里你可以准确地看到我在说什么。在 fiddle 中有一个 Mesh(立方体),所有 6 个组(边)都在不同的 material(颜色)中,并且相同的 Mesh 是用 WebGLRenderer(左)和 CanvasRenderer(右)渲染的。
有经验的人可以帮助我理解这一点吗? 难道我做错了什么? CanvasRenderer 是否有一些限制使其无法渲染这样的网格,如果是这样,我将如何以其他方式实现这种效果? 这是一个错误吗,我应该将其报告为 three.js 存储库中的问题吗?
感谢您的帮助!
注意: 我是 Three.js 的新手,所以如果我犯了一些明显的错误,我深表歉意。 CanvasRenderer 对我来说至关重要,因为我使用 phantom.js 来捕捉一些屏幕截图。
Three.jsr93
CanvasRenderer
似乎不支持 BufferGeometry
和多材质。
解决方法是改用 Geometry
。
var geometry = new THREE.BoxGeometry( 10, 10, 10 );
three.js r.93