0

私がこのようなことをすることを考えると:

void glOrtho(   GLdouble    left, 
    GLdouble    right, 
    GLdouble    bottom, 
    GLdouble    top, 
    GLdouble    nearVal, 
    GLdouble    farVal);

結果は次のとおりです。http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml w 次のようなマトリックスを実現できますか。

http://cairographics.org/manual/cairo-matrix.html

私はこれを試しました:

cairo_matrix_t mat;
            mat.xx = 2 / (right - left);
            mat.yx = 0;
            mat.xy =  2 / (top - bottom);
            mat.yy = 0;
            mat.x0 = 0;
            mat.y0 = 0;

cairo_set_matrix(cr,&mat);

しかし、うまくいきませんでした。GlOrtho がカイロで作成したのと同じマトリックスをどのように達成できますか? ありがとう

4

1 に答える 1

0

私はカイロを知らないので、もっと良い答えが来たら私の答えを削除します。

カイロのドキュメントによると:

x_new = xx * x + xy * y + x0;
y_new = yx * x + yy * y + y0;

OpenGLを使用する場合、式は次のようになります:(mマトリックス)

x_new = m(1,1) * x + m(1,2) * y + m(1,3) * z + m(1,4)
y_new = m(2,1) * x + m(2,2) * y + m(2,3) * z + m(2,4)
z_new = m(3,1) * x + m(3,2) * y + m(3,3) * z + m(3,4)

(簡単にするために、4番目の座標については触れなかったことに注意してください)

したがって、あなたがしなければならないことは、単に2つの式を一致させることです。

mat.xx = 2 / (right - left);
mat.yy = 2 / (top - bottom);
mat.xy = 0;
mat.yx = 0;
mat.x0 = -(right + left) / (right - left);
mat.y0 = -(top + bottom) / (top - bottom);

これを試してみてください

于 2010-08-28T05:20:12.133 に答える