スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スキンメッシュアニメーションの解説その4

【リンク】 ◆解説系TOP◆

スキンメッシュアニメーションの解説も4回目となりました。

【今までの解説】
----------------------------------------------
スキンメッシュアニメーションの解説1
スキンメッシュアニメーションの解説2
スキンメッシュアニメーションの解説3
----------------------------------------------

今までやってきたのは
-------------------------------------------------------------------
・ボーン基準の回転
・親子関係のボーン基準の回転
・複数のボーンから影響を受ける場合の座標変換 (影響度)

-------------------------------------------------------------------
ですね。

今回は、影響度を設定するメリット+αを書こうかなと。

以下、下記の様に対応します。
ボーンオフセット行列 = BOf行列
元に戻す行列 = 逆BOf行列

(単語の意味が分からない場合は、以前の解説を読んでみてください)



では、「何で影響度を設定するのか?」の説明。
端的に答えると、 滑らかな動き・形にさせるためです。

実際に図を使いながら見てみましょう。

下記の様に、頂点0~8で何かの左腕が定義されており、
0、8がBoneA 1~7がBoneBの影響を100%受けるとします。
影響度

この場合、力こぶを作るように腕を90度曲げると、このようになります。
(BoneBを90度回転させる)

影響度2

見れば分かりますが、関節の部分が へし曲がりました。
むしろ、腕が途中で途切れています。

本物の人間であれば悲惨な状態なので
ここで、影響度の調整をしてみます。

頂点1、2の影響度を
-----------
BoneA 0.8
BoneB 0.2

-----------

頂点7の影響度を
-----------
BoneA 0.4
BoneB 0.6

-----------
に変更します。

【参考画像】
影響度3

ここでもう一度 影響度を考慮した座標変換の仕方を復習します。

影響度がある場合は、
影響を与える全てのボーンの行列を計算し、それを足したものを
頂点にかければOK
です。
今回の場合は下記の式になります。
--------------------------------------------------------------------------
頂点 × (BoneAの変換結果 + BoneBの変換結果
--------------------------------------------------------------------------

そして変換結果の出し方は、

【BoneA】
BOf行列×座標変換行列×逆BOf行列×影響度

【BoneB】
BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列×影響度
(水色がBoneA、薄赤がBoneBの行列などと対応してます)

それぞれ上記のようになります。


で、途中計算は省略してますが、
BoneA 0.8BoneB 0.2) と (BoneA 0.6BoneB 0.4)の行列は
それぞれ下記の様になります。

変換結果の和


頂点1、2に上段の行列をかけると、
頂点1(1 1 0) × 画像上段の行列 = (1 0.6 0)
頂点2(1 2 0) × 画像上段の行列 = (1.8 0.8 0)

頂点7に下段の行列をかけると、
頂点7(1 -1 0) × 画像下段の行列 = (2.2 -1 0)

これを図にすると・・・
影響度4
はい、先程みたいに腕がちぎれてません。

「まだ形が変じゃないか」と思うかもしれませんが、
※そもそも頂点数が9個なので察してください。
(実際の3Dモデルはもっと頂点が多いですし、影響度ももっと良い具合に調整されているでしょう。)

要は、影響度で絶妙な調整が出来る ということです。


で、上記の計算式というのは、もともと分配法則により変形された式でした。
--------------------------------------------------------------------
頂点×BoneAの変換結果 + 頂点×BoneBの変換結果
↓分配法則により変形↓
頂点×(BoneAの変換結果 + BoneBの変換結果
--------------------------------------------------------------------

で、この変形した式のほうが計算上、都合が良いです。
何故かというと、変形前の式だと頂点の数だけ同じ行列をかけなければなりません。

BoneA・BoneBの影響を受ける頂点0、1、2を座標変換させるとすると、
----------------------------------------------------------------------
頂点0×BoneAの変換結果 + 頂点0×BoneBの変換結果 = 変換後の頂点0
頂点1×BoneAの変換結果 + 頂点1×BoneBの変換結果 = 変換後の頂点1
頂点2×BoneAの変換結果 + 頂点2×BoneBの変換結果 = 変換後の頂点2

----------------------------------------------------------------------

しかし、変換後の式だと、例えば変換結果の和を合成行列としておけば、
計算回数が非常に少なくなります。
-------------------------------------------------------------------------
合成行列 = (BoneAの変換結果 + BoneBの変換結果

頂点0 × 合成行列 = 変換後の頂点0
頂点1 × 合成行列 = 変換後の頂点1
頂点2 × 合成行列 = 変換後の頂点2

-------------------------------------------------------------------------
この通り。

で、スキンメッシュアニメーションでは、3Dモデルを読み込んだときに、
同じボーンの組み合わせから影響を受ける頂点を予め纏めておきます。
※更に、同じ影響度ごとに纏めておくと良い。
BoneA 0.5 BoneB 0.5  ⇒  BoneA 0.5 BoneB 0.5
BoneA 0.2 BoneB 0.8  ⇒  BoneA 0.5 BoneB 0.5 
BoneA 0.5 BoneB 0.5  ⇒  BoneA 0.2 BoneB 0.8
BoneA 0.2 BoneB 0.8  ⇒  BoneA 0.2 BoneB 0.8


そして纏められた頂点ごとに、合成行列をかけて変換するのです。
BoneAとBoneBの影響を受ける頂点を全て変換
BoneCとBoneDの影響を受ける頂点を全て変換
              :
みたいな。


×××××××××××××××××××
STEP5 法線の計算
×××××××××××××××××××

今まで、頂点をぐにゃぐにゃと動かしてきました。

で、ノーライティングモード(物体に光がどう当たっているのか?を考慮しない)なら
頂点を動かすだけでも一応 問題は無いのですが、
3Dモデルに法線の情報がある場合は
頂点だけを動かすと問題が発生します。

コチラをご覧下さい↓
法線
単純に板ポリゴンにテクスチャを貼り付けただけの物です。

この状態から、頂点だけをX軸中心に90度回転させて見ます。
そうすると・・・
法線2

はい、真っ黒になりました。

何でこんなことになるかというと、法線は反射してくる光の方向を表すものなので、
正しい方向を向いていないと、
正しく光が反射しない=物体が見えないと言う事になるのです。
(ブラックホールみたいに、光が反射せず真っ黒に見える状態)

なので、法線の情報がある場合は 頂点を動かしたら
法線も再計算する必要があります。

【参考画像】
法線3
(まぁ、自前で実装しない場合は
DirectXのヘルプ関数群とかが内部でやってくれるっぽいですが。)

で、法線の再計算はどうやるの?というと、 頂点と同じです。

上の方で
頂点(x y z)×合成行列という式を書いてますが、同じように
法線(x y z)×合成行列とすればOKです。
頂点を変換する際にまとめて変換してしまいましょう。

ここで注意事項。
同じように計算した後、 法線ベクトルは正規化する必要があります。
正規化というのは、法線の大きさが1になるように調整する事です。

で、端的にベクトルの大きさの求め方と、正規化の仕方を書きます。

ベクトルの大きさの求め方------------------------------
  ______________
√(xの2乗 + yの2乗 + zの2乗) = ベクトルの大きさ

--------------------------------------------------

正規化の仕方---------------------------------------
【1】ベクトルの大きさを求める
【2】x、y、zを、それぞれベクトルの大きさで割る

--------------------------------------------------

法線ベクトル(2 0 0)があった場合、下記の様に正規化します。
--------------------------------------------------------------------------
  ______________
√2の2乗 + 0の2乗 + 0の2乗
  _
√4   =     ←ベクトルの大きさ

(2÷2 0÷2 0÷2
(1 0 0) ←正規化終了。
--------------------------------------------------------------------------

法線に関しては、
【1】頂点と同じように変換する。
【2】正規化する。

と覚えておけばよいでしょう。

今回のまとめ
----------------------------------------------------------------------------
・影響度によって、絶妙な3Dモデルの変形が出来る
・予め同じボーンの組み合わせから影響を受ける頂点を纏めておくと、効率よく計算できる。

・法線がある場合、法線も頂点と同じように変換する
・ただし、法線は最後に正規化する必要がある。
----------------------------------------------------------------------------

最後に。
この解説シリーズ(?)はあくまでも概念や、計算方法などの説明のみなので、
具体的なプログラムは提示していません。
というか、まだ自分でも実装出来てな

プログラムが完成したら、
今までのまとめと、スキンメッシュアニメーションのプログラムの流れでも書こうかなと思います。

ほぼ概念は説明してしまったので、恐らく
次回で 最終回です。
※いつになるかは不明だよ
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

"J研"のturuturuさん

自分は時々、J研という着メロサイトの音楽を聞いてたりします。
(J研は色んな音楽が投稿されているサイトです。)

で、その中でも、turuturuさんの曲が良いなーとか思ってます。
まぁ、こんなところで言うのもアレなんですが。

↓こちらに、曲一覧があります。
turuturuさんのプライベートルーム

全体的に、自然な音楽だと思います。
うん、言葉では表現不可能なので何曲か聞いてみるのも良いかもしれません。


あと関係ない話ですが、自分の大学のサークルの先輩
J研の開発者の方と知り合いらしくて、
「特別に 欲しい曲は何曲かもらった」と仰ってました。

その他にも、「(サイトが)ここまで大きくなるとは思わなかったなー」とも。

で、その先輩はサークルを卒業し、今は
携帯のゲーム開発をする仕事に就いているそうです。

現状は良く知らないのですが、
パズルゲームのルールを一から作る ので、完成させるのは大変かもね、との事。
(プログラム以前に、仕様が決まっていない)

まぁ今日はそんなお話でした。
(明日はスキンメッシュアニメーションの解説の続きを書こうと思う)

テーマ : 日記 - ジャンル : 日記

"生きているブログ" が少ない

自分は、ブログの題名どおりゲームプログラマーを目指しているわけですが、
時々、「他にもブログやっている人とかいないかな?」とか思って、

たまに他の方のブログが無いか探したりしてます。
(就職に向かってどんな事をしているか、現状はどうなっているか、の参考にしようと思った)

でも、就職活動中で、かつ現状報告をしているようなブログは見つからないです。


とりあえず、まずブログ自体が少ないんですよね。
(まぁ、就職活動しなければならない時期に何故かブログを始めるという
奇特な方は少ないでしょう。)

それに、ブログが見つかったとしてもブログが生きていない。
最終更新日が2008年、2006年、2001年とか。

放置か!

個人的に、放置よりも「更新を停止します」とか「ブログ削除します」など、
最後の対応をした方が良いと思う。

で、他にも「ゲームプログラマーを目指します!」と決意表明しているものがあったのですが、
その次の更新が無かったりとか。
(決意表明した後どうなったのだろう?)

コメントが4~5件 来ていたので、
「更新止まってるブログを読んでいる人が居るのかな?」
と思って、コメントを見てみたら、
-------------------------------
うひょぉぉぉww ここマジ最高www
●●するだけで3マソとかww

-------------------------------
↑みたいな、スパムが届いているだけでした。
(更新停止すると、色々と荒れてしまうようだ)

んーともかく、自分が望むブログは少ないです。

あと話は変わりますが、友達は警察官になるようです。
そうか、警察官か・・・。

その友達は数ヶ月前に「良い本買った~!」とか言って、自分に
「ゲームプログラマーになる前に覚えておきたい技術」(定価:4500円)
を紹介してくれたのですが。
(要するに、同じくゲームプログラマーを目指していた)

友達は「3Dあたりから作業(理解)が進まない!」と嘆いていましたが、
そうか、警察官になるのか・・・。

・・・。

\あきらめんなよ!諦めるな!!/
シジミをトゥルル
※松岡修造さんからの有り難いお言葉です。Youtube あきらめんなよ 松岡修造

自分は、あくまでゲームプログラマーを目指します。
プログラムだとこんな感じです。絶賛無限ループ中です。
goto文異常終了も存在しないですよ。
-----------------------------
while(ゲームプログラマーではない){
勉強する
}
-----------------------------

よし、自分がゲームプログラマーになって、
何かゲーム作ったら友達に見せてみようと思う。

テーマ : 日記 - ジャンル : 日記

小学5・6年生が休刊した・・・

小学5・6年生が休刊したようです。

こんな感じの雑誌でした。↓
小学5・6年生

最近は雑誌の売り上げが落ちているみたいですね。
(他のファッション関連の雑誌なども)

興味・趣味の対象が、昔と変わってきているのかもしれません。

で、思い返してみると、実はこの雑誌
小学校の頃によく読んでました。

今は小学生でもないですし、もう読んではいなかったのですが
休刊になると聞くと、やはり寂しいものがあります。

約10年前の事なので、うろ覚えで間違いがあるかもしれませんが
下記の漫画を読んでいた様な気がします。

----------------------------------------------------------
・おまじないねこチャクラくん
・ヤギパンツ (独特の絵柄が好きでした)
・戦え!グリーンベレー君 (ひたすらチ×コギャグを連発する漫画)
・算数王子
・ポケモン
・ゼルダの伝説
・少女少年-YUZUKI- (いつ女装がバレないかとヒヤヒヤしたものです)
・冒険時空タイムネット ("劣化ポケモン"と揶揄されておりました)
・あさりちゃん
・ぷよぷよ

----------------------------------------------------------
ぷよぷよは、ルルーの片腕がロボットになって、ロケットパンチを繰り出したりなど、
奇妙な展開になっていた部分は覚えてます。

あと他にも、デフォルメされた芸能人だらけの漫画とかあったような気がする。

最後に。
懐かしくなって、「小学5年生とか まだ残ってないかなー?」と探してみると
↓こんなのが見つかりました。
切手

思い出した。
ポケモンスタンプ(?)を集めよう!みたいな企画があって、
毎回 集めてたような気がする。

で、その後は徐々にジャンプの方にシフトして行ったんですよね。
懐かしいなぁー、と思いました。

テーマ : 日記 - ジャンル : 日記

ジャンプ48号感想

今週はハロウィン仕立ての表紙になってましたね。

フランケンのルフィは、元からある頬の傷と自然にマッチしてたと思います。
一方、トリコは別の生き物になっておりました。


●ワンピース
タイトルが、ルフィVSミホークで、
まさにルフィとミホークが激突するお話でした。

しかし、いかんせんミホークの方が強いですね。
ルフィは、JETバズーカで最速の攻撃などを仕掛けようとするのですが、
その素早さを持ってしても、ミホークには見切られるようです。
(攻撃が当たる前に、腕を斬られる・・・!)

そして、ミホークの攻撃はでっかい氷山を真っ二つにできる模様。
どこかの鍵人みたいですね。
(鍵人より遥かに強いような気もしますが)

あまりにも防戦一方になるので、ルフィは機転を利かせました。

バギーを生贄にささげます。

次の瞬間、
「やめんかバあバババババ!!!」とか叫びながら
バギーは無残な姿になりました。

バギーではミホークに勝つのは難しいと思いますが、
個人的に足止めには最適だと思う。

細切れになりながらも、バギーが必死にしがみついてきたら、
ミホークにとってはかなり面倒な状況になるのではないかと。

まぁ最終的には、 花剣のビスタさんが足止めをしてくれましたのですが。
とりあえず、ヒゲがいい感じです。

最後、海軍が大きな作戦に出てきました。
くまさんのクローン大量投入。
これ、一体だけでも破壊するのに相当苦労していた&攻撃力が高かった と思うので、
来週は、なんかとんでもない戦況になりそうです。


●保健室の死神
最近は、色々と精神的な事に起因する事件に重点が置かれていて、
個人的に嬉しかったりします。
(ハデス先生の正体&能力云々は二の次でよいでしょう)

今回は、 妹尾 龍黄君が病魔の宿主のようです。

4人姉が居るのですが、
その4人の姉は、家では真の姿を見せているため、
どうやら女性不信になってしまった様子。

うん、これは姉や妹が居る人は それなりに龍黄君の心境は理解できるんじゃないかと思う。
(家の中では、つい だらしなくなってしまう所とか)

自分も理解できる、とだけ言っておきましょう。

で、最後 姉の一人が悲鳴を上げるのですが、
そこにはアシュラになった妹尾 龍黄君が居ました。
【阿修羅(アシュラ)様】↓
阿修羅様

いやぁ、悲鳴を上げるのも無理は無いですね。
突然、
不良の弟が突然アシュラになって 「我が説法を受けよ・・・!」
とか迫ってくるのですから。

自分が同じ状況に立たされたら多分、素直に「ごめんなさい」と言うと思う。

しかし、全裸「不埒な女達よ神妙にせよ・・・!」とか言っているのは実に奇妙である。
龍黄君自身も、充分 不埒な状態です。

ともかく、
Toらぶるあねどきっの世界に行ったら、さぞかし立派なアシュラ様になるでしょう。


●ぬらりひょんの孫
どうやら秋房さんはあの鏖(みなごろし)地蔵に操られているようです。

もともと、秋房さんには人間の部分と妖怪に近い部分が存在していて、
妖怪に近い部分(負の感情の部分)につけ込まれた、と言うことでしょうか。

・・・んーやっぱり、なんだか良く分からない部分があるので
あのTOP3 VS 羽衣狐様の一部始終が見たいものである。

最後に、ゆらが颯爽と駆けつけました。
そして、式神・破軍を使います。

もう破軍を使えるまでになっていたのですね。
リクオのじいちゃんにTKGをおごろうとしていた時よりかなり成長したのではないでしょうか。

一番最後のシーンの表情も とても凛々しく見えました。
(現状では ゆらしか破軍は使えない・・・! 頑張るんだ!)


●めだかボックス
途中に出てきた、
目隠ししながら眉間にシワを寄せている女性一体何だったのだろう?
あんな人が突然「通せんぼ」してきたら、警察を呼びたくなってしまうのですが。
----------------------------------------------------------------
【1】目を隠していてもモノを見ることが出来る能力がある
【2】相手に対するハンデ
【3】ケガをしていた
【4】作者が、わざわざかませ犬キャラの目を書くのが面倒だと思ったから

----------------------------------------------------------------
今後2度と出てこないようであれば【4】ではないかと思います。


●賢い犬リリエンタール
ちょっと、伏線が入ってきて複雑なお話しになってきましたね。
とりあえず、今回の現象が起きた原因は春永桜さんにある模様。

桜さんは確か、
「怪談話より100年前に沈んだ客船に興味がある」
と言っていたと思うので、その好奇心・探究心が今回の現象を引き起こしたのではないでしょうか。

なので、沈んだ客船とは何なのか?など謎を解決させなければ戻れないんじゃないかな。

それにしても足音の正体は一体何なんだろう。
(「ごめんなさい」という声が聞こえたら羽生の仕業だと思うんですけど。)

というか、話を理解するために先週のジャンプを読み返してみたのですが
先週の5ページ目中央のコマを見てみると、
まだバスが地面に埋まってるみたいですね。
(もう放置状態?)

ともかく、情報を纏めてみましょう。
------------------------------------------------------------
【1】100年前に沈んだ客船がある
【2】迷い込んだ当時の船には食料が沢山あった
【3】謎の足音がした
【4】2人消え、後日2人は餓死した状態で発見される
【5】入り口の扉に、子供達の手形が残ってた

------------------------------------------------------------
特に【5】の子供の手形というのが気になりますね。
無数の手形ではなく、無数の子供の手形

子供、というとハロウィンと関係あるのかな?

客船が沈んで死亡した子供の霊が、トリックオアトリート!とか言いながら
入り口付近のドアを触っていた
のかもしれません。

遭難した船には食料があったので、それを渡して何とかいたずらされずに済んだと。
(その後、食料の要求から逃れるためにボートで逃亡)

そして消えた2人は、食料を持ってなかったので、いたずらされて餓死してしまったと。
凶悪な子供の霊である

まぁ、何にせよ100年前の客船で何があったのか?が重要なポイントになるでしょう。

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

なんでソレをキャラクターにするの?

キャラクターっていますよね。

で、キャラクターの中には
何かをモチーフにしたり、人間以外の何かを擬人化したり
しているものが存在するのですが、

時々許容外の変な生命体が誕生する事もあります。

【変な生命体の例】↓
スプーだぁー!(?)
【参考URL】誕生シーン⇒伝説の絵描き歌(Youtube)

今日は、個人的に許容できないキャラクターについて書こうかな、と。
1つめ。
---------------------------------
う××さん
---------------------------------
(伏字を多めに入れております。)

なんか、ツイてる人にしか見えない妖精らしいです。
もう意味が分からないですね。)

"ウン"がある、とか"ウン"がいいとか、そんなギャグめいた意味があるのでしょうか。
「ツイてる人にしか見えない」というのは。

ともかく、現実世界でこんな妖精が出てきたら迅速にお帰り願います。
自分はこのような妖精は認められない。却下!

2つめ。
---------------------------------
コンチ
---------------------------------

これ最悪です。
だって、 そのまんまですからね。

あっ「20世紀少年」のコンチではないですよ。
ポケットフレンズとかいう方のコンチです。

おまけに「"チン"感覚」とか「コンチのポコダンス」とか、
変にギャグを織り交ぜている始末。

これは苦情はこないのだろうか?人気なのだろうか?
秋田のきり×んぽ騒動みたいになってもおかしくないデザインだと思う。

※両方とも、あえてリンクなどは示しておりません。
個人的に検索をお願いします。


うーんなんだろう。
キャラクターは色々と作られるのですが、特に下ネタを元とするキャラクターは
許容できるラインと許容できないラインが存在すると思います。
笑って済ませられるか、ひくかのどちらか)

そして、
その境界線を越えるキャラクターは
作ってはならない

と思います。

まりもっこり(北海道お土産)というのも存在するのですが、
これは、どちらかというと許容内の部類(ジョークで済ませられるモノ)かと。


まぁ、ともかく言いたいのは
「なんでそれをキャラクターにするの?」
「それはキャラクターとしてどうなの?」と、
そう思えるものが存在しているという事です。

テーマ : 日記 - ジャンル : 日記

スキンメッシュアニメーションの解説その3

【リンク】 ◆解説系TOP◆

スキンメッシュアニメーションの解説 第3弾です。

今までの解説はこちら↓
----------------------------------------------
スキンメッシュアニメーションの解説1
スキンメッシュアニメーションの解説2
----------------------------------------------

そして恒例(?)の注意書き。
下記の様に対応します。
-----------------------------
ボーンオフセット行列 = BOf行列
元にもどす行列 = 逆BOf行列
-----------------------------

とりあえず、今まで何をやってきたかと言うと、
・ボーン基準の変換
・親子関係になっているボーン基準の変換

この2つです。

また、ボーンによって動かされる頂点の変換は
親子関係になっていないボーンの場合一番根元の親のボーンの場合
頂点×BOf行列×座標変換行列×逆BOf行列

そして子ボーンの場合は、

頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列
(黒字は子ボーン、 赤字は親ボーンの行列。
            親が居る限りひたすら親ボーンの座標変換行列と逆BOf行列をかける。 )


このようにして、変換後の頂点の座標が求められると説明しました。
で、どちらもひとつの頂点につき、ひとつのボーンが動かすという例だったのですが、

今回は、
ひとつの頂点が複数のボーンから影響を受ける場合の解説をします。


×××××××××××××××××××
STEP4 複数のボーンと影響度
×××××××××××××××××××

複数のボーンから影響を受ける場合は、 影響度というものを設定します。
影響度は、0~1の間で設定し、
また、ひとつの頂点に対する複数のボーンの影響度の合計は通常にならないといけません。

例えば、ボーンAとボーンBに影響を受ける頂点がある場合は
┏━━━┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┳ ━ ┓
┃ボーンA┃1.0┃0.9┃0.8┃0.7┃0.6┃0.5┃0.4┃0.3┃0.2┃0.1┃0.0┃
┃ボーンB┃0.0┃0.1┃0.2┃0.3┃0.4┃0.5┃0.6┃0.7┃0.8┃0.9┃1.0┃
┗━━━┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┻ ━ ┛
影響度の設定の仕方は上記のようになります。
0.8740950.125905みたいに、もっと細かくする事も出来ます。)



そして、影響度を考えた変換後の頂点の求め方は下記の様になります。
-------------------------------------------------------------------------
親子関係の無いボーン、または、大元の親ボーンの場合↓
頂点×BOf行列×座標変換行列×逆BOf行列×影響度
子ボーンの場合↓
頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列×影響度
-------------------------------------------------------------------------

要するに、最後に影響度をかけるだけです。
そして出てきた座標を全て足せば 影響度を加味した座標が求められます。

百聞は一見にしかず、とも言うので実際にやってみましょう!


まず、 BoneABoneB頂点(2 3 0)があるとします。
【参考画像】
例題

で、BoneA・Bが共に頂点への影響度が0.5 、そしてBoneBでY軸方向に2倍する場合は、
下記の様に求められます。


頂点×BOf行列×Y軸に2倍する行列×逆BOf行列×座標変換行列×逆BOf行列×0.5
                
頂点×BOf行列×座標変換行列×逆BOf行列×0.5
                ||
 影響度を考慮した変換後の頂点座標

(それぞれ青字がBoneA赤字がBoneBの行列などになります)


上記の2つの式の途中計算は下記の様になります。

【参考画像】
例題3
(上の式の途中計算)

例題2
(下の式の途中計算)

それぞれ、1 3 0 0.5) (1 1.5 0 0.5)という結果が出たと思うので、これを足します。
1 3 0 0.5) + (1 1.5 0 0.5) =(2 4.5 0 1)
(重要なのはXYZです。 Wはそのまま無視して下さい。)

はい、これこそが 影響度を含めた変換後の座標です。
図にするとこうなります。↓

【参考画像】
XY座標4

影響度100%(1.0)の場合は、
頂点(2 3 0)をY軸方向に2倍すると(2 6 0)になります。
(Y軸方向に+3)
つまり、上手い具合に50%(0.5)でY軸方向に拡大されている事がわかります。
(Y軸方向に+1.5)

また、 分配法則を使って式を変形する事も出来ます。

----【分配法則】------------------
A×B + A×C
A×(B + C)  ←この式に変形可能

-------------------------------

先ほどは
頂点×BOf行列など・・・ + 頂点×BOf行列など・・・ = 変換結果
でしたが、
頂点× (BOf行列など・・・ + BOf行列など・・・) = 変換結果
↑このように変形出来ます。

影響を与えるボーン全ての行列を全て計算して足したものを、
                      まとめて頂点にかけるという形です。)

これも、実際に答えが出るかを求めてみましょう。
【1】BoneBの行列の計算

分配法則による計算2

【2】BoneAの行列の計算

分配法則による計算

【3】それぞれの計算結果を足して、頂点にかける。

分配法則による計算3


はい、同じ結果になりました。
見事です。

で、実際に計算する場合は分配法則を使った式の方が都合が良いです。
計算する際は、この形式にして計算しましょう。↓
頂点×(BoneAの計算結果 + BoneBの計算結果 + BoneCの ・・・・)

何で都合が良いのか?
影響度を設定すると何か良い事はあるのか?

などはまた次回にしたいとおもいます。

今回のまとめ

・影響度がある場合、通常のボーン基準の変換の式の最後に影響度をかければ良い。
・影響度をかけた結果を全て足すと、最終的な頂点の座標が分かる。
・分配法則を使って、頂点×(BoneAの計算結果 + BoneBの計算結果 + ・・・)という風に変形できる



スキンメッシュアニメーションで詰まっている人は

おそらく原理がよくわからない、把握できないという場合が多い
のではないでしょうか。

しかし、原理さえ分かれば簡単なものです。
この講座が終わる頃には、 全体像が理解できると思います。

それでは また次回! (`・ω・´)ノシ

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

「アヴェ・マリア」は素晴らしい

アヴェ・マリアはいいですね。

あ、このアヴェ・マリアというのは人名ではなく、曲名です。
ラテン語で訳すと、「こんにちは、マリア」「おめでとう、マリア」という意味らしいです。

で、アヴェ・マリアには、
-------------------------
・アルデカルト作曲
・グノー作曲
・シューベルト作曲

-------------------------
など、様々な作曲家の方から作曲されているのですが、
(曲名は同じだが、中身は別物)

自分はその中でも
ジュリオ・カッチーニ作曲のアヴェ・マリアが好きです。

精神的に安らぎとか、そんなものを感じる。
↓こちらで聴けます
カッチーニのアヴェ・マリア

テーマ : 日記 - ジャンル : 日記

スキンメッシュアニメーションの解説 その2

【リンク】 ◆解説系TOP◆

昨日の続きです。

最初に注意書き。
↓以下、このように対応しますので、覚えておいてください。
---------------------------------------------
ボーンオフセット行列 = BOf行列
もとの座標に戻す行列 = 逆BOf行列

---------------------------------------------

ついでに、Xファイル上だとボーンオフセット行列はSkinWeightsという
キーワードで囲まれた部分の中に存在します。

【参考画像】
SkinWaights.jpg

そして、BOf行列で移動した分を元に戻す逆BOf行列
そのボーン名が記述してあるFrameの中のFrameTransformMatrix
の部分に定義されてます。

【参考画像】
FrameTransformMatrix.jpg

これを見ても分かるように、
最初にx、y、z軸方向にそれぞれ-0.021821,-2.476220,-0.019219動かして原点に移動させ、
その後、x、y、z軸方向にそれぞれ0.021821, 2.476220, 0.019219動かして、
BOf行列で移動させた分を元に戻している事が分かります。

では、次の段階へ進みましょう!


×××××××××××××××××××
STEP3 親子関係のボーン
×××××××××××××××××××

昨日はボーンひとつだけの変換でした。
しかし、 大抵の3Dモデルのボーンは親子関係になってます。
なので、今日は親子関係になっているボーンの変換方法を説明します。

親子関係のおさらい。
--------------------------------------
・親が動くと子も動く。
・子が動くと、子だけが動く。

--------------------------------------
ボーン親子関係
これで親子関係が 大体分かるかと思います。
また、ボーンの先端に、別のボーンの根元を合体させて親子関係が作られます。

で、座標変換についてですが 親の場合は今までと同じです。
※以下、親 = RedBone 子 = BlueBoneとします。

RedBoneの行列は以下のように定義されています。
----------------------------------------
BOf行列 = x軸に-3移動、y軸に-1移動
逆BOf行列 = x軸に3移動、y軸に1移動

----------------------------------------

RedBoneにつられて動く頂点があれば、 90度回転させるとき下記の様に計算できます。
頂点 × BOf行列 × 90回転させる行列 × 逆BOf行列

注意すべきは 子ボーンの計算。

子であるBlueBoneの行列は以下のように定義されています。
----------------------------------------
BOf行列 = x軸に-6移動、y軸に-1移動
逆BOf行列 = x軸に3移動、y軸に0移動

----------------------------------------

値がおかしい事が分かるでしょうか?
BOf行列と逆BOf行列の差分が一致しておりません。

何故かというと、
親であるRedBoneは原点からx軸に3移動、y軸に1移動した所に根元がある
と計算しているのに対して、

子であるBlueBoneは、親であるRedBoneからx軸に3移動、y軸に0移動した所に根元がある
と考えているのです。

つまり、子は親を基準とした相対座標になっているのです。
「じゃあどうすれば子の絶対的な座標が分かるの?」というと、

親が居なくなるまで、
親の逆BOf行列をかけ続ければよいのです。


今回は、親はRedBoneしかいませんので、下記の様な計算になります。
頂点 × BOf行列 × 90度回転させる行列 × 逆BOf行列 × 逆BOf行列

手順と図を見ながら実際に確認してみましょう。
--------------------------------------
【1】初期状態。
【2】ボーンの根元が原点に来るように移動。 (BOf行列)
【3】90度回転。 (座標変換行列)
【4】BlueBoneの逆BOf行列をかける。
【5】RedBoneの逆BOf行列をかける。
【6】移動完了!

--------------------------------------

ボーン親子関係2
ちゃんとBlueBone(子ボーン)の位置に戻ってますね。 完璧です。

更に、親のボーンが座標変換されている場合は、
逆BOf行列をかけるまえに、座標変換行列をかけます。

RedBoneが90度回転、BlueBoneが90度回転した場合は下記の様になる筈です。

ボーン親子関係3

これも、手順と図を見て理解してみましょう。
--------------------------------------
■子ボーンの処理■
【1】初期状態。
【2】ボーンの根元が原点に来るように移動。 (BOf行列)
【3】90度回転。 (BlueBoneの座標変換行列)
【4】BlueBoneの逆BOf行列をかける。
【5】90度回転。 (RedBoneの座標変換行列)
【5】RedBoneの逆BOf行列をかける。
【6】BlueBone移動完了!
■親ボーンの処理■
【7】RedBone移動完了!

--------------------------------------
(RedBoneの途中の変換はものすごく省略してます。

ボーン親子関係4

これで、親子関係を持つボーンの変換は大体分かったはずです!
(うまく説明できたか心配である)

今日の内容をまとめてみましょう。


今回のまとめ

・ボーンの先端に、別のボーンの根元をセットすると、ボーンの親子関係が作られる
・子ボーンの根元の座標は、原点からではなく、親ボーンからの相対座標になっている。
・子ボーンの絶対的な位置は、親が居なくなるまで 親ボーンの座標変換と逆BOf行列をかけ続ければ求められる。


親・・・RedBone
子・・・BlueBone
孫・・・PurpleBone (子の更に子のボーン)
とすると、

親に影響する頂点の絶対座標は、
頂点×BOf行列×座標変換行列×逆BOf行列

子に影響する頂点の絶対座標は、
頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列

孫に影響する頂点の絶対座標は、
頂点×BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列×座標変換行列×逆BOf行列
で求められるよ!


次回は、影響率についてやろうと思います。
(明後日ぐらいに書く予定!)

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

スキンメッシュアニメーションの解説

【リンク】 ◆解説系TOP◆

約1週間ほど、
スキンメッシュアニメーションの参考になりそうなページや本を探してみたのですが、
細かく解説してあるような所は、ほぼ見つかりませんでした。
(なんでなの?)

しかし、個人的にはなんとか理解できたので、解説を書こうと思います。
(間違っている場所があったら指摘してください。)

では早速、解説START!

簡単だ!

※やっつけ仕事。すいません


×××××××××××××××××××
STEP1 概要を把握しよう
×××××××××××××××××××

まず、スキンメッシュアニメーションは、
3Dモデルの内部にボーンと呼ばれるものを配置しておき、
それを動かす事によって、周囲の頂点を動かします。
ボーンにつられて、周辺の頂点も動く感じ)


【参考画像】
ボーン

で、「ボーンって一体何なの?」というと コレは簡単。
ただの頂点2つです。
中心となる点 と、いくら回転したかを示す点の2つで1セット。)

これを便宜上"ボーン"と呼んでいるだけです。
数学的に言うと、頂点A、頂点Bから構成される線分AB。

【参考画像】
ボーン回転


×××××××××××××××××××
STEP2 "ボーン"基準の回転
×××××××××××××××××××

では実際にボーンを基準とした回転をさせて見ましょう。

まず図を描いてみる。
ボーンの根元が(2, 1)先端が(4, 1)
ボーンと一緒に動く頂点が(5, 1)にある時、Z軸中心に90度回転させると
下記のようになる筈です。
(Z軸は書いてませんが、パソコンの奥へ向かって行くような方向の軸です)

ボーン回転7


しかし、単純に90度回転させても、ボーンごと動いてしまってお話になりません。
↓原点中心に90度回転させた図。
ボーン回転6

「じゃあどうすればよいのか?」と言うと、いくつかの手順を踏みます。
端的に書きますと、下記の様になります。
--------------------------------------------------------------
【1】ボーンの根元を原点に合わせるように平行移動させる。
【2】回転などの変換をする。
【3】最初に平行移動した分だけ、また元に戻す。

--------------------------------------------------------------
(【1】、【3】の処理の時、ボーンに影響を受ける頂点も当然一緒に動かします)

今回の場合は、このようになります。
------------------------------------
【1】初期状態。
【2】x軸に-2、Y軸に-1平行移動。
【3】90度回転。
【4】X軸に2、Y軸に1平行移動。

------------------------------------
ボーン回転5

こうすると、なんとボーンを基準に回転した状態になります。
お見事。

で、ボーンの根元を合わせる操作は行列を使います。
そして、この行列の事を
ボーンオフセット行列と呼びます。
(長いので、以下 ボーンオフセット行列 = BOf行列とします。)

で、やり方は説明したので実際に計算してみましょう。
-------【計算の順番】------------------------------------------
頂点 × BOf行列 × 座標変換行列 × 元に戻す行列
--------------------------------------------------------------
「元に戻す行列」だと名前的にアレなので、以下
便宜上逆BOf行列と呼ぶことにします。

↓【計算の図】
変換中

ここで、x = 5、y = 1、z = 0は分かるけど、 Wって何?
と感じる人が居るかもしれませんね。

これは、 数合わせの要素だと思ってください。
行列は縦に4つあるので、頂点側も4つ要素が無いと計算が出来ないのです。
なので、特に気にする必要はありません。変換結果の方も、Wは無視して結構です。

(Wの値によって、平行移動の変換を可能にしています。
         Wを1以外の値にすると、 平行移動の変換が出来なくなります。

で、W以外の値を見ると、(2 4 0)となり、上の図とも一致しますね。
(【1】、【2】、【3】、【4】それぞれの状態の時の 頂点の座標を見比べてみてください)


今回のまとめ
----------------------------------------------------------------------
・スキンメッシュアニメーションは、ボーンを用いる。
・ボーンは、頂点2つで構成。
・原点に移動、回転などの処理、元に戻す、という手順でボーン基準の変換が出来る。
・計算する時は、行列を使っている。

----------------------------------------------------------------------

今回は基本的なことを説明しました。
まだまだ続く予定なので、お楽しみに!(`・ω・´)ノシ

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

「日本のナイアガラ」 が存在していた・・・!

先週の土曜に、大分観光に行ってきました。
(家族で)

で、具体的に何処へ行ったのかというと、大分県 豊後大野市 緒方町にある
原尻の滝です。

↓原尻の滝(クリックで拡大)
原尻の滝
↓調子に乗って、腹ばいになって崖っぷちから撮影したもの
原尻の滝2
(どちらも、かすかにが写っていると思います。)

で、この滝は
その姿・形から、"日本のナイアガラ"と呼ばれてるそうです。
へぇ子
↑へぇ子さん。 (感心するとへぇへぇ言ってくれる)

近くには滝を見ながら食事できるお店もあったので、
滝を見ながらだんご汁定食を頂きました。
うん、美味しかったです。

滝を見た後は、 稲積水中鍾乳洞を探検しに行きました。
(場所は 大分県 豊後大野市 三重町


中はなんか涼しかった(寒かった)です。
で、 若干 高いところから斜め下に向かって撮った写真です。

稲積鍾乳洞

途中で、どこかの大学の研究の為の装置が設置されてました。
鍾乳洞の上から滴る雫を一箇所に落として、石筍を作る実験(?)ぽかったです。
(石筍・・・つららが地面から生えてるみたいな感じのもの。)

あと、 ハトも居ました。
鍾乳洞が気に入ったのか知りませんが、鍾乳洞で生活している様子。
(近くを歩いてみたところ、 「ポォォオ~!」とか言って威嚇してきました。

うん、まぁ色々とありましたが面白かったです。

テーマ : 日記 - ジャンル : 日記

ジャンプ47号感想

●バクマン
あれ、中井さんそんな簡単に心変わりしてもよろしいのですか?
あなたは、雪の中で必死に漫画を書いてアピールした事もあったじゃないですか。

こういうのはコロコロ変えるもんじゃないです。
心変わりはヨヨの始まり ですよ。

\サラマンダーより速ー(略/
     ヨ●
     ↑ヨヨ。

まぁ、振られたので新たな出会いを探すのはいいとしても、
何事も無かったかのように 突然スパッと切り替わるのは宜しくない!
(過去の告白や言動に、重みがなくなる)

大体、こんな風に熱しやすく冷めやすい性k(長くなりそうなので略

ともかく、今回新たに好きになった女性は、確かサイコーに気があったような気がする。
恐らく2連敗するんじゃないかと。

そしてサイコー達の読みきりについてですが、
港浦さんと読者の感覚がズレているフラグが鮮明になってきています。

変に笑いを入れたから作品が駄目になったとか何とか。
(逆に言えば、うまく笑いを入れられれば成功するような気がしなくもない)

読みきりの順位はどっちもイマイチな結果となってしまった訳ですが、
編集長はどんな判断を下すのか・・・!


●ぬらりひょんの孫
なんと、雅次さん達は帰らぬ人になったとばかり思ってましたが
なんか 眠った状態で帰ってきました。
何なのこの展開?

考えてみよう。
-------------------------------------------------------------
【1】「仲間を殺されたくなくば、妖怪達の手助けをしろ」と言われた。
【2】普通に秋房さんの反逆。
【3】妖刀の意識に飲み込まれ、更に妖怪側に操られている。

-------------------------------------------------------------

普通に寝返ったのかもしれませんが、
とりあえずそれだと面白くないので、別の線を考えてみる。


まぁ、今回は 【1】の可能性を更に考えてみます。
この【1】は要するに、
秋房は人質を取られたので、仕方なく寝返ったポーズをしているのではないか?
という説です。
(そして反撃の隙を窺っている)

本気でゆらを殺そうとしていたような気がしますが、
羽衣狐様たち(黒幕)が影で眺めている(?)という描写もあったので、
ギリギリまで寝返った様子を演出していた、と考えれば一応説明はつくような気がする。(多分)

そして、妖怪に手渡していた妖刀には、使用したものは しばらくしたら死ぬみたいな
トラップが仕掛けてあるかもしれません。

あ・でも福寿流のおじさんは普通に斬ってしまいましたね。
こ、これは・・・どう説明すれば・・・。(´・ω・`;)

よし、結界が張ってあったので中が見えず、
ついうっかり結界と一緒に斬ってしまったということでどうだろう。
厳しいかな?

それか、リクオみたいに朝と夜で人格が変わって
朝は陰陽師側としての意識、夜は妖怪側としての意識に支配されているとか。
うん、そんな味方なのか敵なのか良く分からない状態になっているのかもしれない。
(竜二兄さんもグレーな存在と言ってましたし)


●ピューッと吹くジャガー
裏ワザが、全部裏目に出るお話でした。
ピヨ彦は、自分が恐怖を抱いている人物と関わると不憫な事になるようです。
(ビューティー田村さんあたりとか)


●賢い犬リリエンタール
あれ、ごむぞうが なんか変形してらっしゃる。

・・・分かった!
ごむぞうはまた新たな生命として生まれ変わったのですね。
うん、何というか、 もうその状態でいいんじゃないかな。
リリエンタールも楽しそうですし。
てつこにやられるかもしれませんが。)

で、最後 突然 海にワープして脱出できない状態になりました。
ボートか何かに乗って脱出しないと、後日死体で発見される末路を辿るとの事。

てつこは「脱出方法が無い!まずい!」みたいな事を言って、パニックになっていますが、
何を言っているのですか!


ごむぞうが居るじゃないですか。

さぁ、ごむぞう 今こそ生まれ変わった姿で てつこたちを助けるのです。
助けられるのはごむぞうしか居ない!


・・・しかし、ごむぞうは
何故かこの作品のキャラクターのなかで一番気に入りつつある。

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

実は、「英検2級」を受けていた

実は10月18日(日)に、英検2級の試験を受けていました。

英検 準2級は持ってたんですよ。

ですが就職活動なんかでは、
よくエントリーシートに英検2級以上の能力がある場合は書いてください
と指定されたりなんかしていて、

「うわぁー準2級じゃアピールできないよ!」とか嘆いてました。

・・・なので、プログラミングと同時進行で
英単語や熟語を覚えたり、リスニングの練習などもしていたのです。

で、今日解答速報が発表されたので、自己採点してみました。


結果は
---------------------------------------------------------------
【筆記】
大門1  16/20
大門2   4/5
大門3A  3/4
大門3B  4/4
大門4A  2/3
大門4B  4/4
大門4C  4/5


【リスニング】
第一部  13/15
第二部  9/15


合計  59/75
得点率 78.6%
---------------------------------------------------------------
これは ひょっとして・・・合格・・・?(`・ω・´;)

リスニングなどが苦手でもう駄目だと思っていたのですが、
案外 行けたかもしれない。

よし、次は2次試験だ!
(就職活動で、とても面接には慣れているので、(いろんな意味で)
                       落ち着いて話せる自信がある!)

テーマ : 日記 - ジャンル : 日記

Xファイルなんて要らないじゃない

今までは、Xファイルを読み込むために色々と試行錯誤してきたのですが、
別にXファイルじゃなくても良いじゃないかと思い始めました。

何がしたいかというと、
DirectX上のプログラムで3Dモデルを表示させれば良い訳です。
だから、別にXファイル形式じゃなくても、3Dモデルの情報が読み取れればOK。

よって、
Xファイル形式から独自形式へ移行しようと思います。

--------------------------------------------------------------
【1】独自形式の定義を決める
【2】独自形式の読み込み方法を決める
【3】Xファイル形式から、独自形式へ変換するツールを作る
【4】実際にプログラムで利用する

--------------------------------------------------------------
↑大まかな流れ。

まぁ、Xファイルにはもともと自分の使いやすいように拡張出来るらしいのですが、
そんなものは知らん。
(無茶苦茶である)

だって、Xファイル形式のヘルプ見ても意味不明だっ

まぁ、こういうものを作ると良い経験・練習にもなるので、コレでいいでしょう。
セガの人もそう仰ってた。
「ゲームプログラマになる前に覚えておきたい技術」定価:4500円)


そもそもXファイルの形式だと、 駄目な部分があるんですよ。

以前、Xファイルには
------------------
・法線
・頂点色
・マテリアル

------------------
・・・といった情報の前には特定のキーワードがありますと言ったのですが、
実はひとつキーワードが無い情報があるんです。

------------------------------------------
Mesh {
20;
-5.00000;5.00000;-5.00000;,
5.00000;5.00000;-5.00000;,
//中略

6;
4;0,1,2,3;,
4;4,5,6,7;,
//中略

MeshMaterialList {
//略
Material {
//略
}
}
MeshNormals {
//略
}
MeshTextureCoords {
//略
}
MeshVertexColors {
//略
}
}
------------------------------------------

見ればわかりますね。 頂点情報です。
他の情報は
「MeshVertexColors」とか「MeshTextureCoords」とかキーワードで囲ってあるのに、
頂点情報だけ、いきなり数字から始まってます。(なんで?)

どうして下記の様にしてくれなかったのかと。
---------------------------------------------------------------
Vertex { 
20;
-5.00000;5.00000;-5.00000;,
5.00000;5.00000;-5.00000;,
//中略

6;
4;0,1,2,3;,
4;4,5,6,7;,
//中略
}
---------------------------------------------------------------

おかげで、条件分岐のコードがちょっと複雑になりましたよ。

まぁ、
と言うわけで、独自形式の移行を考えております。(`・ω・´)

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

スキンメッシュの前に革命

スキンメッシュアニメーションに取り掛かる前に、現在のプログラムには
構造的に とてもとても無駄があったので、それを修正しようと思います。


まず、何が無駄だったのかを解説。
自分はとりあえず、Meshというクラスを作り、
読み込み・表示は下記の様に行っていました。
------------------------
  Mesh m;
  m.LoadFile("Player.txt");
  m.Draw();

------------------------
(おまかなので、プログラムは色々と省略してます)

ついでにMeshクラスの中には、頂点インデックス、テクスチャ、マテリアルなど、
3Dモデルを表示するためのデータ一式が揃ってます。

これはとても無駄でした。

「何が無駄なのか?」というと、
例えば、ザコ敵、宝箱などのメッシュをどんどん生成するとします。

すると下記の様な状態になります。
無駄なデータ

まずテクスチャが無駄です。
(同じテクスチャが何度も生成されている為)

敵を10匹 表示したいからといって、
同じ敵のテクスチャを10回も読み込む必要など無い のです。
テクスチャは一種類につき1回だけ読み込めば充分

なので、テクスチャを管理するクラスを作ろうと思います。
↓こんな感じ

無駄なデータ2
※「下さい」という、プログラム的に意味不明な表現がありますが、これは
ポインタをもらったり、参照したりする事だと思ってください。



テクスチャ管理クラスに「●●.bmp」「●●.png」はありますか?と聞き、
あればそのテクスチャ情報をもらい、
無ければ新たにテクスチャを生成し、テクスチャ管理クラスの管理下に置けば良いのです。
これで、同じテクスチャを何枚も読み込むという状態にはなりません。

そして、頂点情報なども同じ事がいえます。
現在の状態だと、敵のポリゴンを表示するための頂点数が5000だとします。

敵を10体出すだけで、全く同じ頂点情報などを読み込み、
約5万ものデータがやりとりされることになります。

やはり大いに無駄があります。

なので、詳細データを管理するクラスも作ろうと思います。
↓下記の様に。

無駄なデータ3

こうすれば、同じ頂点データをオブジェクトの数だけ読み込むといった事はなくなります。
最高です。
パッと見ただけでも、なんとなくスッキリしてきたなと分かるのではないかと。

まぁ、要は
同じ3Dモデルを表示する場合、異なるものと同じものはそれぞれ何か?
という事です。
---------------------------------------
同じもの
・姿、形

異なるもの
・動き(アニメーション)
・体の色(テクスチャ)

---------------------------------------

これを、「上手く使いまわせるものは使いまわす」という風に
重複している情報などを省いていけばいいわけです。
(SQLの正規化みたいだ)

ここら辺を とりあえず修正しようと思う。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

ブラクラは嫌である

普段、インターネットで検索とかするのですが、
その時にトラブルが発生したりします。

この前やられたんですけども、その時の事を書いてみます。
-----------------------------------------------------------
リンクでやられました。
クリックすると、別ブラウザが開くタイプのリンクだったんです。
で、そのリンクをクリックしても新しいブラウザがなかなか開かないなーと思ったら、

開いた覚えのないタブブラウザが開かれてるんです。
あれ、おかしいなーと思ってタブブラウザを消そうとしたら。様子がおかしい。

タブブラウザがどんどん増えてる。

何事!?と思ったので、回線を抜いて、
そしてタブブラウザのあるブラウザを丸ごと消したんですよ。

その後は デスクトップの背景と、アイコンが表示されているだけの状態。
(焦りました。CPU使用率100%になってましたし。)

で、 これで良し、と思っていた所、「カチッ」って音がなったんです。

「何?」と思ったら、 またブラウザが起動しました。
更にそのブラウザは
また大量のタブブラウザを開き始める。

もう駄目だ。対処法が分からない・・・。
・・・と言うことでPC自体を終了させました。

再起動してみたところ、デスクトップ以外 何も表示されない。正常。
忌々しいブラウザは表示されませんでした。
-----------------------------------------------------------
バグなのか、ウイルスなのかは不明ですが、(そっち方面の知識はない。)
ともかく嫌な経験でした。

なので、その後はタブ・JavaScriptなどを無効にしました。
もうヤだあんなの。

今ではCtrl + Nです。 これ最高。(自分の中では)

とりあえず、ウイルス・その他ブラクラ(ブラウザクラッシャー)などには気をつけましょう。

・山田オルタナティブ
・こなたウィルス
・クレズウィルス
・Sugar
・Magistr
・Nimda
・Falling Letters


など色々あるみたいです。

テーマ : 日記 - ジャンル : 日記

アニメーション完成!!

DirectXのゲーム制作についてですが、
自力でアニメーションをさせてやる!と言うことで、
色々と試行錯誤を繰り返しながら 「アニメーションをさせる自作クラス」
作成を続けていたわけですが、

なんと ついに完成しました。

やったぁーーー! \(`;ω;´)/

完成するかは分からなかったのですが、完成して何よりです。
ただ、内部の構造体が入れ子になりすぎててかなりエグい状態になっているので
どうにかならないかと改良をするつもりです。

【参考画像】
構造体の中

そして、アニメーションは完成したのですが、 これでいいかというと
まだ駄目なんですよ。

ドラゴンボールで言うと、スーパーサイヤ人2ぐらい。
なので、次の段階へ行こうと思います。

次の段階は、
スキンメッシュアニメーションです。

で、タダのアニメーションとスキンメッシュアニメーションはどう違うの?というと、

大体 下記の様な感じになります。
※人型のXファイルがひとつあるものとします。

【ただのアニメーション】
アニメーションモデルサンプル

【スキンメッシュアニメーション】
スキンメッシュアニメーションサンプル

見ても分かるように、ただのアニメーションは、
3Dモデルを丸ごと回転、拡大縮小、平行移動、ということしか出来ません。
(人型モデルの姿勢は変わらない)

で、スキンメッシュアニメーションの方はと言うと、
3Dモデル丸ごとではなく、頂点単位で色々と動かしたり出来ます。

なので、人型モデルの手の部分だけをいじってバンザイをさせたり出来るのです。

これを完成させるためには、ボーンとか影響度とか、コンビネーションテーブルとか、
また新たに理解しなければいけない概念が出てきます。

アニメーションの時と同じように
解説を書こうと思うのですが、いかんせん自分でもまだよく把握しておりません。
(厄介なものである)

正直、頭・手・足・胴体という風にパーツごとにXファイルに分割し、
それぞれのパーツを丸ごと動かすという方式にすれば、
人間が色んなポーズを取っているように見せる事は可能です。
(その代わり、関節部分が当然バラバラに見えたりする)

ですが、ここで止めたら自分の為にならないので
スキンメッシュアニメーションに挑戦してみます。
妥協と満足は天敵だって、とても偉い人が言ってた)

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

そのアオリを信用してはいけない

もうそろそろ、センター試験の時期ですね。
まぁ、自分は全く持って関係ない立場なのですが、ちょっと言いたいことがありました。

センター試験 数週間前ぐらいになると、書店に
-------------------------------------------------------------
「一週間で完璧マスター!物理」
「試験直前でらくらく攻略!」

-------------------------------------------------------------
みたいな本がたくさん並んでくるのですが、
これほぼ不可能ですので、ヤケクソになって買い漁らない方が良いです。


何でマスターする事が出来ないのか?というと、理由は主に二つ。
----------------------------------------------------------------------
・直前で急いでやっても、 基礎能力は急には上がらない。
・確かに内容を覚えれば対策出来るが、1日のノルマが非現実的。
(1日に●ページずつやっていこう、というタイプの本なのですが、
           本人がノルマを達成できなければ、そこで終わり
----------------------------------------------------------------------
こんな感じです。
1教科ならまだしも、物理、数学、国語、科学、英語、など
対策すべき科目が複数あれば尚更 対策は無理です。

とりあえず、苦手教科の本をすべて買ったものの、本を完全に把握する段階まで行かず
てんやわんやになって本番を迎える可能性が非常に高い。

特に、数学や物理などの問題の解き方、考え方というのは絶対に
すぐには身につかないかと。

プログラミングと同じで、
何度も練習をこなす内に 今まで見当もつかなかったような問題が、
「こうすれば普通に解けるんじゃない?」と、
解決方法が発想出来るようになります。
(脳の中で、なんか物事を考える力みたいなのが出来る)


と言うわけで、「残りの数週間でなんとか問題を解ける様に対策本を買うぞ!」
という考え方は止めておいたほうが良いと思います。
基礎は出来てるから、確認の為に買う!、というのならば当然問題はありません)

第一、そのような本で数週間のうちに完全に対策出来るなら
誰でも苦労せずに問題が解けるようになるでしょう。
数週間 VS 約3年間 ならば、 間違いなく3年間が勝ちます。

---------------------------------------
あと、本題と反れますが、

・脳が働き始めるのが、起きてから約3時間後
・試験前に、チョコレートなどで糖分を取っておくと良い
・今の内に、夜型から朝方に切り替えたほうが良い


らしいです。
(自分が現役の時、実際に先生がキットカットを配布してくれました。)

↓キットカット
KitKat.jpg

テーマ : 日記 - ジャンル : 日記

JavaScriptが面白そう(`・ω・´)

JavaScriptって面白そうですよね。

で、「JavaScriptって何?」というと
Webページに動きや対話性を付加することを目的に開発されたスクリプト言語です。

ブログパーツとかその他色々な事が出来る模様。
(まだ、自分は扱った事がない)

とりあえず、百聞は一見にしかずということで、
JavaScriptを使った作品を拾ってきました。
↓こちら

【引用元URL】初音ミク ブログパーツ【初音ミクnyano】

そして、なんで興味を持ったかと言うと、
実行ファイルをアップローダーにUPしてダウンロードして遊んでもらう
というのも良いのですが、
ブログ自体にゲームを貼り付けて遊べるようにしたいな、と。
内容によっては重くなるらしいので、そこら辺は実際に試してから考えようと思う。)


まぁ、しばらくはVBの卒業研究とDirectXの就職活動作品にはなると思います。
でも、いつか作りたいなと思う。 いや、作る! 作るぞ~!(`・ω・´)+

テーマ : 日記 - ジャンル : 日記

「無料ゲーム」で高額請求が・・・!

「無料で遊べる」ゲームで、高額請求される事件(トラブル)
が相次いでいるようです。

別に詐欺などではないんですよ。
原因となっているのは、
-------------------------------------
基本無料! 一部アイテム有料
-------------------------------------
という このシステム。

親が、子供に携帯電話の「無料のゲーム」で遊ばせていたら、
請求額が意味の分からない事になっていたと言うことらしいです。

※購入の際には予め決めておいたパスワードが必要なのですが、
ソフトバンクはその入力を省略している為、【購入】ボタンを押せば、
簡単にとんでもない事になる との事。
(これは気をつけたほうが良いですね。)

「無料で遊べる」というのは間違ってはいないのですが、
アイテム等には別途料金がかかるという事は明記しておいた方がいいんじゃないかなーと。
(小さい字だと分かりづらいので、誤解の無いように大きく書いておく、とか。)


---------------------------------------------------------------------------
あと、本題とは関係ないのですが、パケット定額制に入らないまま
動画などを色々と視聴していたら30万円の請求が来たという
友達が居ます。

その後 ボコボコになったあとに携帯の使用を禁止されたとか。
(あーあ・・・)

自分も、こんな大変なことではないですが、
退会するのを忘れて315円の請求が来たことがあります。

簡単に契約・購入できて、後から請求が来るというようなものは
気をつけないといけないなーと思いました。
うん、これは危険だ。

テーマ : 日記 - ジャンル : 日記

ジャンプ46号感想

●ブリーチ
真っ二つになりおった・・・(´・ω・`;)

いや、なんだろう、 やられ方がだんだん物凄い事になってませんか。
女性であろうと、内臓とられたりとか容赦がない。

しかし、颯爽と現れて颯爽と助けを求めるとは、なんとも格好がつかないものである。
もっと頑張るんだ・・・!

というか、山本総隊長は杖をついて何もせず空中浮遊してた様な気がするのですが、
今は何をしているのだろう。


●ワンピース
ハンコックがなんとエースの手錠の鍵を持っていました。
どこで手に入れたのかは分かりませんが、
ルフィが感謝の抱擁をして、ハンコックは「はぁん・・・」とか言って倒れます。
もう完全に骨抜き状態だよ!
(結婚する展開はあるのだろうか?)

で、くまさんについてですが、改造されて意識が消えてしまったとの事。
政府を嫌っているのにも関わらず、すすんで自分の体を実験台にしたというのは
何か色々と深刻な理由があったのかもしれませんね。
(何らかの人質を取られてたり とか)

そんな、くまさんを元に戻そうと、イワさんは
-----------------------------------------------------------
GANMEN・残像(スペクトラム)!!!
銀河WINK(ギャラクシー ンヌウィーク)!!!

-----------------------------------------------------------
と、 凄まじい奥義を繰り出してきました。

あんな技出して来られたら、なんだろう、
肉体へのダメージとかの前に「もう自分の負けでいいです」と感じます。
うん、素直に負けを認められるような気がする。

最後に、ダイヤモンドジョズと戦っているクロコダイルのもとへドフラミンゴが、
「俺と手を組まねぇか?」と話を持ちかけます。

一体何をやらかすつもりなのか。
味方の中に裏切ったり、味方と言えるのか?と思える人物が混ざってたりしますし、
こういう人たちがどう動くかによって色々と戦況が大きく変わりそうです。


●賢い犬リリエンタール
あれっ、トリガー人のシュバインさんみたいな人が居るなーと思っていたら、
まんま シュバインさんだそうです。

そのうちプエラとか出てくるんじゃないだろうか。

しかし、サングラス組の人は大変な目にあってますね。
隣家を覗いている状態から、
巨大ネコに乗ってマッハで大空を飛び回り、
後ろからケツから何かを発射しながらトラが追いかけてくる状態

になるとは予想もしなかったでしょう。

おまけに、 うちゅう猫は消えませんでした。
マズいですよ。
急に透明になったり壁に溶け込んだりおやすみビームを発射したり
してくるかもしれません。

来週、どう対処されているのかが気になったりします。


●ぬらりひょんの孫
あ"ぁぁあ"ああー!!
福寿流のおじさんが!
必死に、帰らぬ人となった雅次の為に指揮を執っていたのに・・・!

マッスル陰陽師さんもやられちゃったし・・・おのれ妖怪め!
・・・と思っていたら陰陽師でした。

あれ、秋房さん何やってるんですか。
なんなのこの展開?

何故こんな事になってしまったのか考えてみる。
------------------------------------------------------------
【1】「手下となれば、命は助けてやるぞ?」と言われ、寝返った
【2】やられた後、妖怪達の手によって改造され、操り人形みたいにされた
【3】妖刀と合体した後、妖刀に意識を乗っ取られた
【4】元々妖怪だった。倒そうと思ったが、羽衣狐様の下についても悪くないと思った。

------------------------------------------------------------
ゆらの「秋房にいちゃんに、陰陽師の何たるかを教えてもらった」という
描写が入ったので、個人的に【1】の可能性が高いかなーと。

秋房にいちゃんを尊敬し、京都の為に命を懸けて戦っていたが、
その秋房にいちゃんは京都よりも自分の保身を優先させてしまっていた、みたいな。

完全に敵側に回ったと見ていいんでしょうかね。
だって、後ろに居る妖怪 みんな妖刀持ってますもの。

「そなたの妖刀とやらに興味がある。 是非我が手下達の分も作ってくれ」
とか羽衣狐様に言われて、必死に増産したのかもしれません。

というか、リクオのじいちゃんは来ないのかな?、と。
てっきり因縁があったので、倒しに行くのかと思ってました。
(後でぬらりと現れるかもしれません)


●ピューッと吹くジャガー
ガンサムーン

もう最高。

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

「ラブプラス」がなんかすごいらしい

なんか「ラブプラス」と言うゲームが、すごいみたいです。

↓コレ
ラブプラス

色々と反響があるとか何とか。

早速 情報を集めてみた。

【基本情報】
ジャンル:コミュニケーション
セーブデータ:3個
CERO:15歳以上
発売元:コナミ
機種:ニンテンドーDS

【内容】
・“とわの市”で、女の子との運命的な出会いを体験する。
・初めは「ともだち」。その後、"告白"の日がやって来る。
・「恋人」としてのストーリーが始まる
・終わりが無いのが「終わり」。


【詳細】
・100日以内に告白されなかったらバッドエンド。 (むごい)
・RTC機能により、現実に即したイベントが発生 (RTC = リアルタイムクロック機能)
・プレイヤーの好みによって、女性の性格・髪型などが変化
・夢の中でいつもと違う彼女の姿に会える
・ニンテンドーDSの通信機能を使えば、「彼女」同士が会話をし始める

↓彼女(3名のうちいずれかになると思う)
ラブプラス2

何というか、すごい作品だなぁ、と。

あ 『凄い』というのは「うわーっ!凄い!!」と言う意味ではなく、
「す・・・凄い・・・。」という意味です。
※微妙にニュアンスがちがうよ。

夢の中でいつもと違う彼女に会えると言うことなのですが、
その画像はこちら。
夢

・・・・。

コレ主人公の妄s(以下略

主人公の夢は、とてもフリーダムなのですね。
(他にも色々と混沌としてそうである。)

自分も色々と訳の分からん夢を見たりするので、 (狸になって狐とフルマラソンをする夢とか)
混沌ながらも、他にどんな夢があるのか気になる。

ともかく、
mixi日記の「注目のキーワード」1位になったり、
ネット上に「彼氏」の書き込みが多発したり、
話題になっている様子。
いぬまるだしっにもネタとして登場してた様な気がする)

反響の大きいものとかは、どうしても調べたり内容を把握したりしたくなるので、
しばらく、様子を見てみようと思う。

テーマ : 日記 - ジャンル : 日記

Xファイルを読み込むときの注意点!その2!

【リンク】 ◆解説系TOP◆

卒業研究はVBを使って開発しているのですが、
間違って無限ループを書いたところ、作業中のデータが全て消えました。

あぁぁあああ"あ"---!! (´;ω;`)

開発環境ごと異常終了するとは何事か!
(VisualStdioならもっと頑張ってくれるのに・・・。)

【教訓】
※1 VBでは、無限ループなどにならないようにしましょう。
※2 こまめに上書き保存しておきましょう。


---------------------------------------------------------------------------
まぁ、その話は置いといて、
今日はXファイルを読み込むときの注意点その2です。

この前は、四角ポリゴンの罠について説明しました。
今回は頂点色の読み込みについてです。

まず、頂点色はXファイル上ではこんな感じで定義されてます。

【参考画像】
頂点色
一番上の数字が頂点色の数
その後は
-----------------------------------------------------------------------
頂点色の番号、 透過度
-----------------------------------------------------------------------
となっています。

なので、こんな感じで色を変えられます。
-----------------------------------------------------
1.000000,1.000000,0.000000,1.000000 //黄色・不透明
1.000000,0.000000,1.000000,1.000000 //紫色・不透明
1.000000,0.000000,0.000000,0.500000 //赤色半透明

-----------------------------------------------------

で、この情報をどう読み込ませればいいのか?と思いますが、
これはDWORD型(unsigned long型)の変数に入れます。

全部で4種類の情報(赤・青・緑・透過度)があるのに、
どうやって変数ひとつに収めるのか?


と思うかもしれませんが、これはビット演算で うまく ひとつの変数にねじりこみます。


DWORD型の変数は4バイト(32ビット)です。
なので、一つの情報につき1バイトずつ使ってひとつの情報とします。

【参考画像】(クリックで拡大)
DWORD内部

そして、1バイト(8ビット)とはどういう事か?というと、
0~255まで表せるという事です。
(符号なしの場合)

「赤」の場合は、下記の様になります。
-----------------------------------------------------------------
255 ←-------    -------→ 0
真っ赤                黒(赤の成分なし)

-----------------------------------------------------------------

ここで一つ目の注意点。
上記のXファイルの画像を見ても分かるとおり、
Xファイル内では、0~1の範囲でしか値を表現しません。

なので、値を全て255倍する必要があります。
--------------------------------------------------
1.0(最大値) ― 255倍 → 255(最大値)
0.5(半分)  ― 255倍 → 127(半分)
0.0(最小値) ― 255倍 → 0(最小値)

--------------------------------------------------
※小数点以下は切り捨て


そして、もう一つの注意点。
1バイトずつ使って値を入れると言いましたが、
具体的に、どこにどの情報が入るのか?というと、

左から順に 透過度となります。

気付いた人が居るかもしれませんが、
-------------------------------
Xファイルでは、左から  透過度
DWORD内では、左から  透過度

-------------------------------
「透過度」の情報が、 なんか調子に乗って一番左に来ています。

つまり、
Xファイルの並びとDWORD内部の並びは
一致しておりません。

※間違ってXファイルから「赤」の情報を、DWORDの「透過度」の所に入れないようにしましょう。

これら2つの問題点を考慮すると、

【赤の情報】  255倍して、 16ビットシフト。
【緑の情報】  255倍して、 8ビットシフト。
【青の情報】  255倍して、 そのまま値を入れる。
【透過度の情報】  255倍して、 24ビットシフト。

こうなります。

プログラムだとこんな感じ。
-----------------------------
DWORD tD = 0;
float a,r,g,b;

r = GetFloatValue(); //赤
g = GetFloatValue(); //緑
b = GetFloatValue(); //青
a = GetFloatValue(); //透過度

tD = 0;
tD += ((int)(r*255))<<16;
tD += ((int)(g*255))<<8;
tD += ((int)(b*255));
tD += ((int)(a*255))<<24;

-----------------------------
※GetFloatValue()というのは、ファイル中の数字の文字列
符号付き浮動小数点数の値に変換する関数です。勝手に作りました。

で、代入した後ちゃんと値が入っているのかも調べたいと思うはずです。
しかし、コレ、簡単には調べられないんですよ。
(もしかしたら、調べる方法があるかもしれませんが)

で、何故調べられないか?というと
値を見てみても、 4294967295とか
とてつもない大きさの10進数で表記されるんですよ。

こんなの見ても、正しい値が入っているのか分からん。

こういうのは11111111000000001111111100000000みたいに
2進数で表記して欲しい ところです。

なので、2進数で表記させるプログラムも作ってしまいましょう。
難しそうに思えますが、実はそれほど難しくはないです。
------------------------------
printf("Color = ");
for(int j = 0; j < 32; j++){
printf("%d", (Color>>(31 - j))&1);
}
puts(" ");
------------------------------
プログラムとしてはこれだけでOK。

↓こんな流れです。
----------------------------------------------
右に31ビットシフトして、1と論理積をとった結果を表示
右に30ビットシフトして、1と論理積をとった結果を表示
右に29ビットシフトして、1と論理積をとった結果を表示
右に28ビットシフトして、1と論理積をとった結果を表示
        :
        :
右に1ビットシフトして、1と論理積をとった結果を表示
なにもせずに、そのまま1と論理積をとった結果を表示
最後に改行

----------------------------------------------

そして、下の画像が実行結果です。
※Colorは変数ではなく配列になっています
Color2進数

【追記】
16進数表記版も作りました。
-------------------------------------

DWORD temp = 0xff00ff00;
char* t = "0123456789ABCDEF";

printf("Color = ");
for(int i = 0; i < 32; i += 4)
{
   printf("%c",t[(temp>>(28 - i)) & 0xf]);
}
puts(" ");
-------------------------------------
それぞれシフトした後、16進数のfと論理積をとります
(10進数で15、2進数で1111

0xf と論理積を取れば、必ず0~15までの値になるのであとはそれを添え字番号として使って
表示させます。
同じく、プログラムとしては案外短く書けます。

今日のおさらい!
-------------------------------------------------------------------
【1】頂点色情報はDWORD型に入れてひとつの変数として表現する。
【2】情報の最小・最大値は、Xファイルでは0~1、DWORD内部では0~255の範囲。
【2】「透過色」の情報が、DWORD内部では調子乗って一番左に来ているので、
   シフトする場所に気をつける。

-------------------------------------------------------------------

これで、自力でXファイルを読み込もうとする時の苦労が減るはず!
ではでは(`・ω・´)ノシ

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

Xファイルを読み込む時の注意点!

【リンク】 ◆解説系TOP◆

今日は、Xファイルを読み込むときの注意点を書こうと思います。

で、「Xファイルを読み込む」というのは
D3DXLoadMeshFromX関数を使う場合、と言う意味ではなく、
自力でXファイルの内部データを読み込む場合と言う意味です。

まず、プログラム内で 四角ポリゴンを表示させる方法を確認しましょう。

まず、頂点フォーマット構造体を定義します。

-----------------------------------------------------------------
    #define FVF_VERTEX   (D3DFVF_XYZ | D3DFVF_DIFFUSE) //頂点フォーマット
typedef struct
{ D3DXVECTOR3 p; // 頂点座標
DWORD diffuse; // 頂点色
} D3DVERTEX;
-----------------------------------------------------------------

次に、構造体の具体的な値を設定します。
---------------------------------------------------------
D3DVERTEX v[4];
v[0].p.x = -1;
v[0].p.y = 1;
v[0].p.z = 0;
v[0].diffuse = 0xffff0000; //赤
v[1].p.x = 1;
v[1].p.y = 1;
v[1].p.z = 0;
v[1].diffuse = 0xff00ff00; //緑
v[2].p.x = -1;
v[2].p.y = -1;
v[2].p.z = 0;
v[2].diffuse = 0xff0000ff; //青
v[3].p.x = 1;
v[3].p.y = -1;
v[3].p.z = 0;
v[3].diffuse = 0xffffffff; //白
---------------------------------------------------------

で、値を入れたらBeginScene()とEndScene();の間で描画。
-------------------------------------------------------------------------
if (SUCCEEDED(Device->BeginScene()))
{
Device->SetFVF(D3DFVF_VERTEX); //頂点フォーマット設定 
Device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,v,sizeof(D3DVERTEXCOR)); //描画
Device->EndScene();
}
-------------------------------------------------------------------------
※DrawPrimitiveUPの補足
左から順に、プリミティブタイプ三角ポリゴンの数値を入れた配列構造体の大きさ
です。
DPRIMITIVETYPE 列挙型←"プリミティブタイプ"の詳細

上記の例で言うと、こんな四角ポリゴンが表示されます。↓
四角ポリゴン
※本当はもっと綺麗に色が混ざるのですが、手書きなので察してください。
また、分かりやすく頂点を書いたので、実際は○は表示されません。

この図を見ても分かるように、D3DPT_TRIANGLESTRIPというプリミティブタイプは、
頂点をジグザグになぞるような順番 にしなければなりません。
(こんな感じ↓)
ジグザグ

で、Xファイルの頂点の順番は? というと、
上記の例で言うならば、
v[0]、v[1]、v[3]、v[2]という順番で定義されてます。
非ジグザグ
なんと、 ジグザグになっていない。

当然、この順番のまま描画しようとすると正常に描画されません。

なので、Xファイルから四角ポリゴンの情報を読み取るときは、
必ず描画前に、
3番目と4番目の要素をひっくり返してください。
そして、頂点以外の頂点に依存する情報があればそれも全てひっくり返してください。
(頂点に依存する情報は 法線頂点色UV座標の3つ・・・!)

※入れ替える時は、とりあえず構造体の配列に全ての情報を格納した後に、
構造体ごと入れ替えたほうが簡単&間違いにくいです。
【参考画像】
入れ替える

構造体の名前がMY_VERTEXだとすると、プログラムではこんな感じになります。
----------------------------------
MY_VERTEX temp;

temp = v[3];
v[3] = v[2];
v[2] = temp;

----------------------------------
構造体は、同じ型であれば代入が利くので、約3行でいっぺんに中身をひっくり返せます。

と言うわけで、四角ポリゴンの定義がある場合は、
3番目と4番目の要素をひっくり返さなければならないことに気をつけてください。
(三角ポリゴンの場合は特に問題なし)

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

トリックアートは面白い

世の中にはトリックアートという、なんかおかしな絵があるのですが、
これ面白いですね。

今日はコレをいくつか紹介しようと思います。

※トリックアート、だまし絵、錯視など、色々と分類があるっぽいのですが、
もうまとめて「トリックアート」と言う事にします。


【1】空中階段
トリックアート1
実際は壁と床のタイルに線が引かれているだけなのですが、
特定の場所から見ると、階段が出現します。

【2】巨大少女
トリックアート2
これは遠近法による撮影写真です。
あたかも、身長が怪獣並みに高いように見えます。

あと、どうでもいいですが
昔 赤ちゃんがこのくらいの大きさになって暴れる映画があったような気がする。

【3】透明トラック
トリックアート3
普通に、トラックのボディに絵を描いているだけなのですが、
なんか、透明のケースに巨大なボトルが格納されているようにみえます。

※もし見かけたら、目を奪われて事故らないように気をつけてください。

【4】ぐにゃぐにゃな直線
トリックアート4
よく、鉛筆をプルプル震わせて
「ほぅら、鉛筆がぐにゃぐにゃに見えるだろう?」とか
小学校の頃に見せられた経験があるのですが、それと同じで
直線が直線に見えないように見えます。なんか目が変になる。

【5】ぐるぐる
トリックアート5
画像が巨大すぎるので、サムネイルにしました。
見れば分かりますが、うずまき模様がぐるぐる回転して見えます。
確か、ヘビをモチーフにした作品だったと思う。

【6】おかしな図形
トリックアート6
良く見ると、「あれ・・・?」と思うはずです。
なんかおかしいですね。
コレ、ペンローズの三角形というらしいです。
(「脳噛ネウロ」なんかでも登場してましたね)

それと、このペンローズの三角形は実際に作ることが出来るそうです。
「どうやっているんだ?」と思いましたが、
コチラに解説が載ってました。↓
メビウスの輪みたいに不可能なことになっている立体の像

【7】奇妙な階段
トリックアート7
途中で階段がねじれてひっくり返っているように見えますが、
実はそんな事はなかったぜ!という画像です。
※2階にはちゃんと行けるらしいです。

個人的に、階段自体が宙を浮いている事の方が気になる。
(階段が、2階側からぶら下がっているような感じ)

この建物は、オランダのロッテルダムに実在するとか。

【8】白黒→カラー
初音ミク
画像をずっと見続けていると、白黒画像の初音ミクが降臨するのですが、
その時、一時的にカラフルな画像に見えるというものです。

お城verもあるのでどうぞ。↓
Shiro.gif

余談ですが、こういう時間が経つと変化する画像というのは
GIF(Graphic Interchange Format)という画像形式で作られたりしています。

で、これを利用して、癒し系の画像だったのに突如 エグイ画像に変わるという
イタズラ的なものも存在するので、気をつけて下さい。
(掲示板にリンクが貼られて、リンク先の拡張子が.gifの場合の時とか。)


まぁ、ともかく、こういう画像は面白いですね。
不思議なものが色々とあるんだなぁ、と。  今日はそんなお話でした(`・ω・´)

テーマ : 日記 - ジャンル : 日記

ジャンプ45号感想

●ワンピース
ハンコック様がお怒りになりました。

ルフィがボコボコにされたりしたらどう動くんだろう?と思ってましたが、
今回スモーカーに、ルフィがやられていたのを見て大激怒。
---------------------------------------
生かしておかぬ こんなに怒りを覚えた事はない!!!
そなたを切りキザんで獣のエサにしてやる!

---------------------------------------
こんな事を叫びながら暴れ始めます。
いやぁ ものすごい剣幕。 そして発言が微妙にエグい。
このままじゃスモーカーさんがエサになってしまう。

しかしその後、場面はイワさんとバーソロミューくま(パシフィスタ)へ。
で、ここで新たな情報が。
バーソロミューくまさんはお亡くなりになったそうです。
な、なんだと・・・!?

以前、ルフィ達を逃がした時に くまさんは
「お前達ともう二度と会うことはない」と言っていましたが、
これは
「ニキュニキュの実の能力で、もう帰って来れないような場所へ飛ばされる
と言う意味ではなく、
「戻ってくる事には、もう自分は殺されているだろう
という意味だったのかもしれません。

やはり、タダじゃ済まなかったのではないかと・・・!(`・ω・´;)


●あねどきっ
分かったぞ・・・!問題点が・・・!(たぶん)

この漫画は、事故でキスをしたりだとかドキドキのデート(?)だとか、
そういうシチュエーションありきで話が進んでいるような気がする。

別に話の展開やシチュエーションを考えるのは良いのですが、
そこへ持って行くまでの過程が不自然。
だから、違和感を感じる。

特定のシチュエーションに持って行くまでの、 キャラクターの心情や土台となる設定を
ないがしろにしてしまっている
傾向があると思う。
(そもそも 姉さんがいきなり同棲し始めた時点で不自然なのである)

姉さんなんか、妹が心配して探してたのに「ふーん?」みたいな態度でしたし、
妹は、「姉さんを監視するわ!」みたいな事を言って滞在し始めるし、
浩太は、いつの間にか姉さんが真剣な恋愛の対象に なりつつある。

全体的に納得の行く「過程」が無く、突然「結果」が訪れるのである。
その点、桜井さん
--------------------------------------------------------------
【結論】 浩太の事が好き or 付き合ったりしたい
【過程】 デートなどに誘ったりする

--------------------------------------------------------------
目的と、その目的を達成するための過程が見えるので感情移入しやすいのではないかと思う。

あと、浩太は妹に
「アンタ お姉ちゃんのこと好きなんじゃないの?」と言われて、
「自分は姉さんの事が好きだと思っている面があるのかもしれない・・・!」
と感じているみたいですが、多分 それ、バーナム効果です。
その言霊に惑わされてはいけません。桜井さんの事を思い出すのです。


●賢い犬リリエンタール
※かつて風船兵士ごむぞう が居たという事を忘れないであげてください。


●鍵人
えと、アスラ様に付き添っているニクスという妖精についてですが、
服は着ないのでしょうか?

というより、服を着ている訳でも無く、服を全く来ていない訳でも無く、
変なヒモ状の物がまきついている状態なのですが、
コレは何なんだろう?

アスラ様から、「服はやらんけど、この変なヒモでどうにかしろ!」とか
命令されたのでしょうか。

もしそうだとしたら。。。
セクハラ社長
セクハラ社長と呼ばざるを得ない。

もしくは、スイクンの周囲を漂っているアレみたいに、
深い意味はないけど、なんか装飾的な意味で勝手にまきついてる物体なのかもしれない。
アレ

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

ポケモンは人気がある

ほとんどの人が知っていると思うんですが、ポケモンってありますよね。
不思議な不思議な生き物。ポケットモンスター。縮めてポケモン、みたいな。)

この作品は、 なんか自分の大学内でも人気があります。

最新作も発表されましたからね。
結構 話題に上がってきます。
ハートゴールドとソウルシルバーいつ入荷されるの?
とか嘆いてました。

他にも、 ポケウォーカーという、ゲーム本体と連動して遊べる歩数計についての
話もちらほら上がってました。
よぞらのはて(?)が出現したとか何とか。)


ともかく、本当に人気あるなーと。
良く考えたら、丁度 自分ぐらいの年齢はポケモン世代なんですよね。

小学校高学年ぐらいの時に、物凄い流行った。
給食時間中は、「ポケモン言えるかな?」を暗唱しようとしてた友達も居ましたし。
(自分も含めて)

レイモンドとイマクニ?さんはどこへ

あまりにも流行ってたので、よくゲームセンターでポケモンのスタンプやらポスターやら
取りに行ってたような気がする。

それと、色んな情報が飛び交ったりしていましたよ。
下記みたいなガセ情報とか。
--------------------------------------------------------------------
・次のタイトルは「ポケットモンスターメタル」が発売される
・自転車以外にも、スケボーに乗れる

--------------------------------------------------------------------

うん、ともかく凄かった。 
子供の頃の思い出は、ポケモンが占める割合が多い。 本当に。
ポケモンは偉大だ。

現在も『ポケモン』が頑張っているようですし、
ドラえもんみたいに長く愛されるような作品になるといいなーと思ったり。

【株式会社 ポケモン】
ポケモンを世界的に愛されるようなコンテンツにする為に設立された会社。
ポケモンが常に新しく面白いものであり続けるための、環境の構築などを行っている。

テーマ : ゲーム - ジャンル : ゲーム

STLコンテナを使ってみる

今まで、理解が浅いため意図的に使わなかったSTLコンテナな訳ですが、
ある程度 把握できてきたので使おうかと思います。

とりあえず、STLというのは
STL Standard Template Library (標準テンプレートライブラリ)
という意味で、そのなかのコンテナライブラリの中には、
----------------------------------------
・vector
・list
・map
・queue
・stack
・deque
・set
・bitset

----------------------------------------
このようなものがあります。


で、今までXファイルのFrame階層の読み込みなどは、
自己参照型構造体及び再帰関数などを使って瀕死になりながら実装してきたのですが、
STLで実装してみたいと思います。

動的確保する配列はvector
テクスチャ名などを格納する場合はstring
を使おうかな、と。
(stringは文字列ライブラリ)

コレで結構 楽になります。

再帰なんぞ使わなくても push_back()で行ける!

あと、最近本を買ったのですが、この本良いですね。↓
詳説C++

詳説C++。( 定価3800円、約600ページ

C言語の復習 や C++のクラスの概念といった基礎的な内容から、
参照数計測ポインタ、 STL、 オブジェクト・スライシング問題など、
文字通り詳しい部分まで記述されてます。

ただ、C言語の復習などは、ほんとに確認をする程度なので、
他の参考書なども買って 併用していく様にした方ががいいかなーと。


ともかく、コンテナライブラリなどを用いて
再度Xファイル読み込みの部分を開発してみようと思います。┗(`・ω・´)┛+

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

変な夢をみる

最近は、変な夢を見ます。
別に悩んでいる訳ではないのですが、 何で変な夢ばかり見るのかなー とか
思ったりします。

このまえは、室内の温度が500℃から1000℃に上がる
を見ました。
で、気温計みたいなもので、「おーまた温度が上がった!」とか言ってるんです。

他には、
魔女(?)になって空を飛んでいたら、右後ろの方からタオパイパイが
「負けんぞ!」とか言いながら張り合って飛んでくる
夢とか。

何なのコレ?
よく、「夢はその人の精神状態(深層心理)を表している」と聞いたことがあるのですが、
これはどんな心理状態なんだろうか?

うーん、さっぱり分からん。

なんか、調べたら夢の内容を診断をするようなサイトもあるみたいです。
夢診断.com
眠り男の夢占い

色々と解説(解釈)が乗っているので、「へー」とか感心(?)したりしました。
とりあえず、「空を飛ぶ夢」というのは束縛からの開放を求めているそうです。

テーマ : 日記 - ジャンル : 日記

卒業研究も再開した

先日、大学が始まりましたが、卒業研究も再開しました。
(卒業前にやる、最後の課題みたいなものです。)

で、卒業研究では 誤差逆伝播法だとかニューラルネットワークだとかの
アルゴリズムのシミュレータを作る予定らしいです。
(現在は、プログラミングの基礎を確認する課題をひたすらやっている状況)

言語は VB(Visual Basic)

先日は、
---------------------------------------------------------------------
非決定性プッシュダウンオートマトンを実行するプログラムを作りなさい」
---------------------------------------------------------------------
とか指令が出されたので、それを今作っている最中です。
(もうすぐ完成する)

やり方は合っているのか全く持って分かりませんが、
-----------------------------------------------------------------
【1】状態の有限集合の数だけ、構造体(qList)の配列を動的確保
【2】動作関数の数だけ、構造体(FuncList)の配列を動的確保
【3】それぞれ値を入れる
【4】文字列を読み込んで、文字列が受理されるかどうかを表示


構造体【qList】
・Name(名前)
・Flag(受理状態かどうかのフラグ)
・FuncList(構造体FuncList。入力によって動的確保する。)

構造体【FuncList】
・SituationStr (状態変化をもたらす条件となる文字)
・BeforePSymbol (変化前のプッシュダウン記号)
・AfterPSymbol (変化後のプッシュダウン記号)
・Next (遷移先のqList配列の番号)

-----------------------------------------------------------------
まぁ、こんな感じで実装してます。

DirectXのプログラムの方も先に進めたいのですが、
まず卒業しないとどうしようもないので
卒業研究の課題の方を優先させようと思います。
(早めに終わらせたい)

あと、VBを使っていて思ったのですが、コレ
すぐエラー吐きますね。

例えば、「If」と書いて、条件文をどこからか
コピーする為に、カーソル移動後にクリックをした時点
式が違います とか
ThenまたはGotoがありません とかメッセージボックスが表示されます。

正直、「そこは分かってる!今からコピペして式を貼り付けるところ!」
と突っ込みたくなります。

で、
他の研究室のメンバーの方は、入れ子のfor文もなんだか良く分からないという状態のようで
何かヤバイ状況になってます。
(プログラミングの経験は ほぼ無いとの事。)

どうすればいいのかすら分からない、みたいな。
これは、自分が手助けせねばなるまい・・・!
間に合うかな?

とりあえず、さっさと課題を終わらせて手伝うことにしよう。

テーマ : 日記 - ジャンル : 日記



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。