6

少なくとも、Lighthouse3D Radar Frustum Culling チュートリアルの非常に単純な パート 1 を機能させようとしています...そして、その部分を自分のレンダラーで機能させることさえできないことに完全に困惑しています。

したがって、最初のステップは次のとおりです。ポイントがニアプレーンの前にあるかファープレーンの後ろにあるかをテストし、そうであれば早期カリングします。(そうでない場合は、さらにテストを実行しますが、最初の部分だけで行き詰まっています。)

2x2 の立方体のワールド空間の中心 (x1y2z3) を使用し、自由に移動および回転できるカメラを持っています。レンダラーはそれ以外の場合は問題なく動作するため、すべてのベクターとマトリックスのものはかなりしっかりしている必要があります。したがって、この最初の部分である単純な「Z vs Near-or-far」テストの (Go での) 私の見解は次のとおりです。

func (cam *Camera) frustumHasPoint(point *Vec3) bool {
    var pc Vec3
    v := point.Sub(&cam.Controller.Pos)  // point minus camPos
    ref := cam.Controller.dir  // take a copy of camDir
    ref.Z = -ref.Z
    ref.Normalize() // camDir was already normalized but anyway...
    pc.Z = v.Dot(&ref)
    if pc.Z > cam.Perspective.ZFar || pc.Z < cam.Perspective.ZNear {
        return false
    }
    return true
}

では、なぜ ref の Z を逆にするのでしょうか? チュートリアルでは、彼らは次のように書いているからです。もちろんこれは逆効果ですが…

上記のように Z を反転すると、約 50% の確率で必要以上にカリングされます。そうしないと、約 98% の確率で「過剰選別」されます。

何が欠けていますか?

4

1 に答える 1

1

解決しました。原因は脳の誤動作でした...チュートリアルでは、錐台を説明するために最初にx / y / z軸を取得することについて明確に書かれていますが、どういうわけかそれを見逃していました..

于 2013-03-09T02:02:39.790 に答える