【问题标题】:Zooming in without scaling graphics放大而不缩放图形
【发布时间】:2013-04-19 16:09:14
【问题描述】:

我正在学习用于 2D 的 Opengl(特别是使用 java slick2D 库,但这可能不是这个问题的一个因素)。我发现我可以更改 push 一个新的转换矩阵,例如将世界坐标转换为屏幕(视图)坐标。

我想用它来缩放我的视图,增加对象之间的距离,但是一旦完成,我想在屏幕坐标中绘制图像和形状,比如 HUD。基本上,我希望坐标改变,但图形保持不变,所以我可以在每个比例上渲染自定义图像。

这可以通过一些巧妙的转换或一些 OpenGL 选项来完成,而不是手动计算所有坐标吗?

【问题讨论】:

    标签: opengl scale transformation


    【解决方案1】:
    1. 清除颜色和深度缓冲区

    2. 为缩放的 2D/3D 渲染设置投影/模型视图矩阵

    3. 启用深度测试

    4. 渲染缩放的 2D/3D 场景

    5. 为 2D 叠加重置投影/模型视图

    6. 禁用深度测试

    7. 绘制二维叠加

    8. 重复

    【讨论】:

    • 其实我不是这个意思。没有单独的 2D 和 3D,只有尺度不变的 2D 场景。但我只是想通了自己。将你的头包裹在一堆转换中绝对不是微不足道的。我确实为您的答案投票,因为它仍然有用,但我会选择正确的答案以防万一。非常感谢!
    【解决方案2】:

    好的,想通了,你必须使用两个单独的投影:

    1.- 缩放世界坐标,以便将对象绘制在正确的场景位置:

        g.pushTransform();
    
        // Always zoom in the center of the screen.
        g.translate(resolution.getX(), resolution.getY());
        g.scale(scale, scale);
    
        // Move the view
        g.translate(-view.getX(), -view.getY());
    

    2.- 推一个新矩阵来绘制对象,反转比例变换,使对象的图形不随比例变化:

        g.pushTransform();
    
        // Center on the current object.
        g.translate(pos.x, pos.y);
    
        // Undo scaling of graphics!
        g.scale(1.0f/scale, 1.0f/scale);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2012-06-27
      • 2018-03-03
      • 1970-01-01
      • 2021-01-25
      相关资源
      最近更新 更多