OpenGL 2.1 veya önceki sürümlerini kullanmak istediğinizi varsayalım. OpenGL 3.0 için farklı kodlara ihtiyacınız var.
Yani, C yazarsınız: Ben mesela kullanılan beri, bu kod ile
renderPrimitive Lines $ do
vertex $ Vertex3 1 2 3
vertex $ Vertex3 5 6 7
:
glBegin(GL_LINES);
glVertex3f(1, 2, 3);
glVertex3f(5, 6, 7);
glEnd();
Böyle Haskell eşdeğer yazma 1
bazı değişkenler yerine, belirsiz türlerle ilgili hatalar alabilirsiniz (Bu nedenle 'u (1 :: GLfloat)
ile değiştirmelisiniz), ancak GLfloat
türüne sahip olan gerçek değişkenleri kullanırsanız, bunu yapmanız gerekmez.
Burada penceresinde beyaz diyagonal çeken bir programdır verilmiştir:
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
varsayılan OpenGL sabit fonksiyonlu projeksiyon kullanımları (-1, -1) alt için için (1: 1) ve sol pencerenin sağ üst köşesi. Farklı koordinat alanları elde etmek için projeksiyon matrisini değiştirmeniz gerekir.
Bunun gibi daha eksiksiz örnekler için bkz. the Haskell port of the NEHE tutorials. C bağlamaları gibi daha fazla olan RAW OpenGL bağlarını kullanırlar.
Bu, yapmaya çalıştığım şey için işe yarayacak gibi görünüyor, ancak işe yaramaz gibi görünmüyor. Program derlenecek, ancak çalıştırdığımda hiçbir çizgi çizilmiyor. Belki doğru yapmıyorum ya da yanlış yere koydum. Yine, ben opengl için yeni ve gerçekten nasıl çalıştığını bilmiyorum. Bana daha fazla tam bir program (yeni başlayanların anlayacağı bir şey) olarak verebilmenin herhangi bir yolu var mı? – lewdsterthumbs
Tamam, bilgisayarımda çalışan tam bir örnek program ekledim. – dflemstr
@lewdsterthumbs [Boş bir siyah ekran elde etmek için 40 yolun tadını çıkarabilirsiniz] (http://dmalcolm.livejournal.com/2433.html). –