Я пытаюсь создать доску с использованием opengl. Чтобы сделать это, я пытаюсь нарисовать кучу строк, чтобы создать сетку. Тем не менее, на каждом сайте учебника (в том числе opengl's) есть примеры на C++, а вики Haskell не очень хорошо объясняют это. Я новичок в opengl и хотел бы получить учебник.Линии рисования с opengl в Haskell
ответ
Предполагаю, что вы хотите использовать OpenGL 2.1 или ранее. Для OpenGL 3.0 вам нужен другой код.
Так, в C можно было бы написать так:
glBegin(GL_LINES);
glVertex3f(1, 2, 3);
glVertex3f(5, 6, 7);
glEnd();
Вы пишете эквивалент в Haskell, как это:
renderPrimitive Lines $ do
vertex $ Vertex3 1 2 3
vertex $ Vertex3 5 6 7
С этим кодом, так как я, например, 1
вместо некоторой переменной вы можете получить ошибки о неоднозначных типах (поэтому вы должны заменить 1
на (1 :: GLfloat)
), но если вы используете фактические переменные, которые уже имеют тип GLfloat
, вам не нужно это делать.
Вот полная программа, которая рисует белую диагональ в окне:
import Graphics.Rendering.OpenGL
import Graphics.UI.GLUT
main :: IO()
main = do
-- Initialize OpenGL via GLUT
(progname, _) <- getArgsAndInitialize
-- Create the output window
createWindow progname
-- Every time the window needs to be updated, call the display function
displayCallback $= display
-- Let GLUT handle the window events, calling the displayCallback as fast as it can
mainLoop
display :: IO()
display = do
-- Clear the screen with the default clear color (black)
clear [ ColorBuffer ]
-- Render a line from the bottom left to the top right
renderPrimitive Lines $ do
vertex $ (Vertex3 (-1) (-1) 0 :: Vertex3 GLfloat)
vertex $ (Vertex3 1 1 0 :: Vertex3 GLfloat)
-- Send all of the drawing commands to the OpenGL server
flush
по умолчанию OpenGL проекции фиксированной функция использует (-1, -1) в левом нижнем углу и (1, 1) для в правом верхнем углу окна. Вам нужно изменить матрицу проекции, чтобы получить разные координатные пространства.
Для получения более полных примеров см. the Haskell port of the NEHE tutorials. Они используют привязки RAW OpenGL, которые больше похожи на привязки C.
Быстрый Google появился этот:
http://www.haskell.org/haskellwiki/OpenGLTutorial1
В любом случае, так как OpenGL изначально библиотека C, вы можете получить ваши ноги мокрые в C (или C++) первой, так как вы 'можно использовать исходную документацию OpenGL как есть; после этого вы можете захотеть вникнуть в привязки Haskell и посмотреть, как вы используете те же вызовы OpenGL в Haskell.
Я уже посмотрел на это. В нем много картин, но на самом деле это не объясняет, как это сделать. – lewdsterthumbs
Он делает, но это не сразу очевидно. – tdammers
- 1. WPF C# линии рисования линии рисования линии
- 2. Линии рисования в Java
- 3. Линии рисования OpenGL, основанные на координатах Lat/Lon
- 4. Ядро рисования линии с контуром
- 5. Точки рисования OpenGL с индексом
- 6. OpenGL Линии с текстурами
- 7. Линии рисования поверх CGImage
- 8. Линии рисования Ios анимированные
- 9. линии рисования на QGraphicsScene
- 10. Линии рисования для холста
- 11. Эффективный метод рисования линии с миллионами точек
- 12. График рисования линии в iOS
- 13. Приложение для рисования с OpenGL/Openframeworks
- 14. MikroC, График рисования линии
- 15. Эффект рисования линии
- 16. C# рисования линии
- 17. Функция линии рисования
- 18. процедура рисования линии
- 19. Ошибка рисования модели в OpenGL
- 20. рисования Параллельные линии в C#
- 21. Линии рисования в C# с XNA
- 22. порядок рисования объектов в OpenGL
- 23. рисования текстур в OpenGL с использованием gluOrtho2D
- 24. 3d рисования в Python с OpenGL
- 25. OpenGL VBO's в Haskell
- 26. Аргументы для рисования линий OpenGL
- 27. лучший способ рисования линии безье
- 28. Приложение для рисования линии Android
- 29. Проверка начертания линии рисования Flash
- 30. Рекурсивно вычисляет линии для рисования
Похоже, что это сработает для того, что я пытаюсь сделать, но похоже, что это не работает. Программа будет скомпилирована, но при ее запуске никаких строк не будет. Возможно, я не прав, или помещаю его в неправильную область. Опять же, я новичок в opengl и не знаю, как это работает. Есть ли способ, который вы могли бы дать мне, как более полную программу (которую понимал бы новичок)? – lewdsterthumbs
Хорошо, я добавил полную примерную программу, которая работает на моем компьютере. – dflemstr
@lewdsterthumbs Вам может понравиться [40 способов получить пустой черный экран] (http://dmalcolm.livejournal.com/2433.html). –