下面是我的spider.java类(虽然现在蜘蛛只是一个球体和一根棍子)
import javax.media.opengl.*;
import com.jogamp.opengl.util.*;
import com.jogamp.opengl.util.gl2.GLUT;
import java.util.*;
public class Spider
{
private int spider_object;
private int texture;
private float x, y, z; // position
private float travel_speed;
private float travel_dir_x;
private float travel_dir_y;
private float travel_dir_z;
public Spider( float _x, float _y, float _z,
float _travel_speed)
{
x = _x;
y = _y;
z = _z;
travel_speed = _travel_speed;
travel_dir_x = 0.4f;
travel_dir_y = 0.5f;
travel_dir_z = 0.5f;
}
public void init( GL2 gl )
{
spider_object = gl.glGenLists(1);
gl.glNewList( spider_object, GL2.GL_COMPILE );
// create the spider
GLUT glut = new GLUT();
//glut.glutSolidSphere( 1, 10, 10 );
glut.glutSolidCube(1);
glut.glutSolidCylinder(0.2, 2, 10, 10);
gl.glEndList();
}
public void update( GL2 gl )
{
translate();
}
public void translate()
{
x += travel_speed*travel_dir_x;
y += travel_speed*travel_dir_y;
z += travel_speed*travel_dir_z;
if(x > 2 || x < -2)
travel_dir_x = -travel_dir_x;
if(y > 2 || y < -2)
travel_dir_y = -travel_dir_y;
if(z > 2 || z < -2)
travel_dir_z = -travel_dir_z;
}
public void draw( GL2 gl )
{
gl.glPushMatrix();
gl.glPushAttrib( GL2.GL_CURRENT_BIT );
gl.glTranslatef(x, y, z);
gl.glRotatef( -90, 0, 1, 0 );
gl.glScalef(0.3f, 0.3f, 0.3f);
if (travel_dir_x > 0)
gl.glRotatef(-45, 0, 0, 0);
else
gl.glRotatef(135, 0, 0, 0);
if (travel_dir_y > 0)
gl.glRotatef(-90, 0, 1, 0);
else
gl.glRotatef(90, 0, 1, 0);
gl.glColor3f( 0.85f, 0.55f, 0.20f); // Orange
gl.glCallList( spider_object );
gl.glPopAttrib();
gl.glPopMatrix();
}
}
我的目标是让这个生物转身并在它撞到墙壁时继续移动&#34;在一个4x4坦克。下面的代码片段显示,当您触及x,y或z墙的边缘时,该生物将反转其方向
if(x > 2 || x < -2)
travel_dir_x = -travel_dir_x;
if(y > 2 || y < -2)
travel_dir_y = -travel_dir_y;
if(z > 2 || z < -2)
travel_dir_z = -travel_dir_z;
到目前为止,我想我已经想出了如何让它在击中&#34;左边&#34;时左右移动。和&#34;对&#34;模拟首次开始时的墙。 (根据摄像机角度,可能不是左右)。
以下代码是我认为使生物反向并且在撞墙时继续向前移动的代码。以下代码取自 draw()函数
if (travel_dir_x > 0)
gl.glRotatef(-45, 0, 0, 0);
else
gl.glRotatef(135, 0, 0, 0);
如果我搞砸了那些代码,我的生物就会消失。然而,我可以将x,y或z参数更改为1并使其以不同的角度移动。
我对上面代码的理解是否正确?我怎样才能使它在生物开始向三维方向移动时,它会看到x,y和z的特定组合,而不是只看到&#34;左&#34;看看&#34;对&#34; ??