-
.FBXを読み込んでみる3(表示編)
前回のプログラムはテクスチャ無しで3角ポリゴンの FBX ファイルしか 読み込めませんでした。 今回のプログラムは3角と4角の両方のポリゴンに対応しています。 テクスチャはレイヤー0しか対応していませんが通常の使用には問題ないと 思います。 PNG.h #pragma once #include lodepng.h //テクスチャクラス class TEXTURE{ protected ...
-
メニュー
...る2(読み込み編) .FBXを読み込んでみる3(表示編) ▲▲▲▲▲ ▼ 固定機能 階層メッシュアニメーション編 アニメーションとは 階層構造 .Xの階層メッシュアニメーションの構造 再帰関数 .Xの階層メッシュアニメーションを読み込んでみる1 自己参照構造体と自己参照クラス 2分木構造 .Xの階層メッシュアニメーションを読み込んでみる2 キーフレーム 行列(マトリックス)と...
-
.FBXを読み込んでみる1(解析編)
.FBX を読み込んで表示できると便利です。 .FBX は Autodesk 社の製品の中間ファイルフォーマットです。 3ds Max , Maya , MotionBuilder , Mudbox , Softimage 間のデータを 受け渡す時のために作られました。 その後、Lightwave 3D や CINEMA 4D や Shade でも使えるようになりました。 FBXはバージョンによっ...
-
.FBXを読み込んでみる2(読み込み編)
それでは実際に FBXSDK を使用してデータを取り出してみようと思います。 まず、fbx20113_fbxsdk_win をインストールして Visual studio にパスを通します。 そして プロジェクトのフォルダに fbxsdk_20113.dll と fbxsdk_20113d.dll を置きます。 使い方は KFbxSdkManager を作成して、 KFbxImporter を作成...
-
.Xを読み込んでみる4(表示編)
前回の読み込み編ではテンプレート無しで3角ポリゴンの Xファイルしか 読み込めませんでしたが、今回はテンプレートを読み飛ばし、3角と4角ポリゴンの 両方の Xファイルを読み込めるようにしました。 Xファイルは作成するソフトによって癖がありますので全ての3Dアプリが作る Xファイルに 対応する事はできません。とりあえずメタセコイアが作る Xファイルに対応しています。 PNG.h #includ...
-
.OBJを読み込んでみる3(表示編)
.OBJ ファイルの読み込みプログラムが完成しましたので公開します。 取りあえず、インデックス化はせずに頂点配列で表示しています。 テクスチャはマテリアルで重複しないようにモデルクラスで保持しています。 完全に重複を避けるにはアプリケーション単位で保持する必要が あると思います。 PNG.h #include lodepng.h //テクスチャクラス class TEXTURE{ prot...
-
.Xを読み込んでみる3(読み込み編)
では実際にXファイルを読み込んでみます。 今回は読み込み編という事で3角ポリゴンのみです。http //www.geocities.co.jp/Playtown-Spade/7188/こちらのデータを使わせて頂いています。 事前にメタセコイアで3角ポリゴンに変換してテクスチャを PNG 形式に変換しています。 Xファイルのテンプレートを除去しないと読み込みできません。 PNG.h #inclu...
-
.MQOを自力で読み込んでみる3(表示編)
今回は取りあえず、頂点配列で表示してみます。 .MQO の頂点データはインデックスになっていますが UV座標のデータは インデックスにはなっていないので glDrawElements を使うとテクスチャが めちゃくちゃになってしまいます。 仕方が無いので glDrawArrays 用に配列データを作成し直して描画 する事にしました。 今回は取りあえず表示するだけという事で法線やライトなどは省略し、...
-
.Xを読み込んでみる1(解析編)
DirectXの .X形式のファイルを読み込んで表示できると便利です。 現在の3Dアプリでは .X と .FBX が主に広く使われているようです。 では、例によってメタセコイアで .X を出力して中を見てみます。 三角ポリゴンを一枚だけ作って保存したものをメモ帳で開いてみます。 xof 0302txt 0064 template Header { 3D82AB43-62DA-11cf-AB3...
-
.Xを読み込んでみる2(解析編2)
それでは、前回の続きでテクスチャを設定してUVと法線を出力する ようにしてXファイルを作りました。 例によってテンプレート部分は除去しています。 xof 0302txt 0064 Header{ 1; 0; 1; } Mesh { 3; 1.08418;-0.00726;0.62110;, -1.10385;-0.70444;-1.10694;, -1.38258;1.10387;-0...
-
.MQOを自力で読み込んでみる1(解析編)
前回はGLMetaseqを使わせて頂きましたが、今回からは .MQO を自力で 読み込んでみたいと思います。 ただ使っているだけでは理解した事にはならないので実際に解析してみましょう。 まず、どのようなデータがあり、どのデータが必要となるのか、そこから探っていきたいと 思います。 では、メタセコイアを起動して何もせずにいきなり名前を付けて保存したデータを見て みます。 1.MQO Metaseq...
-
WAVファイルのヘッダを読み込んでみる
取りあえず、.wavファイルのヘッダを読み込んで表示してみます。 #include stdio.h #include string.h #define FileName test.wav #pragma pack(push,1) struct WaveFileHeader{ char Riff[4]; // RIFFヘッダ ...
-
.MQOを自力で読み込んでみる2(読み込み編)
今回は読み込み編という事で、実際に .MQO ファイルを読み込んでみます。 前回の解析編で描画に使うデータがわかりましたのでそれを自作のクラスと 構造体にガンガン詰め込んでみます。 ファイルの読み込みには C++ の fstream を使おうかな?と思ったんですが、 効率があまりよくないので GLmetaseq の旧版を参考に C言語の fscanf_s と fgets を使う事にしました。 GL...
-
.OBJを読み込んでみる2(読み込み編)
では、取りあえず簡単な読み込みプログラムを作ってみます。 今回はテクスチャ無しで、マテリアルも読み込んでいませんが .MQO の読み込みプログラムの時とは違って法線情報が ありますので陰影が表現されています。 box.obj # Created by Metasequoia mtllib box.mtl v -100.000000 100.000000 100.000000 v -100.00...
-
.Xの階層メッシュアニメーションを読み込んでみる1
では、手始めに .X の階層メッシュを読み込んで階層付きでコンソール出力してみます。 今回は複雑な階層を再帰関数で再現するために新しく sample.x というファイルを作成 しています。 この sample.x は以下のような階層構造を持っています。 それでは以下のプログラムでコンソール出力してみましょう。 #include windows.h #include stdio.h ...
-
.Xの階層メッシュアニメーションを読み込んでみる3
平行移動と同じようにして拡大縮小も線形補間してみました。 新規に作成した sample3.x を表示しています。 font.h #pragma once class GLFONT { public HFONT Hfont; HDC Hdc; GLFONT(wchar_t *fontname, int size); void DrawStringW(int x,int y,wchar...
-
.MQOを読み込んで表示する(GLMetaseq)
メタセコイアのモデルデータ .mqo を読み込んで表示してみます。 言わずもがなOpenGLはただのグラフィックライブラリ、モデルデータの読み込みなども 全て自分でコードを書かなくてはなりません。 DirectXの .x 形式や .sdkmesh 形式のようなものと読み込みライブラリがあらかじめ 用意されていると楽ですが、そんなものはありません。 ただ、工学ナビ さんのサイトでmqoの読み込みライ...
-
.OBJを読み込んでみる1(解析編)
.OBJ は Wavefront社の Advanced Visualizer というソフト用のファイルフォーマットです。 3Dプログラミング入門関係のHPや書籍では必ずと言って良いほど最初の方に登場します。 何故か?と言うとファイル形式がとてもシンプルでスタティックメッシュ(アニメーションしないメッシュ)を 表現するための全ての情報を含んでいるので入門用には最適だからです。 では、まず、例によって...
-
.Xの階層メッシュアニメーションを読み込んでみる2
それでは、実際に階層構造を作って表示してみる事にします。 今回はアニメーションはせずに、ただ単にモデルを表示するだけです。 2分木構造を再帰関数を使ってデータ処理をする場合、return で戻る先を きちんと把握していないとおかしなデータ構造になってしまいます。 再帰関数というのは一つずつネストを深めて行きます。 なので、return すると1階層戻るのではなく 1 NODE 戻ります。 以下の...
-
.Xの階層メッシュアニメーションを読み込んでみる4
.xの階層アニメーションを読み込んで再生するプログラムが完成したので公開します。 クォータニオンの符号の判定には皆さん、苦労されたのではないでしょうか。 ネットで広く公開されているサンプルはほとんどがDirectX用で いちいち転置しなければならなかったり。 左手座標用に作成したアニメーションXファイルはクォータニオンのY軸とZ軸を-1倍しないと OpenGLではおかしな表示になるとか。 回転角度...
-
コメント板
簡易掲示板です。 何かありましたらコメントを。 てすと -- 管理人 (2010-03-22 11 30 06) directXのホウノライブラリは開発中止になったんですか? -- 人間 (2010-09-26 23 25 06) OpenGL最近勢いづいてていい感じですね。C#+OpenTKの開発のしやすさもなかなかすごいし、ゲーム業界もOpenGLにシフトしないか...
-
.Xのスキンメッシュアニメーションを読み込んでみる2
.x のスキンメッシュアニメーションを読み込んで表示します。 このプログラムは box.x 専用です。 わかりやすくするために敢えて、このようにしました。 これで完成ではありません。 法線を再設定してあげないと光の反射具合が変になってしまいます。 詳しくは次回に回します。 font.h #pragma once class GLFONT { public HFONT Hfo...
-
.Xのスキンメッシュアニメーションを読み込んでみる1
階層メッシュクラスを継承してスキンメッシュクラスを作成します。 ジョイントは球でボーンは四角錐にしました。 固定機能 スキニング編『スキンメッシュアニメーションの原理1』で 作成した man.x を表示しています。 Cyberdelia と ToyStudio では出力されるXファイルの書式が異なりますので 今回からは Cyberdelia で出力したXファイルには対応しない事にします。 fon...
-
.MQOローダ(ワイヤーフレーム表示編)
ワイヤーフレーム表示です。 最初、 glDrawArrays を使って描画したら遅くて実用的ではありませんでした。 そこで色々、思考錯誤して glMultiDrawArrays を使ったら、割りとそれなりの 速度で描画できるようになったので公開します。 PNG.h #include lodepng.h //テクスチャクラス class TEXTURE{ protected LodeP...
-
画像を表示する(GDI+)
2D画像を読み込んで表示します。 DirectXは、D3DXという便利なライブラリが .bmp、.dds、.dib、.jpg、.png、.tga 形式の 画像を読み込んでくれましたが、OpenGLには何もありません。 .bmp ですら、自前で読み込み関数を作ったりしなければなりません。 glpng とか libjpeg など、その他諸々のライブラリを用いても良いのですが、一つのライブラリで 一つの...
-
BMP画像を表示する
BMP画像を表示します。 BMPと言っても今回は24bit画像に限定します。 知っての通り、最もポピュラーで広く使われている画像形式ですが BMP形式は種類が複数存在し、データサイズも大きいので 最近では、あまり使われなくなってきました。 ファイル main.cpp sample.bmp main.cpp #pragma comment(linker, /SUBSYSTEM WI...
-
DDS画像を表示する
DDS画像を読み込みます。 DDS画像とは Direct Draw Surface ファイルの事です。 GLEW を使うと S3TC(DXTC)圧縮 を解凍できるようです。 ↓こちらのサイトに読み込みプログラムがありましたので使わせて頂きます。http //asura.iaigiri.com/OpenGL/gl7.htmlちょこっと改変してGLEWの初期化位置を変えてみました。 ファイル m...
-
画像を表示する(glpng)
先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。...
-
BMP画像を表示する(セキュリティ強化版)
BMP画像を表示します。 前回の記事との違いは fopen を fopen_s に、fread を fread_s にしています。 これらは C11 以降で標準ライブラリに導入された関数で、セキュリティが強化されたものです。 戻り値と引数が異なります。 fopen_s は戻り値が errno_t なので、errno マクロからエラーの原因を調べなくても良くなっています。 fopen_s は fop...
-
PNG画像を表示する(glpng)
先の『画像を表示する(GDI+)』では GDI+ を使いましたが、 GdiPlus.h を見ると struct IDirectDrawSurface7; なる表記があります。 内部で DirectX7 を使用しているようです。 OpenGLなのにDirectXは使いたくない!!とか、 WindowsじゃないOSで画像を読み込みたい!!という方のために glpng を 使った方法も記載しておきます。...
-
JPEG画像を表示する
JPEG画像を読み込んで表示します。 フルカラーとグレースケールのみサポートしています。 かなりデータサイズを小さくできるので広く使われています。http //www.ijg.org/こちらのサイトでフリーのJPEGライブラリのソースコードが配布されています。 libjpeg.lib を作成してください。作り方はgoogleなどで検索して作って下さい。 jpeglib.h , jconfig.h ...
-
PhysX:セットアップ
NVIDIA PhsyX についての解説です。 NVIDIA PhsyX は良く間違われますが CUDA とは違います。 CUDA は Compute Unified device Architecture の略で NVIDIA社の GPU に対する GPGPU を目的とした フレームワークまたは統合開発環境の事です。 GPU を動作させるためのプログラミング・モデル、およびプログラ...
-
階層構造
今回、階層構造を作ってアニメーションするために、色々なソフトを試してみたのですが、http //www.vixar.jp/cyberdelia/ こちらの Cyberdelia というソフトがメタセコイアのファイルとも相性が良く最もシンプルで 操作性も良かったので Cyberdelia を使う事にします。 .X のアニメーションを作成できるソフトは他にもたくさんあるのですが、階層メッシュアニメーシ...
-
画像の一部をストレッチ描画する(LodePNG)
PNG画像を読み込んで画像の一部をストレッチ描画します。http //members.gamedev.net/lode/projects/LodePNG/に、ある LodePNGモジュールを使用します。 このLodePNGは.cppファイルと.hファイルのみで構成されているので手軽に組み込めます。 zlib も libpng も何も使わずに.cppソースのみでPNG画像が読み込めます。 また、Lo...
-
PNG画像の一部をストレッチ描画する(LodePNG)
PNG画像を読み込んで画像の一部をストレッチ描画します。http //members.gamedev.net/lode/projects/LodePNG/に、ある LodePNGモジュールを使用します。 *(現在の最新版では引数などが変わっているようですので設定の仕方のページから 当サイトで使用しているバージョンをインストールして下さい。) このLodePNGは.cppファイルと.hファイルのみで...
-
.wav再生(OpenAL)
OpenAL で .wav をループ再生します。 このプログラムは .wav を全部読み込んで再生するので メモリを多く使います。 #pragma comment(lib, OpenAL32.lib ) #pragma comment(lib, alut.lib ) #include stdio.h #include AL/alut.h void main (int argc, ch...
-
ボーン(骨)
ToyStudio Advance でボーンを入れる前に用語の解説です。 ボーンの表現は3DCGソフトによって若干違いがありますが、 だいたい似通っています。 まず、ジョイント(関節)があり、2つのジョイントに挟まれているのが ボーン(骨)です。 ボーンは四角錐で表現されます。 四角錐の先側、細い方が子側を表し、底側の太い方が親側を表しています。 それでは ToyStudio Advance...
-
ANIM EDIT(アニメエディタ)
ANIM EDIT ver1.20 ダウンロードはこちら AnimEdit ver1.20.zip //////////////////////////////////////////////////////////////////////////// AnimEdit [OPENGL プログラミングメモ] ver1.20 作者 OPENGLプログラミングメモ ...
-
MESH VIEW(メッシュビューア)
MESH VIEW (OPENGL プログラミングメモ) ver1.29 ダウンロードはこちら MeshView ver1.29.zip //////////////////////////////////////////////////////////////////////////// MeshView [OPENGL プログラミングメモ] ver1.29 ...
-
LibSynth++ 解析編
では、早速 LibSynth++ の使い方を探ってみたいと思います。 http //www5.atpages.jp/~my04337/ tomoteruの生成物倉庫 の 初代LibSynth++ のページにある *LibSynth++ AlphaTest Rev.18 LibSynth++ – Header,Lib(Visual Studio2008用) から LibSynthPP.cab ...
-
左右のチャンネルを操作
ステレオWAVファイルを読み込んで左右の音を消してみます。 http //taira-komori.jpn.org/freesound.html こちらのサイトで効果音を借りてきました。 #include stdio.h #include string.h #define FileName Warp1_ste.wav //適当な曲を探して下さい。 // defines ...
-
ストリーミング再生(.wav)(OpenAL)
OpenAL で .wav をストリーミング再生します。 #pragma comment(lib, OpenAL32.lib ) #pragma comment(lib, alut.lib ) #include stdio.h #include AL/alut.h #include vector #include iostream #include fstream usi...
-
ANIM EDIT(アニメエディタ) 2ページ
ANIM EDIT ver1.31 ダウンロードはこちら AnimEdit ver1.31.zip AnimEdit [OPENGL プログラミングメモ] ver1.31 作者 OPENGLプログラミングメモ ホームページ(OPENGLプログラミングメモ) https //w.atwiki.jp/opengl/ ホームページ2(MeshView) h...
-
ANIM EDIT(アニメエディタ) 3ページ
ANIM EDIT ver1.32 ダウンロードはこちら AnimEdit ver1.32.zip AnimEdit [OPENGL プログラミングメモ] ver1.32 作者 OPENGLプログラミングメモ ホームページ(OPENGLプログラミングメモ) https //w.atwiki.jp/opengl/ ホームページ2(MeshView) h...
-
線形補間
さて、前回の「再びキーフレーム」では箱が瞬間移動してしまって いました。 補間がされていないためです。 DirectX SDK 付属のビューワーでは滑らかにアニメーションが 補間されています。 今回はキーフレームとキーフレームの間を線形補間してみようと思います。 ベクトルAとベクトルB間の補間は、求める値をIとすると、 で求める事ができます。 ここでのtは現在のキー位置のパラメーターです。 尚、...
-
固定機能との違い
固定機能とプログラマブルシェーダーでは何がどう違うのでしょう。 固定機能ではフラットシェーディングやグーローシェーディング(スムースシェーディング)、 ワイヤーフレーム表示程度しかありませんでした。 擬似的にトゥーンシェーディングっぽく表示する事もできますが、トゥーンシェーディング とは全然品質が違います。 固定機能というのは、あらかじめ用意された範囲内で簡単手軽に機能を切り替えたり 描画に関する...
-
再びキーフレーム
長らく道を逸れましたが、ここで再びキーフレームに戻ります。 .Xのアニメーションキーのキータイプ情報 0…回転 w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ まず、最初に知っておかなくてはならない事があります。 それは、当サイトで使用...
-
MESH VIEW(メッシュビューア) 2ページ
MESH VIEW (OPENGL プログラミングメモ) ver1.32 ダウンロードはこちら MeshView ver1.32.zip //////////////////////////////////////////////////////////////////////////// MeshView [OPENGL プログラミングメモ] ver1.32 作者 ...
-
階層ボーンアニメーション
今回はボーンだけを階層アニメーションさせてみます。 今回も新しく box.x というファイルを作成しています。 スタティックメッシュをボーンが突き抜けていて若干、間抜けな図ですが 順番としてはこれで合っています。 次回からは、このスタティックメッシュを変形させる仕組みを考察してみます。 font.h #pragma once class GLFONT { public HFONT Hfo...
-
環境マッピング
環境マッピングです。 正面の球に部屋を反射させて描画します。 room.xは、ここからダウンロードできます。 右クリックして、名前を付けてリンク先を保存してください。 wall.png vertex.shader varying vec3 P; varying vec3 N; varying vec4 Reflect; uniform mat4 ViewTranspose;//ビュー変換だ...