0

シーンの深度バッファを読み取っていますが、カメラを回転させると、画面の端に向かって深度がカメラに近づいていることに気付きます。インパクトの角度は深度バッファに影響を与えると思いますが、フレームバッファにクワッドを描画しているので、これが発生することは望ましくありません (これは実際にはそうではありませんが、これは私が必要とするものです)。

次のように深さを線形化します。

float linearize(float depth) {
    float zNear = 0.1;
    float zFar = 40.0;

    return (2.0 * zNear) / (zFar + zNear - depth * (zFar - zNear));
}

これを修正するために次のように考えましたが、まだ完全ではありません。45.0 はカメラの垂直方向の角度 / 2. side は画面の中心からのスペースです。

const float angleVert = 45.0 / 180.0 * 3.17;
float sideAdjust(vec2 coord, float depth) {
    float angA = cos(angleVert);
    float side = (coord.y - 0.5);
    if (side < 0.0) side = -side;
    side *= 2.0;
    float depthAdj = angA * side;
    return depth / depthAdj;
}

カメラの前の平面の深さの結果を含む図面で私の問題を示すには:

         c
       / | \
      /  |  \
     /   |   \
closer further closer      

is what I have, what I need:

         c
    |    |   |
    |    |   |
    |    |   |
  even even even
4

1 に答える 1

2

それを行う方法のアイデアは、目の空間で位置Pを見つけることです。Pを原点から点までのベクトルと考えてください。Pを目の方向ベクトルに投影します(目の空間では常に(0,0、-1)です)。投影されたベクトルの長さは必要なものです。

于 2012-09-05T19:59:59.150 に答える