2016-12-13 29 views
1

私は0.1以下に設定しても近くの平面が遠すぎるように見えるカメラに問題があります。すでにオフセット値があるようです。だから、実際にシーンの中の任意のオブジェクトを十分に近づけることはできません。OpenGLの近平面がクリッピングすぎる

以下は、このバグの外観です。 enter image description here

示された黒い三角はクリッピングです。 現在、私はパースペクティブマトリックスを使用しています。ここにはそのコードがあります。

Matrix4x4 Matrix4x4::Perspective(Float fov, Float aspectRatio, Float near, Float far) 
{ 
    Matrix4x4 result(1.0f); 

    Float q = 1.0f/tan(toRadians(0.5f * fov)); 
    Float a = q/aspectRatio; 

    Float b = (near + far)/(near - far); 
    Float c = (2.0f * near * far)/(near - far); 

    result.elements[0 + 0 * 4] = a; 
    result.elements[1 + 1 * 4] = q; 
    result.elements[2 + 2 * 4] = b; 
    result.elements[2 + 3 * 4] = -1.0f; 
    result.elements[3 + 2 * 4] = c; 

    return result; 
} 

私はこのバグが数学クラスのものだとは思わない。これは、数学のコードは主に私が取り組んできた別のプロジェクトから来たものです。そこから完璧に動作します。 私はそれを私がレンダリングする方法(フォワードレンダラー)とは思わない。マウスとキーボードを使ってカメラを動かすことができるので、私の指針が良いと思います。

しかし!私はバッファと思われます。 OpenGLバッファ。しかし、私は完全にはわかりません。

私はこのバグをどのように捜索して解決できるかについて、誰かに私に助言を与えてくれることを願っています。

ありがとうございます。

+2

を解決し、あなたは投影行列(ビュー、世界、そして他のものは何でも持っている)以外の他のすべての変換を提供する必要があります。キューブの頂点バッファも明らかに必要です – Ap31

+0

どのような問題があるのか​​を知る手がかりはありますか? – JekasG

+2

@JekasG:あなたのキューブは単にZ <= nearを越えて到達するかもしれませんが、あなたの変換セットアップとキューブの頂点を見ることなく、それを知ることはできません。対角線に沿って立方体を見ていますが、その長さは 'sqrt(3 * 1)= sqrt(3)=〜= 1.73'の倍率で伸びています。 – datenwolf

答えて

1

は「glEnableです(GL_DEPTH_CLAMP)は、」すべての最初の発行

2

まあ一つの画像がそうもっとして1000の言葉の価値がある:

cube cut

あなたのキューブが半分のサイズr=1.0であり、あなたはあなたがキューブの中心からの距離rにカメラを設定している場合、私は私のコメントで述べたようにキューブのエッジが範囲<sqrt(2),sqrt(3)>の中心から離れているので、まだz_nearによってカットされているので、カメラに向かうすべてのエッジはカットオフになります...

また、これはちょうどt (行列とメッシュの内容)に関連する推定データ...

右側のPSは、あなたが設定したと思われるカメラ設定の立方体の側面図です。緑色の(+/-)Zがあなたの視線方向です。

関連する問題