WebGL 多画布three.js 示例

Posted

技术标签:

【中文标题】WebGL 多画布three.js 示例【英文标题】:WebGL Multiple Canvas three.js example 【发布时间】:2013-10-02 20:19:12 【问题描述】:

所以我正在开发一个项目,该项目使用多个不同的相机将场景渲染到不同的画布上。基本上我正在做这个例子:

http://threejs.org/examples/webgl_multiple_canvases_grid.html

我发现这样做的问题是,不同场景的剪裁平面在边缘做了奇怪的事情。如示例所示,使用大对象时它很好,但使用较小的对象时,有些会被剪裁在边缘。我已经做了一个例子来说明这个问题。

http://tinyurl.com/pjstjjd

我想知道是否有办法解决这个问题。我打算尝试和探索的几种不同方法如下:

尝试稍微重叠渲染器,以使剪切平面更宽。 看看有没有办法关闭剪辑 哭着睡觉。

我是否缺少一些简单的东西,或者我必须深入挖掘。

非常感谢您抽出宝贵时间! 艾萨克

【问题讨论】:

小请求,请勿使用 tinyurl 链接。该网站的用户没有任何好处(点击就是点击),如果混淆了链接的实际结束位置 通常 100% 同意!这个问题是它指向的链接很长(比如 1595 个字符对于评论来说太长了),所以有一些用处。是否有其他方式可以考虑共享链接(网站的实际代码编码在 url 中,因此不需要服务器端代码) 您可以使用 Link syntax [Title](Url) (或者更好的是,使用编辑器中的按钮将 url 移动到帖子的末尾),以便在悬停时可见但不会混乱问题?我承认我没有意识到链接这么长 啊!精彩的。这两个都是我不知道的技术!!! 【参考方案1】:

问题是您要创建 4 个App 对象,并且在每个对象中创建不同的随机球体。所以你的 4 个视图在不同的地方有不同的球体集。如果您希望视图匹配,则必须将对象放在每个应用程序中的相同位置。

我在您的示例中的第 129 行粘贴了这段代码

var randomSeed_ = 0;
var RANDOM_RANGE_ = Math.pow(2, 32);

Math.random = function() 
  return (randomSeed_ =
          (134775813 * randomSeed_ + 1) %
           RANDOM_RANGE_) / RANDOM_RANGE_;
;

这是一个随机函数,它为每个应用返回相同的值,因为 randomSeed_ 在每个应用中从 0 开始。

了解您最终想要实现的目标会有所帮助。您链接到的 Three.JS 示例旨在展示如何在网格中的 4 台不同机器上的多个监视器上传播渲染。

This one shows if the monitors are different sizes and not in a grid。 This one shows if the monitors are in a circle or semi circle。例如谷歌的Liquid Galaxy。

This one shows multiple views in a single canvas 虽然在撰写此答案时它看起来需要一些更新。

This one shows drawing using one large canvas and place holder elements for where to draw

【讨论】:

好吧废话....我会制作一个新版本,看看效果如何!感谢您的及时回复

以上是关于WebGL 多画布three.js 示例的主要内容,如果未能解决你的问题,请参考以下文章

Three.js学习总结

Three.js/WebGL 和 2D Canvas -- 将 getImageData() 数组传递给 Three.DataTexture()

WebGL Three.js ColladaLoader 示例失败

webGL和three.js的关系

用于 webgl 渲染器的 canvas 元素的three.js dom id

three.js入门——画一个3D正方体