1 名前:名前は開発中のものです。 mailto:sage [2006/10/05(木) 06:50:19 ID:UN/zUzoQ] zlibライセンスでクロスプラットホームなゲームライブラリ、Irrlichtのスレです。 ※回答する人も、質問する人も必ず読んでください これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近Irrlichtを始めたばかり 3.SDKを見ても、Googleで検索しても、エキサイト翻訳でもいまいち理解できない人 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「英語読め」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する人 】 ・ どんな事で躓いているのか明確にする。 ・ 長くならないなら躓いている部分のコードを晒してみてください。 ・ 解決した場合、お礼を言うのは当然ですが、何をどうしたら解決したかを明確に書くこと。 前スレ pc8.2ch.net/test/read.cgi/tech/1104179696/
322 名前:名前は開発中のものです。 mailto:sage [2007/11/09(金) 07:41:23 ID:c3OcvDGq] >>321 ICameraSceneNodeを継承して、移動速度が変わるようなカメラクラスを作る 雛型はFPSのをコピーすれば後はキー入力部分を変更するだけ このクラスはマネージャに未登録だからadd〜では追加できなくなる 次のコードで対応 CCameraSceneNodeFPSown* CameraPFS = new CCameraSceneNodeFPSown(smgr->getRootSceneNode(), smgr); CameraFPS->drop();
323 名前:名前は開発中のものです。 [2007/11/11(日) 18:57:11 ID:FfvcBzgB] 3rd Personカメラをあれこれいじっているんですが、 画角を調整しても、画面端に行くにつれてモデルに歪みが生じてしまい、 いまいちちゃんと表示されないのですが、 なにか良い方法ありますか?
324 名前:321 mailto:sage [2007/11/11(日) 21:35:00 ID:ogyLcZhW] >>322 クラス作りがんばります。 クラスを作り終えた結果と共にレスを返したかったのですが、 c++についても初心者なため、時間がかかりそうなのでとりあえず報告のレスをば。 あと初心者ついでにお聞きしたいのですが、 addCameraSceneNodeFPS関数は、 ICameraSceneNode* node = new CCameraFPSSceneNode(〜); となっています。 CCameraFPSSceneNodeはCCameraSceneNodeを継承しています。 また、CCameraSceneNodeはICameraSceneNodeを継承しています。 参考にしているサイトttp://www.med.osaka-u.ac.jp/pub/cl-comp/saito/cppintro/cppintro8.html から考えると、ICameraSceneNodeへのポインタからCCameraFPSSceneNodeへアクセスした場合 CCameraFPSSceneNodeで定義されたメンバ関数にアクセスできるように思います。 しかしCCameraFPSSceneNodeで定義されているsetMoveSpeed関数などにアクセスできません。 理由がまったくわからないのですが、どうしてなのでしょうか?
325 名前:名前は開発中のものです。 mailto:sage [2007/11/12(月) 02:01:36 ID:hpWiFfmI] >>324 その場合、CCameraFPSSceneNodeクラスのメンバ関数へのアクセスは ICameraSceneNodeクラスを通した共通関数しか扱えなくなる。 だから、例えCCameraFPSSceneNode内で setMoveSpeedがpublic関数と定義されていてもアクセス不能です。 もしsetMoveSpeedを使いたいのであれば、こうすること。 CCameraFPSSceneNode* node = new CCameraFPSSceneNode(〜); ~~~~~~~~~~~~~~~~~~~~~~~~~ 他にダウンキャストって手もあるんだけど、あんまりお勧めはしない。 ICameraSceneNode* node = new CCameraFPSSceneNode(〜); CCameraFPSSceneNode *p = dynamic_cast<CCameraFPSSceneNode*>( node ); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
326 名前:324 mailto:sage [2007/11/12(月) 05:40:47 ID:7YnjD95v] >>325 仮想関数は、インターフェース部になったクラスに存在し、 その上で再定義されたポインタ越しの関数を呼び出せるというものだったんですね。 勉強になりました、ありがとうございました。
327 名前:名前は開発中のものです。 [2007/11/16(金) 22:28:36 ID:h9AyeuU1] www.zgock-lab.net/irrlicht/tut05.htm で キャラから弾を飛ばしても 自キャラの移動速度を少し速めると キャラの前進移動スピード>弾のスピード になってしまい、追いついてしまいます でも弾を速くすると今度は速過ぎて見えなくなるし・・・ 何か解決策はあるでしょうか
328 名前:名前は開発中のものです。 mailto:sage [2007/11/16(金) 23:29:15 ID:z3YC6Y9u] >>327 早過ぎず遅すぎない弾の速度に微調整
329 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 00:17:31 ID:2u92yTvZ] 弾の速度=静止した状態から発射した場合の弾の速度+キャラの移動速度 とするのが物理的には正しいんじゃね
330 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 09:41:11 ID:/9LSycbG] >>327 弾が尾を引くようにすれば?
331 名前:名前は開発中のものです。 [2007/11/17(土) 11:13:17 ID:B5H01eQ3] ジョイパッドを使うには virtual bool OnEvent(SEvent event) { if (event.EventType == irr::EET_KEY_INPUT_EVENT) // キー入力であれば { switch(event.KeyInput.Key) // キーの種類が { の中に入れるべきですか Irrlicht LessonにはジョイパッドのIDやキーの取得に関しては書いてあるのですが 実際にどうやって使ったらいいか分からなくて・・・
332 名前:名前は開発中のものです。 [2007/11/17(土) 11:30:58 ID:B5H01eQ3] >>328 ,329,330 アドバイスありがとうございます。 微調整してみたら結構自然になりました
333 名前:名前は開発中のものです。 [2007/11/17(土) 12:39:07 ID:B5H01eQ3] と、質問ばかりなのも何なんで マップとキャラの衝突のコード晒しときます。 これでマップ上を自由に動き回れるはず // マップ Device->getFileSystem()->addZipFileArchive("media\\map\\blackbridge.pk3"); IAnimatedMesh *MapMesh = Scene->getMesh("blackbridge.bsp"); ISceneNode *MapNode = Scene->addOctTreeSceneNode(MapMesh); MapNode->setMaterialFlag(EMF_LIGHTING, false); MapNode->setPosition(vector3df(1000,-350,550)); // マップの位置を少し下げる scene::ITriangleSelector* selector = 0; // セレクタ−1宣言 // マップノードをトライアングルセレクターとして登録 if (MapNode){ selector = Scene->createOctTreeTriangleSelector( MapMesh->getMesh(0), MapNode, 128); MapNode->setTriangleSelector(selector); selector->drop(); } // MAPとキャラの衝突判定 scene::ISceneNodeAnimator* anim2 = Scene->createCollisionResponseAnimator( selector, SydneyNode, core::vector3df(10,21,10), core::vector3df(0,-1,0), core::vector3df(0,0,0)); SydneyNode->addAnimator(anim2); anim2->drop();
334 名前:名前は開発中のものです。 mailto:sage [2007/11/17(土) 22:02:27 ID:+0vqtOt2] >>331 while(device->run())ループ内で描画前にでもjoyGetPos(JOYSTICKID1, &joyinfo);してやって その結果を元にユーザイベントを投げればOnEventで処理できると思うよ
335 名前:名前は開発中のものです。 mailto:sage [2007/11/19(月) 09:57:08 ID:CkrKyzUS] >>334 すみません ユーザーイベントを投げるにはどうすればいいのでしょうか・・・ virtual bool OnEvent(SEvent event) { if (event.EventType == irr::EET_USER_EVENT) { return true; } でいいと思うのですが、 ループからどう関連付ければいいか分からなくて・・・
336 名前:名前は開発中のものです。 mailto:sage [2007/11/19(月) 10:23:44 ID:CkrKyzUS] よく見たらIrrlicht Lessonに解説ありました・・・ 何とか自分でやってみます
337 名前: ◆YATA/oetrw mailto:sage [2007/11/19(月) 23:37:01 ID:CwotT0bX] 公式DLLのみを使って日本語入力に漕ぎ着けました。 まだWindows版のみで手直しが必要なため動画だけ。 Input Method for Irrlicht 3D engine ttp://www.youtube.com/watch?v=ctOgPadDnbo 先達たちに感謝。 ソースはまた後ほど。
338 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 00:43:58 ID:R5KE+nst] 乙
339 名前:336 mailto:sage [2007/11/20(火) 01:19:13 ID:njgoBjcy] ループ内で joyGetPos(JOYSTICKID1, &joyinfo); //ジョイパッドの情報を取得 getState(joyinfo); //取得した情報をIDに置き換える をして、getStateで△ボタンを押すとIDに1が入って、 postEventでレシーバーにユーザーイベントを投げるというのを やろうとしたのですがpostEventのところでハンドルされていない例外が発生しました と出ます。。。 どこが問題なのでしょうか。。 //ユーザーイベント送信 void postEvent(s32 eventType, s32 eventId) { SEvent event; event.EventType = EET_USER_EVENT; event.UserEvent.UserData1 = eventType; event.UserEvent.UserData2 = eventId; Device->postEventFromUser(event); } //変換 void getState(JOYINFO joyinfo) { if(joyinfo.wButtons == 0x0001){ s32 ctrlID = 1; postEvent(EUMT_JOYPAD_INPUT, ctrlID); } }
340 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 01:43:30 ID:njgoBjcy] Driverの宣言部分に問題があったようです。。 多重宣言になってたのに気付かなかった。。 一応ジョイパッドのボタンを押すと キャラが前進する というところまではできました 問題は離しても進んでしまうところ。。
341 名前:lesson.ifdef.jp mailto:sage [2007/11/20(火) 18:31:20 ID:y97bgTzN] >>340 さん サンプルではグローバル宣言しているので、グローバル宣言をやめて、 postEventの引数にdriverも追加すれば大丈夫でしょう。 キャラのアニメーションに関しては、 最後に指定されたモーションが実行され続けるはずです。 キーが押されなかった場合の処理も指定する必要があります。 前回の状態と比較して、変化があった場合に、 モーションを変更するようにしてみましょう。
342 名前:名前は開発中のものです。 mailto:sage [2007/11/20(火) 23:27:33 ID:wC+JOKs+] HDR対応・・・HDR対応・・・
343 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 02:15:04 ID:CVvSjocp] 空をScene->addSkyBoxSceneNodeで作成しているのですが、 これだとソースコードレベルで空が固定されてしまいます。 GtkRadiantなどの空シェーダーを利用したいのですがうまく反映されませんでした。 反映させるためには何かコードを追加しないといけないのでしょうか?
344 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 03:53:01 ID:icyD2fym] >>341 おお、管理人さん自ら恐れ入ります。 早速やってみます
345 名前:名前は開発中のものです。 mailto:sage [2007/11/21(水) 22:55:14 ID:nvAoZQa6] 取り急ぎInput Method分離版投下 GUIを表示させるまでの手続きは増えましたが 代わりに必要なモジュールだけを組み込めるかと IrrIM Test20071121a(win用ソース) ttp://etwas.wolfish.org/Irrlicht/irrlichtml.html
346 名前:344 mailto:sage [2007/11/22(木) 05:24:42 ID:0gf5OqeX] // アニメーションパターン設定 if (lastState != Receiver->State){ // 「立ち」と「走り」状態に変化があったら if (Receiver->State){ // 「走り」なら Player->setMD2Animation(EMAT_RUN); // アニメーションを「走り」に } else { // そうでなければ Player->setMD2Animation(EMAT_STAND); // アニメーションを「立ち」に } lastState = Receiver->State; // 状態変化を保存 } これを使ってやっても Stateを発信する方が event.KeyInput.PressedDownとevent.UserEvent.UseData1 では違うようです・・・(って当たり前か・・・)
347 名前:lesson.ifdef.jp mailto:sage [2007/11/22(木) 22:27:45 ID:CUMTGKWp] >>344 さん >Stateを発信する方が >event.KeyInput.PressedDownとevent.UserEvent.UseData1 event.UserEvent.UseData1でも同様に Stateを返してしまえば大丈夫ですね。 キーボードで右に値するキー(→・Dなど)が押されたときの処理と コントローラで「右」を押した時の処理を同じにすればいいでしょう。 イベントの種類や名前などで難しく考える必要はありません。
348 名前:名前は開発中のものです。 mailto:sage [2007/11/28(水) 23:41:14 ID:XwD1PSD9] 日本語訳のwikiないの? ユーザーwikiある?
349 名前:名前は開発中のものです。 mailto:sage [2007/11/29(木) 00:12:51 ID:xhLqnguP] ・翻訳ドキュメント Irrlicht 非公式ドキュメント ttp://www.realintegrity.net/~irr/ ・解説サイト Irrlicht A GoGo ttp://www.zgock-lab.net/irrlicht/ Irrlicht Lesson lesson.ifdef.jp/index.html 日本語サイトって このぐらいしか無いのでは 特にIrrlicht Lessonにはお世話になってます ( >が>になってたり <が<になってたりするのは仕様でしょうか? )
350 名前:名前は開発中のものです。 mailto:sage [2007/11/29(木) 00:17:21 ID:xhLqnguP] 訂正:>が&gt >が&lt
351 名前:名前は開発中のものです。 mailto:sage [2007/11/29(木) 00:39:20 ID:tGg1J08/] ほんとだねw >にするつもりが;(セミコロン)を忘れちゃったんじゃないかな
352 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 05:45:18 ID:aXIFpf6m] 1.4 リリースおめ
353 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 08:41:19 ID:fawlqgIa] 1.4キタ━━━━(゚∀゚)━━━━!!! VISTAも認識するようだ
354 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 10:59:54 ID:nuORG0MM] おめ
355 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 16:12:39 ID:gcOHwiFd] 1.4入れてみた 以前組んだのを再コンパイルして走らせてみたが、CPU負荷がかなり改善されていい感じだ
356 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 17:15:56 ID:nuORG0MM] 以前のが、1.4でも普通にコンパイルできるのか
357 名前:名前は開発中のものです。 mailto:sage [2007/12/02(日) 19:45:54 ID:dQ2XkPD6] キー入力についてお聞きしたいのですが、 例えば全画面表示などに利用するAlt+ENTERを取得できるのでしょうか? Alt+ENTERを押してもポンというシステム音がするだけで反応してくれませんでした。 確認として printf("PressedDown : %s\n", event.KeyInput.PressedDown ? "on" : "off"); printf("KEY_RETURN : %s\n", event.KeyInput.Key == KEY_RETURN ? "on" : "off"); printf("KEY_MENU : %s\n", event.KeyInput.Key == KEY_MENU ? "on" : "off"); printf("KEY_RMENU : %s\n", event.KeyInput.Key == KEY_RMENU ? "on" : "off"); printf("is RETURN : %s\n", isKeyPressed(KEY_RETURN) ? "on" : "off"); printf("is MENU : %s\n", isKeyPressed(KEY_MENU) ? "on" : "off"); printf("is RMENU : %s\n", isKeyPressed(KEY_RMENU) ? "on" : "off"); printf("\n"); というコードをレシーバのEET_KEY_INPUT_EVENTに追加してみたところAlt単体では反応しませんでした。 唯一反応したのがAlt押す→ENT押す→ENT離す→Alt離すのときで、MENUのみonになりました。 ですがこれだと同時押しの判定ができず困っています。 ちなみにisKeyPressed()はIrrlicht Lessonさんの複数キー処理のメソッドです。
358 名前:lesson.ifdef.jp mailto:sage [2007/12/03(月) 18:42:59 ID:L4J5OiMR] >>357 さん WinAPIの以下の関数を使用するとよいでしょう。 ・GetKeyboardState(全ての仮想キーの状態を取得) ・GetKeyState(指定したキーの状態を取得) これらを使用することにより、システムキーの状態も取得できるはずです。 また、Shift/Ctrl/Menu(Alt)を左右別々に取得も可能です。 ただし、システムキー「離した」という情報は取得できません。 これであれば、Alt+Enterを取得できるかと思われます。
359 名前:名前は開発中のものです。 mailto:sage [2007/12/03(月) 19:29:29 ID:adx0yp9J] イベントレシーバでエンター検出したら、その中で>>358 の関数呼べばいいかもね それにしても、なんで、WM_SYSKEYDOWNは検出対象外なんだろか CIrrDeviceWin32.cppのメッセージ周りを修正して再コンパイルって手もあるみたいよ F10 in Windows(vitekのコード参照) irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=22630
360 名前:357 mailto:sage [2007/12/03(月) 22:52:11 ID:FEcfD3/b] lessonさん、>>359 さんありがとうございます。 >>359 のレスを見て簡単かもと思ったのですが、Altを押している間は イベントが呼ばれないようなので、この中での処理は諦めました。 結果として描画ループ内に //全画面表示 //Altはirrのイベントで処理できないのでWIN32API使用 if(GetKeyState(VK_RMENU)>>7 &1 && GetKeyState(VK_RETURN)>>7 &1){ switchToFullScreen(); //自作全画面処理 } といった感じで追加しました。 >>359 の方法を使えれば良いのですが、自分には少々ハードルが高いようです。英語読めないですしw 不恰好ですが目的の動作は実現しました。感謝です。
361 名前:名前は開発中のものです。 mailto:sage [2007/12/07(金) 22:33:14 ID:COpAhiGY] Windows API使うとLinuxで動かないのから SDLとか使ったほうがいいんじゃないの
362 名前:lesson.ifdef.jp mailto:sage [2007/12/08(土) 00:55:31 ID:ipyfMo3f] >>361 さん せっかくの掲示板ですから、 もう少し具体的な解決策も書いたらどうでしょう? お互いスキルアップにもつながりますし ●キー取得 ・DLLの改造…SYSKEYの処理を追加する ・SDLを使用する…SDL_PollEventの後で処理を追加する ・OpenGL(GLUT)を使用する…glutGetModifiersで処理 ・DirectXを使用する…GetDeviceStateで状態取得 ・Win32APIを使用する…GetKeyStateで状態取得 別の方法として、そもそも複数キーを使用しない ・Homeキーを押したら全画面処理をするなど
363 名前:名前は開発中のものです。 mailto:sage [2007/12/11(火) 01:51:39 ID:WAcCpdFv] ◆質問 Irrlicht.dllを動的に読み込むにはどうするのが一番楽? ◆やったこと 状況に応じてIrrlicht.dllを切り替えたくなった。 とりあえずLoadLibraryとGetProcAddressで createDeviceの関数ポインタ取って来るスケルトンを作ってみたけど、 GetProcAddressの返り値NULL('A`) ◆環境 VC7.1くらい Irrlicht1.4
364 名前:363 mailto:sage [2007/12/11(火) 23:48:27 ID:WAcCpdFv] そういえば関数名は正しかったのかな・・・と思いdependecywalker使用したら、 createDeviceじゃなくて、150文字くらいのもっさい関数でした…。 スケルトンは動くようになって良かったけど、DLL動的したら、この先ずっとDLL内の関数名を気にしながら開発しないといけないのか・・・?
365 名前:名前は開発中のものです。 mailto:sage [2007/12/12(水) 00:13:40 ID:4mpK8EPR] シビアに速度を求めないのだったら、 Irrlicht の API を呼び出す単純なラッパーをつくってやればいいんジャマイカね。 俺はスクリプトエンジンから API 呼ぶプラグインつくってるけど、メモリ 2G 未満のもっさりノートで EventReceiver とか Animator をスクリプトに記述するような無茶しても結構問題なく動いてる。
366 名前:名前は開発中のものです。 mailto:sage [2007/12/12(水) 00:16:19 ID:4mpK8EPR] どうでもいいが間違ったorz メモリ 1G 未満 ね。
367 名前:モデム壊れてた ◆YATA/oetrw mailto:sage [2007/12/12(水) 00:32:10 ID:hv2mu0E9] >>363 ↓このようにC形式で関数エクスポートされてないので難しいかもしれない。 extern 'C' { IrrlichtDevice* createDevice(...); } もし、動的ロードに成功したとしても問題がひとつ。 Irrlichtはマイナーバージョン間ですら互換性がない。 だから、本体実行ファイルが持っているヘッダとは別バージョンの DLLを読み込んだときに関数エラーが発生してしまうと思います。 バージョン間の差異を解決できれば動的ロードも夢ではないです。 こう言うのしか思いつかなかった(互換性は埋められない) exe->(動的ロード)->extern 'C' を使ったラッパーDLL1.4->(静的リンク)->Irrlicht.dll 1.4 L(動的ロード)->extern 'C' を使った ラッパーDLL1.3->(静的リンク)->Irrlicht.dll 1.3 ------- チラ裏 irrIMが手詰まりになったので、IrrlichtML 1.4おいていきます。 FreeTypeヘッダをインクルードしなくて済むようにCGUITTFontを隠蔽化。 etwas.wolfish.org/files/IrrlichtML-1.4-win32Linux.zip
368 名前:名前は開発中のものです。 mailto:sage [2007/12/12(水) 00:39:16 ID:hv2mu0E9] かぶった。 >>365 さんのほうが詳しそう。 >>364 extern 'C'されてないとCreateDevice@fooxyzzzzのような別の関数名に置き換わってしまうんです。
369 名前:363 mailto:sage [2007/12/12(水) 00:51:44 ID:byr9Z6t8] >>365 ,367,368 ありがとう 昔0.8くらいの頃に作ったスケルトンに最新DLLを上書きしたらエラーでまくりで、 createDeviceに至っては引数構成も違う雰囲気。 DLLのヴァージョン上がる度に手製ソースの方までいじるのは避けたいから、 Irrlicht1.dll・・・みたいに用意して動的に切替、と考えてた。 DLLのバージョン更新による差分については、可能ならば自前ラッパーで吸収したいと考え中。 それはそれとして追加質問 Irrlichtに慣れたいんだけど、自分は今まで2D畑中心でやってきたからやはりまず2D系テクから覚えたい。 公式チュートリアルやシューティング勉強中の人のソースは見た、けど、 2Dのキャラクタ画像を拡大縮小したり透過率を指定したり回転させたりするようなサンプルが見当たらない。 今後、これらのサンプルはどういう方向性で探索するべきだろうか? それとも、複雑な2D機能はIrrlichtでは対応出来ない?
370 名前:名前は開発中のものです。 mailto:sage [2007/12/12(水) 16:19:26 ID:M90VuyCU] サンプルばっかりに頼らないでAPIドキュメントで調べろよ でも回転は見当たらないから自分で頂点触るしかないのかな
371 名前:名前は開発中のものです。 mailto:sage [2007/12/13(木) 00:05:19 ID:NC1QbeZC] 前から気になってたんだが、 scene::ISceneNode::getRotation( ) は const core::vector3df& を返すのに、 scene::ISceneNode::getPosition( ) が const core::vector3df を返すのはなんでだぜ。 値返しなのに const はおかしいから単なるバグかね。
372 名前:名前は開発中のものです。 mailto:sage [2007/12/16(日) 17:42:06 ID:G2b9tMyR] クォータニオンを扱う関数があるみたいですけど、どうやって使うんですか?
373 名前:名前は開発中のものです。 mailto:sage [2007/12/17(月) 01:35:15 ID:9HMeNQD7] GOGOのサンプルをファイル分割してみた 整理してうpします
374 名前:名前は開発中のものです。 mailto:sage [2007/12/18(火) 23:55:35 ID:cUWqWIvR] >>372 さんも質問していますが、quatanionを使ったベクトルの回転はどうすれば良いのでしょうか。 API リファレンス読んでも、英語力皆無なのでどの関数がどんな機能を持っているのか…。 例えば任意のベクトル v1 とベクトル v2 があるとき、 v2 を軸として v1 を回転する方法などお教えいただけないでしょうか。
375 名前:374 [2007/12/20(木) 15:35:27 ID:jqRYwRor] 一応自己解決。下のコードでいけました。 quaternion qua; qua.fromAngleAxis(rot, v2); matrix4 mat = qua.getMatrix(); mat.transformVect(v1); ただ、Direct3Dの関数で処理したのと微妙に挙動が異なるような。 試しにカメラを縦に回転させるアニメータを作ってみたが、 Y軸付近で回転量が小さくなるような気がしたのと、ジンバルロックが解決できない。 下のコードだとジンバルロックで動かなくなることはないのだが……。 D3DXQUATERNION qua(0.0f, 0.0f, 0.0f, 1.0f); D3DXQuaternionRotationAxis(&qua, &axis, rot); D3DXMATRIX mat; D3DXMatrixRotationQuaternion(&mat, &qua); D3DXVec3TransformCoord(&normalized, &normalized, &mat);
376 名前:名前は開発中のものです。 mailto:sage [2007/12/20(木) 17:17:48 ID:D8YXZHbq] FEZのようなインターフェースを作れないかな? FPSっぽいカメラとキー操作なんだけど FPS視点ではなく3rd視点という
377 名前:名前は開発中のものです。 mailto:sage [2007/12/20(木) 17:29:57 ID:1FySn3dT] 普通に作れるでしょ・・・
378 名前:名前は開発中のものです。 mailto:sage [2007/12/21(金) 02:22:22 ID:W06+iKTa] 当たり判定は正確ですか?
379 名前:名前は開発中のものです。 mailto:sage [2007/12/22(土) 03:21:29 ID:qH4tCHw4] CADとかShadeで作ったメッシュを読み込むには、 どの形式でエクスポートするのがベターでしょうか。 Xファイルだと読み込めないこと多いので……。
380 名前:名前は開発中のものです。 mailto:sage [2007/12/24(月) 23:31:42 ID:VhCZgB33] 最近ばかり初めてゲームの製作をするですが、 どうイジってIrrlichtでトゥーンレンダリングを出来ますか?
381 名前:名前は開発中のものです。 mailto:sage [2007/12/24(月) 23:50:22 ID:5nrbPA5X] ja.wikipedia.org/wiki/ シェーダ
382 名前:名前は開発中のものです。 mailto:sage [2007/12/25(火) 00:34:31 ID:IJC6bSYh] >>380 Toon(Cell) Shading snippet using HLSL. See below. irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=18281
383 名前:名前は開発中のものです。 mailto:sage [2007/12/26(水) 09:27:39 ID:xCkClyRy] CollisionResponceAnimatorを二つ設定すると 時間経過ごとに重力が増大していくんだが…Irrlichtのバグ? SDK同梱のサンプルマップで試したんだが 落下速度が異常に早くなって、階段すら上れなくなる。 誰か、解決法や関連情報を知っている人はいないでしょうか。
384 名前:名前は開発中のものです。 mailto:sage [2007/12/26(水) 19:33:39 ID:yUN26AYS] ColisionResponceAnimatorを2つ使う必要性が良くわからないんだが。 2つ以上のオブジェクトとColisionResponceしたいんなら、 1つのColisionResponceAnimatorにMetaTriangleSelectorを当てればおk
385 名前:名前は開発中のものです。 mailto:sage [2007/12/26(水) 23:44:30 ID:xCkClyRy] >>384 出来ました。ありがとうございます。
386 名前:名前は開発中のものです。 mailto:sage [2007/12/27(木) 21:44:30 ID:8IcVTLM6] Irrlichtでクリッピング距離を変えるにはどうしたらいいでしょうか。 Direct3Dでは D3DXMatrixPerspectiveFovLH() の引数で設定することができましたが、 Irrlichtではそれらしきものが見当たらず・・・
387 名前:386 mailto:sage [2007/12/28(金) 20:40:22 ID:Hp4RPsA7] 自己解決しました。 一応書いとくと scene::ICameraSceneNode* camera = smgr->addCameraSceneNode(〜); で、 camera->setFarValue( 距離 ); で最大距離、 camera->setNearValue( 距離 ); で最小距離。 なんでForum見ることを思いつかなかったんだろ(;´Д`)
388 名前:名前は開発中のものです。 mailto:sage [2007/12/28(金) 22:39:55 ID:ShcOiBSU] >>386 Irrlicht付属のヘルプにも載ってます irr::scene::ICameraSceneNode Class Reference setFarValue (f32 zf)=0 Sets the value of the far clipping plane (default: 2000.0f). setNearValue (f32 zn)=0 Sets the value of the near clipping plane. (default: 1.0f).
389 名前:386 mailto:sage [2007/12/30(日) 12:25:25 ID:KN9VCd/i] ありがとうございます。 ちゃんと調べないとダメですねorz
390 名前:名前は開発中のものです。 [2008/01/04(金) 06:42:00 ID:B3YR/5Yx] イルリッヒは時代遅れ
391 名前:名前は開発中のものです。 mailto:sage [2008/01/04(金) 07:34:17 ID:CcNPOaPX] 今は何の時代?
392 名前:名前は開発中のものです。 [2008/01/04(金) 10:30:21 ID:B3YR/5Yx] オーガ
393 名前:名前は開発中のものです。 mailto:sage [2008/01/09(水) 00:31:36 ID:INF4za2E] あけましておめでとうございます 非公式ドキュメントのトップページが壊されていたため閲覧不能でした 先日修正しておきました あそこの管理人さんは今どうしておられるのやら
394 名前:名前は開発中のものです。 [2008/01/09(水) 15:48:14 ID:oe3Z1pea] おまえらなんでwindowsでイルリヒト使ってんの? ダイレクトエックソでも使ってろよ
395 名前:名前は開発中のものです。 mailto:sage [2008/01/09(水) 19:16:17 ID:1bUx6/kQ] 低レベルな釣りだな 出直して来い
396 名前:名前は開発中のものです。 mailto:sage [2008/01/09(水) 21:37:04 ID:bwau3Xen] しかしイルリヒトと読んでるところは評価出来る
397 名前:名前は開発中のものです。 mailto:sage [2008/01/23(水) 17:55:29 ID:jmfBDAYQ] IrrlichtMLの中の人見てるみたいなので質問ここに書きます。 CGUITTFontについてです。 新たな文字が現れるたびにテクスチャに確保しているようですが、これはたとえばノベル ゲーム等文字種が多数現れる場合、メモリ不足に陥らないでしょうか?キャッシュの上限 を設定したほうがよい気がしますが…
398 名前:名前は開発中のものです。 mailto:sage [2008/01/23(水) 18:05:26 ID:jmfBDAYQ] 連投すいません。フルスクリーン<->ウインドウの切り替えはデバイス作り直し しかないのでしょうか。 その場合、deviceをdropしたら確保したリソースは自動的に開放されるのでしょうか?
399 名前:名前は開発中のものです。 mailto:sage [2008/01/23(水) 19:23:35 ID:Sr3V79Hv] >>397 中の人じゃないが、前実験で第二水準まで全部出してみたけど メモリ不測にはならなかったよ。 WindowsXP 512MB環境
400 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 00:06:10 ID:FpXK7fP/] ちょっと計算してみました。A8R8G8B8の16x16のテクスチャを確保すると1グリフあたり1024 byte=1kbyte。それが約2万文字なので約20mbyteということで比較的最近のビデオカード だと問題の無い値に収まりますね。 とはいえたかがフォントのレンダリングにビデオメモリ20mbyteも食われるのはもったいない おばけが出る気がします。20pixel位のフォントをレンダリングしたらさらに4倍に膨れ上がり ますし。 やっぱり当初の計画通りFreeTypeを直接叩いてフレームバッファ(あるいはテクスチャロ ック)に転送するという形をとることにします…
401 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 01:14:48 ID:qECrGTwM] >>397 MLの中の人です。数日間、モニターが壊れて画面がとてもカレー色でした。 一見メモリ消費量が多いように見えても、読込フォントの最大文字数までです。 なので、現在のOS上では微々たる消費量ではないかと。。 テクスチャは文字単位ではなく、フォント単位で確保されると思ったほうがいいです。 ビットマップフォントも含めて、メモリ不足に遭遇してないので放置ということで…。 どうしても気になるようなら、getFont(...)せずにCGUITTFontを直に生成して、必要なくなったらdrop()してはどうでしょう? 一部のGUIに適用するだけなら、この方法でうまく開放されると思います。 >>398 フルスクリーンへの切替は、IrrlichtサンプルのDEMOのようにデバイス作り直しのみ。 deviceをdrop()した時点で、Irrlicht管理のオブジェクトは全て破棄してくれますよ。
402 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 01:14:49 ID:YttCO1k2] >>400 おまいさんのこだわりは結構だし、それを止める気はないが、 現実によっぽど長編の小説でも実際に使われてる文字は せいぜい2000文字ぐらいだぞ。 (以前トルストイの「戦争と平和」の訳で約1800文字種とかいうのを読んだ) 普通のゲームならせいぜい1000文字ぐらいじゃないか? なので、限りなく杞憂に近いとは思う。 が、まあがんがれ
403 名前:名前は開発中のものです。 [2008/01/24(木) 04:50:43 ID:xvOsgKrW] 横から失礼。 コンシューマだとシナリオ作った後に よく使う文字をカウントして、必要最低限の文字をもたせたり、 あとは、最近(?でもないか)ならキャッシュ機構をもたせて、 よく使うのはキャッシュヒット、あまり使わないのはその場で生成する。 MLのライブラリの中身見てないから、すでに実装されてるよ!だったらスマソ
404 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 09:52:27 ID:YttCO1k2] >>403 CGUITTFontはキャッシング機構を持ってる。 で、400が言ってるのは、 「キャッシュに上限がないみたいだけど、メモリ大丈夫?」 ということ。 で、現実としてそう問題にならんよ、と返答されてる
405 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 10:23:18 ID:FpXK7fP/] >>403 CGUITTFontは一度でも現れた文字は必ずキャッシュされているようです。 だからビデオメモリの消費量が心配なのですが… >>402 情報ありがとうございます。ですがもうFreeTypeでレンダリングするところ まではできてしまったので、もうこのままテクスチャ転送まで進めたいと思います。 1枚絵表示するのにテクスチャ確保するのもあほみたいなので、フレームバッファに 直接書き込む手段と、2D周りがかなり弱いのでその辺補うライブラリも構築することにします。 それと動的ロードの話が出てきましたけど、IReferenceCountedの実装を見るとヘッダ ファイルのなかでdelete thisしてます。 これは、コンパイラの最適化か何かでDLL呼び出し元でdeleteされるとまずくないですかね? new/deleteの実装が異なるコンパイラで作成されたDLLを動的ロードすると、delete時に 不整合を起こすような気がします。あまり詳しくないのでひょっとしたら無駄な心配 なのかもしれませんが…
406 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 10:45:41 ID:FpXK7fP/] >>401 回答ありがとうございます。 フルスクリーン切り替えは面倒ですね…。
407 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 10:49:29 ID:YttCO1k2] >>405 0.5ぐらいの時代だから2年近く前?にdeleteの問題は公式フォーラムで議論されてたはず。 で、結論は「問題なす」だったはづ
408 名前:名前は開発中のものです。 mailto:sage [2008/01/24(木) 17:48:13 ID:FpXK7fP/] >>407 以前に議論された話題だったのですね。失礼しました。
409 名前:名前は開発中のものです。 mailto:sage [2008/01/25(金) 19:00:41 ID:MPN2QJSG] 質問です。直感でさくっとお答え頂きたいです。 FPSゲーを作ろうとしていて、よさげなライブラリを探しています。 画面を左右2分割にして、2人でプレイ出来るようにしたいのですが、 irrlicht での実装は描画の面において楽に出来ますか?
410 名前:名前は開発中のものです。 mailto:sage [2008/01/25(金) 20:32:40 ID:jU51nQMI] >>409 ビューポートとカメラの切り替えで実現できると思います>分割対戦
411 名前:名前は開発中のものです。 mailto:sage [2008/01/25(金) 22:21:07 ID:Vt/UlEbN] >>409 公式のチュートリアルに画面分割のサンプルあるお
412 名前:名前は開発中のものです。 mailto:sage [2008/01/25(金) 23:45:04 ID:+c4l9exa] OctreeTriangleSelectorを使ってメッシュのどの面とどの面が 衝突したかまで分かる詳細な衝突判定ってできますか?
413 名前:409 mailto:sage [2008/01/26(土) 06:10:08 ID:/SAwn9ff] >>409-410 レスありがとうございます! ュルルルリッヒエンジンでがんばってみます。
414 名前:名前は開発中のものです。 mailto:sage [2008/01/26(土) 06:11:19 ID:/SAwn9ff] スマソ >>410-411 ですた。ありがとう!
415 名前:名前は開発中のものです。 mailto:sage [2008/01/26(土) 18:00:09 ID:0EKxzkd2] OGREからこっちに鞍替えを目論んでます。 本家のFeaturesに「BlenderのエクスポーターがSDKにあるよ」みたいな事が書いてあったんで1.4のSDK落としてみたんですが、見つかりません… readmeのフォルダ一覧にもexportersフォルダが書いてあるのに見つからず。 どうすれば…orz OGRE用のメッシュファイル(.mesh)も読めるみたいですが、試してみた方いますか?
416 名前:名前は開発中のものです。 mailto:sage [2008/01/26(土) 18:35:32 ID:zD+QiSlQ] >>415 OGREのCVSに「blenderimport」と「blendersceneexporter」ってフォルダがあるけど これがBlender関係のSDKじゃね?
417 名前:名前は開発中のものです。 mailto:sage [2008/01/26(土) 21:19:47 ID:0EKxzkd2] >>416 それってもしかしてコレのことですか? ttp://ogre3d.org/wiki/index.php?title=Tools:_Blender&printable=yes OGREでBlenderで作ったデータを読むことはできてます。 思いっきり要すると Blenderで作ったデータをIrrlichtで読むにはどうすればいいの? という事が聞きたかったのですが、うまく伝えられてなかったらすいません。 OGREで使ってた.meshのデータをIrrlichtでアニメ付でちゃんと読めればベストなんですが。 ttp://irrlicht.sourceforge.net/features.html に there are exporters for popular 3D packages (Blender, 3DSMax, Gile[s], ..) included in the SDK. って書いてあるから、SDK落とせば何か入ってんだろ、とか思ってたらそれらしいのが入ってないし。。。 BlenderとIrrlichtの組み合わせでやってる人、居ませんか?
418 名前:名前は開発中のものです。 mailto:sage [2008/01/26(土) 22:32:35 ID:zD+QiSlQ] >>417 すまん、「本家のFeatures」を、OGREのFeaturesと勘違いしてたみたいだ Irrlichtのスレなのにな・・・ Irrlicht + Blenderなら、アニメーションが出来るDirectXのメッシュ(.x)使った方がいい IrrlichtはXメッシュをそのまま読めるからIrrlicht用にわざわざコンバートしなくて済むしな ただ、Xメッシュはツールによってフォーマットが少し異なる場合があるので注意な
419 名前:名前は開発中のものです。 mailto:sage [2008/01/27(日) 00:34:07 ID:+Y3aPJmy] メタセコで作ると「{」の位置のせいで読めなかったりな。 仕方ないから「{」の前に改行入れるコンバータ作っちまった。
420 名前:名前は開発中のものです。 mailto:sage [2008/01/27(日) 15:56:59 ID:oNRFDMwA] >>418 .xで試してみました。 IrrlichtのMesh Viewerで読めたので、たぶんコレで大丈夫だと思います。 ありがとうございます。
421 名前:名前は開発中のものです。 mailto:sage [2008/01/28(月) 17:43:17 ID:afuGywxJ] >>420 ところでOGREからこっちに移行する気になった理由はなんだったんだろか
422 名前:名前は開発中のものです。 mailto:sage [2008/01/28(月) 17:58:37 ID:XOEvg/3a] どうせ「英語読めない」でしょ