1

出于某种我一生都无法弄清楚的原因,我在 JOGL hello world 程序中的文本根本不会出现。我将包括显示方法,以便你们都知道我在说什么。

public void display(GLAutoDrawable gLDrawable)
    {
        final GL gl = gLDrawable.getGL();
        final GLU glu = new GLU();
        GLUT glut = new GLUT();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        gl.glLoadIdentity();
        glu.gluLookAt(0f,0f,0f,0f,0f,-800f,0,1,0);
        gl.glTranslatef(0.0f,0.0f,5.0f);
        gl.glColor3f(1f, 1f, 1f);

        gl.glRasterPos2f(250f,250f);

        glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "Hello World!");

        gl.glFlush();
    }
4

3 回答 3

1

我对此进行了一些修改,但我也无法显示任何内容。

gluLookAt 调用肯定很糟糕:您将相机放置在 (0,0,0) 并朝向 z=-800,但您将文本放置在 z=0。显然什么都不会出现。

我还注意到您没有调用通常应该调用的 glViewport() 来将场景映射到组件中。

您在这里遇到的几乎肯定是 GL 问题,而不是 JOGL 问题。查看 OpenGL 编程指南中的故障排除提示。如果您没有副本,并且打算进行任何重要的 GL 编程,我建议您获得一份。我还将用在同一位置绘制的多边形替换您的文本。当我这样做时,什么都没有出现,所以几乎可以肯定这是一个矩阵问题,与您的文本无关。当您显示多边形时,您可以将其替换为文本。一次解决一个问题。您也可以尝试在这个问题中添加 opengl 标记,因为这会吸引一些专业的 OpenGL 程序员。

于 2009-04-14T15:34:44.487 回答
0

我没有使用过 JOGL,但是在使用 C++ 的 OpenGL 中,您需要在刷新后交换 GLUT 的缓冲区:

glutSwapBuffers();

JOGL 中的等价物可能是:

glut.glutSwapBuffers();

在 gl.glFlush() 之后;

于 2009-04-13T21:27:59.323 回答
0

我不喜欢 -800f

glu.gluLookAt(0f,0f,0f,0f,0f,-800f,0,1,0);

尝试调整这个数字。也许甚至删除整个 LookAt 方法调用,你不应该需要它。

编辑 它也可能是一个照明问题。您似乎没有指定任何光源,也没有以任何方式启用照明。也许您的文字已显示,但与背景一样暗......

于 2009-04-13T21:34:06.533 回答