2013-02-08 118 views
0

我正在寻找在OpenGL中绘制3D对象,但最好的办法是什么?我正在考虑在2D中绘制它的侧面轮廓,然后将它充实成3D,但这有可能吗?我认为这样做会更容易,然后直接进入3D,但如果你不能,那么ID就是在浪费我的时间。Java openGL - 绘制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

好的首先,根据你想要做什么,反射可能很难。在尝试这样的事情之前,你一定需要学习更多的OpenGL。其次,3D对象需要一些更多的矩阵的东西,这是一个例子,从我的init方法在我的3D游戏:

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()),则您的方法是正确的。然而,即时模式现在已经被弃用,我们通常使用VBOs。如果您使用LWJGL,我会建议您在YouTube上搜索编码大全,他有一个关于VBOs和高级渲染的视频,以及我学习它们的方式!

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

此外,请考虑投资RedBook,其全部关于LWJGL。

+0

感谢您的回复,即时通讯使用JOGL,我知道有点不同于LWJGL,我有一个示例代码,它使用2个3D对象,但是当我复制一个代码并编辑翻译数字时,它似乎没有做任何事情。 它似乎也几乎没有Java/JOGL openGL上的任何教程! – thrash 2013-02-08 18:33:41

+0

你能发布代码吗?我会看看它。 – 2013-02-08 18:48:32

+0

非常感谢,只是编辑了原来的问题! – thrash 2013-02-08 18:56:00