.Xの階層メッシュアニメーションの構造

OpenGLプログラミングメモ内検索 / 「.Xの階層メッシュアニメーションの構造」で検索した結果

検索 :
  • スキンメッシュアニメーションの原理1
    2012/4/11現在、RokDeBone用に作成した以下の解説をToyStudio用に 書き直ししています。更新までしばらくお待ちください。     今回はスキンメッシュアニメーションの原理を知るために一つの アニメーションを作ってみました。 まず、メタセコイアで次のような人型のモデルを作ります。 これは『スタティックメッシュ』ですね。 『固定機能 スタティックメッシュ編』で学習しました。 そして RokDeBone2 で次のようにボーンを仕込みます。 いろいろ駆使して歩行アニメーションを作成しました。 ここで注目して欲しいのはボーンの動きです。 次の画像はボーンだけを真横から見た図ですが、何か気付きませんか?   ボーンが、何やらロボット的な動きをしていると思いませんか? そうです。スキンメッシュアニメーションは、まず第一に、 ①ボーンが階層アニメーションを行っている。 ...
  • アニメーションとは
    3Dのアニメーションには『階層メッシュアニメーション』と『スキンメッシュアニメーション』が あります。 『階層メッシュアニメーション』はロボット的なアニメーションで、それぞれのパーツ(スタティックメッシュ)が 移動、回転、拡大縮小するのをスタティックメッシュの親子関係を管理して描画する物です。 『スキンメッシュアニメーション』は生物的なアニメーションでボーン(骨)があるものとして、 スキン(皮膚)が動いているかのような滑らかなメッシュの変形を表現する物です。 『階層メッシュアニメーション』は 固定機能 スタティックメッシュ編 で解説したスタティックメッシュを 複数使って、それを親子関係を作り管理するだけなので比較的簡単です。 親子関係の階層管理は再帰関数を使います。 再帰関数とは関数が自分自身を呼び出す物です。 ではまず、階層構造を作ってシンプルなアニメーションを表示してみたいと思います。...
  • .Xの階層メッシュアニメーションの構造
    それでは、中身をメモ帳で見てみます。 例によってテンプレート部分は除去しています。 xof 0302txt 0032 Header {  1;  0;  1; } Frame obj1 {   Mesh Mesh_obj1 {    8;     -0.737684;0.370641;-1.270489;,     -0.737684;-0.370641;-1.270489;,     0.737684;0.370641;-1.270489;,     0.737684;-0.370641;-1.270489;,     0.737684;0.370641;1.270489;,     0.737684;-0.370641;1.270489;,     -0.737684;0.370641;1.270489;,     -0.737684;-0.370641;1.270489;,    ...
  • メニュー
    ...ョンとは 階層構造 .Xの階層メッシュアニメーションの構造 再帰関数 .Xの階層メッシュアニメーションを読み込んでみる1 自己参照構造体と自己参照クラス 2分木構造 .Xの階層メッシュアニメーションを読み込んでみる2 キーフレーム 行列(マトリックス)とは 行列 単位行列 行列 行列の計算方法 行列 行列の適用 行列 平行移動行列 行列 回転行列 行列 拡大縮小行列 行列 零行列 行列 行列の合成 行列 逆行列 行列 転置行列 gluPerspectiveを置き換える 正規化 内積 外積 gluLookAtを置き換える 行列 合成行列から拡大縮小成分を抜き出す 行列 効率の良い合成 クォータニオン クォータニオンによる任意軸回転 再びキーフレーム 線形補間 .Xの階層メッシュアニメーションを読み込んでみる3 クォータニオンと回転行列の変換 球面線形補間 .Xの階層メッシュアニメーショ...
  • .Xの階層メッシュアニメーションを読み込んでみる1
    では、手始めに .X の階層メッシュを読み込んで階層付きでコンソール出力してみます。 今回は複雑な階層を再帰関数で再現するために新しく sample.x というファイルを作成 しています。 この sample.x は以下のような階層構造を持っています。 それでは以下のプログラムでコンソール出力してみましょう。 #include windows.h #include stdio.h #include string //階層メッシュクラス class HIERARCHY{ public  bool Load_Hierarchy(char* FileName); //階層メッシュ読み込み  bool Load_Frame(FILE fp,int hierarchy);  //フレーム読み込み  HIERARCHY();  HIERARCHY(char* FileName...
  • MESH VIEW(メッシュビューア)
    MESH VIEW (OPENGL プログラミングメモ) ver1.16 ダウンロードはこちら MeshView ver1.16.zip //////////////////////////////////////////////////////////////////////////// MeshView [OPENGL プログラミングメモ] ver1.16 作者 OPENGLプログラミングメモ ホームページ(OPENGLプログラミングメモ) https //w.atwiki.jp/opengl/ ホームページ2(MeshView) http //www.meshview.jp/ ///////////////////////////////////////////////////////////////////////...
  • .Xの階層メッシュアニメーションを読み込んでみる4
    .xの階層アニメーションを読み込んで再生するプログラムが完成したので公開します。 クォータニオンの符号の判定には皆さん、苦労されたのではないでしょうか。 ネットで広く公開されているサンプルはほとんどがDirectX用で いちいち転置しなければならなかったり。 左手座標用に作成したアニメーションXファイルはクォータニオンのY軸とZ軸を-1倍しないと OpenGLではおかしな表示になるとか。 回転角度が181度とマイナス179度ではクォータニオンの符号が反転してるけど 同じ回転行列になるとか。 いやはや、手間取りました。 最後に親階層から子階層へ脈々と行列を受け継いで完成です。 『固定機能 階層メッシュアニメーション編』の『階層構造』で作成した sample4.xを表示しています。 尚、Cyberdelia で作成したアニメーションXファイルだけに対応しています。    font.h #pr...
  • .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_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) {  Hfont = CreateFontW(         size,      //フォント高さ         0,       //文字幅         0,       //テキストの角度         0,      ...
  • 階層構造
    今回、階層構造を作ってアニメーションするために、色々なソフトを試してみたのですが、http //www.vixar.jp/cyberdelia/ こちらの Cyberdelia というソフトがメタセコイアのファイルとも相性が良く最もシンプルで 操作性も良かったので Cyberdelia を使う事にします。 .X のアニメーションを作成できるソフトは他にもたくさんあるのですが、階層メッシュアニメーションだけを 出力するソフトはおそらく Cyberdelia だけではないでしょうか。詳しく調べていないので他にもあるかも しれませんが。 まず、メタセコイアで↓の図のような戦車を作成します。 戦車は 『本体』 と 『砲台』 と 『砲身』 から出来ていてそれらは のような親子関係を持っています。 それを Cyberdelia で読み込んで階層構造を設定し、アニメーションを作って .X形式で保...
  • スキンメッシュアニメーションの原理3
    スキンメッシュアニメーションの真髄、頂点に座標変換を 施す処理ですが、具体的には 頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 という事になります。 スキンメッシュアニメーションの仕組みは ①ボーンが階層アニメーションを行っている。 ②頂点座標データを書き換える。 の次は ③頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列 と、なりそうですが、これで完全ではありません。 詳しくは言いませんが、これだけではモデルがバッキバキに変形してしまいます。 では、どうスムーズに変形させるかと言うと、頂点が各ボーンから受ける影響の 重み(ウェイト)を設定してあげれば良いですね。 解説は次回に回します。          
  • .Xの階層メッシュアニメーションを読み込んでみる2
    それでは、実際に階層構造を作って表示してみる事にします。 今回はアニメーションはせずに、ただ単にモデルを表示するだけです。 2分木構造を再帰関数を使ってデータ処理をする場合、return で戻る先を きちんと把握していないとおかしなデータ構造になってしまいます。 再帰関数というのは一つずつネストを深めて行きます。 なので、return すると1階層戻るのではなく 1 NODE 戻ります。 以下の図で説明すると Frame5 から1階層戻る時は 1回の return で 1階層戻りますが、Frame4 から 1階層戻る時は 1回目の return で Frame3 に戻り、2回目の return でFrame2 に戻り、3回目の return で Frame1 に戻って、やっと1階層戻る事になります。 PNG.h #pragma once #include lodepng.h //...
  • スキンメッシュアニメーションの作成
    スキンメッシュアニメーションのXファイルの中身を見てみると言っても、 まずは作成しなければなりません。   スキンメッシュアニメーションを作成するソフトとして、 ToyStudio や エルフレイナ 等がありますがどちらもシェアウェアです。 また、各種市販の3DCGソフトウェアでも作成できますが、なるべくお金の かからない方法で作成したいです。  そこでカンパウェアの RokDeBone2 を使わせて頂く事にします。 *( RokDeBone2 ver5.5.2.7 以降を使用して下さい。)http //ochakkolab.moo.jp/ この RokDeBone2 は、XBOX360の周辺機器である Kinect を用いると モーションキャプチャーの機能を使う事もできます。すごいですね。 *(2012/3/2追記) …と思ったんですが、RokDeBone2 での読み込みプログラムを作成...
  • スキンメッシュアニメーションの原理4
    ここまでのおさらいです。 ①、ボーンが階層アニメーションを行っている。 ②、頂点座標データを書き換える。 ③、(頂点座標 × ボーンオフセット行列 × 座標変換行列 × バインドポーズ行列) × 頂点ウェイト ④、 ③を影響するボーンの数だけ処理して足す(頂点ブレンド) ⑤、 ④で得られた頂点座標を元に頂点法線を再設定する 以上でスキンメッシュアニメーションの処理は完成です。          
  • スキンメッシュアニメーションの原理2
    スタティックメッシュを変形させるにはどうすれば良いのでしょう? スタティックメッシュを構成する要素には ①頂点座標 ②法線 ③UV ④マテリアル ⑤テクスチャ 等がありますが、この中の ①頂点座標 を変更してあげれば スタティックメッシュが変形します。 頂点座標を変更すると言っても glTranslatef とか glRotatef 等では モデルビュー行列が変更されるだけで頂点座標そのものは変更できません。 では、何か、頂点座標を変更するようなものがあるかと言うと、 そのようなものは用意されていません。 スタティックメッシュの頂点座標が格納されている配列データを 直接、平行移動やら回転等をしているかのようにデータを書き換えなければなりません。 この場合、あくまでも書き換えるのは表示用のデータで、初期姿勢のデータを 変更してはいけません。 スキンメッシュアニメーションの仕組みは ①ボーンが...
  • スキンメッシュアニメーションの仕組み
    さて、お待ちかねの『固定機能 スキニング編』です。 スキンメッシュアニメーションはプログラマーにとって一つの壁に なっていると思います。 まず、いきなり DirectX SDK のサンプルとかを見ても、   ( ゚д゚)・・・   ( ゚д゚)ポカーン   となる事受けあいです。 当サイトでは少しずつ、その仕組みを解説し、攻略していこうと思います。 では次回、スキンメッシュのアニメーションXファイルを作成して、 その中身を見て見ましょう。      
  • .Xのスキンメッシュアニメーションを読み込んでみる1
    階層メッシュクラスを継承してスキンメッシュクラスを作成します。 ジョイントは球でボーンは四角錐にしました。 固定機能 スキニング編『スキンメッシュアニメーションの原理1』で 作成した man.x を表示しています。 Cyberdelia と ToyStudio では出力されるXファイルの書式が異なりますので 今回からは Cyberdelia で出力した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_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *...
  • .Xのスキンメッシュアニメーションを読み込んでみる2
    .x のスキンメッシュアニメーションを読み込んで表示します。 このプログラムは box.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_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) {  Hfont = CreateFontW(        ...
  • 再帰関数
    以前、『階層メッシュアニメーション』や『スキンメッシュアニメーション』の読み込みでは 再帰関数を使うと言いました。 入れ子構造になっているデータは入れ子構造の読み出しプログラムで読み込むのが最適です。 その入れ子構造を関数で作る場合に便利なのが再帰関数です。 再帰関数というのは関数が自分自身を呼び出す物です。 しかし、どんな関数でも良い訳ではありません。 必ず、元の場所に戻れるような仕組みになっていなければ、無限に自分自身を呼び出し続け、 スタックオーバーフローのエラーになってしまいます。   駄目な例 #include stdio.h void recursive() {  recursive(); } void main() {  recursive();  getchar(); }   良い例 #include stdio.h int stack=0; void rec...
  • 階層ボーンアニメーション
    今回はボーンだけを階層アニメーションさせてみます。 今回も新しく box.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_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) {  Hfont = CreateFontW(        ...
  • 2分木構造
    木構造というデータ構造の中で、子ノードを3つ以上取れる木構造は多分木と言い、 子ノードの数がNで固定されている物をN分木と言います。 子ノードの数が2つの物を2分木と言います。 親のないノードを根(root node)、子のないノードを葉(leaf node)と呼びます。 なぜ急に2分木を解説するかと言うと、階層アニメーションや スキンメッシュアニメーションの階層構造を配列や動的な多次元配列で 管理すると無駄が生じるからです。 それに対して2分木構造で管理すると全く無駄が無く、どのような 子ノードの数や階層数にも対応でき、動的に増やしたり減らしたりする事も 簡単にできます。 ではまず、簡単に仕組みを解説します。 2分木構造は前回解説した自己参照構造体の自己参照ポインタを2つ持っている 構造体を作るだけで簡単に作成できます。 左ノード、右ノードという使用法が一般的ですが、今回は少し見方を変...
  • コメント板
    簡易掲示板です。 何かありましたらコメントを。 てすと -- 管理人 (2010-03-22 11 30 06) directXのホウノライブラリは開発中止になったんですか? -- 人間 (2010-09-26 23 25 06) OpenGL最近勢いづいてていい感じですね。C#+OpenTKの開発のしやすさもなかなかすごいし、ゲーム業界もOpenGLにシフトしないかな。 -- shocker (2010-09-29 02 37 52) カンリニンサァァアアーーーン -- 人間 (2010-10-05 21 44 33) DX Wrapperライブラリの開発は無期限停止状態です。 -- 管理人 (2010-10-10 19 40 54) ゲーム業界でもPC、XBOX、DC以外はOpenGL採用の方向になっているようです。 -- 管理人 (...
  • 固定機能編:おわりに…
    ここまで、スキンメッシュアニメーションを解説してきましたが、 スキンメッシュアニメーションの実装方法は人それぞれ。 当サイトで解説したやり方だけではない事を頭の片隅に入れておいて 下さい。 3Dモデルのファイル形式に関しても、今回はDirectXのXファイルを 使用しましたが、実際のゲームやアプリ制作での場合は、 3Dモデルのファイル形式そのものを自作するのが1番です。 これで、固定機能編は終了です。          
  • 頂点ブレンディング
    頂点ブレンディングの解説です。 前回までの解説で各頂点が各ボーンから受ける頂点ウェイトの 影響の度合いがわかりました。   頂点ブレンディングとは、その影響を受けた頂点座標を 算出する処理の事です。   具体的には、 頂点座標 × ボーン行列 × 頂点ウェイト を、その頂点に影響するボーンの数だけ処理して それぞれの結果を足します。(ブレンドする) これが、頂点ブレンディング処理です。   ここまでの知識で、スキンメッシュアニメーションの基本的な事が できるようになっています。   次回、実際にスキンメッシュアニメーションを行ってみましょう。            
  • .Xのスキンメッシュアニメーションファイルを解析
    取りあえず、DirectX SDK に付属するビューワーで再生の確認をします。 本来はスタティックメッシュであるはずの bone1.mqo が、 ウネウネ変形しています。 例によって、テンプレート部分は除去しました。 xof 0303txt 0032 # Global definition. AnimTicksPerSecond {  3000; } # Materials definition. Material Material_1 {  0.800000;0.800000;0.800000;1.000000;;  5.000000;  0.300000;0.300000;0.300000;;  0.000000;0.000000;0.000000;; } # Models definition. Frame Model {  FrameTransformMatrix  {   1...
  • 幾何変換
    幾何変換の解説です。 幾何変換とは、座標変換の ①平行移動 ②拡大、縮小 ③回転 の変換の事です。 今まで使用してきた glTranslatef とか glRotatef 等は アフィン変換と言います。 アフィン変換とは、形を変形させないで平行移動や回転、拡大縮小などの 変換をする事を言います。 スキンメッシュアニメーションは形を変形するアニメーションなので 幾何変換を用います。          
  • 法線の再設定
    さて、前回のプログラムでは法線を再設定していないので ライトを有効にするとおかしな描画になってしまいます。 ここで言う法線とは頂点法線の事なので、前回のプログラムで 求められた頂点変換後の頂点座標がそのまま使えます。 一つ注意しないといけないのは頂点法線は正規化してデータに 納めないといけない事です。   font.h #pragma once class GLFONT { public  HFONT Hfont;  HDC Hdc;  GLFONT(wchar_t *fontname, int size);  void DrawStringW(int x,int y,wchar_t *format, ...); }; //コンストラクタ フォント作成 GLFONT GLFONT(wchar_t *fontname, int size) {  Hfont = CreateFontW(...
  • 再びキーフレーム
    長らく道を逸れましたが、ここで再びキーフレームに戻ります。 .Xのアニメーションキーのキータイプ情報 0…回転  w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ まず、最初に知っておかなくてはならない事があります。 それは、当サイトで使用している Cyberdelia は、合成行列タイプの アニメーションデータは階層構造が正しく生成できないという事です。 詳しくは Cyberdelia に付属のヘルプを参照して下さい。 とは言っても、合成行列でないタイプの方は正しく出力されますので、 それを元に合成行列を作成し、単純なキーフレームアニメーションを表示して みたいと思います。 とりあえず、平行移動行列だけに対応したプログラムを作成...
  • 線形補間
    さて、前回の「再びキーフレーム」では箱が瞬間移動してしまって いました。 補間がされていないためです。 DirectX SDK 付属のビューワーでは滑らかにアニメーションが 補間されています。 今回はキーフレームとキーフレームの間を線形補間してみようと思います。 ベクトルAとベクトルB間の補間は、求める値をIとすると、 で求める事ができます。 ここでのtは現在のキー位置のパラメーターです。 尚、 0 ≦t≦ 1 で、tが0の時はAと同じ値、tが1の時はBと同じ値に なります。 前回と同じくsample2.xを表示しています。 font.h #pragma once class GLFONT { public  HFONT Hfont;  HDC Hdc;  GLFONT(wchar_t *fontname, int size);  void DrawStringW(int x,in...
  • キーフレーム
    キーフレームですが、.Xのアニメーションキーのキータイプ情報は 0…回転  w,x,y,zの順にクォータニオンデータ 1…拡大縮小 x,y,zの順に拡大縮小データ 2…平行移動 x,y,zの順に平行移動データ 4…合成行列 回転、拡大縮小、平行移動行列が掛け合わされた4×4行列データ となっています。 回転の情報がクォータニオンになっているのは知っての通り、ジンバルロックを 避けるためです。そして、このクォータニオンは行列を使っています。 キータイプの4が合成行列になっている事もあり、ここから先は行列の知識が 必要になると思います。 そこで、次回からは階層アニメーションからちょっと逸れて、 行列に関する解説に入ります。          
  • 行列(マトリックス)とは
    ここで行列(マトリックス)の解説をします。 ここで言う行列というのはお店の前に人がいっぱい並んでいる事ではありません。 数学で使う行列の事です。 行列(マトリックス)とは数字を行と列に並べて括弧でくくったものです。 3×3行列は 4×2行列は 2×5行列は のような感じです。ちなみに数字は適当です。 あくまでも、こういう物だという事だけ解ればなんとかなります。 3×3行列は3つの行と3つの列、4×2行列は4つの行と2つの列といった感じです。 行と列に分かれているイメージです。 そして、DirectX や OpenGL のような 3Dの座標変換には 4×4行列を用います。 今まで使用してきた glLoadIdentity(); や glTranslatef(x,y,z); や glRotatef(angle,x,y,z); とか glScalef(x,y,z); 等も実は内部で行列を使...
  • バインドポーズ
    バインドポーズの解説です。 ボーンは、グローバル座標上(絶対座標上)で、それぞれ自らの基準となる位置情報を持ちます。 その位置情報(行列)を元にボーンの基準系とも言うべきローカルな座標系が算出できる訳ですが、 そのボーンの行列の逆行列(グローバル座標の原点に戻す行列)の事を 『バインドポーズ』、あるいは『バインドポーズ行列』と呼びます。 ここまでの知識でスキンメッシュの初期姿勢(アニメーション無し)を ボーンも含めて表示する事ができるはずです。 では次回、スキンメッシュの初期姿勢を表示してみましょう。        
  • 続ボーンデフォーム
    前回の続きです。 まずはマテリアルを設定します。 左側にあるマテリアルパネル上で右クリックします。 新規マテリアルを選択するとマテリアルウインドウが 出てくるので、そのまま閉じます。 オブジェクトパネルの Root obj1 を選択します。 メニューの ポリゴン 選択マテリアルをセット を選択します。 これでマテリアルが設定されました。   それでは早速ボーンアニメーションを作成してみましょう。 左側にあるアニメーションパネル上で右クリックします。 新規アニメーションを選択するとアニメーションウインドウが 出てくるので、そのまま閉じます。 下側の1~29までの数値が書いてある所がキーフレームです。 キーフレームの隣の 1.000 となっている所を 0.000 にしてEnterを押します。 キーフレームの 0 の所を選択します。 オブジェクトパネルの Joint2 を選択します...
  • 行列:行列の合成
    行列の合成です。 glMultMatrixf(); がしている事です。 これは単純に行列の積を行っているだけです。 行列 平行移動行列 のプログラムの glMultMatrixf(); を使わずに glLoadMatrixf(); で設定するように変えてみましょう。 全く同じ結果になる事がわかると思います。 ただし、行列は掛け合わせる順番が変わると全く違う物になります。 何やら回りくどい事をしているように感じるかもしれませんが、 それは今回のプログラムでは合成回数が1回だからです。 『スキンメッシュアニメーション』等、行列の合成を何回も何回も しなければならない場合に効率を上げるには glMultMatrixf(); を 使わずに手動で行列の合成をしなければなりません。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRT...
  • .OBJを読み込んでみる1(解析編)
    .OBJ は Wavefront社の Advanced Visualizer というソフト用のファイルフォーマットです。 3Dプログラミング入門関係のHPや書籍では必ずと言って良いほど最初の方に登場します。 何故か?と言うとファイル形式がとてもシンプルでスタティックメッシュ(アニメーションしないメッシュ)を 表現するための全ての情報を含んでいるので入門用には最適だからです。 では、まず、例によってメタセコイアで .OBJ を作成し、中身を見てみる事にします。 メタセコイアを起動して面コマンドの基本図形を選択します。 そして立方体を作成し、それを .OBJ 形式で保存します。    保存する時の注意ですが法線、UVマッピング、マテリアルにチェックし、改行コードを Windows(CR/LF)にしなければなりません。 さらに左右を反転するにもチェックをしないとOpenGLでは逆に表示されます。...
  • テッセレーション
    テッセレーションです。 面を再分割してくれます。 今回のプログラムはスペースキーを押すとテッセレーションで表示します。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include stdio.h #include GL/freeglut/freeglut.h #include vector using namespace std; #define WIDTH 320 #define HEIGHT 240 //頂点情報用 struct vector3d{  double x;  double y;  double z; }vec3d; vector vector3d vertex; //テッセレータオブジェクト GLUtess...
  • PhysX:セットアップ
    NVIDIA PhsyX についての解説です。 NVIDIA PhsyX は良く間違われますが CUDA とは違います。 CUDA は Compute Unified device Architecture の略で NVIDIA社の GPU に対する GPGPU を目的とした フレームワークまたは統合開発環境の事です。 GPU を動作させるためのプログラミング・モデル、およびプログラミング言語(CUDA-C)とそのコンパイラ、ライブラリを言います。 PhsyX は物理エンジンのSDKです。 NVIDIA PhsyX SDK 5.0.2 (2023/9/24最新) https //github.com/NVIDIA-Omniverse NVIDIA PhysX SDK 4.1 https //github.com/NVIDIAGameWorks 内の、 h...
  • fluidsynthの.libをVisual Studioでコンパイルする
    FluidSynth https //www.fluidsynth.org/ こちらに FluidSynth という、サウンドフォント シンセサイザーがあるので使わせて頂こうと思います。 2023年9月18日現在、最新版の FluidSynth 2.3.2 をダウンロードします。 Recent News の Released FluidSynth 2.3.2 をクリックしてページを移り、 https //github.com/FluidSynth/fluidsynth/releases/tag/v2.3.2 となっている所を クリックします。 64bitは fluidsynth-2.3.2-win10-x64.zip 32bitは fluidsynth-2.3.2-winXP-x86.zip を、ダウンロードして解凍し、Cドライブ C \ に移動させます。 FluidSynth ht...
  • 設定の仕方
    Visual Studio 2022 Community のインストール Visual Studio 2022 Community https //visualstudio.microsoft.com/ja/downloads/ こちらから、Visual Studio 2022 Community をインストールしてください。 デフォルトだと開発環境の背景色が『濃色』になっていて見にくいので『淡色』に変更します。 ツール→オプションの環境→全般の配色テーマを『淡色』にします。 これで昔ながらの見やすい開発環境になりました。 Visual Studio 2012 Express for Windows Desktop のインストール Visual Studio 2012 Express for Windows Desktop http //www...
  • .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.06233;;    1;  3;0,1,2;;    MeshMaterialList {   1;   1;   0;;   Material {    0.800000;0.800000;0.800000;1.000000;;    5.000000;    0.000000;0.000000;0.000000;;    0.000000;0.000000;0.000000;;    Te...
  • 考察
    大まかな歴史 DirectX 名称 登場日 概要 WinG、Display Control Interface Windows 3.1時代 DirectX 1.0 1995年10月 ゲーム作成用のAPI集GameSDKとして発表された。 DirectX 2.0 1996年6月 Direct3D (Immediate Mode, Retained Mode) の登場。 DirectX 3.0 1996年9月25日 DirectSound3D登場、DirectInputの統合。Windows NT 4.0ではSP3以降に同梱。 DirectX 4.0 登場予定だったが、DirectX 3.0からはわずかな変更であり、既にDirectX 5.0がロードマップ上にあったため、ベンダーの要望によりキャンセルされた。 DirectX 5.0 1997年8月4日 Direct3D に DrawPr...
  • Bullet:セットアップ
    こちらのページで Bullet Physics が公開されています。 Bullet Physics https //pybullet.org/wordpress/ (2023/9/24 現在の最新版のバージョンは 3.25 です。) Download の所をクリックすると GitHub の中の紹介ページに飛ぶので1階層戻ります。 Bullet Physics SDK の bullet3 の GitHub のリンクを右クリックして、リンクのアドレスをコピーします。 そしていつものように Visual Studio 2022 を起動して起動ウィザードのリポジトリのクローンを選択します。 リポジトリの場所に先ほどの GitHub のリンクのアドレスを貼り付けてクローンボタンを押します。 ソリューションエクスプローラーのフォルダービューをダブルクリッ...
  • WAVファイルの構成
    WAVファイルの中身や扱い方を知っておくと後々役に立つかも知れません。 という訳で早速、中身をバイナリエディタ『Stirling』で見てみます。 具体的なファイル構成がどうなっているかと言うと、  4 byte RIFFヘッダ ( R I F F )  4 byte これ以降のファイルサイズ    4 byte WAVEヘッダ ( W A V E )  4 byte fmt チャンク ( f m t )  4 byte fmt チャンクのバイト数 リニアPCM ならば 16(10 00 00 00)  2 byte フォーマットID リニアPCM ならば 1(01 00)  2 byte チャンネル数 モノラル ならば 1(01 00)ステレオ ならば 2(02 00)  4 byte サンプリングレート 44.1kHz ならば 44100(44 ...
  • PC用語の独自調査
    X86(32bit),X64(64bit) x86(32ビットプロセッサー)は最大物理メモリが4GBと限られているのに対し、x64(64ビットプロセッサー)は 8GB、16GB、中には32GBの物理メモリを扱えるものもあります。 また、64ビットコンピューターは、32ビットプログラムと64ビットプログラムの両方を使用することができます。 インテルの初の32ビットCPUは 80386 で、その後継が 80486 ですが、後ろの数字『86』を残し前の数字を省略して 『x86』と呼ぶようになりました。 80486 の後継は Pentium で、Pentium から名称に数字の86が使われなくなりましたが、それからも32ビットCPUは 『x86』と呼びます。 8bit→2^8=256Byteのメモリが管理できる 16bit→2^16≒64KBのメモリが管理できる ...
  • ボーンオフセット行列
    以下は SkinWeights チャンクですが、最後の方にある matrixOffset は ボーンオフセット行列と呼ばれます。 SkinWeights    {     Joint_2 ;  //transformNodeName ボーン名     32;  //nWeights ボーンの影響を受ける頂点の数     0,  // ↓ vertexIndices ボーンの影響を受ける頂点のインデックス ・ ・ ・     0.001631,  // ↓ weights ボーンの影響を受ける各頂点の重み ・ ・ ・     1.000000,0.000000,-0.000000,0.000000,  // ↓ matrixOffset     0.000000,1.000000,-0.000000,0.000000,  //メッシュの頂点をボーン空間に変換する行列     -0.000...
  • Visual Studio 2022 DE Visual C++ 2015
    Visual Studio 2022 DE Visual C++ 2015 とは? かつて、Visual Studio 2015 をインストールしようとしてできなかった人が結構居るのではないでしょうか? 何故かインストールに失敗してできなかった人が結構居ると思います。(当サイト管理人もその一人です。。。) Ж できました。。。 Visual Studio 2017 や Visual Studio 2019 、果ては Visual Studio 2022 まであるのに今更何故 2015 なのか? と、思う方は要ると思います。 結論から言うと PhysX の最新版 ver 5.0.2 や ver 4.1 をコンパイルするには Visual C++ 2015でないとコンパイルできないからです。 と、いう訳で Visual Studio 2022 から Visual C++...
  • .FBXを読み込んでみる2(読み込み編)
    それでは実際に FBXSDK を使用してデータを取り出してみようと思います。 まず、fbx20113_fbxsdk_win をインストールして Visual studio にパスを通します。 そして プロジェクトのフォルダに fbxsdk_20113.dll と fbxsdk_20113d.dll を置きます。 使い方は KFbxSdkManager を作成して、 KFbxImporter を作成して、 KFbxImporter にファイルを読み込んで初期化します。 そして、 KFbxScene を作成して、 KFbxScene に KFbxImporter で インポートします。 そして、 KFbxNode を辿って KFbxMesh を探します。 KFbxMesh が見つかったら、そこから各種情報を取り出します。 今回は三角ポリゴンのみでテクスチャ無し、オブジェクト(レイヤー)が一つだ...
  • .FBXを読み込んでみる3(表示編)
    前回のプログラムはテクスチャ無しで3角ポリゴンの FBX ファイルしか 読み込めませんでした。 今回のプログラムは3角と4角の両方のポリゴンに対応しています。 テクスチャはレイヤー0しか対応していませんが通常の使用には問題ないと 思います。   PNG.h #pragma once #include lodepng.h //テクスチャクラス class TEXTURE{ protected  LodePNG_Decoder decoder;//デコーダ  unsigned char* buffer;//バッファ  size_t buffersize, imagesize;//サイズ public  TEXTURE();  TEXTURE(const char* FileName);//コンストラクタ  void LOAD_PNG(const char* FileName);//P...
  • 自己参照構造体と自己参照クラス
    自己参照構造体と自己参照クラスです。 これらは共に、自分自身のポインタを構造体、もしくはクラス内に保持している物です。 これを使う事で構造体、もしくはクラスに簡単に階層構造を作る事ができます。 例えば、 struct test{  test *p; }tes; という構造体があった場合、 tes.p- p- p- p- p… と、どこまでも辿ることができます。 但し、データにアクセスするにはnew等でメモリが確保されていなければなりません。 以下は簡単な例です。 #include stdio.h struct test{  int i;  test *p; }tes; void main() {  tes.p=new test(tes);  tes.p- p=new test(tes);  tes.i=1;  tes.p- i=2;  tes.p- p- i=3;  printf( ...
  • 困った時は
    当サイトのプログラムが正常に動作しない場合 まずは OpenGL とグラフィックスカードのドライバを最新のものにして下さい。 それでも解決しない場合はコメント板にて連絡を下さい。 コンソール画面を消す #pragma comment(linker, "/SUBSYSTEM WINDOWS /ENTRY mainCRTStartup") 以前のVisual Studio 2012辺りまでは、このプラグマでコンソール画面を消す事ができました。 もちろん今でも可能なのですが、現在のVisual Studio 2022ではデフォルトでプロジェクトの プロパティ、リンカーのシステムのサブシステムの項目が『コンソール (/SUBSYSTEM CONSOLE)』 になってしまっています。 これでは最初からプラグマコメントが入力されているので除去できません。 ...
  • ODE:セットアップ
    Open Dynamics Engine http //www.ode.org/ Open Dynamics Engine の場合は GitHub ではなく Bitbucket ですが、Visual Studio の場合は同じやり方で リポジトリをクローンできます。 (2023/9/24 現在の最新版のバージョンは 0.16.4 です。) Get the source code from BitBucket. となっている所を右クリックして、Bitbucket のリポジトリアドレスをコピーしたら いつものようにVisual Studio 2022 でリポジトリをクローンしてコンパイルするだけです。 GitHub のリポジトリをクローンしてコンパイルする方法は OpenGLプログラミングメモの別ページで新たに作りますのでそちらを参考にして下さい。 ...
  • @wiki全体から「.Xの階層メッシュアニメーションの構造」で調べる

更新順にページ一覧表示 | 作成順にページ一覧表示 | ページ名順にページ一覧表示 | wiki内検索