【问题标题】:Three.js - CanvasRenderer not rendering Mesh with multiple materialsThree.js - CanvasRenderer 不使用多种材质渲染网格
【发布时间】:2023-03-23 19:35:01
【问题描述】:

CanvasRenderer 渲染一个网格时遇到问题,该网格将多个材质应用于 BoxBufferGeometry。它渲染一个没有应用材质的网格。这只是 CanvasRenderer 的问题,当我使用与 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

在那里你可以准确地看到我在说什么。在小提琴中有一个网格(立方体),它具有不同材质(颜色)的所有 6 个组(边),并且使用 WebGLRenderer(左)和 CanvasRenderer(右)渲染相同的网格。

有更多经验的人可以帮助我理解这一点。 难道我做错了什么? CanvasRenderer 是否存在一些限制,使其无法渲染这样的网格,如果是这样,我将如何以其他方式实现这种效果? 这是一个错误,我应该将其作为问题报告到 three.js 存储库吗?

感谢您的帮助!

注意: 我是 Three.js 的新手,所以如果我犯了一些明显的错误,我深表歉意。 CanvasRenderer 对我来说至关重要,因为我使用 phantom.js 来捕获一些屏幕截图。

三.js r93

【问题讨论】:

    标签: javascript three.js phantomjs


    【解决方案1】:

    CanvasRenderer 似乎不支持BufferGeometry 和多材质。

    解决方法是改用Geometry

    var geometry = new THREE.BoxGeometry( 10, 10, 10 );
    

    three.js r.93

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多