ゲームプログラマ志望が福岡で叫ぶ 『絶望』 -11ページ目

ゲームプログラマ志望が福岡で叫ぶ 『絶望』

プログラマーになりたい!!!!! あ、風のうわさで聞いた最近若者で流行っているトゥイッターなるものを始めてみました (・ト・) @toshi_desu_yo

三連休、熊本にいる友だちのところに遊びに行ってました。



残金 4 0 0 0円で( ゚д゚ )

今月は色々とゴタゴタして出費がんごんごしてはぁはぁ物だったので出費がかさみ
旅行で使えるお金は交通費を抜いて4000円という素晴らしいものになりました。


「かねないのなら行くなや」
ごもっともです。 しかし時にはお金がなくとも

 三連休暇だった。
まぁ、これですわ。

家で一人で悲しくムーミンを見るよりかは少ないお金でもいいから熊本に行って熊本美人を見るほうが全然有意義だと思ったんですね。


そしてやっぱり友だちと過ごすのは楽しいです。

いい休暇になりました!


僕達の旅行のとくちょうとして

・無計画 

があげられます。


旅行に計画? そんな甘ったれたものはいらねぇ《゚Д゚》
漢は思い立った時に思ったところに出掛け、そこを堪能するものです。

小賢しい旅行計画を組むのは脆弱。 漢の風上にも置けないですわ!!!


っと、毎回適当に適当な場所に行くんですが、やっぱり思いますね。


「計画必要だわ-・・・」 と

ただ歩いてそこにあったものを写真とるだけの作業。

振り返ってみると無駄に歩き、疲れただけで観光地という観光地は余り回ってないことに気づくw



今回行ったところは、、、

「熊本城」



圧巻ですわ・・・(´∀`*)   すっごい大きかったですね!!
城でまさかここまで俺を追い詰めるとは。。


流石といえよう清正公さん・・・




昔の方が食べていた食事を再現したらしい ↓



今の俺より豪華!!Σ(゚д゚lll)




奥に行くほうがくらいが高い人が座るので豪華になって行ってる。


畳の大きさは一つ一つ特注らしい。
金かかってんなー・・・ (´・∀・`)


清正公が居る部屋。

ここはフラッシュ禁止とお姉さんが警告している所。

金箔とかがフラッシュに弱いのだとか。。。




しかし友達はココでまさかの

デジカメでフラッシュをたいてしまい、

「すみませんが、フラッシュは禁止となっております。」 と注意勧告を受ける友達。



「すいません」と誤り、「恥ずかしいからやめてくれよ-」と茶化す僕。



次に友達はスマートフォンを取り出しパシャリ。



フ ラ ッ シ ュ!!( ゚д゚ )



「すみませんが、フラッシュは禁止となっております!!!(激怒)」

猛るお姉さん。 謝る友達。 笑う僕。


皆さん、写真をとるときはフラッシュの設定を確認しましょう!!

なんか居づらい空気に苛まれます



熊本城のてっぺんに無料で行けました。




きれええええええええ!!!
こんな景色を独り占めできる清正公はずるいですな!!!



っと、記事を幾つかに分けていこうと思います!

以上!!



あとで文字に色付ける


はい。

第二部のスタートです。



今回は
【ファイルの再生法】というところを読んでいくので

コンソールで簡単なビデオ再生までをやっていこうと思います。


ここ にかいてあるのは
 くっっっっっそ簡略化してるので、今の環境では実行までいけない。


色々保管しながらやっていこうと思います(`・ω・´)





*********************************
*********************************



まずは DirectShowDirectXから消えさってしまったので
別のライブラリを新たに入れなければなりません。

Vista 以前は Platform SDK に入っていましたが、
以降は .NET Framework SDK と統合し、 WIndows SDK という名前で爆誕しやがりました。



で、そのWindowsSDKをインストールし、
DirectXと同じように Include と Lib を参照してやれば問題なく実行できます。


ここから どうぞ ↓

【 ( URL ) Windows SDK 6.1



なんで 6.1 ?(´・ω・`)


最初 windows 8 SDK を入れてやってたのですが、8 では


graphedt .exe というDirectShow の フィルタをGUI的に繋げてその結果を
視覚的に確認できるツールが入ってなかったので 6.1 を入れてみました。




↓ こんなやつ




取り敢えず、コンソールで再生してみます。



VisualStdioのコンソールでプロジェクトを作成。

DirectX など基本的なライブラリはリンカ設定、インクルードして、


新しく Strmiids.lib をリンカに追加。
そして以下のインクルードも追加。

・objbase, show, Vmr9




適当にこんなかんじに。



#pragma comment( lib, "winmm.lib" ) 
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
#pragma comment( lib, "Strmiids.lib" )


#include <tchar.h>
#include <stdio.h>
#include <d3d9.h>
#include <d3dx9.h>

#include <objbase.h>
#include <dshow.h>
#include <Vmr9.h>


int main( void )
{
    return 0;
}



まずは
DIrectShowはDirectXと違い、

 COM を使うために初期化をしなければいけないらしい。
それを行うのが


『 CoInitialize 関数 』 こいつを呼び出すだけでおk。
 
HRESULT hr; 

//** COMを使うときのお約束!

hr = CoInitialize( NULL );
if ( FAILED( hr ) )
{
// エラー・・・ 本当は処理コード入れてね
}




これでCOMを使う準備が完了しました。


次に、
フィルタグラフマネージャーを作成。

フィルタグラフマネージャーが持つ関数でフィルタ同士の接続や作成を行えます。



作成するためには、
『CoCreateInstance』 メソッドに引数で

「フィルタグラフマネージャー を作成してくれ」とします。




CoCreateInstance(
    REFCLSID rclsid, /** オブジェクト識別ID **/
    LPUNKNOWN pUnkOuter, /** 既存のCOMを利用する? **/
DWORD dwClsContext, /** オブジェクトがローカルか別の実行空間にあるのか **/
REFIID riid, /** インターフェイスの識別ID **/
LPVOID* ppv ); /** インターフェイスのポインタ **/



重要となるのは 作成するオブジェクトを指定するIDインターフェイスを識別するID です

インターフェイスIDを見て IGraphBuilder を見つけ、
オブジェクトID を見て フィルターグラフマネージャーのポインタを IGraphBuilder に入れます。




これで IGraphBuilder インターフェイス型にフィルタグラフマネージャーが入ってきます。




//** フィルタグラフマネージャーを作成する 
IGraphBuilder* pGraph;

hr = CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, ( void** )&pGraph );
if ( FAILED( hr ) )
{
// エラー
}



フィルタグラフマネージャーはフィルタの接続を内部でしてくれる関数を
実装しているので

開発側は関数を呼び出すだけでフィルタ同士の接続を行なってくれる。



フィルタグラフを作成するクラスの生成は完了。

しかし、この他にも2つのオブジェクトが必要。



========================
・IMediaControl 
・IMediaEvent

========================


IMediaControl はその名の通りメディアの様々なコントロールをしてくれるもので、
完成したフィルタグラフの再生、停止、一時停止を行なってくれる。

IMediaEvent は「~が再生されました」や「停止しました」などの
フィルタグラフ内で発生するイベントを取得することが出来る。



今回はIMediaEventを使って再生が終わるまで待機します。

これらはフィルタグラフマネージャーの QueryInterface によって作成できます。
これも識別子を第一引数にいれて作成します。




//** IMediaControlとIMediaEventを作成する 
IMediaControl* pControl;
IMediaEvent* pEvent;

hr = pGraph->QueryInterface( IID_IMediaControl, ( void** )&pControl );
if ( FAILED( hr ) )
{
// エラー
}

hr = pGraph->QueryInterface( IID_IMediaEvent, ( void** )&pEvent );
if ( FAILED( hr ) )
{
// エラー
}



この2つの生成終わったらフィルタグラフの作成が可能になります。



今回は再生するだけです。


RenderFile関数

指定されたファイルを読み込み、再生をするフィルタグラフを作成します。

あらかじめ再生するファイルはプロジェクトの直下に置いておきましょ!



//** ファイルの読み出しと再生準備完了 
hr = pGraph->RenderFile( L"test.avi", NULL );
if ( FAILED( hr ) )
{

    // エラー
}



これで完了です。
後は IMediaControl Run関数を呼び出すだけで再生されます。


しかし、
Run しても再生は別のスレッドで行われるので
 プログラムは一瞬で終了します。





なので IMediaEvent
  WaitForCompletion 関数再生が終わるまで待機させます。



第一引数で待機時間を指定します。

ここで実際の再生時間よりも多く指定しても
ファイルの再生が終わると同時に待機が終了する便利なものになっています。


しかし、待機するので他の処理ができなくなります。
こんな時は IMediaEvent の GetState 関数を使います。 これはまた今度。。




//** 再生
hr = pControl->Run();

if ( SUCCEEDED( hr ) )
{
//** このまま再生したら一瞬で終わるので、待機状態にする
//** 今回は無限待機( 実際は INIFINITEを使わないこと。待機が無期限する恐れがある )
long evCode;
pEvent->WaitForCompletion( INFINITE, &evCode );
}




で、最後はいらないものを開放してCOMを閉じたら終了。


//** 解放 
pControl->Release();
pEvent->Release();
pGraph->Release();

// COMの終了
CoUninitialize();




簡単ですな!! 

後はフルスクリーンに対応すればゲームに組み込めるようになるのではないでしょうか?


しかし、DirectShowの利点のイベント取得やテクスチャに動画を貼り付けて再生する
という高度な技が出来ていないので

ココらへんが出来るように読み進めていこうと思います!(`・ω・´)




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

今回のプロジェクト  ( VisualStdio C++ 2012 ) とテキスト

【 ( URL)
DirectShow_コンソール

【 ( URL) ソースコード



いきなりですが


お仕事で
 「Windowsで動画再生を行なってください☆」

という依頼が来て、




僕は ((((;゚Д゚)))) こんな状態になった。


それだけならばいいのだけれど、
それを 移動、回転や細かい操作もしたいとのこと。。。


なので、
「テクスチャに動画を貼ればいけるかなぁ・・・
 そういえばDirectShowにそんなのあったような・・・」 


と、ふとおもった。


なので最終目標
DIrectXとの併用、テクスチャに動画を貼っつけて描画する。


というところだが・・・




正直やりかたを知らん( ゚д゚ )



学生時代の頃DirectShowを使って動画再生はしていたのだけど
これもびみょうーな理解で終わった・・・




今現在、 DirectShowでウィンドウに再生することは完了。

後はテクスチャにどうにかして貼り付けるだけ・・・



というところだが




 知らん( ゚д゚ )( ゚д゚ )


サンプルとリファレンスはゲット済みなので読み解いていけば可能なんだと思うけど
如何せんにわかの僕がいきなりそこまでやるのは難しい・・・


【 (URL) DirectShowリファレンス



なので
もっかい最初から DirectShow を読みといていこうと思う!(`・ω・´)





あ、
これはただのメモ帳です・・

なっがたらいリファレンスをノートに書き写す時間もなく、
読むだけでは忘れそうなのでブログに書くという最強戦法を使います。


しかも、この記事、 未 完 です。 



書き足すたびに更新をするという・・・ 

これぞまさしく 
タダの  メ  モ  帳


一応友達とかに分かりやすく教えれるよう
噛み砕いて書いていければいいなと。




そして
 「XNA, C# を使えばいいじゃない・・・」と思った人達。。。 





正解ですm9( ゚д゚)


ちょっと調べた所、


============================
 XNAでは
       動画再生 = フレームごとに動画が貼っつけられたテクスチャが帰ってくる

============================

というまさしく神がかりな物があるらしい( ;∀;)
まさしくこれをしたい・・・




---- それをしない理由 それが出来ない理由 ----

① XNA, C#をほぼ知らない   →  はいはい、終わり終わり。 というかこれしかない。

一度は触ってみたいと思いつつ、
いろいろ手を出しすぎるのも混乱するかと思って触ってなかった。


② なぜか DirectX推しがハンパない。
  → なぜだ・・・



新しく XNAをやってもいいんですけど、


DirectShowもすごい気になるので
折角のいい機会なのでこっちでやってみようと思います。



でも一応XNAで同じ事をやってみる予定ですw
これでどれだけの差が出るか楽しみでもありますし、単純に C#覚えたい ( ‘д‘⊂彡☆))Д´) パーン





---- DirectShow ----

【DirectShowの概要】

DirectShowは殆どの動画、音の形式に対応しており、
それらのキャプチャ、フォーマットの変換、再生を行う機能を提供してくれる。

同時に開発者が独自に機能を追加できるよう、基盤となる環境へのアクセスも可能!
なので新しいフォーマットや独自のエフェクトを入れた動画の再生も出来る。

DirectShowを使って作成できるアプリケーションの種類として
・DVDプレーヤー
・ビデオ編集アプリケーション
・ファイルコンバーター
・MP3プレーヤー
・デジタルビデオキャプチャ

等がある。


DirectShowはCOMに基づき作成されている。


【DirectShowでサポートされているフォーマット】

ファイル タイプ

  • Windows Media™ Audio (WMA)*
  • Windows Media™ Video (WMV)*
  • ASF (Advanced Systems Format)*
  • Motion Picture Experts Group (MPEG)
  • Audio-Video Interleaved (AVI)
  • QuickTime (version 2 以前)
  • WAV
  • AIFF
  • AU
  • SND
  • MIDI

圧縮フォーマット

  • Windows Media Video*
  • ISO MPEG-4 video version 1.0*
  • Microsoft MPEG-4 version 3*
  • Sipro Labs ACELP*
  • Windows Media Audio*
  • MPEG Audio Layer-3 (MP3) (圧縮解除のみ)
  • デジタル ビデオ (DV)
  • MPEG-1
  • MJPEG
  • Cinepak



【DirectShowアプリケーションプログラミングの概要】

DirectShowで柔軟な対応をするために "フィルタ" という概念を導入している。

フィルタは様々な種類があり、それぞれ独自の機能を持っている。
・ファイルの読み込み
・ビデオの取得
・様々なフォーマットのデコード( 圧縮ファイルの解凍 )
・グラフィックカード、サウンドカードにデータを渡す( 動画の再生と音の再生になる )


フィルタは入力があり、出力がある。


例えば MPEG-1 ビデオをデコードする場合、


【 入力 】                 【 出力 】
MPEGファイル  →     "デコードフィルタ"    → 解答されたビデオデータ



という流れ。


DIrectShow は フィルタ同士を組み合わせて、

あるフィルタの出力を別のフィルタの入力にし、さらにその出力をまた別のフィルタに・・・ 


とすることで様々な機能を柔軟に提供する。


接続されたフィルタの集まりは「フィルタグラフ」と呼ばれる。

↓の画像は AVI ファイルを再生するためのフィルタグラフを表す。



ソースフィルタと呼ばれるフィルタが ハードディスクから AVIファイルを読み取り、
AVIスプリッタ( 解析機 )でファイルを解析し、圧縮ビデオデータとサウンドデータに分ける。
AVIでコンプレッサフィルタで圧縮ファイルを解凍し、 

ビデオレンダラフィルタで DirecrDraw or GDI を使ってディスプレイに描画!
デフォルトDirectSoundデバイスフィルタは DirectSoundを使ってオーディオストリームを再生する!




===================

なるほ・・・
すごい便利!

様々な機能を持ったフィルタをプログラム上で組み合わせてファイルを先頭にぶち込むだけで思ったとおりの結果が出てくるわけか・・・


そしてこれだけでもどういうふうにビデオが再生されていくのかが理解できた。
ありがたいリファレンスだ・・・(´;ω;`)


最高だなぁ!

===================


開発者がこれらを管理する必要はない!


フィルタグラフマネージャと呼ばれる部品が全てのフィルタを制御するので
開発者は再生を行う "Run" や 停止させる "Stop"  などのAPIを呼び出すだけで良い!

途中途中で細かく操作したい場合は COMインターフェイスを通して各フィルタに直接アクセスできる。



『フィルタグラフマネージャの機能』

・「ファイルを読み込んだよ!」「再生を開始したよ!」「停止したよ!」
 等のイベント通知をアプリケーションに渡してくれる。
・フィルタとフィルタグラフの作成と接続を簡単に行う関数やオブジェクトを提供している。


【DirectShowアプリケーションの作成】

DirectShowを使ったアプリケーションを作成する時にあたり、
しなければいけないことが3つある。


1.フィルタグラフマネージャを作成する。
2.フィルタグラフマネージャを使って、必要な機能を持ったフィルタ同士を繋げてフィ  ルタグラフを作成する。
3.フィルタグラフマネージャを使って、フィルタグラフ、およびフィルタを通過する






ここまで!
  どんどん追加していく!!


・・・ と思ったけど、なんか長くなりそうだから複数回に分けていく


---- 【参考サイト様】----

本当に有難うございます(´;ω;`) ↓


【(URL) げーむつくろー様 】







後、
今回行なっているDirectShowのプロジェクト最近やったDirectX関連のプロジェクトを↓に置いております。

最終的にテクスチャに動画を貼ったDirectShowプロジェクトを乗せることができることを夢見て・・・


【 (URL) DIrectX_GoogleDrive



※ なんとかテクスチャに貼ることに成功しました!
【 (URL) ブログ記事




*******
*****************************************************************************

それと、どうでもいいことですけど

だいれくとしょう って打ったらたまに ↓



  『 DIrectSHow 』


I と H が大文字。になる。 特に I は頻繁・・・(´;ω;`)


はずかしいわー・・・

1月・・・

 それはお餅が美味しい月・・・・



まさしくデブになるための修行をするために用意された月ですな!


はい。
案の定飲み会ばかりでしたよ。。。。( ´)Д(`)


まさかこの俺様の腹が一週間でものの見事にカビゴンさんみたく立派になるとは・・・



↓書いたった。

 






仕事始めてからひとり暮らしなうなので久々実家に帰りました。

で、家族旅行をしました。


いっつもいるとうっとおしい家族ですが、
たまに会うとやはり懐かしさがこみ上げてきてテンション上がりますね。

社会人になると家族に対して幾分と優しくなった( ^ω^)・・・


というか愛想が良くなった気がしますよ!





昔から家族旅行があるたびに行きたくない僕は暴動を起こしては困らせていましたが、
たまにはいいもんですな( ´∀`)


実家は長崎なのですが、
福岡に送っていく途中ということで佐賀の呼子に行って来ました(`・ω・´)




佐賀・・・!? 日本・・? どこ!?



と主に関西より右のほうの方は思われるかと存じますが、

福岡と長崎の中間に位置するれっきとした日本の県です。







SAGAをなめちゃあかんですよぉ・・・



サガはなんたってあの有名かつ、神々しい、
吉野ヶ里遺跡があるんですよぉおおおおおおおおおおおおおおおお!!

後、川と滝が豊富にあるんですよォォおおおおお!!!!




はい。




ちなみに僕、滝ふぇちです。(∀`*ゞ)


滝いいよね・・・・たき・・・(*´Д`)ハァハァ
マイナスイオンたん・・・






で、呼子という所は屈指のイカ くコ:彡 で有名な場所なのです!!

と 

いうことで、、、、


食って来ました。 イカを・・・ 






UMEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!!!!!


ウマすぎ・・・わろ・・・・わろ・・・・・(´∀`*)



イカヤバイですね。イカ( ゚д゚ )

しかもこれ、まだ生きてるんですよ。 新鮮って素敵///


そして見を食い終わったら皮とゲソを唐揚げにしてもらった(´∀`*)




これがまた・・・



UMEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!


そして多いぃぃぃいいいいいいいぃいいいいいいいいい!!!!!!!


う・・・うますぎr・・・・・・  うっ・・・! ふぅ・・・



上品な油なのかまったく気持ち悪くならないんですよね。本当に不思議だ。




↓ お酒もススムススム。






しかしここで想定外の事態が...!!!


この日、昼に
 家族で「焼肉屋さんのハンバーガー(絶対うまい奴)食いに行こうぜ! 」

ということになり、
焼肉屋さんとハンバーガー屋さんが一緒になっているお店に行ったんですよ。


で、





昼に・・・
 焼肉・・・食ってしまった・・・・(´;ω;`)ブワッ


ハンバーガーとはなんだったのか・・・。



おかしい。




--- Tさん ( 22 )  ---
      信じられませんでした。
  軽めのハンバーガーを食べて夜に備える予定が、
  まさか焼肉を食うという愚行を起こすなどと、夢にも思ってませんでした。



案の定みんな夜ご飯残しちゃった///
旅館の方ごめんなさい・・・


ちゃんと たっぱー にいれて持って帰りましたよ! たっぱーにぃ!



覚えてる限りで
いかしゅーまい、いかめし、いかのさしみ、あんこうのてんぷら、いかのてんぷら、にもの、そのたもろもろ(覚えていない)


おおかった・・・・( ´)Д(`)



そして、
泊まった宿のお外が綺麗で綺麗で・・・・







波戸岬という所の宿に泊まりまして、
景色は綺麗、空気は美味い、人はほぼいないので散歩は貸切状態。


 最 っ 高



調子に乗って更に載せたるわ!!



見ているものに絶望を与える( ゚д゚ )
自然がないコンクリートジャングルに住む都会の者たちよ。



 絶 望 し ろ ( ゚д゚ )

まぁ、僕も普段はコンクリートに侵略されてますけどね。














ここの岬にハート型の石がありました。





M字開脚で犯していくぅうううううううう!!!!!




汚してやった。。。
これでもうこいつは中古や。




恋人の聖地と言うらしい。



物は言いようですな。

タダのオブジェを置いただけで聖なる地となろうとは・・・


こんなところが聖地ならここでカップルどもはここでパンパンしたらどうなんですかあああ!!?


しかもこのオブジェ明らかな人工物なのでご利益もクソも無い気がしますわ(´・ω・`)



でも、楽しかったことには変わりなく、行ってよかったです(´∀`*)




先っぽの方には何やら仰々しいものがあって震えました((((;゚Д゚))))ガクガクブルブル






食われかけたぜ・・・ くそっったれっ!!





最後にBOSS貼って去る!




長い連休も終わって辛い日々が戻って来ましたが社会の荒波に負けず社畜らしく
会社の犬となり従順に平穏にめげずに頑張りたいと思います! ( ´∀`)









最近仕事で居眠りが激しい・・・・ ( ゚Д゚)ネムヒー


超短編記事を一日に複数あげることにより・・・


記事数を大幅に増やし、
観覧者をイワシ漁業のように大量に手に入れる・・・


そして一躍有名となり時の人となる。



芸能界デビュー


CD発売



ハリウッドからのオファー



シエンナ・ギロリーとの共演



世界の覇道を歩く俺




これぞまさしく



 人間の ゴ ミ ク ズ 作 戦 




ま、趣味程度にブログをやって地道に稼ぐかぁ・・・(´・ω・`)