Применить преобразование с Haskell OpenGL - PullRequest
0 голосов
/ 23 мая 2018

С Haskell OpenGL можно применить преобразование к объекту, подобному этому:

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

Доступны преобразования translate, rotate и scale.Я хотел бы применить преобразование, соответствующее ортонормированной 3x3 матрице M, которая не является вращением.Возможно ли это и как?

Конечно, в качестве отчаянного решения я мог бы разложить M на переводы и вращения (это возможно, если я правильно помню свои курсы по математике).

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Да, это multMatrix.Я следовал этому примеру .Если ваша матрица

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

0 голосов
/ 23 мая 2018

Мой Haskell ржавый, и я никогда не использовал его с OpenGL раньше, но, возможно, вы ищете multMatrix?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...