Похоже, что использование GLU в значительной степени устарело, начиная с OpenGL 3.0, из которого используются большие версии, начиная с пакетов Haskell OpenGL-2.4.В OpenGL wiki есть упоминание:
GLU - библиотека утилит OpenGL - это дополнительная библиотека, которая содержит несколько функций для дополнительных задач.Это было традиционно и может быть найдено во многих учебных пособиях и примерах.Но GLU использует много возможностей OpenGL, которые сейчас устарели.Матрица внутренней проекции больше не должна использоваться, поэтому программист должен использовать замену для gluPerspective, которая вместо обновления матрицы внутренней проекции возвращает эту матрицу.
Это будет означать, что функции в Graphics.Rendering.OpenGL.GLU.Matrix
больше не должен использоваться.Это включает в себя:
ortho2D
perspective
lookAt
pickMatrix
project
unProject
unProject4
Я подозреваю, что это может быть причиной того, что ваш код компилируется, но происходит сбой при использовании ortho2D
.
Может быть заманчиво использовать glOrtho
вместо gluOrtho2D
, поскольку у нас есть:
ortho2D left right bottom up = ortho left right bottom up (-1) 1
Однако, согласно спецификации OpenGL , кажется, что даже glOrtho
устарело с версии OpenGL 3.1.На момент написания статьи использование ortho
вместо ortho2D
работает с использованием этой эквивалентности.
Я заметил, что у одного комментатора также были проблемы с функцией perspective
.Вот один из способов реализовать это самостоятельно, не используя GLU (но все еще используя функцию, которая устарела в OpenGL 3.1):
import qualified Graphics.Rendering.OpenGL as GL
perspective :: GL.GLdouble -> GL.GLdouble -> GL.GLdouble -> GL.GLdouble -> IO ()
perspective fovy aspect near far =
GL.frustum xmin xmax ymin ymax near far
where ymax = near * tan (fovy * pi / 360.0)
ymin = - ymax
xmax = ymax * aspect
xmin = ymin * aspect