OpenGL:在地图上绘制对象(固定大小,无差异缩放和相对位置)

时间:2010-11-22 17:24:47

标签: opengl graphics 3d 2d zoom

我正在开发下面描述的Java OpenGL应用程序。

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

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

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

有没有办法做我需要做的事情?

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

3 个答案:

答案 0 :(得分:0)

我认为point sprites会很好地为您服务。点精灵是一个纹理点,您可以直接使用地图在3D空间中渲染。点的纹理简单地呈现为“平坦”,而不像你在四边形上画出的那样扭曲。您甚至可以定义缩放功能,以便“广告牌”随距离而变化。

答案 1 :(得分:0)

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

经过一些尝试后,我设法让它工作,也许它不是最好的表现,但如果你没有为现代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);"

不关心Ortho / perspective,这是属于我的程序的东西(基本上它能够在它们之间切换)

答案 2 :(得分:0)

我有一个类似的problem

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