15

単純な三角形が 1 つあるシーンがあります。そして、透視投影を使用しています。次のように(GLMの助けを借りて)MVPマトリックスをセットアップしました:

glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
glm::mat4 View       = glm::lookAt(
    glm::vec3(0,0,5), // Camera is at (0,0,5), in World Space
    glm::vec3(0,0,0), // and looks at the origin
    glm::vec3(0,1,0)  // Head is up (set to 0,-1,0 to look upside-down)
);  
glm::mat4 Model      = glm::mat4(1.0f);
glm::mat4 MVP        = Projection * View * Model;

カメラの値を変更しても、三角形は適切に表示されます。

しかし、私は正投影を使いたいです。また、射影行列を正投影に変更すると、予期しない動作をしたり、三角形を表示できなかったり、画面の隅に小さな部分が 1 つだけ表示されたりします。正投影を使用するには、次のようにします。

glm::mat4 Projection = glm::ortho( 0.0f, 800.0f, 600.0f, 0.0f,-5.0f, 5.0f);

ビューとモデルのマトリックスでは何も変更しませんが。そして、私は正しく機能しません。

正しい方向へのプッシュが必要なだけです。何か間違ったことをしていますか? 正射投影を適切に設定するにはどうすればよいですか?

PS必要かどうかはわかりませんが、これらは三角形の座標です:

static const GLfloat g_triangle[] = {
    -1.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f,
    0.0f, 2.0f, 0.0f, 
};
4

1 に答える 1

15

あなたの三角形は約1ユニットの大きさです。800/600単位幅の正射影行列を使用する場合、三角形が非常に小さく見えるのは当然です。正投影マトリックスの境界を減らし、三角形がこの領域の内側にあることを確認します(たとえば、最初の頂点はx座標が0未満であるため、ビューの外側にあります)。

さらに、三角形が裏面カリングやZクリップによって消去されないようにしてください。ところで..zNearの負の値は少し珍しいですが、正投影では機能するはずです。

于 2012-03-05T21:10:38.513 に答える