4

我最近将我的场景转换为使用 a 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.Material主 three.js 脚本的部分报告的。如果有帮助,我将使用 three.js 的稍微定制的版本 - <a href="http://alteredqualia.com/three/examples/js/three.max.deferredday.js" rel="nofollow"> http://alteredqualia.com/three/examples/js/three.max.deferredday.js

任何和所有的帮助表示赞赏!

更新

这是一个快速破解公开版本的 Three.js 展示此问题的方法。

4

1 回答 1

2

这是因为LineBasicMaterialWebGLDeferredRenderer (尚)不支持行和。

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

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的是也不支持。

三.js r.55

于 2013-02-11T19:40:59.190 回答