3
中實現類似Google地球的3D移動控件我正在設計一個處理模型,需要實現類似的用於向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;
}
}
興趣的人最終模型.. http://geotheory.co.uk/blog/2013/05/13/navigation-functionality-for-3d-處理模型/ – geotheory 2013-05-13 12:57:50
如果你不介意使用庫,你可以嘗試peasycam。 – 2013-05-13 15:44:28
@ v.k。是的,它是一個方便的庫,但控制設置並不真正符合我的要求。 – geotheory 2013-05-14 07:47:39