Java VBO渲染我没有渲染的顶点';不要告诉它

Java VBO渲染我没有渲染的顶点';不要告诉它,java,opengl,lwjgl,vbo,Java,Opengl,Lwjgl,Vbo,在opengl中以即时模式渲染世界后,我开始学习VBO。除了分散在世界各地之外,其他一切都很好。我确信我没有指定这些随机顶点。但是,当我将UV坐标从1更改为.5时,创建的形状会变小。我已经检查了我的紫外线坐标好几次了,但我似乎没有发现任何错误。正如我所说,我在使用VBO方面有点不在话下,所以如果能帮助我将这些形状从我的世界中解放出来,我将不胜感激。这是我的源代码(纹理的ss=S坐标起点和se=S坐标终点): 公共类MyProject{ 内部宽度=1,深度=1,高度=1,宽度=854,高度=480

在opengl中以即时模式渲染世界后,我开始学习VBO。除了分散在世界各地之外,其他一切都很好。我确信我没有指定这些随机顶点。但是,当我将UV坐标从1更改为.5时,创建的形状会变小。我已经检查了我的紫外线坐标好几次了,但我似乎没有发现任何错误。正如我所说,我在使用VBO方面有点不在话下,所以如果能帮助我将这些形状从我的世界中解放出来,我将不胜感激。这是我的源代码(纹理的ss=S坐标起点和se=S坐标终点):

公共类MyProject{
内部宽度=1,深度=1,高度=1,宽度=854,高度=480;
浮动大小=.50f;
摄像头=新摄像头();
块[]块[]块=新块[高度][宽度][深度];
int-textureId、vboHandle、vtoHandle;
浮动缓冲区vbo、vto;
公共静态void main(字符串[]args){
MyProject mp=新的MyProject();
mp.start();
}
公开作废开始(){
initDisplay();
initGL();
initWorld();
run();
}
公共世界(){

对于(int x=0;xglDrawArrays,需要渲染的顶点数,而不是附加的缓冲区大小。这里有一些神奇的数字(
24*3
),所以很可能是你弄错了

public class MyProject {

int width=1,depth=1,height=1,w=854,h=480;
float size= .50f;
Camera cam = new Camera();
Block[][][] blocks = new Block[height][width][depth]; 
int textureId,vboHandle,vtoHandle;
FloatBuffer vbo,vto;

public static void main(String[] args){
    MyProject mp = new MyProject();
    mp.start();
}

public void start(){
    initDisplay();
    initGL();
    initWorld();
    run();
}

public void initWorld(){
    for(int x = 0; x<blocks[0].length;x++){
        for(int y = 0; y<blocks.length;y++){
            for(int z = 0; z<blocks[0][0].length;z++){
                blocks[y][x][z] = new Block(x,y,z);
                blocks[y][x][z].rendertype=GL11.GL_QUADS;
            }
        }
    }
}

public void initDisplay(){
    try {
        boolean set=false;
        DisplayMode[] displays = Display.getAvailableDisplayModes();
        for(int i=0;i<displays.length;i++){
            DisplayMode d = displays[i];
            if(d.getWidth()==w&&d.getHeight()==h){
                Display.setDisplayMode(d);
                set=true;
                break;
            }
        }
        if(!set)Display.setDisplayMode(new DisplayMode(w,h));
        Display.create();
    } catch (LWJGLException e) {
        e.printStackTrace();
    }
}

public void initGL(){
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL11.GL_CULL_FACE);
    GL11.glShadeModel(GL11.GL_SMOOTH);
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    GL11.glClearDepth(1.0);
    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glDepthFunc(GL11.GL_LEQUAL);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();

    GLU.gluPerspective(45.0f, (float)w/(float)h, .001f, 100f);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    textureId = Texture.loadTexture(Texture.loadImage("/imgs/texture.png"));
    vboHandle = GL15.glGenBuffers();
    vtoHandle = GL15.glGenBuffers();

}

public void run(){
    while(!Display.isCloseRequested()){
        Input.tick();
        cam.tick();
        render();
        Display.update();
        Display.sync(60);
    }
    Display.destroy();
    GL15.glDeleteBuffers(vboHandle);
    GL15.glDeleteBuffers(vtoHandle);
    GL11.glDeleteTextures(textureId);
}

public Block getBlock(int x, int y, int z){
    if(x<0||x>=width-1||y<0||y>=height-1||z<0||z>=depth-1){
        return null;
    }
    else return blocks[y][x][z];
}

public boolean checkSurroundings(int x, int y, int z){
    if(getBlock(x,y-1,z)!=null&&getBlock(x,y+1,z)!=null&&
            getBlock(x,y,z-1)!=null&&getBlock(x,y,z+1)!=null&&
                    getBlock(x-1,y,z)!=null&&getBlock(x+1,y,z)!=null){
        return true;
    }
    return false;
}

public void render(){
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glLoadIdentity();
    GL11.glRotatef(cam.pitchrot, 1, 0, 0);
    GL11.glRotatef(cam.yawrot, 0, 1, 0);
    GL11.glRotatef(cam.rollrot, 0, 0, 1);
    GL11.glTranslatef(cam.x, cam.y, cam.z);
    GL11.glColor3f(1.0f, 1.0f, 1.0f);
    vbo = BufferUtils.createFloatBuffer(width*height*depth*24*3);
    vto = BufferUtils.createFloatBuffer(width*height*depth*24*2);
    for(int x = 0; x<blocks[0].length;x++){
        for(int y = 0; y<blocks.length;y++){
            for(int z = 0; z<blocks[0][0].length;z++){
                Block b = blocks[y][x][z];
                if(b!=null)
                    renderCubeVBO(b);
            }
        }
    }
    vbo.flip();
    vto.flip();

    glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
    glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW);
    glVertexPointer(3, GL_FLOAT, 0, 0L);
    glBindBuffer(GL_ARRAY_BUFFER, vtoHandle);
    glBufferData(GL_ARRAY_BUFFER, vto, GL_STATIC_DRAW);
    glTexCoordPointer(2, GL_FLOAT, 0, 0);

    glDrawArrays(GL_QUADS, 0, width*height*depth*24*3);
}

public void renderCubeVBO(Block b){
    vbo.put(new float[]{
        //top
        b.x+size, b.y+size, b.z-size,
        b.x-size, b.y+size, b.z-size,
        b.x-size, b.y+size, b.z+size,
        b.x+size, b.y+size, b.z+size,
        //bottom
        b.x+size,b.y-size, b.z+size,
        b.x-size,b.y-size, b.z+size,
        b.x-size,b.y-size, b.z-size,
        b.x+size,b.y-size, b.z-size,
        //front
        b.x+size, b.y+size, b.z+size,
        b.x-size, b.y+size, b.z+size,
        b.x-size, b.y-size, b.z+size,
        b.x+size, b.y-size, b.z+size,
        //back
        b.x-size, b.y +size, b.z-size,
        b.x+size, b.y +size, b.z-size,
        b.x+size, b.y-size, b.z-size,
        b.x-size, b.y-size, b.z-size,
        //left
        b.x-size, b.y+size, b.z+size,
        b.x-size, b.y+size, b.z-size,
        b.x-size,b.y-size, b.z-size,
        b.x-size,b.y-size, b.z+size,
        //right
        b.x+size, b.y+size, b.z-size,
        b.x+size, b.y+size, b.z +size,
        b.x+size, b.y-size, b.z+size,
        b.x+size, b.y-size, b.z-size,
    });

    vto.put(new float[]{
        //top
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
        //bottom
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
        //front
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
        //back
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
        //left
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
        //right
        b.se, b.ts, b.ss, b.ts, b.ss, b.te, b.se, b.te,
    });
}