2017-02-11 4 views
0

私はこの奇妙な顔に問題があるときにボクセルエンジンを書きました。ボクセルエンジン、カメラがパンを外したときに顔が怪我をしている

地形から遠ざかると、すべてが壊れています。私はいくつかのスクリーンショットを掲載する予定の問題をどのように記述するのか考えていません。

camera_projection = bb_perspective(bb_toRadiansReal32(70.0f), ((r32)WINDOW_WIDTH/(r32)WINDOW_HEIGHT), 0.1f, 1000.0f); 

私は私が最後の値に2番目と遊ぶと消え部分で1.0Fの問題にそれを変更する場合が分かりました。しかし、私はこの値を1.0fに保ちたくありません。

私は、この関数の定義を投稿:

static bbMat4 bb_perspective(r32 fov, r32 aspect, r32 near, r32 far) { 
    bbMat4 ret(1.0f); 

    r32 range = near - far; 
    r32 tan_half_fov = tanf(fov/2.0f); 

    ret[0][0] = 1.0f/(tan_half_fov * aspect); 
    ret[1][1] = 1.0f/tan_half_fov; 
    ret[2][2] = (-near - far)/range; 
    ret[2][3] = 2.0f * far * near/range; 
    ret[3][3] = 0.0f; 
    ret[3][2] = 1.0f; 

    return ret; 
} 

は、私は完全にこれに対処する方法は考えています。

+0

スクリーンショットに表示される内容とその問題を説明できますか?なぜあなたはznear値を有効な値に変更したくないのですか?ニアクリッピングプレーンとファークリッピングプレーンを合理的な値に設定することが不可欠です。深度バッファーにはどのようなビット深度を使用しますか? –

+0

近距離から遠距離に小さな範囲を選択した場合、距離が1.0fから1000.0fになると消えますか? –

+0

完全には、私はカメラでこのバグをもう一度見に行く必要があります。 – Brajanowski

答えて

0

数式を確認してください。

ret[2][2] = (-near - far)/range;が正しく表示されません。既存の図書館で(例えば、最新のGLM)を見れば、あなたは私が何を意味するか確認することができます:

GLMはクリップ空間が-1のとき、また1

ret[2][3] = 2.0f * far * near/range;ret[3][2] = 2.0f * far * near/range;ret[2][3]あるべきResult[2][2] = (zFar + zNear)/(zFar - zNear);を使用しています1 - ret[2][3] = 1;

あなた自身の数学ライブラリを使用することは、ほとんどの場合、最良のアイデアではありません。確立されたものは、多くの人々によって常に厳格にテストされています。しかし、私は過去に自分自身でそれをやったことがありますが、おそらくあなたの出力をテストするために既存のライブラリを利用することは良い考えです。

関連する問題