<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/t-na/">
    <title>イルリッヒたん@Wiki</title>
    <link>http://w.atwiki.jp/t-na/</link>
    <atom:link href="https://w.atwiki.jp/t-na/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>イルリッヒたん@Wiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2005-09-23T22:28:59+09:00</dc:date>
    <utime>1127482139</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/7.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/5.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/8.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/6.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/12.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/t-na/pages/10.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/13.html">
    <title>GUI関連2</title>
    <link>https://w.atwiki.jp/t-na/pages/13.html</link>
    <description>
      *ウィンドウに最小化ボタンとかを付ける
&lt;Version 0.12.0&gt;

&amp;ref(sample001m.jpg,,http://www6.atwiki.jp/t-na/?plugin=ref&amp;page=GUI%E9%96%A2%E9%80%A32&amp;file=sample001.jpg)
&#039;&#039;addWindow()&#039;&#039; で作成したウィンドウには閉じるボタンしか付いてない。
ように見えるが、実は最小化と最大化のボタンも付いている。これは、デフォで見えないようになっているだけ。
なので、 &#039;&#039;getMinimizeButton&#039;&#039; や &#039;&#039;getMaximizeButton()&#039;&#039; でポインタを取得し、 &#039;&#039;setVisible()&#039;&#039; で可視状態にすればいい。

ただし、ボタンを押した時の処理は設定されていないので、イベントレシーバで拾って自前で行わなければならない。
しかし、デフォだとこれらのボタンにはIDが振られていない。そのままだと処理し辛いため &#039;&#039;setID()&#039;&#039; でIDを付けてやると良いかもしれない。

例:
IGUIWindow *HogeWin = Env-&gt;addWindow( rect&lt;s32&gt;( 280, 0, 560, 120 ), false, L&quot;Hoge Window&quot;, 0, 110 );
IGUIButton *MaxBtn = HogeWin-&gt;getMaximizeButton();
MaxBtn-&gt;setVisible( true );
MaxBtn-&gt;setID( 20000 );

上の例ではHoge Windowという名のウィンドウを作成し、そのウィンドウの最大化ボタンのポインタを取得し、そのポインタを元に、可視状態の設定とIDの設定を行っている。

:IGUIButton* getCloseButton()|閉じるボタンのポインタを取得。
:IGUIButton* getMaximizeButton()|最大化ボタンのポインタを取得。
:IGUIButton* getMiniimizeButton()|最小化ボタンのポインタを取得。
:setVisible( visible )|GUI部品の可視状態を設定する。
|bool visible|true=可視 / false=不可視|
:setID( id )|GUI部品のIDを設定する。
|s32 id|設定するID|
:IGUIWindow addWindow( &amp;rectangle, modal, *text, parent,  id )|ウィンドウの作成。
|rect&lt;s32&gt; &amp;rectangle|作成する座標(x1, y1, x2, y2)&amp;br()x2,y2は &#039;&#039;幅と高さではない&#039;&#039; 。|
|bool modal|trueならモーダルウィンドウになる。|
|wchar_t *text|ウィンドウタイトルに表示する文字。|
|IGUIElement parent|親のポインタ。0なら親なし。|
|s32 id|このウィンドウに設定するID|

----
#comment    </description>
    <dc:date>2005-09-23T22:28:59+09:00</dc:date>
    <utime>1127482139</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/2.html">
    <title>メニュー</title>
    <link>https://w.atwiki.jp/t-na/pages/2.html</link>
    <description>
      [[ホーム]]
#treemenu(title=メモ,
block,
treeline=1,
[[一覧&gt;メモ]],
[[マウスからの入力を受け取る&gt;イベント関連1]],
[[ログイベントについて&gt;イベント関連2]],
[[キーイベントについて&gt;イベント関連3]],
[[GUIのスキンに画像を貼る&gt;GUI関連1]],
[[ウィンドウに最大化ボタンとかを付ける&gt;GUI関連2]],
[[ウィンドウのスキンに画像を貼る&gt;GUI関連3]],
[[ビューポートを使う&gt;表示関連1]]
)

#treemenu(title=リファレンス?,
block,
treeline=1,
[[一覧&gt;リファレンス?]],
[[カーソル&gt;リファレンス?-カーソル]]
)

*リンク
-[[本家&gt;http://irrlicht.sourceforge.net/]]
-[[チュートリアルをみんなでもりもり翻訳するHP&gt;http://www.realintegrity.net/~irr/index.php?FrontPage]]
-[[Irrlicht A GoGo&gt;http://www.zgock-lab.net/irrlicht/]]

*更新履歴
#recent(10)    </description>
    <dc:date>2005-09-23T22:27:43+09:00</dc:date>
    <utime>1127482063</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/7.html">
    <title>メモ</title>
    <link>https://w.atwiki.jp/t-na/pages/7.html</link>
    <description>
      -知らべたこととかを忘れないようにメモっておく。
-Version 0.12.0が対象。

イベント関連
-[[マウスからの入力を受け取る&gt;イベント関連1]]
-[[ログイベントについて&gt;イベント関連2]]
-[[キーイベントについて&gt;イベント関連3]]

GUI関連
-[[GUIのスキンに画像を貼る&gt;GUI関連1]]
-[[ウィンドウに最大化ボタンとかを付ける&gt;GUI関連2]]
-[[ウィンドウのスキンに画像を貼る&gt;GUI関連3]]

表示関連
-[[ビューポートを使う&gt;表示関連1]]

----
#comment    </description>
    <dc:date>2005-09-23T22:26:26+09:00</dc:date>
    <utime>1127481986</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/15.html">
    <title>表示関連1</title>
    <link>https://w.atwiki.jp/t-na/pages/15.html</link>
    <description>
      *ビューポートを使う
&lt;Version 0.12.0&gt;

&amp;ref(sample003m.jpg,,http://www6.atwiki.jp/t-na/?cmd=upload&amp;act=open&amp;pageid=15&amp;file=sample003.jpg)
ビューポートっつうのは上の画面みたいになの。
アクション系のRPGやSIMでこの機能があると結構便利。
ステータスなどを表示させておきたいが、そうすると画面にかぶって邪魔になる、でも閉じると不便なんて時に、ビューポートで余白を作り、そこにステータスなどを置くなんてことができる。

で、その方法だが、とても簡単。
+&#039;&#039;setViewPort()&#039;&#039; でビューポートを設定。
+ビューポート内だけに表示したいものを描く。
+&#039;&#039;setViewPort()&#039;&#039; でピューポートをスクリーン全体に戻す。
+ピューポート外にも表示するものを描く。
+以上。

3のスクリーン全体に戻すってトコ重要。
忘れるとそれ以後、全てのものがビューポート内への描画対象になってしまう。
&#039;&#039;beginScene()&#039;&#039; もビューポート内のみ、GUIなどもビューポート内のみへの描画になってしまう。
特にGUIはビューポート内に描いてしまうと、表示と実際の位置関係がおかしくなってしまうので注意。

例:
Driver-&gt;beginScene( true, true, SColor( 0, 100, 100, 160 ) );
Driver-&gt;setViewPort( rect&lt;s32&gt;( 0, 0, 512, 384 ) );
Scene-&gt;drawAll();
Driver-&gt;setViewPort( rect&lt;s32&gt;( 0, 0, 640, 480 ) );
Env-&gt;drawAll();
Driver-&gt;endScene();

上の例ではビューポートを(0, 0, 512, 384)に設定してSceneのオブジェクト(メッシュ類)を描き、ビューポートをスクリーン全体に戻してEnvのオブジェクト(GUI)を描いている。

:bool setViewPort( &amp;area )|ビューポートを設定する。
|rect&lt;s32&gt; &amp;area|ビューポートに設定する範囲。(x1, y1, x2, y2)|

----
#comment    </description>
    <dc:date>2005-09-23T22:24:29+09:00</dc:date>
    <utime>1127481869</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/14.html">
    <title>GUI関連3</title>
    <link>https://w.atwiki.jp/t-na/pages/14.html</link>
    <description>
      *ウィンドウのスキンに画像を貼る
&lt;Version 0.12.0&gt;

&amp;ref(sample002m.jpg,,http://www6.atwiki.jp/t-na/?cmd=upload&amp;act=open&amp;pageid=14&amp;file=sample002.jpg)
ウィンドウもボタンなどと同じGUI部品なので[[GUIのスキンに画像を貼る&gt;GUI関連1]]の方法でいけるのだが、ただ貼るだけじゃダメ。
何がダメかって言うと、画像を張るとボタンが隠れてしまうし、カラーキーを設定しているとその部分が真っ黒になる。
&amp;ref(sample002a.jpg)
カラーキーの部分に関しては &#039;&#039;addImage()&#039;&#039; の &#039;&#039;useAlphaChannel&#039;&#039; を &#039;&#039;true&#039;&#039; にすればいい。
&amp;ref(sample002b.jpg)
ウィンドウの地のスキンが表示されるようになった。

次にボタンの方だが、これは優先順位を変更すればいい。
とても簡単。 
+&#039;&#039;getCloseButton()&#039;&#039; でポインタ取得。
+&#039;&#039;bringToFront()&#039;&#039; で優先順位を変える。
+以上。

例:
IGUIWindow *HogeWin = Env-&gt;addWindow( rect&lt;s32&gt;( 280, 0, 560, 120 ), false, L&quot;Hoge Window&quot;, 0, 110 );
Tex = Driver-&gt;getTexture( &quot;hoge.bmp&quot; );
Driver-&gt;makeColorKeyTexture( Tex, SColor( 0, 255, 0, 255 ) );
IGUIImage *Img1 = Env-&gt;addImage( Tex, position2d&lt;s32&gt;( 0, 0 ), &#039;&#039;true&#039;&#039; , HogeWin, 1000 );
IGUIButton *CloseBtn = HogeWin-&gt;getCloseButton();
&#039;&#039;HogeWin-&gt;bringToFront(CloseBtn)&#039;&#039;

上の例ではHoge Windowという名のウィンドウを作成し、そのウィンドウにhoge.bmpを貼り、&#039;&#039;bringToFront()&#039;&#039; で閉じるボタンの優先順位を上げている。
&amp;ref(sample002c.jpg)
ボタンが表示されるようになった（´▽｀*）

:bool bringToFront( *element )|GUI部品を表示優先順位を上げる。
成功すればtrue、失敗ならfalseを返す。
|IGUIElement *element|優先順位を上げる部品のポインタ。|

ついでなんで、地の色も透明にしてみる。
方法は &#039;&#039;getSkin()&#039;&#039; でポインタを取得し &#039;&#039;setColor&#039;&#039; で色やアルファを変える。
ただし、この方法だと他のGUI部品の色やアルファも影響を受ける。
特定のGUI部品だけ変える方法があるかどうかはわからないorz

例：
IGUISkin *Skin = Env-&gt;getSkin();
Skin-&gt;setColor( EGDC_3D_SHADOW, SColor( 0, 0, 0, 0) );
Skin-&gt;setColor( EGDC_3D_FACE, SColor( 0, 0, 0, 0) );

&amp;ref(sample002d.jpg)

上の例では、スキン表面の明るいところと暗いところのアルファを0にしている。
枠も消したければ、&#039;&#039;EGDC_3D_DARK_SHADOW&#039;&#039; や &#039;&#039;EGDC_3D_HIGH_LIGHT&#039;&#039; のアルファも0にすればいい。
ただし、透明になってもそこには &#039;&#039;見えないウィンドウ&#039;&#039; が存在している状態なのでマウスでクリックすることが出来る。
透明部分をドラッグしてウィンドウを移動させることができるし、重なったウィンドウの隙間越しに下にあるウィンドウをクリックするなどということは出来ないということ。

----
#comment    </description>
    <dc:date>2005-09-23T19:32:35+09:00</dc:date>
    <utime>1127471555</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/5.html">
    <title>ホーム</title>
    <link>https://w.atwiki.jp/t-na/pages/5.html</link>
    <description>
      ここはIrrlichtに関する事柄を忘れないようにメモっておくところ。
ちょっとプログラムが組める程度のヘたれなんで、間違ったことを書いてるかもしれません(´Д｀;)

*Irrlichtとは
-グラフィックアプリを作成する為のライブラリ。
-主な用途は3Dを使用したゲームだが、2Dにも使用できる。
-WindowsとLinuxに対応しており、DirectXやOpenGLが使用可能。
-一応ソフトウェアレンダリングも可能だが、その場合Irrlichtのすべての機能を使うことが出来ないと思われ。
-対応コンパイラはVC++(Toolkitも可)とgcc(MinGWも可)
-ただし、MinGWだとDirectXが使えないっぽい(うちの環境ではダメだった)
-BCCでサンプルのコンパイルに挑戦したが、俺のスキルでは無理でしたorz
-うちの環境はTeraPad、VC++Toolkit 2003、MinGWに付いてたmake。

----
#comment    </description>
    <dc:date>2005-09-23T19:28:16+09:00</dc:date>
    <utime>1127471296</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/8.html">
    <title>イベント関連2</title>
    <link>https://w.atwiki.jp/t-na/pages/8.html</link>
    <description>
      *ログイベントについて
&lt;Version 0.12.0&gt;

コンソールにログが表示されるときに発生するイベント。
このイベントを拾うと、 &#039;&#039;LogEvent.Text&#039;&#039; でテキストを取得できるので、使い方によってはデバッグで役立つかもしれない……


:LogEvent.Level|ログのレベルが入っている。
-ELL_INFORMATION
--特に問題ないログ。
-ELL_WARNING
--要注意?なログ(未確認)
-ELL_ERROR
--ヤバい?ログ(未確認)
-ELL_NONE
--不明。テキストが用意されてないとかそんな感じ？
:LogEvent.Text|ログのテキスト(もちろん英語)が入っている。

----
#comment    </description>
    <dc:date>2005-09-23T04:31:02+09:00</dc:date>
    <utime>1127417462</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/6.html">
    <title>イベント関連1</title>
    <link>https://w.atwiki.jp/t-na/pages/6.html</link>
    <description>
      *マウスからの入力を受け取る
&lt;Version 0.12.0&gt;

マウスからの入力方法もキー入力と同じくイベントレシーバ内でおこなう。

拾うイベントは &#039;&#039;EET_MOUSE_INPUT_EVENT&#039;&#039; 。
マウスの状態は &#039;&#039;MouseInput.Event&#039;&#039; に入っている。
:EMIE_LMOUSE_PRESSED_DOWN|左ボタンが押された状態。
:EMIE_LMOUSE_LEFT_UP|左ボタンが押されてから放された状態。
:EMIE_RMOUSE_PRESSED_DOWN|右ボタンが押された状態。
:EMIE_RMOUSE_LEFT_UP|ボタンが押されてから放された状態。
:EMIE_MMOUSE_PRESSED_DOWN|中ボタンが押された状態。
:EMIE_MMOUSE_LEFT_UP|中ボタンが押されてから放された状態。
:EMIE_MOUSE_MOVED|カーソルが動かされた状態。
カーソル自体の座標は &#039;&#039;MouseInput.X&#039;&#039; や &#039;&#039;MouseInput.Y&#039;&#039; で取得できる。
:EMIE_MOUSE_WHEEL|ホイールが回された状態。
回転量は &#039;&#039;MouseInput.Wheel&#039;&#039; で取得できる。
取得する値は &#039;&#039;Float型&#039;&#039; 。

----
#comment    </description>
    <dc:date>2005-09-23T04:26:45+09:00</dc:date>
    <utime>1127417205</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/12.html">
    <title>GUI関連1</title>
    <link>https://w.atwiki.jp/t-na/pages/12.html</link>
    <description>
      *GUIのスキンに画像を貼る
&lt;Version 0.12.0&gt;

Irrlichtに組み込まれているウィンドウやタブなどの部品に画像を貼る方法が解かったのでメモっとく。

*方法
+ITextureオブジェクトを作成。
+それに &#039;&#039;getTexture()&#039;&#039; でテクスチャを読み込む。
+ &#039;&#039;addImage()&#039;&#039; で目的の部品に貼り付ける。

例:
ITexture *tex;
tex = Driver-&gt;getTexture( &quot;hoge.bmp&quot; );
Env-&gt;addImage( tex, position2d&lt;s32&gt;( 0, 0 ), false, GUI1, 1000 );

上の例ではhoge.bmpをGUI1の部品に貼り付けている。
最後の1000はIDで多分省略しても問題ないと思う。
IDを付けるとイベントレシーバで拾えるので、巧く使うとクリッカブルな部品にしたり、ホバー状態にするとツールチップが出るようにしたりとか出来るかもしれない(試してない)

:addImage(image, pos, useAlphaChannel, parent, id, text)|GUIに画像を貼る。
|video::ITexture *image|テクスチャオブジェクト|
|core::position2d&lt;s32&gt; pos|テクスチャ表示位置|
|bool useAlphaChannel|アルファチャンネルを使う(省略時=true)|
|IGUIElement *parent|親になるGUI部品(省略時=0)|
|s32 id|テクスチャに割り当てるID(省略時=-1)|
|const wchat_t *text|謎orz(省略時=0)|

----
#comment    </description>
    <dc:date>2005-09-23T01:49:10+09:00</dc:date>
    <utime>1127407750</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/t-na/pages/10.html">
    <title>リファレンス?</title>
    <link>https://w.atwiki.jp/t-na/pages/10.html</link>
    <description>
      -リファレンスっぽいメモ。
-リファレンスを漁っていて見つけたものをメモっておく。
-特に、掘り出し物(?)見たいな関数とかは、後で必要な時になかなか見つからなくて困ることがあるから。
-Version 0.12.0が対象。

[[カーソル&gt;リファレンス?-カーソル]]

----
#comment    </description>
    <dc:date>2005-09-22T18:32:23+09:00</dc:date>
    <utime>1127381543</utime>
  </item>
  </rdf:RDF>
