【问题标题】:2D Coordinate Confusion二维坐标混淆
【发布时间】:2019-05-05 05:08:33
【问题描述】:

好的,所以我以前从未创建过游戏,我正在尝试制作基于 2d 瓷砖的游戏。

所以我真的对一些应该很简单的东西感到困惑,坐标。

我有图块坐标,比如

{0,0,0,0,0,1}
{0,0,1,0,0,1}
{0,0,0,0,0,1}
{0,0,1,1,1,1}
{0,0,0,0,0,1}

假设这是我的世界,我正在尝试渲染它,但是我无法渲染它,每个图块都需要一个宽度, 这就是我感到困惑的地方,所以你可以这样做,我对编码并不陌生

twidth = 100, theight = 100;

for(y = each row) {
    for(x = each tile in each row) {
        draw rect (
            X1 = x*twidth,
            Y1 = y*theight,
            X2 = x*twidth+twidth,
            X2 = y*theight+theight
            )
    }
}

对此我可能错了,但是:现在实际上所有其他内容都需要乘以 twidth/height,如果您想要不同大小的图块会更加困难,至少它让我感到困惑,其他游戏如何处理事情像这样?我不确定我是否很好地解释了我的问题,任何帮助将不胜感激

我正在使用 opengl[legacy],我认为解决方案可能是一个以不同方式设置屏幕空间的功能,因此渲染 glVertex2d(0,1) 实际上是 100px,这会使碰撞等变得更容易

【问题讨论】:

    标签: opengl 2d coordinate-systems opengl-compat


    【解决方案1】:

    我正在使用 opengl[legacy],我认为解决方案可能是一个以不同方式设置屏幕空间的函数,因此渲染 glVertex2d(0,1) 实际上是 100px,这会产生碰撞,等等,更容易

    您可以在旧版 OpenGL 中通过正确设置投影矩阵来实现:

    glMatrixMode(GL_PROJECTION);
    glOrtho(0, 16, 0, 9, -1, 1);
    

    这将设置它,以便glVertex2d(0, 0) 映射到左下角,glVertex2d(16, 9) 将映射到右上角,在视口中为您提供 16x9 的图块。为了以像素为单位固定图块的大小,我们改为计算图块的小数:

    glOrtho(0, (double)viewportWidth / twidth, 0, (double)viewportHeight / theight, -1, 1);
    

    之后,您可以通过GL_MODELVIEW 矩阵平移世界来“滚动”世界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 2011-07-08
      相关资源
      最近更新 更多