three.js - 使用WebGLDeferredRenderer时无法呈现THREE.Line

时间:2013-02-11 19:03:18

标签: three.js webgl

我最近将我的场景转换为使用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出现了这个问题。

1 个答案:

答案 0 :(得分:2)

这是因为WebGLDeferredRenderer不支持行和LineBasicMaterial

作为解决方法,您可以这样做:

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