2013-06-18 93 views
0

对于材质,设置THREE.FlatShading似乎不适用于BufferGeometry。它是否实施?Three.js - 为BufferGeometry实现的平面着色

我创建BufferGeometryCTMLoader (useBuffers = true)shading: THREE.FlatShading地应用MeshLambertMaterialMeshNormalMaterial。 Three.js仍将所有内容渲染为SmoothShading。

如果我切换到ClassicGeometry(useBuffers = false),一切都按预期工作。不幸的是,这对我们来说不起作用,因为我们的模型非常庞大,这正是使用BufferGeometry的原因。

它只是没有执行或是非常困难/耗时/不可能实现?

非常感谢您提供任何提示或建议。我正在使用最新的r58版本。

P.S.

我发现最近Ryan Rix的帖子在同一主题http://rix.si/2013/04/15/threejs-ctm-and-you/,他不得不切换到ClassicGeometry使其工作。

+0

它没有在r.58中实现。作为一个实验,在渲染之前,请尝试调用'BufferGeometry.computeVertexNormals()'并查看它是否产生平面着色。这当然会覆盖你现有的顶点法线。 – WestLangley

+0

@WestLangley,谢谢,我试过了 - 不起作用。同样设置dynamic = true也没有帮助。 – Simon

回答

0

In three.js r73平面着色肯定与THREE.MeshPhongMaterial一起工作。您可以这样使用:

geometry = new THREE.BufferGeometry(); 

//... make your geometry 

material = new THREE.MeshPhongMaterial({ 
    color: 0xff0000, 
    shading: THREE.FlatShading 
}); 

mesh = new THREE.Mesh(geometry, material); 

这对THREE.MeshLambertMaterial还没有效果。但他们正在努力。检查相关问题here on GitHUB