며칠 전 나 자신에게 같은 질문을하고있었습니다. Sierox가 말한 것처럼 나의 해결책이 있었다. BoxShape의 RigidBody를 만들고이를 DynaicsWorld에 추가하십시오. 카메라를 움직이려면 강체에 힘을가하십시오. 힘이 가해지지 않을 때, 즉 플레이어가 버튼을 누르지 않으면 카메라를 멈추게하기 위해 선형의 경우 999, 각도의 경우 1로 설정됩니다.
또한 body.setAngularFactor (0); 그래서 그 상자는 온통 뒤죽박죽이되지 않습니다. 또한 다른 물체와 너무 많이 간섭하지 않도록 질량을 너무 낮게 설정하지만 계속 뛰어 올라서 달리거나 그렇지 않으면 영향을받을 수 있습니다.
x, y 및 z 좌표를 직교 좌표로 변환하여 카메라 방향으로 이동해야합니다. 즉
protected void setCartesian(){//set xyz to a standard plane
yrotrad = (float) (yrot/180 * Math.PI);
xrotrad = (float) (xrot/180 * Math.PI);
float pd = (float) (Math.PI/180);
x = (float) (-Math.cos(xrot*pd)*Math.sin(yrot*pd));
z = (float) (-Math.cos(xrot*pd)*Math.cos(yrot*pd));
//y = (float) Math.sin(xrot*pd);
}//..
public void forward(){// move forward from position in direction of camera
setCartesian();
x += (Math.sin(yrotrad))*spd;
z -= (Math.cos(yrotrad))*spd;
//y -= (Math.sin(xrotrad))*spd;
body.applyForce(new Vector3f(x,0,z),getThrow());
}//..
public Vector3f getThrow(){// get relative position of the camera
float nx=x,ny=y,nz=z;
float xrotrad, yrotrad;
yrotrad = (float) (yrot/180 * Math.PI);
xrotrad = (float) (xrot/180 * Math.PI);
nx += (Math.sin(yrotrad))*2;
nz -= (Math.cos(yrotrad))*2;
ny -= (Math.sin(xrotrad))*2;
return new Vector3f(nx,ny,nz);
}//..
점프하려면 body.setLinearVelocity (새 Vector3f (0, jumpHt, 0)); 원하는 속도로 jumpHt를 설정하십시오.
getThrow를 사용하여 다른 객체의 벡터를 반환합니다. 화면이나 운반시 "던지기"수 있습니다. 나는 당신의 질문에 대답하고 너무 많은 비 필수 정보를 던지지 않았 으면 좋겠다. 나는이 아이디어를 준 정보원을 찾으려고 노력할 것이다. 나는 그것이 Bullet 포럼에 있었다고 생각한다.
------- 편집 ------
죄송합니다 당신은 강체가 제대로 작동 일단 당신이 그냥 좌표를의 가야와 적용
을 그 부분을 떠났다하기 예를 들면 다음과 같습니다 :
float mat[] = new float[16];
Transform t = new Transform();
t = body.getWorldTransform(t);
t.origin.get(mat);
x = mat[0];
y = mat[1];
z = mat[2];
gl.glRotatef(xrot, 1, 0, 0); //rotate our camera on teh x-axis (left and right)
gl.glRotatef(yrot, 0, 1, 0); //rotate our camera on the y-axis (up and down)
gl.glTranslatef(-x, -y, -z); //translate the screen to the position of our camera
제 경우에는 그래픽 용으로 OpenGL을 사용하고 있습니다. xrot과 yrot은 카메라의 피치와 요를 나타냅니다. 위의 코드는 행렬 형식으로 세계 변환을 가져오고 카메라의 목적을 위해 x, y 및 z 좌표 만 가져 와서 변환을 적용하면됩니다.
여기에서 카메라를 움직이려면 강체의 선형 속도를 설정하여 카메라를 움직이거나 힘을 가할 수 있습니다.
하지만 카메라를 어떻게 이동합니까? – JangoBrick
현재 XYZ를 기본적으로 증가 및 감소 시켜서 이동 중입니다. 그러나 나는 나의 대답에서 말했듯이, 이것은 적절하게 작동하지 않고 있으며, 나는 그것에 대해 미해결 질문을 가지고있다. – Sierox