我正在设计一个处理模型,需要为摄像机移动到Google地球实现类似的用户控制,但是我的观点存在问题。底部的示例代码提供了相机x / y位置的箭头键功能和键'q / a'的高程。初始屏幕如下所示:
当相机平移时,透视图如下所示:
正如你所看到的那样,飞机看起来很倾斜,但我们需要看起来平坦 - 更像是这样:
感谢我所缺少的建议。是否需要进行一些额外的旋转操作?我搜索了处理示例,但没有找到合适的,所以我将发布在这里制定的任何解决方案。这是模型。非常感谢提前!
// camera position and focus variables
float campx = 300;
float campy = 400;
float campz = 400;
// mouse control variables
float mDifX = 0;
float mDifY = 0;
boolean mLocked = false;
boolean kLocked = false;
void setup() {
size(600, 400, P3D);
fill(200);
stroke(0);
}
void draw() {
camera(campx, campy, campz, width/2, height/2, 0, 0, 1, 0);
background(255);
rect(0, 0, 600, 400);
for(int i=0; i<10; i++){
line(0, i*40, width, i*40);
line(i*60, 0, i*60, height);
}
}
void mousePressed() {
if (!mLocked) mLocked = true;
mDifX = mouseX - campx;
mDifY = mouseY - campy;
}
void mouseDragged() {
if (mLocked) {
campx = mouseX - mDifX;
campy = mouseY - mDifY;
}
}
void mouseReleased() {
mLocked = false;
}
void keyPressed() {
if (key == 'q') { // zoom out
campz += 50;
} else if (key == 'a') { // zoom in
campz -= 50;
} else if (keyCode == 37) { // camera LEFT
campx -= 20;
} else if (keyCode == 38) { // camera UP
campy -= 10;
} else if (keyCode == 39) { // camera RIGHT
campx += 20;
} else if (keyCode == 40) { // camera DOWN
campy += 10;
}
}
答案 0 :(得分:1)
相机设置必须为camera(campx, campy, campz, width/2, height/2, 0, 0, 0, -1);