3d 随着鼠标在IDE中的变化,y形轨道从上到下翻滚
注意:这是在处理IDE中 我试着让球形轨道下降,我几乎做到了。这就是我到目前为止所做的:3d 随着鼠标在IDE中的变化,y形轨道从上到下翻滚,3d,camera,geometry,orbital-mechanics,processing-ide,3d,Camera,Geometry,Orbital Mechanics,Processing Ide,注意:这是在处理IDE中 我试着让球形轨道下降,我几乎做到了。这就是我到目前为止所做的: float cameraTheta, cameraPhi, cameraRadius; //camera position in spherical coordinates float camx, camy, camz; void setup() { size(500, 500, P3D); background(255); cameraRadius = 200.0f; cameraThe
float cameraTheta, cameraPhi, cameraRadius; //camera position in spherical coordinates
float camx, camy, camz;
void setup() {
size(500, 500, P3D);
background(255);
cameraRadius = 200.0f;
cameraTheta = 2.80;
cameraPhi = 2.0;
recomputeOrientation();
}
void draw() {
background(255);
lights();
mouseMotion();
camera(camx, camy, camz, 0, 0, 0, 0, -1, 0);
sphereDetail(10);
sphere(25);
}
void mouseMotion()
{
if (mousePressed) {
cameraTheta += (mouseX - pmouseX)*0.05;
cameraPhi += (mouseY - pmouseY)*0.05;
}
recomputeOrientation(); //update camera (x,y,z) based on (radius,theta,phi)
}
void recomputeOrientation()
{
camx = cameraRadius * sin(cameraTheta)*sin(cameraPhi);
camz = cameraRadius * -cos(cameraTheta)*sin(cameraPhi);
camy = cameraRadius * -cos(cameraPhi);
redraw();
}
x旋转效果很好,但是y旋转有点像是从上到下翻滚,然后随着鼠标的变化一次又一次地向上翻滚,我需要的是,只要鼠标在向下移动时上下移动,它就会继续朝一个方向翻滚。有人能帮我解决这个问题吗?这个问题与相机的上方向向量有关。如果你想象拿着相机,让它越来越靠近球体的极点,当你经过极点时,你是如何拿着相机的?由于的upY参数,处理知道要做什么 在当前代码中,upY始终为-1,这意味着当相机自身定向时,它将始终使用向量作为up的参考。你需要改变它,当它到达球体的极点时,它会翻转过来
boolean flip = false;
...
void draw() {
...
camera(camx, camy, camz, 0, 0, 0, 0, flip ? 1.0 : -1.0, 0);
...
}
void mouseMotion()
{
if (mousePressed) {
cameraTheta += (mouseX - pmouseX) * 0.05;
if (cameraTheta < 0) cameraTheta += 2 * PI;
else if (cameraTheta >= 2 * PI) cameraTheta -= 2 * PI;
if (flip)
cameraPhi += (mouseY - pmouseY) * 0.05;
else
cameraPhi -= (mouseY - pmouseY) * 0.05;
if (cameraPhi >= PI) {
cameraPhi = PI - 0.01;
cameraTheta += PI;
flip = !flip;
}
else if (cameraPhi <= 0) {
cameraPhi = 0.01;
cameraTheta -= PI;
flip = !flip;
}
}
recomputeOrientation();
}
boolean flip=false;
...
作废提款(){
...
摄像头(camx、camy、camz、0、0、0、flip?1.0:-1.0、0);
...
}
虚空情绪()
{
如果(鼠标按下){
cameraTheta+=(mouseX-pmouseX)*0.05;
如果(cameraTheta<0)cameraTheta+=2*PI;
如果(cameraTheta>=2*PI)cameraTheta-=2*PI;
如果(翻转)
cameraPhi+=(mouseY-pmouseY)*0.05;
其他的
cameraPhi-=(mouseY-pmouseY)*0.05;
如果(cameraPhi>=PI){
cameraPhi=PI-0.01;
cameraTheta+=PI;
翻转=!翻转;
}
else if(cameraPhi问题与相机的上方向向量有关。如果您想象握住相机并使其越来越靠近球体的极点,当您经过极点时如何握住相机?处理知道该做什么,因为
在您当前的代码中,upY始终为-1,这意味着当相机自身定向时,它将始终使用向量作为向上的参考。您需要更改此设置,以便当它到达球体的极点时,它会上下翻转
boolean flip = false;
...
void draw() {
...
camera(camx, camy, camz, 0, 0, 0, 0, flip ? 1.0 : -1.0, 0);
...
}
void mouseMotion()
{
if (mousePressed) {
cameraTheta += (mouseX - pmouseX) * 0.05;
if (cameraTheta < 0) cameraTheta += 2 * PI;
else if (cameraTheta >= 2 * PI) cameraTheta -= 2 * PI;
if (flip)
cameraPhi += (mouseY - pmouseY) * 0.05;
else
cameraPhi -= (mouseY - pmouseY) * 0.05;
if (cameraPhi >= PI) {
cameraPhi = PI - 0.01;
cameraTheta += PI;
flip = !flip;
}
else if (cameraPhi <= 0) {
cameraPhi = 0.01;
cameraTheta -= PI;
flip = !flip;
}
}
recomputeOrientation();
}
boolean flip=false;
...
作废提款(){
...
摄像头(camx、camy、camz、0、0、0、flip?1.0:-1.0、0);
...
}
虚空情绪()
{
如果(鼠标按下){
cameraTheta+=(mouseX-pmouseX)*0.05;
如果(cameraTheta<0)cameraTheta+=2*PI;
如果(cameraTheta>=2*PI)cameraTheta-=2*PI;
如果(翻转)
cameraPhi+=(mouseY-pmouseY)*0.05;
其他的
cameraPhi-=(mouseY-pmouseY)*0.05;
如果(cameraPhi>=PI){
cameraPhi=PI-0.01;
cameraTheta+=PI;
翻转=!翻转;
}
否则,如果(卡梅拉菲)