OpenGL:在Map上绘制对象(固定大小、与缩放和相对位置无关)

7xzttuei  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(140)

我正在开发下面描述的Java OpenGL应用程序。
应用程序显示了一个世界Map的大型2D纹理。一些信息必须在Map上以标题的形式表示(例如,西班牙附近显示其人口的标题)。标题是由面和文本组成的GL对象。用户必须能够在Map上导航(左、右、上、下)以及放大(+)和缩小(-)。当用户执行这些操作时,Map应该移动或调整大小,标题应该沿着Map移动,但保持自身的大小不变。
我用glOrtho做2D视图,用glTranslate做移动,用glScale做缩放。一开始,缩放时,字幕会随着Map沿着调整大小,所以字幕会变得太大或太小。为了解决这个问题,我用billboarded the captions。用广告牌,放大和缩小时,标题不会调整大小,但不会保持其与Map的相对位置(我需要西班牙的标题总是停留在西班牙附近)。
总而言之,我需要标题沿着Map移动,保持在一个固定的大小和相对位置的Map。
有什么办法能让我做我该做的事吗

72qzrwbm

72qzrwbm1#

我认为point sprites在这里会很好地为你服务。一个点精灵是一个纹理点,你可以直接用你的Map在3D空间中渲染。这个点的纹理只是简单地渲染为“平面”,而不是像你在四边形上画的那样扭曲。你甚至可以定义缩放函数,这样“广告牌”就可以随着距离的变化而变化。

0pizxfdo

0pizxfdo2#

我正在寻找类似于你的问题,我需要渲染一个虚线圆圈,可以保持固定在屏幕上,无论旋转/查看/缩放
经过一些尝试,我设法让它工作,也许它不可能是最好的性能方面,但如果你不渲染任何沉重的现代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);“
不要关心正交/透视,这是属于我的程序的东西(基本上它能够在它们之间切换)

w8f9ii69

w8f9ii693#

我有一个类似的problem
最后回答了我自己的问题;)
我的方法使用了一个几何着色器(因此opengl 3是最低要求)。四边形是透视投影渲染的--而不是正交的。这使得深度测试很容易(实际上我甚至不做任何深度计算--它们都是自动的)。我后来修改了着色器一点,这样四轴飞行器就能保持不变不管放大倍数是多少我想让你先检查一下这个解决方案对你是否可行我会更新我的答案,并张贴着色器代码和解释它。

相关问题