【发布时间】:2013-03-25 10:55:12
【问题描述】:
请查看this 演示,同时启用和禁用 WebGL。
当您在 WebGL 和画布渲染之间切换时(当 javascript 检测您是否有 WebGL 时会自动完成),仅线框球体(左侧的第一个)会发生变化。
启用 WebGL 后,您还可以看到球体背面的线框(其他球体上隐藏的部分,因为它们具有不透明的材质)。
由于禁用了 WebGL,您将无法再欣赏透明度。
我正在准备一个演示,我想为那些不支持 WebGL 的浏览器提供支持:透明性至关重要,因为我的想法完全基于它。我的演示文稿只有一个 6 面立方体,我想即使是旧 CPU 也应该可以毫无问题地以透明线框呈现它。
three.js 支持这个吗?有什么办法可以做到吗?我应该如何设置材质以使其即使在画布渲染中也能正常工作?
为了进一步证明我的观点,here's 第二个演示。与您在 WebGL 和画布之间切换的问题相同。
当前线框材质是这样声明的:
new THREE.MeshBasicMaterial( { color: 0x00ee00, wireframe: true, transparent: true } );
但仅在 WebGL 中按预期运行。
感谢阅读!
附言如果这不能满足我的需要,我愿意采用 Three.js 的任何替代方案。我必须准备这个演示,但我没有数学/几何知识来自己做这件事,即使它像旋转 3d 立方体一样简单。
使用 webgl:
使用画布渲染:
【问题讨论】:
-
你能展示你的代码的一个活生生的例子(jsfiddle.net)并提出一个具体的问题吗?您只对线框模型感到担忧吗?
-
感谢发帖。问题中链接了两个示例,生成线框材料的代码是发布的。线框“模型”是什么意思?我只需要渲染网格的线框(边缘),如果这就是您的意思,则不需要渲染面。重点是画布渲染缺少一些边缘,而使用 webgl 你可以看到它们。只需尝试使用 Safari 和 Chrome 进行演示,您就会看到不同之处。
-
我看到了不同之处。我要你问一个关于你的代码的具体问题,最好的方法是提供你的代码的一个活生生的例子。
-
对我来说,如果你能张贴截图来说明你的意思会很有帮助。我不确定你想要达到什么目的。
-
请假设我的代码是示例中发布的代码。如果您需要隔离导致问题的部分,只需查看我发布的代码:这就是您决定线框是否透明的地方。