簡體   English   中英

有人可以向我解釋rayCast的工作原理嗎?

[英]Can someone explain me how rayCast works?

我正在學習libgdx,這是令我困惑的東西之一。 我閱讀了有關如何使用它的教程,並且理解了它,但我真的很想知道背后的內容。 我搜索了此方法的源代碼。

public void rayCast (final RayCastCallback callback, float point1X, float point1Y, float point2X, float point2Y) {   // FIXME pool RayCastCallback?
    world.raycast(new org.jbox2d.callbacks.RayCastCallback() {
    @Override
    public float reportFixture (org.jbox2d.dynamics.Fixture f, Vec2 p, Vec2 n, float fraction) {
        return callback.reportRayFixture(fixtures.get(f), point.set(p.x, p.y), normal.set(n.x, n.y), fraction);
    }
}, this.point1.set(point1X, point1Y), this.point2.set(point2X, point2Y));

}如何看到此方法以遞歸方式調用自身,並返回對回調變量的reportRayFixture的調用。 真正讓我感到困惑的是代碼從哪里選擇夾具,以及它如何檢查每個夾具。 有人可以向我解釋一下它是如何工作的。

這是其源代碼頁https://github.com/libgdx/libgdx/blob/master/extensions/gdx-box2d/gdx-box2d-gwt/src/com/badlogic/gdx/physics/box2d/gwt/emu/ com / badlogic / gdx / physics / box2d / World.java

我將不勝感激!

光線投射是當我們在空間中繪制一條不可見的線並查看其相交時。 這樣做的一個常見用途是弄清楚玩家正在點擊的內容-我們沿着玩家單擊的方向從相機畫一條線,而我們的線所接觸的第一個對象就是玩家點擊的線。

在Box2D中,使用RayCastCallback接口可以使您編寫在光線撞擊燈具時執行的代碼(例如,您可能要忽略某些燈具)。 我還沒有親自使用它,但是我想您可以在射擊游戲中使用類似的東西來查看穿透牆壁的武器是否可以擊中牆壁后面的物體(或類似的東西)。

在較高的層次上,這段可愛的代碼所做的工作有些麻煩-如果您仔細觀察一下,它的工作是將libGDX RayCastCallback放入並包裝到JBox2D RayCastCallback中,該API的API稍有不同。 這更像是重載該方法而不是遞歸調用它。

知道的是為什么作者選擇創建Point1和Point2實例變量。 我想如果您有多個燈具,它們會被覆蓋,那么也許它們應該包含射線所撞擊的最后一個燈具? 即使這樣,看起來多個射線廣播仍會覆蓋它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM