使用Haskell OpenGL,可以将变换应用于这样的对象:
preservingMatrix $ do
translate myvector
renderObject Solid $ Sphere' 0.2 50 50
转化translate
,rotate
和scale
可用。我想应用对应于不是旋转的正交3x3
矩阵M
的变换。有可能吗?怎么样?
当然,作为绝望的解决方案,我可以将M
分解为翻译和轮换(如果我正确记住我的数学课程,这是可能的。)
答案 0 :(得分:1)
是的,这是multMatrix
。我跟着this example。如果你的矩阵是
a b c
d e f
g h i
然后执行类似
的操作 ......
preservingMatrix $ do
myTransformation
materialDiffuse Front $= green
renderObject Solid $ Teapot 5
swapBuffers
where
myTransformation = do
m <- (newMatrix RowMajor [ a, b, c, 0
, d, e, f, 0
, g, h, i, 0
, 0, 0, 0, 1]) :: IO (GLmatrix GLfloat)
multMatrix m
如果您想添加翻译,请执行
m <- (newMatrix RowMajor [ a, b, c, x
, d, e, f, y
, g, h, i, z
, 0, 0, 0, 1]) :: IO (GLmatrix GLfloat)
其中(x,y,z)
是翻译向量。
答案 1 :(得分:0)
我的Haskell生锈了,之前从未使用过OpenGL,但也许你在寻找multMatrix
?