2012-02-15 3 views
5

私はopenglを使ってボードを作成しようとしています。これを行うために、私はグリッドを作成するために一連の線を描こうとしています。しかし、すべてのチュートリアルサイト(openglを含む)にはC++の例があり、Haskell wikiはそれを説明するうまくやっていません。私はOpenGLを初めて使っており、チュートリアルが好きです。ハスケルでOpenGLを使って線を描く

答えて

12

OpenGL 2.1以前のバージョンを使用したいとします。 OpenGL 3.0では、異なるコードが必要です。

ので、Cには、これを記述します。私は、例えば使用するので、このコードで

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(); 

あなたはこのようなHaskellので同等を書きます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を参照してください。彼らはより多くのCバインディングのようなRAW OpenGLバインディングを使用します。

+0

これは私がやろうとしているものでうまくいくようですが、うまく動作していないようです。プログラムはコンパイルされますが、実行すると線は描画されません。たぶん、私は正しいことをしていないか、間違った場所に置いています。繰り返しますが、私はOpenGLを初めて使っていて、実際にどのように動作するのか分かりません。あなたが完全なプログラム(初心者が理解できるもの)の多くとして私にそれを与えることができる方法はありますか? – lewdsterthumbs

+0

さて、私は自分のコンピュータで動作する完全なサンプルプログラムを追加しました。 – dflemstr

+2

@lewdsterthumbs [黒い画面を空にする40の方法](http://dmalcolm.livejournal.com/2433.html)をお楽しみください。 –

1

簡単にGoogleはこれを上がっ:いずれの場合で

http://www.haskell.org/haskellwiki/OpenGLTutorial1

、OpenGLはもともとCライブラリであるため、あなたがC(またはC++)で足が濡れて取得したいかもしれまず、あなたのため、元のOpenGLドキュメントをそのまま使用することができます。その後、Haskellバインディングを掘り下げ、Haskellでどのように同じOpenGL呼び出しを使用するかを確認したいことがあります。

+0

私はすでにこれを見てきました。それはたくさんの写真を持っていますが、実際に何かをする方法を説明するものではありません。 – lewdsterthumbs

+2

それはありますが、すぐには分かりません。 – tdammers

関連する問題