(4) モデルの消去 mqodeletemodel( model ); (5) 終了処理 ( プログラム終了時にやってください ) mqocleanup(); 3. 使い方 (2) 連番ファイルを読み込んで表示する場合 (1) 初期化 (ARToolKit の場合,argInit() の後に使用 )

Similar documents
GLMetaseq.c の中身 渡部修平 メタセコイアで作成した 3D モデルを OpenGL で表示させるためには, 工学ナビ ( が公開している C/C++ 用のライブラリ GLMetaseq があ

コンピュータグラフィックスS 演習資料

Microsoft PowerPoint - CproNt02.ppt [互換モード]

memo

スライド 1

02: 変数と標準入出力

Microsoft Word - no15.docx

02: 変数と標準入出力

Fair Curve and Surface Design System Using Tangent Control

02: 変数と標準入出力

PowerPoint プレゼンテーション

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

PowerPoint Presentation

PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint - 09.pptx

プログラミング基礎

AquesTalk10 Win マニュアル

AquesTalk Win Manual

Microsoft Word - Cプログラミング演習(10)

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Microsoft Word - Cプログラミング演習(12)

情報処理演習 B8クラス

演算増幅器

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

Taro-ポインタ変数Ⅰ(公開版).j

新・明解C言語 実践編

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

02: 変数と標準入出力

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

PowerPoint プレゼンテーション

プログラミング実習I

第1回 プログラミング演習3 センサーアプリケーション

PowerPoint プレゼンテーション

スライド 1

PowerPoint プレゼンテーション

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

AquesTalk for WinCE プログラミングガイド

Microsoft PowerPoint - lec10.ppt

AquesTalk Mac マニュアル

Computer Graphics

Microsoft Word - Writing Windows Installer's DLL.doc

Taro-2分探索木Ⅰ(公開版).jtd

AquesTalk プログラミングガイド

PowerPoint Presentation

Taro-ファイル処理(公開版).jtd

PowerPoint プレゼンテーション

AquesTalk2 Win マニュアル

Transcription:

GLMetaseq.h の中身 0810960080 渡部修平 メタセコイアで作成した 3D モデルを OpenGL で表示させるためには, 工学ナビ (http://kougaku-navi.net/artoolkit.html) が公開している C/C++ 用のライブラリ GLMetaseq があります 作成しているプログラムのプロジェクトに GLMetaseq.h と GLMetaseq.c を追加し, プログラム中で GLMetase.h をインクルードして使用します 以下は GLMetaseq.h のソースです #ifndef GLMETASEQ_H #define GLMETASEQ_H ================ メタセコイアで作成したモデル (*.mqo) を OpenGL 上に読み込む関数をまとめた C/C++ 用ヘッダ ================ /* GLMetaseq MIT ライセンス Copyright (c) 2009 Sunao Hashimoto and Keisuke Konishi 以下に定める条件に従い 本ソフトウェアおよび関連文書のファイル ( 以下 ソフトウェア ) の複製を取得するすべての人に対し ソフトウェアを無制限に扱うことを無償で許可します これには ソフトウェアの複製を使用 複写 変更 結合 掲載 頒布 サブライセンス および / または販売する権利 およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます 上記の著作権表示および本許諾表示を ソフトウェアのすべての複製または重要な部分に記載するものとします ソフトウェアは 現状のまま で 明示であるか暗黙であるかを問わず 何らの保証もなく提供されます ここでいう保証とは 商品性 特定の目的への適合性 および権利非侵害についての保証も含みますが それに限定されるものではありません 作者または著作権者は 契約行為 不法行為 またはそれ以外であろうと ソフトウェアに起因または関連し あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求 損害 その他の義務について何らの責任も負わないものとします */ /* 1. このヘッダを使う上での注意点 読み込み可能なテクスチャの画像形式は bmp,tga,jpeg,png ただし jpeg の読み込みには JPEG ライブラリ (libjpeg.lib, jpeglib.h) が別途必要 jpeg の読み込みを有効にするには, このヘッダの DEF_USE_LIBJPEG を 1 にすること png の読み込みには PNG ライブラリ (libpng.lib, zlib.lib, png.h,zlib.h) が別途必要 png の読み込みを有効にするには, このヘッダの DEF_USE_LIBPNG を 1 にすること テクスチャ画像のサイズは 一辺がの n 乗サイズ (64,128,256 ) の正方形 に限る 2. 使い方 (1) 1 つの MQO ファイルを読み込んで表示する場合 (1) 初期化 (ARToolKit の場合,argInit() の後に使用 ) mqoinit(); (2) ファイルからのモデルの読み込み MQO_MODEL model; model = mqocreatemodel( "mario.mqo", 1.0 ); (3) モデルの呼び出し mqocallmodel( model );

(4) モデルの消去 mqodeletemodel( model ); (5) 終了処理 ( プログラム終了時にやってください ) mqocleanup(); 3. 使い方 (2) 連番ファイルを読み込んで表示する場合 (1) 初期化 (ARToolKit の場合,argInit() の後に使用 ) mqoinit(); (2) 連番シーケンスの作成 例 :mario0.mqo ~mario9.mqo を読み込む MQO_SEQUENCE seq; seq = mqocreatesequence( "mario%d.mqo", 10, 1.0 ); (3) 連番シーケンスの指定フレームの呼び出し (i はフレーム番号 ) mqocallsequence( seq, i ); (4) 連番シーケンスの消去 mqodeletesequence( seq ); (5) 終了処理 ( プログラム終了時にやってください ) mqocleanup(); 4. 主な仕様 */ 表示機能 サポートしている MQO ファイルのバージョンは Metasequoia Ver1.0/2.0~.4 対応している材質情報色 ( 光 ) テクスチャマップ ( バンプマップ非対応 /UV マッピングのみ ) 対応しているオブジェクト情報表示 / 非表示の切り替えスムージングの有無頂点法線を決めるときのスムージング角頂点情報面情報 ( 頂点カラー非対応 ) 曲面 鏡面 回転体には非対応 メタボールは非対応 仕様 チャンク名は原則として大文字と小文字の区別をしないことになっているが区別してしまっている. テクスチャのパスに多バイト文字をつかっていてそのなかに '\'(0x5c) や '/'(0x2f) がはいっているとうまくテクスチャが読めない. 未着色のマテリアルに対応していない. Object チャンク face チャンクの材質インデックス (M(%d)) が -1 に未対応. ユーザが任意で設定 #define MAX_TEXTURE 100 // テクスチャの最大取り扱い数 #define MAX_OBJECT 50 // 1 個のMQOファイル内の最大オブジェクト数 #define SIZE_STR 256 // 文字列バッファのサイズ #define DEF_IS_LITTLE_ENDIAN 1 // エンディアン指定 (intel 系 =1) #define DEF_USE_LIBJPEG 0 // libjpegの使用 (: 使用 0: 未使用 )

#define DEF_USE_LIBPNG 0 // libpng の使用 (: 使用 0: 未使用 ) コンパイルオプション // JPEGを使用する #ifdef D_JPEG #undef DEF_USE_LIBJPEG #define DEF_USE_LIBJPEG 1 // JPEGを使用しない #ifdef D_NO_JPEG #undef DEF_USE_LIBJPEG #define DEF_USE_LIBJPEG 0 // PNGを使用する #ifdef D_PNG #undef DEF_USE_LIBPNG #define DEF_USE_LIBPNG 1 // PNGを使用しない #ifdef D_NO_PNG #undef DEF_USE_LIBPNG #define DEF_USE_LIBPNG 0 ヘッダ #ifdef WIN32 #include <windows.h> #else #ifndef MAX_PATH #define MAX_PATH 256 #ifndef TRUE #define TRUE (1==1) #ifndef FALSE #define FALSE (1!=1) #include <stdio.h> #include <stdlib.h> #include <math.h> #ifdef APPLE #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> #include <OpenGL/glext.h> #else #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> // #include <gl/glext.h>

機能設定 libjpeg 使用設定 #if DEF_USE_LIBJPEG #define XMD_H // INT16 と INT32 の再定義エラーを防ぐ #ifdef FAR #undef FAR #include "jpeglib.h" #pragma comment(lib,"libjpeg.lib") 機能設定 libpng 使用設定 #if DEF_USE_LIBPNG #include "png.h" #include "zlib.h" #pragma comment(lib,"libpng.lib") #pragma comment(lib,"zlib.lib") マクロ定義 最大値マクロ #ifndef MAX #define MAX(a, b) (((a) > (b))? (a) : (b)) 型定義 TGA フォーマット #define DEF_TGA_COLOR_MAP_FLAG_VALID 1 #define DEF_TGA_TYPE_NON 0 #define DEF_TGA_TYPE_INDEX 1 #define DEF_TGA_TYPE_FULL 2 #define DEF_TGA_TYPE_MONO 3 #define DEF_TGA_TYPE_RLEINDEX 9 #define DEF_TGA_TYPE_RLEFULL 10 #define DEF_TGA_TYPE_RLEMONO 11 #define DEF_TGA_BIT_INFO_RIGHT_TO_LEFT 0x00 #define DEF_TGA_BIT_INFO_LEFT_TO_RIGHT 0x10 #define DEF_TGA_BIT_INFO_DOWN_TO_TOP 0x00 #define DEF_TGA_BIT_INFO_TOP_TO_DOWN 0x20 unsigned char id; unsigned char color_map_flag; unsigned char type; unsigned short color_map_entry; unsigned char color_map_entry_size; unsigned short x; unsigned short y;

unsigned short unsigned short unsigned char unsigned char } STR_TGA_HEAD; width; height; depth; bit_info; 型定義 OpenGL 用色構造体 (4 色 float) GLfloat r; GLfloat g; GLfloat b; GLfloat a; } glcolor4f; 型定義 OpenGL 用 2 次元座標構造体 (float) GLfloat x; GLfloat y; } glpoint2f; 型定義 OpenGL 用 3 次元座標構造体 (float) typedef struct tag_glpoint3f { GLfloat x; GLfloat y; GLfloat z; } glpoint3f; 型定義 面情報構造体 int n; // 1つの面を構成する頂点の数 (~) int m; // 面の材質番号 int v[4]; // 頂点番号を格納した配列 glpoint2f uv[4]; // UVマップ } MQO_FACE; 型定義 材質情報構造体( ファイルから情報を読み込む際に使用 ) glcolor4f col; // 色 GLfloat dif[4]; // 拡散光 GLfloat amb[4]; // 周囲光 GLfloat emi[4]; // 自己照明 GLfloat spc[4]; // 反射光 GLfloat power; // 反射光の強さ int usetex; // テクスチャの有無 char texfile[size_str]; // テクスチャファイル char alpfile[size_str]; // アルファテクスチャファイル GLuint texname; // テクスチャ名 } MQO_MATDATA;

型定義 オブジェクト構造体( パーツ1 個のデータ ) char objname[size_str]; // パーツ名 int visible; // 可視状態 int shading; // シェーディング (: フラット /: グロー ) float facet; // スムージング角 int n_face; // 面数 int n_vertex; // 頂点数 MQO_FACE *F; // 面 glpoint3f *V; // 頂点 } MQO_OBJDATA; 型定義 テクスチャプール GLuint texture_id; // テクスチャID int texsize; // テクスチャサイズ char texfile[max_path]; // テクスチャファイル char alpfile[max_path]; // アルファテクスチャファイル unsigned char alpha; // アルファ } TEXTURE_POOL; 型定義 頂点データ ( テクスチャ使用時 ) GLfloat point[3]; // 頂点配列 (x, y, z) GLfloat normal[3]; // 法線配列 (x, y, z) GLfloat uv[2]; // UV 配列 (u, v) } VERTEX_TEXUSE; 型定義 頂点データ ( テクスチャ不使用時 ) GLfloat point[3]; // 頂点配列 (x, y, z) GLfloat normal[3]; // 法線配列 (x, y, z) } VERTEX_NOTEX; 型定義 マテリアル情報( マテリアル別に頂点配列を持つ ) int isvalidmaterialinfo; // マテリアル情報の有効 / 無効 int isusetexture; // テクスチャの有無 :USE_TEXTURE / NOUSE_TEXTURE GLuint texture_id; // テクスチャの名前 (OpenGL) GLuint VBO_id; // 頂点バッファのID(OpenGL) 対応してる時だけ使用 int datanum; // 頂点数 GLfloat color[4]; // 色配列 (r, g, b, a) GLfloat dif[4]; // 拡散光 GLfloat amb[4]; // 周囲光 GLfloat emi[4]; // 自己照明 GLfloat spc[4]; // 反射光

GLfloat power; // 反射光の強さ VERTEX_NOTEX *vertex_p; // ポリゴンのみの時の頂点配列 VERTEX_TEXUSE *vertex_t; // テクスチャ使用時の頂点配列 } MQO_MATERIAL; 型定義 内部オブジェクト( つのパーツを管理 ) char objname[size_str]; // オブジェクト名 int isvisible; // 0: 非表示その他 : 表示 int isshadingflat; // シェーディングモード int matnum; // 使用マテリアル数 MQO_MATERIAL *mat; // マテリアル配列 } MQO_INNER_OBJECT; 型定義 MQOオブジェクト ( つのモデルを管理 ) MQO_MODELの実体 unsigned char alpha; // 頂点配列作成時に指定されたアルファ値 ( 参照用 ) int objnum; // 内部オブジェクト数 MQO_INNER_OBJECT obj[max_object]; // 内部オブジェクト配列 } MQO_OBJECT; 型定義 MQO_MODEL 構造体 typedef MQO_OBJECT * MQO_MODEL; // MQO_MODELは独自形式構造体へのアドレス 型定義 MQOシーケンス MQO_MODEL model; // モデル int n_frame; // フレーム数 } MQO_SEQUENCE; 型定義 glext.h からのVBO Extension の定義 #ifdef WIN32 #define GL_ARRAY_BUFFER_ARB 0x8892 usage); #define GL_STATIC_DRAW_ARB 0x88E4 typedef void (APIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); typedef void (APIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, int size, const GLvoid *data, GLenum グローバル変数定義 #ifdef GLMETASEQ_C #define GLMETASEQ_C EXTERN #else #define GLMETASEQ_C EXTERN extern

GLMETASEQ_C EXTERN int g_isvbosupported; // OpenGL の頂点バッファのサポート有無 #ifdef WIN32 // VBO Extension 関数のポインタ GLMETASEQ_C EXTERN PFNGLGENBUFFERSARBPROC glgenbuffersarb; GLMETASEQ_C EXTERN PFNGLBINDBUFFERARBPROC glbindbufferarb; GLMETASEQ_C EXTERN PFNGLBUFFERDATAARBPROC glbufferdataarb; GLMETASEQ_C EXTERN PFNGLDELETEBUFFERSARBPROC gldeletebuffersarb; // VBO 名前生成 // VBO 結びつけ // VBO データロード // VBO 削除 #undef GLMETASEQ_C EXTERN 関数宣言 #ifdef cplusplus extern "C" { // 初期化 void mqoinit(void); // 終了処理 void mqocleanup(void); // モデル生成 MQO_MODEL mqocreatemodel(char *filename, double scale); // シーケンス生成 MQO_SEQUENCE mqocreatesequence(const char *format, int n_file, double scale); // シーケンス生成 ( 拡張版 ) MQO_SEQUENCE mqocreatesequenceex(const char *format, int n_file, double scale, int fade_inout, unsigned char alpha); // モデル呼び出し void mqocallmodel(mqo_model model); // シーケンス呼び出し void mqocallsequence(mqo_sequence seq, int i); // モデルの削除 void mqodeletemodel(mqo_model model); // シーケンスの削除 void mqodeletesequence(mqo_sequence seq); #ifdef cplusplus } // -- end of header --