Java openGL - 绘制3D对象

时间:2013-02-08 18:15:04

标签: java opengl

我想在openGL中绘制一个3D对象但是最好的方法是什么呢?我正在考虑在2D中绘制它的侧面轮廓,然后可能将它充实成3D,但这可能吗?我认为这样做会更容易,然后直接进入3D,但如果你不能再这样就浪费我的时间了。

我也无法弄清楚如何添加天空甚至可能是大海的反射,这很容易吗?


   gl.glClear(GL.GL_COLOR_BUFFER_BIT);
   gl.glColor3f(1.0f, 1.0f, 1.0f);

   gl.glPushMatrix();
   gl.glTranslatef(-1.0f, 0.0f, 0.0f);
   gl.glRotatef((float) shoulder, 0.0f, 0.0f, 1.0f);
   gl.glTranslatef(1.0f, 0.0f, 0.0f);
   // gl.glPushMatrix();
   gl.glScalef(2.0f, 0.4f, 1.0f);
   glut.glutWireCube(1.0f);
   // gl.glPopMatrix();

   gl.glTranslatef(1.0f, 0.0f, 0.0f);
   gl.glRotatef((float) elbow, 0.0f, 0.0f, 1.0f);
   gl.glTranslatef(1.0f, 0.0f, 0.0f);
   // gl.glPushMatrix();
   gl.glScalef(2.0f, 0.4f, 1.0f);
   glut.glutWireCube(1.0f);
   // gl.glPopMatrix();

   gl.glTranslatef(1.0f, 1.0f, 1.0f);
   gl.glRotatef((float) hand, 0.0f, 0.0f, 1.0f);
   gl.glTranslatef(1.0f, 0.0f, 0.0f);
   // gl.glPushMatrix();
   gl.glScalef(2.0f, 0.4f, 1.0f);
   glut.glutWireCube(1.0f);
   // gl.glPopMatrix();

我一直在尝试使用随机数来尝试让它工作,但到目前为止还没有这样的运气!

1 个答案:

答案 0 :(得分:1)

好的,首先,根据你想要的方式,反思很难。在尝试这样的事情之前,你肯定需要学习更多的OpenGL。其次,3D对象需要更多矩阵内容,这是我在3D游戏中使用init方法的一个例子:

private void initGl() {
    glViewport(0, 0, Display.getWidth(), Display.getHeight());
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLU.gluPerspective(45.0f, Display.getWidth() / Display.getHeight(), 1.0f, 100.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glEnable(GL_FOG);
    glFogi(GL_FOG_MODE, GL_EXP2);
    glFogf(GL_FOG_DENSITY, density);
    glHint(GL_FOG_DENSITY, GL_FASTEST);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
}

在绘制之前,您还需要像这样清除缓冲区:

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

当你说只是充实2D物体时,你几乎是正确的。如果我们仍然使用立即模式(glBegin()/glEnd()),您的方法将是正确的。但是,立即模式现在已弃用,我们通常使用VBO。如果你使用的是LWJGL,我会建议去YouTube上搜索编码宇宙,他有一个关于VBO和高级渲染的视频,我是如何学习它们的!

在3D世界中祝你好运,它根本不容易,但它(在我看来),当你得到一些工作时,比2D更令人满意。

另外,考虑投资RedBook,全部是关于LWJGL。