我还是一个图形编程新手,以下问题可能只是配置错误的问题。
我正在使用WebGL进行图形和Box2dweb进行物理的游戏开发。不幸的是,绘图显示物体之间存在间隙(左侧是我的实际渲染结果,右侧是在另一个画布中使用Box2dweb的调试绘图的渲染结果):
两个Box2D和WebGL使用相同的坐标系和盒子大小。没有转换。红色的盒子实际上是纹理,但这并没有什么区别。红色的盒子是动态物体,绿色的盒子是静态物体。
显然,我不能仅仅调整图形或物理。如果我让图形变大,绿色的盒子会重叠,如果我让物理变小,就会有物理间隙。
这里是另一个例子:
此外,有时候没有间隙,就像在下面的图像中(只是将物理物体向右移动了一点)
黑色的盒子只是彩色绘制(无纹理)。看着前面的图片,我想这与将浮点世界坐标转换为屏幕像素坐标有关,但我不知道修复此问题的选项是什么。
非常感谢您的帮助。
【更新】
这是一个正交投影矩阵,我是这样初始化的:
我正在使用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]
好的zeppelin提供了一个好的提示:box2d在物体之间留下间隙以避免穿透,但这并不是完整的解释。我查看了调试绘图代码-没有调整任何尺寸。我进行了一项小测试,在webgl和调试绘制中进行了放大,得到了如下结果:
10倍缩放时,两者都有相同大小的间隙,但在“正常”缩放时,webgl绘制的间隙比canvas 2d更大。可能的解释是抗锯齿,在canvas 2d上启用,但在webgl上未启用(我使用firefox - 猜测今天稍后会进行chrome测试以查看结果)