0

私はpython OpenGLバインディングを使用しており、最新のopengl呼び出しのみを使用しようとしています。頂点を持つ VBO があり、頂点シェーダーに渡された正投影行列を使用してレンダリングしようとしています。

現在、次の値を使用して射影行列を計算しています。

from numpy import array

w = float(width)
h = float(height)
n = 0.5
f = 3.0

matrix = array([
                   [2/w,        0,        0,        0],
                   [  0,      2/h,        0,        0],
                   [  0,        0,  1/(f-n), -n/(f-n)],
                   [  0,        0,        0,        1],
               ], 'f')


#later
projectionUniform = glGetUniformLocation(shader, 'projectionMatrix')
glUniformMatrix4fv(projectionUniform, 1, GL_FALSE, matrix)

私がここから得たそのコード:

正射影行列の式?

これで問題ないようですが、Origin を画面の左下隅に配置したいと思います。これは、マトリックスに適用できる関数なので、すべてが「うまく機能する」のでしょうか、それともすべてのオブジェクトを w/2 h/2 で手動で変換する必要がありますか?

補足:これが正しく機能すると、座標はピクセル位置と一致しますか?

私は最新の OpenGL 技術を使用しているため、gluOrtho2d または GL_PROJECTION 呼び出しを使用する必要はないと思います。

4

3 に答える 3

1

さらに左、右の位置を使用する、より一般的な射影行列を使用できます。

定義についてはウィキペディアを参照してください。

于 2012-11-16T07:58:33.043 に答える
1
glUniformMatrix4fv(projectionUniform, 1, GL_FALSE, matrix)

行列は行優先の順序で格納されます。したがって、GL_TRUE を渡すか、マトリックスを列優先に変更する必要があります。

于 2012-11-18T22:50:15.390 に答える