0

我想在 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();

我一直在尝试随机数来尝试让它工作,但到目前为止还没有这么幸运!

4

1 回答 1

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 并搜索 CodingUniverse,他有一个关于 VBO 和高级渲染的视频,这是我学习它们的方式!

祝你在 3D 世界里好运,这并不容易,但它(在我看来)比 2D 更令人满意。

另外,考虑投资红皮书,这都是关于 LWJGL 的。

于 2013-02-08T18:25:53.733 回答