我正在编码的3D房间中实现碰撞。我有一个迷宫类,在该类中,我在列表中将房间的边界设置为true,以保存有关多维数据集将在何处绘制的信息:
public class Labyrinth {
private boolean [][] wall = new boolean[21][21];
private boolean [][] ground = new boolean[21][21];
public Labyrinth() {
super();
this.initializeMap();
}
private void initializeMap() {
// inicializace zdà okolo celého bludiÅ¡tÄ
for(int x = 0; x < 21; x=x+2) {
wall[x][0] = true;
wall[x][20] = true;
}
for(int y = 0; y < 21; y=y+2) {
wall[0][y] = true;
wall[20][y] = true;
}
在渲染类中,我在墙设置为true的任何位置绘制立方体。看起来是这样的:
/ render labyrintu
for(int i=0; i<21; i++) {
for(int j=0; j<21; j++) {
if(labyrinth.getWall()[i][j]) {
gl.glTranslatef((float)i, 0f, (float)j);
wallTexture.enable(gl);
wallTexture.bind(gl);
gl.glBegin(GL2.GL_QUADS);
// Front Face
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glEnd();
gl.glTranslatef((float)-i, 0f, (float)-j);
}
}
}
我现在想做的是使用AABB算法实现碰撞。为此,我需要知道我画的每个立方体的x,y,z坐标。然后我可以简单地将它们与摄像机的坐标进行比较。我想这样做:
public static boolean checkCollision(ObjectBox a, ObjectBox b){
{
//check the X axis
if(Math.abs(a.getX() - b.getX()) < a.getSizeX() + b.getSizeX())
{
//check the Y axis
if(Math.abs(a.getY() - b.getY()) < a.getSizeY() + b.getSizeY())
{
//check the Z axis
if(Math.abs(a.getZ() - b.getZ()) < a.getSizeZ() + b.getSizeZ())
{
return true;
}
}
}
return false;
}
我怎样才能得到每个立方体的坐标呢?