2013-05-07 5 views
1

Я создал здесь основной класс, который отображает блоки из ArrayList, но я вижу только последний, который будет отображаться. Почему я вижу только последний блок в ArrayList?LWJGL 3D рендеринг не работает

Это где я сделать мои блоки в моем главном классе:

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

Это где я генерировать мои блоки:

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); 
      } 
     } 
    } 

Тогда у меня есть этот блок класс, который я использую при создании каждого блока:

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); 
    } 
} 

ответ

1

Причина вы видите только последний, является потому что все «Блоки» находятся на вершине друг друга!

В Block классе вы установили x, y, z, sx, sy, sz переменные как статические, которые они не должны быть!

В основном статическое ключевое слово означает, что значение распределяется таким образом, если вы меняете x в одном месте, это повлияет и на все остальное.

Советы узнать все ключевые слова Java или по крайней мере все основные один раз, потому что вы переходите на что-то продвинутое, как OpenGL.

Смежные вопросы