C++,OpenGL,Qt,Squirrelでポリゴンモデラーを作る~ OpenModeler ~
自己紹介•   名前      泉芳樹•   所属      河原電子ビジネス専門学校•   twitter @izumi_yoshiki•   GitHub https://github.com/izumiyoshiki
団体紹介• 日本Androidの会    四国支部  (jagshikoku)四国支部長の兼久さんにセミナーする チャンスを作って頂きました。
宣伝•OpenGL勉強会twitterで告知してま す。     @izumi_yoshiki
今日の内容1、なぜ作るか2、何を使って作るか3、Qt4、OpenGL5、Squirrel6、まとめ
1、なぜ作るか• 個人で3Dは敷居が高いイメージ• ポリゴンモデラーが高価だから
1、なぜ作るか• フリーのポリゴンモデラー  Windows      :Metasequoia   メタ  セコイア  Windows/Mac :Blender        ブレ  ンダー
1、なぜ作るか• 私は主にMacを使っているので  Macで動くポリゴンモデラーが欲  しい。• Blenderは操作感が独特でなかな  か使いこなせない。• 自分で作ってしまおう。
1、なぜ作るか• ポリゴンモデルのデータ形式が多種mqo, dae, fbx, obj, x, etc…• ポリゴンデータのパーサー(解析器)を作っ  たりしていると自分でデータ形式を作りたく  なる。     json形式のモデルデータはまだ...
2、何を使って作るか• Macで作るにはcocoaがある。私は使った  事がない。• クロスプラットフォームで動くQtがある。  これも使った事がない。• どちらにしても勉強しながらなのでQtを  使う。• C++/Qtが決定。
2、何を使って作るか• 3Dライブラリは何を使うか。• DirectXが有名だがWindowsのみでしか動か  ない。• OpenGLはどのプラットフォームも対応し  ているのでOpenGLを使う。• C++/Qt/OpenGLが決定。
2、何を使って作るか• Blenderはスクリプト言語にPythonを採用  している。• 高価なポリゴンモデラーのMayaは独自の  スクリプト言語MELを載せている。• OpenModelerも何かスクリプト言語を採用  しよう。
2、何を使って作るか• スクリプト言語ってなに?• よく使われていた方法は、  データ部分を切り離して、後でデータだけ変更  できるようにしている。• スクリプト言語は、  ロジック部分もデータとして扱い、  ロジック部分を切り離して、後でロジ...
2、何を使って作るか• スクリプト言語はゲームでよく採用され  ているLua(ルア)とSquirrel(スクワー  ル)が良さそう。• スクリプトなのでビルドしなくても中身  が変更できる。
2、何を使って作るか• Luaは軽量でCで書かれているスクリプト  言語。• Wikipediaのスクリプト言語にも採用され  た。• 他、多数のゲームで採用されている。
2、何を使って作るか• SquirrelはC++で書かれていてLuaを使って  いた Alberto Demichelis さんがLuaの不満点  を解消するために作ったスクリプト言  語。• Squirrelはクラスが作成できる。Luaは標準...
2、何を使って作るか• 他にも色々ありますが、Squirrelを採用し  ます。• C++/Qt/OpenGL/Squirrelに決定。
小休止
3、Qt• QtのHelloWorldのソースmain.cppです
3、Qt#include <QtGui/QApplication>#include "mainwindow.h“int main(int argc, char *argv[]){  QApplication application(argc, ...
3、QtQtのHelloWorldのソースmainwindow.hです
3、Qt#include <QMainWindow>namespace Ui {     class MainWindow;}class MainWindow : public QMainWindow{     Q_OBJECTpublic: ...
3、Qt• QtのHelloWorldのソースmainwindow.cppです
3、Qt#include "mainwindow.h“#include"ui_mainwindow.h“MainWindow::MainWindow(QWidget *parent) :  QMainWindow(parent),ui(new ...
4、OpenGL• QtでOpenGLのHelloWorldのソースopengl.hです
4、OpenGL#include <QGLWidget>class OpenGL : public QGLWidget{     Q_OBJECTpublic:    OpenGL(QWidget *parent = 0);    ~OpenG...
4、OpenGLQtでOpenGLのHelloWorldのソースopengl.cppです
4、OpenGL#include "opengl.h“OpenGL::OpenGL(QWidget *parent) : QGLWidget(parent) {}OpenGL::~OpenGL(){}
4、OpenGLvoid OpenGL::initializeGL(){  glClearColor(0.0, 0.0, 0.0, 1.0);}void OpenGL::resizeGL(int width, int height){  glV...
4、OpenGLvoid OpenGL::paintGL(){  glClear(GL_COLOR_BUFFER_BIT |           GL_DEPTH_BUFFER_BIT);  glColor3d(0.0, 1.0, 0.0); ...
4、OpenGL
5、SquirrelSquirrelの使用方法はプロジェクトにライブラリを2つ登録して おきます。・libsqstdlib.a・libsquirrel.atest.nutというスクリプトファイルを読み込  んで使用します。
5、SquirrelSquirrelのHelloWorldのソースmain.cppです。
5、Squirrelint main(int argc, char* argv[]){    HSQUIRRELVM v;    v = sq_open(1024);    sqstd_seterrorhandlers(v);    sq_se...
5、Squirrelvoid call_foo(HSQUIRRELVM v, int n,float f,const SQChar *s){  SQInteger top = sq_gettop(v);  sq_pushroottable(v)...
5、Squirrelvoid printfunc(HSQUIRRELVM v,               const SQChar *s,                ...){  va_list vl;  va_start(vl, s);...
5、Squirrelvoid errorfunc(HSQUIRRELVM v,                 const SQChar *s,                 ...){  va_list vl;  va_start(vl, ...
5、Squirrelスクリプトファイルのtest.nutのソースです
5、Squirrelfunction foo(i, f, s){   print("Called foo(), i="+i+          ", f="+f+          ", s= " +s+ " n");}
6、まとめ• C++/Qt/OpenGL/Squirrelで作成します。• ゲーム制作のためのポリゴンモデ  ラー。• プログラマのためのポリゴンモデ  ラー。• みなさんも一緒に OpenModeler を
御清聴ありがとうございまし      た
• twitter @izumi_yoshiki• GitHub  https://github.com/izumiyoshiki
Upcoming SlideShare
Loading in …5
×

Open modeler

1,032 views
966 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,032
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Open modeler

  1. 1. C++,OpenGL,Qt,Squirrelでポリゴンモデラーを作る~ OpenModeler ~
  2. 2. 自己紹介• 名前 泉芳樹• 所属 河原電子ビジネス専門学校• twitter @izumi_yoshiki• GitHub https://github.com/izumiyoshiki
  3. 3. 団体紹介• 日本Androidの会 四国支部 (jagshikoku)四国支部長の兼久さんにセミナーする チャンスを作って頂きました。
  4. 4. 宣伝•OpenGL勉強会twitterで告知してま す。 @izumi_yoshiki
  5. 5. 今日の内容1、なぜ作るか2、何を使って作るか3、Qt4、OpenGL5、Squirrel6、まとめ
  6. 6. 1、なぜ作るか• 個人で3Dは敷居が高いイメージ• ポリゴンモデラーが高価だから
  7. 7. 1、なぜ作るか• フリーのポリゴンモデラー Windows :Metasequoia メタ セコイア Windows/Mac :Blender ブレ ンダー
  8. 8. 1、なぜ作るか• 私は主にMacを使っているので Macで動くポリゴンモデラーが欲 しい。• Blenderは操作感が独特でなかな か使いこなせない。• 自分で作ってしまおう。
  9. 9. 1、なぜ作るか• ポリゴンモデルのデータ形式が多種mqo, dae, fbx, obj, x, etc…• ポリゴンデータのパーサー(解析器)を作っ たりしていると自分でデータ形式を作りたく なる。 json形式のモデルデータはまだ無いので json形式のデータが欲しい。• 自分で作ってしまおう。
  10. 10. 2、何を使って作るか• Macで作るにはcocoaがある。私は使った 事がない。• クロスプラットフォームで動くQtがある。 これも使った事がない。• どちらにしても勉強しながらなのでQtを 使う。• C++/Qtが決定。
  11. 11. 2、何を使って作るか• 3Dライブラリは何を使うか。• DirectXが有名だがWindowsのみでしか動か ない。• OpenGLはどのプラットフォームも対応し ているのでOpenGLを使う。• C++/Qt/OpenGLが決定。
  12. 12. 2、何を使って作るか• Blenderはスクリプト言語にPythonを採用 している。• 高価なポリゴンモデラーのMayaは独自の スクリプト言語MELを載せている。• OpenModelerも何かスクリプト言語を採用 しよう。
  13. 13. 2、何を使って作るか• スクリプト言語ってなに?• よく使われていた方法は、 データ部分を切り離して、後でデータだけ変更 できるようにしている。• スクリプト言語は、 ロジック部分もデータとして扱い、 ロジック部分を切り離して、後でロジックも変更 できるようにしている。
  14. 14. 2、何を使って作るか• スクリプト言語はゲームでよく採用され ているLua(ルア)とSquirrel(スクワー ル)が良さそう。• スクリプトなのでビルドしなくても中身 が変更できる。
  15. 15. 2、何を使って作るか• Luaは軽量でCで書かれているスクリプト 言語。• Wikipediaのスクリプト言語にも採用され た。• 他、多数のゲームで採用されている。
  16. 16. 2、何を使って作るか• SquirrelはC++で書かれていてLuaを使って いた Alberto Demichelis さんがLuaの不満点 を解消するために作ったスクリプト言 語。• Squirrelはクラスが作成できる。Luaは標準 ではクラスをサポートしてない。• Squirrelは配列が0から始まる。Luaは配列 は1から始まる。
  17. 17. 2、何を使って作るか• 他にも色々ありますが、Squirrelを採用し ます。• C++/Qt/OpenGL/Squirrelに決定。
  18. 18. 小休止
  19. 19. 3、Qt• QtのHelloWorldのソースmain.cppです
  20. 20. 3、Qt#include <QtGui/QApplication>#include "mainwindow.h“int main(int argc, char *argv[]){ QApplication application(argc, argv); MainWindow window; window.show(); return application.exec();}
  21. 21. 3、QtQtのHelloWorldのソースmainwindow.hです
  22. 22. 3、Qt#include <QMainWindow>namespace Ui { class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow();private: Ui::MainWindow *ui;};
  23. 23. 3、Qt• QtのHelloWorldのソースmainwindow.cppです
  24. 24. 3、Qt#include "mainwindow.h“#include"ui_mainwindow.h“MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui; }
  25. 25. 4、OpenGL• QtでOpenGLのHelloWorldのソースopengl.hです
  26. 26. 4、OpenGL#include <QGLWidget>class OpenGL : public QGLWidget{ Q_OBJECTpublic: OpenGL(QWidget *parent = 0); ~OpenGL();protected: virtual void initializeGL(); virtual void resizeGL(int width, int height); virtual void paintGL();};
  27. 27. 4、OpenGLQtでOpenGLのHelloWorldのソースopengl.cppです
  28. 28. 4、OpenGL#include "opengl.h“OpenGL::OpenGL(QWidget *parent) : QGLWidget(parent) {}OpenGL::~OpenGL(){}
  29. 29. 4、OpenGLvoid OpenGL::initializeGL(){ glClearColor(0.0, 0.0, 0.0, 1.0);}void OpenGL::resizeGL(int width, int height){ glViewport(0, 0, width, height); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);}
  30. 30. 4、OpenGLvoid OpenGL::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3d(0.0, 1.0, 0.0); glBegin(GL_TRIANGLES); glVertex2d(0.1, 0.1); glVertex2d(0.9, 0.1); glVertex2d(0.5, 0.9); glEnd();}
  31. 31. 4、OpenGL
  32. 32. 5、SquirrelSquirrelの使用方法はプロジェクトにライブラリを2つ登録して おきます。・libsqstdlib.a・libsquirrel.atest.nutというスクリプトファイルを読み込 んで使用します。
  33. 33. 5、SquirrelSquirrelのHelloWorldのソースmain.cppです。
  34. 34. 5、Squirrelint main(int argc, char* argv[]){ HSQUIRRELVM v; v = sq_open(1024); sqstd_seterrorhandlers(v); sq_setprintfunc(v, printfunc,errorfunc); sq_pushroottable(v); if(SQ_SUCCEEDED( sqstd_dofile(v, _SC("test.nut"), SQFalse, SQTrue)) ) { call_foo(v,1,2.5,_SC("teststring")); } sq_pop(v,1); sq_close(v); return 0; }
  35. 35. 5、Squirrelvoid call_foo(HSQUIRRELVM v, int n,float f,const SQChar *s){ SQInteger top = sq_gettop(v); sq_pushroottable(v); sq_pushstring(v,_SC("foo"),-1); if(SQ_SUCCEEDED(sq_get(v,-2))) { sq_pushroottable(v); sq_pushinteger(v,n); sq_pushfloat(v,f); sq_pushstring(v,s,-1); sq_call(v,4,SQFalse,SQTrue); } sq_settop(v,top);}
  36. 36. 5、Squirrelvoid printfunc(HSQUIRRELVM v, const SQChar *s, ...){ va_list vl; va_start(vl, s); scvprintf(stdout, s, vl); va_end(vl);}
  37. 37. 5、Squirrelvoid errorfunc(HSQUIRRELVM v, const SQChar *s, ...){ va_list vl; va_start(vl, s); scvprintf(stderr, s, vl); va_end(vl);}
  38. 38. 5、Squirrelスクリプトファイルのtest.nutのソースです
  39. 39. 5、Squirrelfunction foo(i, f, s){ print("Called foo(), i="+i+ ", f="+f+ ", s= " +s+ " n");}
  40. 40. 6、まとめ• C++/Qt/OpenGL/Squirrelで作成します。• ゲーム制作のためのポリゴンモデ ラー。• プログラマのためのポリゴンモデ ラー。• みなさんも一緒に OpenModeler を
  41. 41. 御清聴ありがとうございまし た
  42. 42. • twitter @izumi_yoshiki• GitHub https://github.com/izumiyoshiki

×