【问题标题】:OpenGL: Drawing objects (fixed size, indifferent to zoom, and relative position) on a mapOpenGL:在地图上绘制对象(固定大小、无视缩放、相对位置)
【发布时间】:2010-11-22 17:24:47
【问题描述】:

我正在开发如下所述的 Java OpenGL 应用程序。

应用程序显示世界地图的大型 2D 纹理。某些信息必须在地图上显示为标题(例如,西班牙附近显示其人口的标题)。标题是由多边形和文本组成的 GL 对象。用户必须能够在地图上导航(左、右、上和下)以及放大 (+) 和缩小 (-)。当用户执行这些操作时,地图应该移动或调整大小,并且标题应该随着地图移动,但保持自己的大小不变。

我正在使用 glOrtho 进行 2D 视图,使用 glTranslate 进行移动,使用 glScale 进行缩放。起初,缩放时,字幕会随着地图调整大小,因此字幕会变得太大或太小。为了解决这个问题,我在广告牌上添加了标题 [1]。使用广告牌,字幕不会调整大小,但在放大和缩小时不会保持其与地图的相对位置(我需要西班牙的字幕始终保持在西班牙附近)。

简而言之,我需要字幕随着地图移动,保持固定大小并与地图保持相对位置。

有什么方法可以做我需要做的吗?

[1]http://www.lighthouse3d.com/opengl/billboarding/index.php3?billCheat

【问题讨论】:

    标签: opengl graphics 3d 2d zooming


    【解决方案1】:

    我认为point sprites 会在这里为您服务。点精灵是一个纹理点,您可以使用地图直接在 3D 空间中进行渲染。点的纹理被简单地渲染为“平坦”,而不是像在四边形上绘制的那样扭曲。您甚至可以定义缩放函数,使“广告牌”随距离变化。

    【讨论】:

    • 此时我不需要贴图。我需要在地图上放置由线条和多边形构成的标题。此标题具有固定大小,但它们的位置是相对于地图的。因此,如果地图被缩放,则必须将标题转换为其新的相对位置,并保持其大小。这里 (stackoverflow.com/questions/850988/…) 也有类似的问题,但请记住,我的“点状”形状是线和多边形。
    【解决方案2】:

    我正在寻找与您的问题类似的东西,我需要渲染一个虚线圆圈,无论旋转/视图/缩放都可以保持固定在屏幕上

    经过一些尝试,我设法让它工作,也许它在性能方面可能不是最好的,但如果你没有为现代 GPU 渲染任何繁重的东西,这应该不是问题:

    dispay()..
    
    //  set modelview Matrix
        gl.glMatrixMode(GL2.GL_MODELVIEW);
            gl.glLoadIdentity();
            glu.gluLookAt(0, 0, 2, 0, 0, 0, 0, -1, 0);
    
        gl.glMatrixMode(GL2.GL_PROJECTION);
            gl.glLoadIdentity();
            gl.glOrtho(-1.2, 1.2, -1.1, 1.1, 0, 100);
            renderDashedCircle(gl);
            if(activatePerspectiveView) {
                gl.glLoadIdentity();
                aspect = gLAutoDrawable.getWidth()/gLAutoDrawable.getHeight();
                glu.gluPerspective(60, aspect, 1, 100);
    

    关键渲染在“renderDashedCircle(gl);”中

    不关心正交/透视,这是属于我的程序的东西(基本上它能够在它们之间动态切换)

    【讨论】:

      【解决方案3】:

      我有一个类似的problem

      最终回答了我自己的问题;)
      我的方法使用几何着色器(因此 opengl 3 是最低要求)。它从一个点创建一个四边形;四边形以透视投影呈现 - 不是正交。这样可以轻松进行深度测试(实际上我什至不做任何深度计算——它们都是自动的)。我后来稍微修改了着色器,这样无论缩放是多少,四边形实际上都会保持不变。我希望您首先检查此解决方案是否适合您,然后我将更新我的答案并发布着色器代码并进行解释。

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 2018-03-04
        • 2015-02-12
        • 1970-01-01
        • 2020-12-11
        • 2014-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多