Easy-ISLispでOpenGLを
はじめに
Easy-ISLisp(以下「EISL」)からOpenGLを扱うことに取り組んでいます。うまくいきました。ご紹介します。
OpenGLのインストール
予めOpenGLがインストールされている必要があります。LinuxMINTへのインストールは簡単です。下記をご参照ください。
https://qiita.com/sym_num/items/90cf5a22e623e1ad6578
Cラッパを利用したライブラリ
EISLにはC言語へのラッパが用意されています。Lisp関数にC言語コードを埋め込むことができます。これを利用してOpenGLを呼び出す関数を記述しています。
例
(defun glut::init-window-size (hight width)
(c-lang "glutInitWindowSize((INT_MASK & HIGHT), (INT_MASK & WIDTH));"))
(defun glut::init-window-position (hight width)
(c-lang "glutInitWindowPosition((INT_MASK & HIGHT), (INT_MASK & WIDTH));"))
(defun glut::create-window (x)
(c-lang "glutCreateWindow(Fgetname(X));"))
インタプリタでもOK
GLUTの関数を利用して画面を描画する関数を呼び出しています。ここにLispの関数を記述できるようにしてあります。このためインタプリタでもOpenGLを動作させることができます。試行錯誤するにはインタプリタの方が楽です。すっかり動作確認ができたならコンパイルすることも可能です。
callback関数が事前にvoid型として定義されています。Lispで記述された描画関数のアドレスを大域変数、callbackfuncに代入し、callback関数はLispのEvalを呼び出しています。
整備中
以下のような簡単なものは動作することが確認できました。あとはひたすら必要なOpenGLの関数をライブラリに補充すればOKです。ISLispでゲームも記述できるようになることでしょう。
(import "opengl")
(defun main ()
(glut::init)
(glut::init-display-mode 'glut-single)
(glut::init-window-size 400 300)
(glut::init-window-position 200 300)
(glut::create-window "GLUT test")
(glut::init-display-mode "GLUT_RGBA")
(gl::clear-color 1.0 1.0 1.0 1.0)
(glut::display-func 'show)
(glut::main-loop)
)
(defun show ()
(gl::clear 'gl_color_buffer_bit)
(gl::color3d 1.0 0.0 0.0)
(gl::begin)
(gl::vertex2d -0.5 -0.5)
(gl::vertex2d -0.5 0.5)
(gl::vertex2d 0.5 0.5)
(gl::vertex2d 0.5 -0.5)
(gl::end)
(gl::flush)
)
githubにおいてあります。
https://github.com/sasagawa888/eisl
Author And Source
この問題について(Easy-ISLispでOpenGLを), 我々は、より多くの情報をここで見つけました https://qiita.com/sym_num/items/ade5fc10592da5631a24著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .