Java openGL - 绘制 3D 对象

标签 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();

我刚刚尝试随机数来尝试让它发挥作用,但到目前为止还没有这么幸运!

最佳答案

首先,反射(reflection)可能会很困难,具体取决于您想要如何进行。在尝试类似的事情之前,您肯定需要学习更多 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 上搜索 theCodingUniverse,他有一个有关 VBO 和高级渲染的视频,这就是我学习它们的方式!

祝你在 3D 世界里好运,这一点都不容易,但(在我看来)当你让某些东西发挥作用时,它比 2D 更令人满意。

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

关于Java openGL - 绘制 3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778809/

相关文章:

java - 用于字节码检索的解析器 dex 文件

java - 从文件对象枚举加载

带有大字体的 Windows 上的 Java 9

c++ - 在 opengl 阴影映射中将顶点深度信息存储在纹理中

java - Spring Security 5,资源上没有 "Access Control Allow Origin" header

java - ImageIO.read(getClass().getResource ("imagepath")) 中 getclass() 的实际用途是什么

java - 尝试使用 LWJGL 运行简单的 GLSL 着色器程序,但此代码不起作用

c++ - 为 OpenGL 设置剪切矩形?

c++ - OpenGL 不绘制三角形

linux - glUseProgram() GL_INVALID_OPERATION 1282 在 Ubuntu Gnome 17.04 Intel HD4000 上