2

將處理中的本地相對點轉換爲世界(屏幕)空間的一種好方法是什麼?在處理中相對於世界空間的轉換

例如,採用Processing PDE附帶的Flocking example。我將如何在Boid類中執行relativeToWorld方法和worldToRelative方法。這些方法將考慮所有在render方法中完成的變換。

我想我會想改造PVector對象,因此該方法的簽名可能看起來像:

PVector relativeToWorld(PVector relative) { 
    // Take a relative PVector and return a world PVector. 
} 

PVector worldToRelative(PVector world) { 
    // Take a world PVector and return a relative PVector. 
} 
+0

這篇文章可能對你有所幫助:http://stackoverflow.com/questions/8339533/transform-screen-coordinates-to-model-coordinates – Justin 2012-08-22 20:55:41

回答

2

不幸的是,處理不使生活容易這樣的事情。它不提供我們對變換矩陣的訪問,所以我相信我們必須使用手動變換矩陣/矢量乘法。 (如果你很好奇,我用均勻表示的幀到正則變換矩陣)。

警告: 這是一個數學成績在java中迅速解釋這是假設你只有一個旋轉一個翻譯(如渲染方法)。翻譯只能由loc PVector給出。

PVector relativeToWorld(PVector relative) { 
    float theta = vel.heading2D() + PI/2; 
    float r00 = cos(theta); 
    float r01 = -sin(theta); 
    float r10 = -r01; 
    float r11 = r00; 
    PVector world = new PVector(); 
    world.x = relative.x * r00 + relative.y*r01 + loc.x; 
    world.y = relative.x * r10 + relative.y*r11 + loc.y; 
    return world; 
} 

PVector worldToRelative(PVector world) { 
    float theta = vel.heading2D() + PI/2; 
    float r00 = cos(theta); 
    float r01 = sin(theta); 
    float r10 = -r01; 
    float r11 = r00; 
    PVector relative = new PVector(); 
    relative.x = world.x*r00 + world.y*r10 - loc.x*r00 - loc.y*r10; 
    relative.y = world.x*r01 + world.y*r11 - loc.x*r01 - loc.y*r11; 
    return relative; 
} 
+0

是否所有的X和Y的正確的在你的代碼?我認爲在最後幾行你設置的是相對位置,應該設置x和y屬性? – 2011-03-30 20:11:56

+0

更正relative.x/y。對你起作用嗎?我現在測試它,它似乎很好,不是嗎?再次,不是最好的解決方案,因爲它僅限於一個翻譯和旋轉。 – num3ric 2011-03-30 22:49:43

+0

完美地工作。我只需要有時間來測試它:)感謝您的測試和編輯。 – 2011-03-31 03:15:20

相關問題