トップ 新規 一覧 検索 管理 ログイン

FrontPage

<< 2007-06 >>
0102
03040506070809
10111213141516
17181920212223
24252627282930

ブログ/2007-06-06

[DirectX]鎧を着たり、武器を装備したり

 またかなり時間が開いてしまいましたが、今回はキャラクターモデル系のプログラムを書いていました。あと、そのネタ用のモデルデータを作るのも一週間くらいかかっちゃったかな。
 まずは、人が走っているところ。

剣を装備したり。

盾を装備したり。

〜こっから技術的な話
 モデルデータを表示するだけならかなり簡単です。モデルデータを市販のツールで書いてロードするだけでほとんど終わりですから。
 アニメーションはちょっと面倒です。市販のツールでアニメーションデータを作るまでは問題無いですが、そのモーションデータをロードして骨格をシミュレーションしたりとか・・・まぁ、ほとんどどこぞのソースコードをコピペですが、、、。

 で、今回の難関。そういったモデルデータを一部分だけ変更するというもの。たとえば剣を持たせたり。
 やり方はいろいろありますが、何より市販のツールから読み込んで勝手にうまくやってくれる処理の中身を分解して自前で書いたりとか、だんだん三次元情報を数値と計算でコネコネしてやらないとダメになります。

 申し訳ないが、そんなコード作る気合いも根性も無いですえぇ。で、かなり手抜きですが、今回の方法は以下の通り。

 まず、素体君を作ります。素体君データはポリゴンモデルは適当です。むしろポリゴンもテクスチャもマテリアルもいりません。必要なのはボーン(骨格)とアニメーションデータです。

 で、素体君をプログラム上で走らせたり歩かせたりします。これは、普通のアニメーションのコードでかけます。

 ここからがキモですが、アニメーションってのは、たとえば肘が何度曲がったとか、腰がどのくらい折れたかとか、「時間と角度」だけのデータです。
 なので、素体君が一コマ動いたら、その関節の角度をすべて記録します。

 だいたいこんな感じ。

//初期化処理(関節の個数分、マトリックスの変数を準備)

D3DXMATRIXA16 savemat = new D3DXMATRIXA16関節の数?;

〜ざっくり略〜

//アニメーション処理

D3DXMATRIXA16 mat;

〜ざっくり略〜

D3DXMatrixMultiply( &mat, ほげふが );//←関節の回転角度を計算

m_pD3DDev->SetTransform( ほげふが, &mat );←回転させる

savematx? = mat; //←回転角度を関節の個数分の配列に保存


 素体君の役割はここまで。
次に実際に描画したいモデルを準備。このモデルは関節毎にバラバラです。ただ、素体君がアニメーションしてない時と、関節の角度や腕などのパーツの位置は、寸分違わず作ります。で、バラバラに保存します(あとでばらせるなら、一緒に保存してもいい)。

 で、バラバラのパーツを一つずつ読み込んで、素体君がアニメーションした時の関節角度と同じだけ、パーツを回転させます。

 これであとは、必要なパーツだけ読み込めばオッケーです。剣を装備したいなら剣のオブジェクトを読み込んで、「手」と同じ角度分回転させればあたかも剣を装備したように見えます。

 まぁ、これだと問題なのはマントやスカートみたいに、オブジェクトを歪ませるのは出来ません。それをやるには「オブジェクト毎の回転」ではなく、「ポリゴンの頂点毎に移動/回転」をさせなければなりません。

 とりあえず、今回は技術的なことはなるべく二の次にして、やりたいことをやるのが最優先なので、そういうオブジェクトの変形はパスです。

 それに、いずれもっといろんな服とか装備とか作らないとならないっすからね。

 で、この人はまだ一カ所を走っているフリなので、今度は特定の箇所をクリックしたらそこに向かって走っていく…なんていう面倒な処理を考えナイト。

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-11

[DirectX]目が〜

 右目が真っ赤になっちゃいました。どうも、まぶたの内側に変な腫物ができたようで、それが眼球を刺激しているようです。そんな訳で、今は左目だけでブログを書いています。
 こういうときこそブログを書かなくては!…と言っても、左目は運転免許所をメガネ無しでギリギリ通る程度の視力なので、あまり見えません。ぶっちゃけ、ディスプレイの文字もかなりボヤけてます…。明日…仕事休んで眼科へ行ってきます…

 ま、それはそれとして、上の画像は毎度おなじみDirectXなプログラミングネタ。

 3Dゲームとかで、画面をクリックすると、そこに向かってキャラが走り出したりしますよね。この前の土日は、その「画面をクリックと仮想世界との連動」のプログラムをしてました。

 「画面」という平面をクリックした場合、そこは仮想世界(3D)のどこをクリックしたのかを計算しなければなりません。これはさほど難しくなく、仮想世界のどこかにあるカメラから見ているので、そのカメラの中心位置からのマウスの相対位置で求めることが出来ます。
 ちなみに仮想世界の視点は「点」ではなく、その点から少し離れた面としています(たぶん)。

 クリックした場所がわかったら、こんどはそこから仮想世界の中で線を引きます。
線と仮想世界の地面の交点が、「クリックした場所」になるわけです。
 ちなみに、「線」というのは、
  • 2つの点
  • 1つの点と方向
のいずれかがわかれば引けます。これは、小学校の算数で習います。しかし、「クリックした場所」という一点しか求めていません。もう一つの情報である「方向」を与えます。方向というのは「カメラの向いている方向」というのがあります。ちなみに、「カメラの向いている方向」と完全に平行にはなりません。カメラで見た世界は「奥ほど広い」ので、「クリックした場所」が中心でないかぎり、距離が遠くなるほどに、カメラの向いている方向から離れます。

 まぁ、その辺の微妙な演算をしてくれる関数が存在しているので、ペロっとデータを与えれば計算してくれます。

 これで、クリックした点とそこからの線が求まりました。しかし、これでもまだ終わりじゃないです。その求めた「線」と仮想世界の中の地面という「面」の交点を求めなければなりません。

 まぁ、この交点を求めるのも、関数+αで計算出来ます。

 で、上の画像ですが、今回、テクスチャにちょっと細工をしました。四角いマス1つに「●」というマークを付けています。この世界は●という「面」の集合で出来ています。この画面の中には700くらいの●(面)があるでしょう。

 つまり、一回クリックするごとに、このすべての●に対して、クリックしたポイントからの線と交わっているかを計算します。当然700●なら、700回計算です。
 しかも、デコボコなので、手前の●と奥の●とかもあります。

 最後の計算は結局力業なので、その分繰り返してやります。で、そんな計算地獄を2日間ほどかけてやってクリックした場所にカーソル(上の画像の赤丸で囲んでいる所にある赤いオブジェクト)が行くようになりました。
 ちなみに画面描画をしながらこんな計算をしたら、画面が一瞬とまっちゃうので、この計算はバックグラウンドでガシガシやっちゃいます。

 日頃、何気なくゲームでクリックとかしてると思いますが、裏ではこんなことをやってるんですよ。ホントに疲れます。

 目がおかしくなるのもわかるでしょ?

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-12

プリングルス スパイシーグァカモレ味

 コンビニに行ったらプリングルスのSpicyGuacamoleというのがあった。パッケージに英語でしか書いてなかったので始め読めなかったけど、フタに日本語の張り紙がしてあったのでわかった。味は、食べた瞬間は「青臭い!」、そしてジワジワとピザっぽい味がしてきます。まぁ、そんな感じ。美味しいけど好みが分かれそう?

ものもらい

 目(まぶた)がおかしかったので眼科に行ったら、一時間待たされたあげく、10秒程度で「ものもらいですね」って言われて目薬を貰って帰ってきた。
 たかがものもらいでも、ここxx年パソコンやっててこんなに酷いのは初めてだぞ!もすこし患者をいたわれ!って心で叫びつつ帰ってきた。

 まぁ、府に落ちないので、ちとググって見た。
http://monomorai.phrontis.net/
…このURLすごいな…

 ものもらいには2種類あるらしい。
麦粒腫(ばくりゅうしゅ)
まぶた(まつげ近くの毛穴)に細菌が入って化膿する。

霰粒腫(さんりゅうしゅ)
まぶたの中にできる、脂の分泌線が詰まる。

 ものもらいは今回が初めてじゃないけど、明らかにいつもなるのは前者、今回のは後者だ。まぶたを触ると堅いしこりがあるし、「痛みは通常ありません。」ってのもその通りだ。

霰粒腫は、麦粒腫とは異なり、そのままの状態で放っておくと同じ状態のまま何ヶ月も続くこともあります。

 たしかに二週間くらいほっぽらかしながら、土日は養生してたけど、一向によくならなかった。

 ざざっと上のサイトを読んだところ、「目を清潔にする」「眼帯はなるべくしない」「時間がかかるっぽい」って感じのようだ。「温湿布を貼る」ってのは意外だ。今まで炎症だと思って冷やしていたけど、これはよくないっぽい。
 まぁ、気長に直すか。

貰った目薬はこれ。
http://www.interq.or.jp/ox/dwm/se/se13/se1319722.html

…殺菌的に作用します。黄色ブドウ球菌など…

これって、麦粒腫対策のようにも見えるが…まぁ、清潔にすることには違いないので、いいや。

コメント

  • おひさです。 そんなものが売られてるのですね。 SpicyGuacamole 日本人の縁遠いメキシコ料理ですよ。 アヴォカドディップの味ですね。 アメリカ行きてぇえええ。 - SNEEZY (2007年06月25日 21時04分59秒)
  • おひさぁです。最近、ダブルチーズとカレー味のプリングルスもありましたが、こちらはお勧めしません>< - デルタ (2007年06月25日 21時37分35秒)
プラグインが未定義です:comment_d

ブログ/2007-06-14

Delta's X Web sites生誕11周年

 本日でこのサイトは生誕11周年ですよ。そのころからカウンターを回し続けて77万アクセス!サイト名もDdashホームページからサイト名やハンドル名を変えたり、サイトを増やしたり減らしたり…まぁ、速いものです。

 11年前ってどんな感じよ?と思い起こしてみると…

  • 検索サイトはYahooくらい(プロバイダ毎のサイト紹介の方が活発だったかな)。
  • デジカメが初めてこの世に出回ったくらいの時期(当時30万画素くらい)。
  • JavaとかFlashとか無かった(サイトを作るのはHTMLだけ、あとCGIとかSSIとか)。
  • ブラウザはIEとネスケくらい(Verは2とか)。しかも、ネスケは有料で売ってた。
  • インターネットはISDNとか。速度は64kbps(最近のADSLは8Mbpsくらいだから1/100以下)。ついでに従量制が主流(3分10円)。
  • 当時の大手プロバイダは、ベッコウアメ、リムネット、ソネットとか?Niftyはパソ通の方が主流だったかな。あと、NECのBiglobeもあったかな。
  • WindowsはWindows95(とNT)が主流。

 こんな感じかなぁ。相川七瀬の「恋心」とかもこの年にブレイクしてたみたいw
ちなみに、上の画像は当時のデジカメで撮った写真。圧縮とかしてない素でこれだよ。

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-18

[パソコン機器]ワンセグTV

 以前、ブログでちょいテレというのを書きました。(ブログ/2006-11-20)
USBにつなげるUSBアンテナで、パソコンでワンセグTVを見るというもの。

 その後、どうかというと…全然見ていませんw

 何故かというと、電波が悪いとか画像がどうとかいろいろあるんだけど、ぶっちゃけ今回のワンセグにしろ、TVチューナボードとかにしろ、パソコンでそれをやっちゃうと、他にパソコンで何もできないのよね。
 パソコンでテレビを見ながら、ゲームなんてもってのほかです。DualCore CPUで、メモリ2GByte積んだって、やっぱり厳しいです(たまにフリーズとかするし)。

 で、ポータブルテレビを買ってみました。東芝の「ポータロウ」というやつで型名はSD-P70S(http://www3.toshiba.co.jp/hdd-dvd/products/player/sd-p70s/index.html)。
 ちなみに、これは所謂DVDプレイヤーで、テレビは見れません。

 これに、ワンセグチューナ(http://www3.toshiba.co.jp/hdd-dvd/products/option/sd_pdt1.html)を繋げるとワンセグテレビが見れます。

 プレイヤーはそんなに高値じゃないけど、チューナは結構値が張ります。
ワンセグチューナ内蔵なのは他にもあったけど、これは外部アンテナが使えるのがポイント(他に使える機種もあるかもしれないけど、よく知らない)。
 結局、ワンセグってかなり画像が汚いから結構気になる。ただ、外部アンテナを有線で繋げれば、電波が弱くて見れないってことは無いので、室内でパソコンをやりながらテレビを見るのはこの組み合わせがいいね。

 あ、ちなみにモバイル用途ではこの組み合わせはお勧めしません。なんか、チューナがバッテリー対応してなくね?まぁ、対応しててもかさばるのでダメ。
 まぁ、チューナが無くてもDVDプレイヤーとして使えるから、モバイルではそういう用途ならいいかも。

 横に普通のテレビが置ける環境ならそうすればいいけど、うちみたいにそういうのが厳しい人には、こういう環境もいいですよ。

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-20

[ネットワーク,セキュリティ]strcpy

 コンピュータへの不正アクセスの方法として、buffer overflow(もしくはbuffer overrun)という攻撃があります。コンピュータには「メモリ(記憶装置)」というものがありますが(HDDとか半導体とかいうのは気にしないでください)、「メモリ」にはプログラムとデータが入っています。
 しかし、ここがプログラム、ここがデータという明示的な境界はありません。それはプログラマが決めます。

 どういうことかというと、砂場で遊んでいる子供が、砂場が狭いと「ここまではボクの遊び場、そこからはキミの遊び場」なんて境界を作ることがありますが、「砂場」の砂の色が違ったりとか壁があったりとかはしません。第三者から見れば、どこからがボクでどこからがキミの砂場かはわからない…つまり、論理的な境界であって、物理的な壁がある訳ではないです。
※最近はメモリ保護機能とか、単純なレベルならOSが保護してくれます。

 で、buffer overflowというのは、データを溢れさせてメモリ上のプログラムを書き換えることで実現する攻撃方法です。

 こういうbuffer overflowな話でよく言われる例として、プログラム言語であるC/C++の関数の「strcpy」が例によく使われます。「strcpy」は文字列Aを文字列Bにコピーするという関数です。つまり、文字列Aが10文字、文字列Bが5文字しかキャパシティが無いと、あっさりbuffer overflowが発生します。はみ出した5文字分は、メモリ上の「プログラム」がかかれている場所に行くか、「データ」の場所に行くかはわかりません(意図的にそういうことをすることはありますが…)。

 ちなみに、C/C++言語にはもう少し複雑な背景があって、こういう関数が「標準化」されています。C/C++言語はVisualC++とかgccとかBorland Cとか様々な種類がありますが、「標準化」された命令はそのまま実装されています。「この命令はヤバいので乗せない」なんてことはそうそう出来ません(移植性が損なわれる)。それが、こういうセキュリティ問題をさらに根深いものにしてるとも言えるのかな。だから、未だにstrcpyはC/C++にそのまま存在します。

 で、今VisualC++でプログラムをしてるけど、最近のバージョンではこんな警告が出るようになりました。

warning C4996: 'XXXXX': This function or variable may be unsafe. Consider using XXXXX_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

訳)警告 C4996: 'XXXXX': この機能か変数が危険であるかもしれません。代わりにXXXXX_sを使用すると考えてください。 無効にするには、_CRT_SECURE_NO_WARNINGSを使用してください。


 strcpyを使うと警告(エラーじゃないので、無視すればそのまま使える)がでて、strcpy_sなんてものを使うことを薦められます。ちなみに、strcpy_sはstrcpyとほとんど同じだけど、「文字数」を指定してそれを超えるとエラーになります。プログラマーが文字数を間違えたら話にならないですが、まぁそんな感じであまり意識しなくても安全なプログラムを書けるようになっています。

 こういった関数を多く使うと「標準化」されたプログラムでは無くなってきます。つまり、プログラムの「移植性」が損なわれてきます。しかし、JAVAのような違うベクトルから「移植性」を重視した言語が現れてきた今日では、そもそもそういう「標準化」の意味も薄れてきているのかなぁ…と、何となく思いました。

※っていうか、過去のプログラムを使ったら警告だらけになって一つ一つ修正しています(T_T

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-22

ネタ

 ビリーズブートキャンプのCMで出てるビリーが来日してるらしいですね。
CMを見たこと無い方はこちら→http://www.youtube.com/watch?v=M9PN_f4goao

 効果がすごいのか、ビリーのキャラクターがネタとしてうけているのかが微妙だけど、最近話題でニュースとかにも出てます。
 まぁ、買った人の話を聞いてみると、エアロビクスの変形版のような感じなので効果はあるみたいだけど、結構ハードみたいです。Wikipediaとかにも載ってるけど、1週間で集中的にやるのは注意が必要っぽい。

Wikipedia(ビリーズブートキャンプ)
http://www22.atwiki.jp/onemoretime/

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-23

[マンガ]鉄子の旅


 最近旅行によく行くけど、このマンガの影響がかなりあります。で、このマンガが明日(6/24(日))よりアニメでやるそうです。
 よくありがちな旅行マンガとは一線を画す内容で、すごくコミカルなんですがちゃんと取材に行ってそれをマンガ化しています。

コミックはこんな感じ

 ちなみに、単行本ではゲストでいろいろな人が出ていますが、アニメではそのゲストの人が声を当ててたりとか、そういう意味でも面白い。

鉄子の旅(アニメ公式サイト)
Wikipedia(鉄子の旅)

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-24

[DirectX]通信制御

 今回は一連のDirectXがプログラミングの続きですが、DirectXとはあまり関係ないプログラムのネタです。通信対戦ゲームやMMORPGのようなゲームには、ネットワーク経由での通信制御が必要です。では、通信をどうやって実現しようか…?
 今回考えた候補は以下の通り。
  • DirectPlay(DirectXのモジュールの一つで、ネットワーク通信専用モジュール。
  • フリーのソレっぽいモジュール(今回はHawkNLを使ってみた)
  • 気合いで一から書く。

 まぁ、最近blogでこのネタを扱わなかったのは、この辺でモンモンとしていたからです。

 まず、DirectPlay。これは評判が悪いですね。何でかよく知らないけど。
 まぁ、でも評判云々の前に、まるで通信対戦の概念を知らない私が選り好みをしてる方がアフォっぽいので、コーディングしてみた。
 結果は、まず参考となるサイトが少ないですね。DirectX SDKのサンプルとかチュートリアルも、今使っている2007/Febには付いて無くて、2003/Summerまで遡ってGETしましたが、参考になるのがソレとHELPくらいしか無いので、非常に辛いです。サーバ/クライアントで繋がるくらいまで組んだけど、よく分からない分制御がしづらいのでDirectPlayはやめにしました。

 次は、HawkNL。英語サイトしか無いのでわからん(笑。
まぁ、コードは組んだけど、せっかくこういうモジュールを使うなら、完全なブラックボックスで、あまり中身を意識しなくてもいいような使い方をしたい。SocketとかMulti Threadとかの機能があるけど、結局通常のAPIの焼き直しっぽくて、、、まぁ、不採用。


 で、結局Socket(winsock)を使って自前で組みました。winsockのプログラミングって過去にやった記憶があったので本棚を漁ったら→こんな本を発見(リンク先は最近の本だけど、うちにあったのは同じやつの1998年度版)。既に10年近くの本だけど、winsock自体の仕様がほとんど変わってないってのは嬉しいね。

 とりあえず、思いだし程度に1、2時間程度でサラっと読み返して、後はインターネットでサンプルコードを探してコーディング。いきなり現状のクライアントに組み込むのもアレなので、テストクライアントも作成って感じです。

現状はここまで。

 簡単な通信は実現できたから、あとはマルチタスク化して多量の通信でも難なくこなせるような仕組みにしたいな。まだもうちょっといろいろと時間がかかりそうです。

 以下、買ってないけど参考になりそうな本。これからこういうプログラミングをする人は参考にしてみて下さい。




コメント

プラグインが未定義です:comment_d

ブログ/2007-06-26

[ネットワーク]ブログパーツ



 ブログパーツって面白いね。
このサイトもトップページの右側に貼ってるけど、ちょっとしたアクセサリー以外にも、占いとかゲームとかそれなりに遊べるものもある。
※ゲームは目が痛くなりそうなので、貼ってないけど。

 まぁ広告くらい入るのはあるけど、選ぶだけでも楽しいね。

 物によってはエラーになったり、ページが重くなるのもあるから、あまりペタペタ貼りすぎるのはキケンっぽい。

とりあえず今日見つけたブログパーツ集のサイト
http://satokoto.blog10.fc2.com/

コメント

プラグインが未定義です:comment_d

ブログ/2007-06-30

検索ワードに答えてみる

 Webサイトを作った人は知ってると思いますが、いろいろとアクセス解析が出来ます。その中に、たとえばgoogleとかでどういう検索ワードで来たのかとかもわかりますが、検索してこのサイトに来た人が、内容を見てガックリってのも多いと思うので、最近の検索ワードに答えてみようと思います。

tcp113 Redhat

 identまたはauthってやつですね。
メールの送受信の時にこの通信が発生することがありますが、ほとんど使われてないので、意図していなければ止めましょう(メールは送信は25番、受信は110番なので、113番は使用しなくても普通は問題無いはず)。
 たとえば、qmailはタイムアウトまで30数秒待たされるので、ドロップフィルタされてるとそのくらい待たされます。

qmail 起動スクリプト

 qmailの起動スクリプトは結構たいへんですね。このサイトでもqmailでメールサーバ?でいくつか紹介しています。
 qmailなどのデーモンは、通常スーパサーバと呼ばれるラッパーから呼ばれます。有名所では、inetd、xinetdですね。これらはTCPラッパーを備えているのでアクセス制限しやすい上に、qmailと外界のインターネットとの境界にさらに壁を作るようなイメージなので、セキュリティ的にも良いです。また、qmailは同じ作者が作ったucspi-tcpとの相性がいいですね。ただ、クセがあるので、個人的にはちょっと設定が大変ですがxinetdなどにした方がいいんじゃないかなぁと思います。

Apache2.2 httpd.conf バーチャルホスト IPベース

 この検索ワードは目的がちょっとわかんないけど、こんな感じかな。

プラグインが未定義です:layout


postfix 仮想メールユーザ 設定

 pop3サーバメモ?にかなりいい加減に書いていますが、うちは確かteapopとdracを使ってます。でも確か結構設定が面倒だった気がする。
 Postfixはまじめに勉強してないからなぁ…。

qmail メールを読む コマンド

 コマンドベースで、qmailが受信したメールを読みたいってことかな?
qmailはMTA(Mail Transfer Agent)、メールを読むツールはMUA(Mail User Agent)とそもそものレイヤーが違いますね。なので、コマンドラインのメールクライアントを捜せばOK...っていうか、Linuxならmailコマンドでいいと思う。

ネットワークゲーム プログラミング

 おー。がんばるさーw
本の紹介とかネットゲー系も含めてプログラミング本?で紹介してます。

…と、まだありますが、今回はこのくらいで。
 ちなみに、メールサーバ系の検索ワードがおおいね。確かにこのサイトの情報も比較的濃い目に紹介してるけど。
 ちなみに自宅サーバでメールを使いたいならそれなりの覚悟が必要なので注意ですね。そうそう止められないし、10年くらい先を見越して考えるべきです。
 また、やっぱりsendmail以外のツールがいいなぁという傾向がありますが、その場合まだまだqmailが選択されることが多いようです。個人的にはqmailは選択すべきではないと思ってます。
 Postfixもちょっと複雑だけど、今選ぶならこっちかな。

コメント

プラグインが未定義です:comment_d
最終更新時間:2009/12/10(Sun) 23:27:56