我已經制作了一個Java程序,它顯示投影到二維視圖上的三維空間中的線條,到目前爲止,它一直工作得很好。我試圖讓這個'世界'圍繞任何軸旋轉相機的位置,但現在我遇到了一些問題。關於三維空間中的樞軸點的旋轉點
public void rotate(){
float ax = main.angleX; //main = camera
float ay = main.angleY;
float az = main.angleZ;
for(Line3d line : lines){ //all lines in the world
Vector3d start = Vector3d.Vector3dPMinus(line.start, main.getPoint()); //vetor value of starting point of line - camera's position
Vector3d end = Vector3d.Vector3dPMinus(line.end, main.getPoint());
start.rotate(ax, ay, az);
end.rotate(ax, ay, az); //rotate each vector
line.start = Point3d.pointFromVector3d(start).add(main.getPoint());
line.end = Point3d.pointFromVector3d(end).add(main.getPoint()); //vectors back into points
}
}
旋轉功能:
public Vector3d rotate(float ax, float ay, float az){
Math.toRadians(ax *= 90);
Math.toRadians(ay *= 90);
Math.toRadians(az *= 90);
y = (float) (y * Math.cos(ax) - z * Math.sin(ax));
z = (float) (y * Math.sin(ax) + z * Math.cos(ax));
x = (float) (x * Math.cos(ay) + z * Math.sin(ay));
z = (float) (z * Math.cos(ay) - x * Math.sin(ay));
x = (float) (x * Math.cos(az) - y * Math.sin(az));
y = (float) (x * Math.sin(az) + y * Math.cos(az));
return this;
}
我已經把它繞x軸每秒3次,並顯示正是我希望它也開始轉動之前,但一旦它開始旋轉,通常只有一條水平線有一些不可識別的混亂。
我用於旋轉的方法不正確嗎?有沒有更好的方法來做到這一點?
你說你想圍繞*任何*軸旋轉世界,但是你的代碼似乎試圖圍繞特定於相機的軸執行旋轉。也許在攝像機視角方向?如果是這樣的話,爲什麼不旋轉相機呢? –