【发布时间】:2011-12-04 00:59:52
【问题描述】:
我还是个图形编程新手,我敢打赌下面的问题只是配置错误。
我正在使用 webgl 图形和 box2dweb 物理创建游戏。不幸的是,该图显示了物理体之间的间隙(左边是我的实际渲染,右边是在另一个画布上使用 box2dweb 的调试绘图进行的渲染):
box2d 和 webgl 都使用相同的坐标系和盒子大小。没有转换。红色框实际上是纹理,尽管这并没有什么区别。红框是动态体,绿框是静态体。
显然我不能只调整图形或物理的大小。如果我把图形做得更大,绿色框会重叠,如果把物理做得更小,就会有物理间隙。
这是另一个例子:
而且,有时,没有间隙,就像下面那样(只是将物理身体向右移动了一点)
黑盒子只是彩色绘制的(没有纹理)。查看上一张图片,我想这与将浮动世界坐标转换为屏幕像素坐标有关,但我不知道修复此问题的选项是什么。
非常感谢您的帮助
[更新]
这是一个正射投影矩阵,我按以下方式初始化:
mat4.ortho(-this.vpWidth * this.zoom, this.vpWidth * this.zoom, -this.vpHeight * this.zoom, this.vpHeight * this.zoom, 0.1, 100.0, this.pMatrix);
vpWidth 和 vpHeight 是画布尺寸 (640 * 480)。投影矩阵被传递给顶点着色器并与模型视图矩阵和顶点位置相乘。我玩弄缩放因子。我越放大差距越大。
[更新 2]
好的。我对此进行了更多调查。糟糕的齐柏林飞艇有一个很好的暗示。 box2d 在主体之间有间隙以避免隧道效应。虽然这不是完整的解释。我查看了调试绘制代码——它没有调整任何东西的大小。我做了一个小测试,在 webgl 和 debug draw 中都放大了,结果如下:
使用 10 倍缩放两者具有相同的间隙,但在“正常”缩放中,webgl 绘制的间隙比画布 2d 更大。可能是什么解释?我的猜测是 anti-aliasing,它为 canvas 2d 启用,但不适用于 webgl(我正在使用 firefox - 我想我今天晚些时候会进行 chrome 测试,看看会发生什么)
【问题讨论】:
-
我认为我们需要更多信息才能提供帮助。我的第一印象是您的正交投影矩阵与您的画布尺寸不匹配。您能否详细介绍一下您的场景设置?
-
我稍微更新了帖子。它确实是一个正交投影。谢谢。
标签: graphics opengl-es box2d webgl