【问题标题】:three.js - Unable to render THREE.Line when using WebGLDeferredRendererthree.js - 使用 WebGLDeferredRenderer 时无法呈现 THREE.Line
【发布时间】:2013-02-11 19:03:17
【问题描述】:

我最近将我的场景转换为使用WebGLDeferredRenderer,因为它更容易实现 SSAO。但是,由于转换为延迟渲染器,我无法渲染 THREE.Line 对象。相反,我收到以下错误:

THREE.Material: 'shading' parameter is undefined.

这是在我不使用延迟渲染器时可以正常工作的线条(网格)的代码:

var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( -2500, 0, 0 ) );
geometry.vertices.push( new THREE.Vector3( 2500, 0, 0 ) );

linesMaterial = new THREE.LineBasicMaterial( {color: 0xb9b9b9, linewidth: 0.1} );

for ( var i = 0; i <= 50; i ++ ) {

    var line = new THREE.Line( geometry, linesMaterial );
    line.position.z = ( i * 100 ) - 2500;
    scene.add( line );

    var line = new THREE.Line( geometry, linesMaterial );
    line.position.x = ( i * 100 ) - 2500;
    line.rotation.y = 90 * Math.PI / 180;
    scene.add( line );

}

我尝试将 shading 属性添加到 THREE.LineBasicMaterial 的值,例如 THREE.FlatShading,但我仍然遇到相同的错误。

该错误是从主three.js 脚本的THREE.Material 部分报告的。如果有帮助,我正在使用稍微定制的 three.js 版本——http://alteredqualia.com/three/examples/js/three.max.deferredday.js

感谢您的任何帮助!

更新

Here is a quick hack 公开版的 Three.js 出现了这个问题。

【问题讨论】:

    标签: three.js webgl


    【解决方案1】:

    这是因为行和LineBasicMaterial 尚不支持 WebGLDeferredRenderer。

    作为一种变通方法,您可以这样做:

    var geometry = new THREE.PlaneGeometry( 5000, 5000, 50, 50 );
    var material = new THREE.MeshBasicMaterial( { color: 0xb9b9b9, wireframe: true } );
    scene.add( new THREE.Mesh( geometry, material ) );
    

    很遗憾,material.wireframeLinewidth 也不支持。

    three.js r.55

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2013-01-17
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多