2013-05-12 15 views
3

中實現類似Google地球的3D移動控件我正在設計一個處理模型,需要實現類似的用於向Google地球移動相機的用戶控件,但我在視角方面存在問題。底部的示例代碼提供了相機x/y位置的箭頭鍵功能和高程鍵「q/a」。初始屏幕看起來是這樣的:在處理

enter image description here

當照相機平底鍋權的角度看起來是這樣的:

enter image description here

正如你可以看到飛機看起來傾斜,但我們需要看看平 - 更多像這樣的:

enter image description here

感謝您的建議,我錯過了。是否需要進行一些額外的旋轉操作?我已經搜索了處理示例,但沒有找到合適的東西,所以我將發佈此處制定的任何解決方案。這是模型。提前謝謝了!

// 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; 
    } 
} 

回答

1

的相機設置必須camera(campx, campy, campz, width/2, height/2, 0, 0, 0, -1);

+0

興趣的人最終模型.. http://geotheory.co.uk/blog/2013/05/13/navigation-functionality-for-3d-處理模型/ – geotheory 2013-05-13 12:57:50

+2

如果你不介意使用庫,你可以嘗試peasycam。 – 2013-05-13 15:44:28

+1

@ v.k。是的,它是一個方便的庫,但控制設置並不真正符合我的要求。 – geotheory 2013-05-14 07:47:39