使用Haskell OpenGL应用转换

时间:2018-05-23 18:31:34

标签: haskell opengl

使用Haskell OpenGL,可以将变换应用于这样的对象:

  preservingMatrix $ do
    translate myvector
    renderObject Solid $ Sphere' 0.2 50 50

转化translaterotatescale可用。我想应用对应于不是旋转的正交3x3矩阵M的变换。有可能吗?怎么样?

当然,作为绝望的解决方案,我可以将M分解为翻译和轮换(如果我正确记住我的数学课程,这是可能的。)

2 个答案:

答案 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)是翻译向量。

teapot

答案 1 :(得分:0)

我的Haskell生锈了,之前从未使用过OpenGL,但也许你在寻找multMatrix