java - 简单的立方体纹理不显示

标签 java opengl

我正在使用 lvjgl 和 lvjgui 开发一个程序。尝试显示 2D 纹理时没有问题,但当我尝试显示 3D 立方体时,并非所有纹理都会显示。这是渲染代码:

@Override
public void render(Context context) {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   // glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glBegin(GL_QUADS);
    glColor3f(0f, 0f, 1f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, 0.5f);
    glVertex3f(0.5f, -0.5f, 0.5f);

    glColor3f(1, 0, 1);
    glVertex3f(0.5f, -0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f,0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, -0.5f);

    glColor3f(0, 1, 1);
    glVertex3f(0.5f, -0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, 0.5f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(0.5f, 0.5f, -0.5f);


    glColor3f(1, 0, 0);
    glVertex3f(0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, 0.5f, -0.5f);

    glColor3f(1, 1, 0);
    glVertex3f(-0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, 0.5f, -0.5f);
    glVertex3f(0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, 0.5f, 0.5f);

    glColor3f(0, 1, 0);
    glVertex3f(-0.5f, 0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, 0.5f);
    glVertex3f(-0.5f, -0.5f, -0.5f);
    glVertex3f(-0.5f, 0.5f, -0.5f);

    glEnd();
    if(rotate)
        glRotatef(0.01f,0.0f,0.5f,0.0f);

}

渲染之前,执行以下操作:

public RenderingCallback() {
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(0.5f);
    glDepthFunc(GL_LEQUAL);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glRotatef(20f,0.5f,0.0f,0.0f);
}

立方体本身看起来像这样: Cube

video

正如您所看到的,蓝色根本没有显示,并且一些纹理相互重叠。如果移除一侧,则会出现蓝色一侧。我怎么解决这个问题?我做错了什么?

最佳答案

您缺少深度缓冲区。在LWJGL初始化中,在调用glfwCreateWindow之前提供深度缓冲区的大小:

glfwWindowHint(GLFW_DEPTH_BITS, 16);

您还应该将深度清除为 1.0 而不是 0.5:

glClearDepth(1.0f);

关于java - 简单的立方体纹理不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59669115/

相关文章:

java - 使用 Spring Cache 的依赖

java - Java 中是否有类似于 C# 的匿名类型的功能?

java - 在 Java 中向上转换子类引用

java - 调用 SQL 创建的函数时我的条件查询出现问题

java - 使用 Android M 上网

opengl - openGL ES和OpenGL函数的区别

c++ - 我需要在这个函数前加上 __stdcall 前缀吗?

c++ - 在可变大小的四边形上包装纹理坐标?

java - OpenGL - 尝试将字节数组转换为 BufferedImage 时图像 == null

c++ - GLSL - GLSL 1.2 中的统一位置和着色器中的深度测试