java - LWJGL 3D 渲染不起作用

标签 java 3d render lwjgl

我在这里设置了一个主类,它渲染 ArrayList 中的 block ,但是我只看到最后一个要渲染的 block 。为什么我只能看到 ArrayList 中的最后一个 block ?

这是我在主类中渲染 block 的位置:

glPushMatrix();
glTranslatef(0, 0, -10);
Brick.bind();
glBegin(GL_QUADS);
    Block b;
    for(int i = 0; i < blocks.size(); i++)
    {
        b = blocks.get(i);
        b.render();
    }
glEnd();

glPopMatrix(); Display.update();

这是我生成 block 的地方:

public static void generateMap()
    {
        Block b;
        for(float i = 0; i < 99; i += 3)
        {
            for(float r = 0; r < 99; r += 3)
            {
                b = new Block(i, 0f, r, 3f, 3f, 3f);
                blocks.add(b);
            }
        }
    }

然后我在制作每个 block 时使用这个 Block 类:

import static org.lwjgl.opengl.GL11.glTexCoord2f;
import static org.lwjgl.opengl.GL11.glVertex3f;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.newdawn.slick.opengl.Texture;
import org.newdawn.slick.opengl.TextureLoader;


public class Block 
{
    protected static float x;
    protected static float y;
    protected static float z;
    protected static float sx;
    protected static float sy;
    protected static float sz;

    public Block(float x, float y, float z, float sx, float sy, float sz)
    {
        this.x = x;
        this.y = y;
        this.z = z;
        this.sx = sx;
        this.sy = sy;
        this.sz = sz;
    }
    public static void render()
    {
        glTexCoord2f(0,0); glVertex3f(x-sx,y,z-sz);
        glTexCoord2f(0,1); glVertex3f(x,y,z-sz);
        glTexCoord2f(1,1); glVertex3f(x,y,z);
        glTexCoord2f(1,0); glVertex3f(x-sx,y,z);
        //Bottom
        glTexCoord2f(0,0); glVertex3f(x-sx,y-sy,z-sz);
        glTexCoord2f(0,1); glVertex3f(x,y-sx,z-sz);
        glTexCoord2f(1,1); glVertex3f(x,y-sx,z);
        glTexCoord2f(1,0); glVertex3f(x-sx,y-sy,z);
        //Front
        glTexCoord2f(0,0); glVertex3f(x,y,z);               
        glTexCoord2f(0,1); glVertex3f(x,y-sy,z);
        glTexCoord2f(1,1); glVertex3f(x-sx,y-sy,z);
        glTexCoord2f(1,0); glVertex3f(x-sx,y,z);
        //Back
        glTexCoord2f(0,0); glVertex3f(x,y,z-sz);
        glTexCoord2f(0,1); glVertex3f(x,y-sy,z-sz);
        glTexCoord2f(1,1); glVertex3f(x-sx,y-sy,z-sz);
        glTexCoord2f(1,0); glVertex3f(x-sx,y,z-sz);
        //Left
        glTexCoord2f(0,0); glVertex3f(x-sx,y,z);
        glTexCoord2f(0,1); glVertex3f(x-sx,y-sy,z);
        glTexCoord2f(1,1); glVertex3f(x-sx,y-sy,z-sz);
        glTexCoord2f(1,0); glVertex3f(x-sx,y,z-sz);
        //Right
        glTexCoord2f(0,0); glVertex3f(x,y,z);
        glTexCoord2f(0,1); glVertex3f(x,y-sy,z);
        glTexCoord2f(1,1); glVertex3f(x,y-sy,z-sz);
        glTexCoord2f(1,0); glVertex3f(x,y,z-sz);
    }
}

最佳答案

您只能看到最后一个的原因是因为所有“ block ”都在彼此之上!

Block 类中,您已将 xyzsxsysz 变量设置为静态,但它们不应该是静态的!

基本上,static 关键字意味着该值是共享的,因此,如果您在一个位置更改 x ,它也会影响其他所有内容。

建议学习所有 Java 关键字或至少学习一次所有基础知识,因为您会跳入像 OpenGL 这样高级的东西。

关于java - LWJGL 3D 渲染不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16430157/

相关文章:

java - JFrame 的大小实际上是如何工作的?

Java FXML TableColumn 不支持 GregorianCalendar

java - 删除自动生成的 Javadoc 注释 eclipse

java - 如何在不声明权限的情况下读取内部存储中的文件?

silverlight - Silverlight 3-3D引擎

c++ - 有人使用 kinect-v2 的 openNI 获取了深度图像吗?

3d - 确定 3D 点是否在三角形内

c++ - QOpenGLFunctions 的渲染问题

pdf - Grails 渲染 PDF 文件

javascript - Js 在 Rails 中渲染部分的正确位置