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/
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] どうせ「英語読めない」でしょ
423 名前:名前は開発中のものです。 mailto:sage [2008/01/28(月) 23:58:25 ID:G7mZ8jO6] 自分はOGRE知らないのですが、ライセンスに惹かれてIrrlichtを選択しました。 ところで、drop()を忘れそうな自分はboost::intrusive_ptrを愛用していますが、 使ってる人はいるでしょうか?
424 名前:名前は開発中のものです。 mailto:sage [2008/01/30(水) 11:06:43 ID:+OYkniIM] >>423 俺も昔は使ってたけど、サイズがでかくなるし、ポインタコピーするたびに 内部でごにょごにょやってるしで精神衛生上よろしくない だから、解放処理が必要なオブジェクトはシングルトンなマネージャクラスに任せてる マネージャのコンストラクタで生成&初期化して、デストラクタで開放させれば 管理する必要が無くなる やろうと思えば手動開放もできる 使うときは IrrlichtDevice *dev = IrrManager::getSingleton().getIrrDevice(); みたいな感じで、初期化さえしとけばいつでもどこでもアクセスできる OGRE使ってこの方法を見てから、俺の中ではこれが主流になってる
425 名前:名前は開発中のものです。 mailto:sage [2008/02/02(土) 16:46:40 ID:XyRp6hRG] irr1.3.1で壁の向こう側など、見えないポリゴンの描画を省略したいのですがうまくいきません。 現在は自分の後ろ側などしか省略されず、視線方向のものは全て描画されています。 マップ作成にはGtkRadiant1.4.0を使用しているのですが、マップの作成法に問題があるのでしょうか? それともそういった処理はirrに何かコードを追加しないといけないのでしょうか? 描画ポリゴン数が4万を越えたあたりから貧弱ノートでは厳しくなってきました。 マップロード部はこんな感じです。 IQ3LevelMesh *mapMesh = (IQ3LevelMesh*)scene->getMesh("maps/village.bsp"); IMesh *geometry = mapMesh->getMesh(quake3::E_Q3_MESH_GEOMETRY); ISceneNode *mapNode = scene->addOctTreeSceneNode(geometry);
426 名前:名前は開発中のものです。 mailto:sage [2008/02/05(火) 00:59:32 ID:iDwHPm2h] Material.Thickness=10.0; driver->setMaterial(Material); driver->draw3DLine(・・・) というとき、Thicknessの値をいろいろ変えても画面上の線が常に1ドット幅なんですが、 どうすれば2ドットの線などを描けますか?
427 名前:名前は開発中のものです。 mailto:sage [2008/02/05(火) 20:36:47 ID:iDwHPm2h] エンジンをDX9からOPENGLにしたらうまくいきました メインサポートがOpenGLだったんですね
428 名前:名前は開発中のものです。 mailto:sage [2008/02/06(水) 00:53:20 ID:Ac93WCkK] たぶん、ラインのサイズ指定がOpenGL依存なんだろうと思う
429 名前:名前は開発中のものです。 mailto:sage [2008/02/13(水) 21:57:17 ID:sC00+SwF] OpenGLだとaddLightSceneNodeで照らしたaddCubeSceneNodeがちゃんと見えるのに、 DirectXだと光源がない状態になってしまいます。(真っ黒 しかし、ある友人のパソコンでは、 OpenGLのときにguifont->drawをするとクラッシュしてしまうので、(DXなら動く) DirectXのサポートは続けておきたいのですが、どうしたらいいですか? その他人のパソコンでguifont->drawが使えない理由としてどんなものか考えられるか、と、 DirectXに切り替えると上の事例が起きる問題の解決方法を教えてください。
430 名前:名前は開発中のものです。 mailto:sage [2008/02/13(水) 23:32:38 ID:1ZAmjx1a] >>429 友人のGPUがOpenGL2.0に準拠してないかバグ持ちドライバな可能性がある
431 名前:名前は開発中のものです。 mailto:sage [2008/02/13(水) 23:43:28 ID:sC00+SwF] >>430 うーなるほど そうだとするとこっちには手が無いですね・・・ ありがとうございます
432 名前:名前は開発中のものです。 mailto:sage [2008/02/15(金) 13:19:44 ID:uwsfmr7Z] IrrlichtML版のgetFontで得た日本語フォントをISceneManager::addTextSceneNodeに渡すと、 CGUITTGlyphのデストラクタでエラーが出ます。 サンプルでもNode関係を使っているのはなさそうなので、 これは仕様なのでしょうか? 環境はWindowsXPMCEのSP2、IrrlichtML1.4、VisualStudio2005Pro、freetype-2.3.5です。
433 名前:名前は開発中のものです。 mailto:sage [2008/02/15(金) 22:44:27 ID:aJ3r8mIn] >>425 見えない敵とかの描画を省略しようと思ったらそら交差判定が必要になるでしょう
434 名前:名前は開発中のものです。 mailto:sage [2008/02/16(土) 00:11:18 ID:Kcju6cnr] ttp://lesson.ifdef.jp/B03.html このバグ、1.4では直ってないの
435 名前:名前は開発中のものです。 mailto:sage [2008/02/16(土) 19:51:58 ID:BJXzP4O8] 皆さん音楽はIrrlichtで音楽はどうしてますか?IrrKangはフリー以外だとライセンス購入が 必要ですし…何かお勧めのライブラリがあれば教えてほしいです。
436 名前:名前は開発中のものです。 mailto:sage [2008/02/17(日) 11:12:58 ID:k/Iqe8sD] xファイルの読み込みについて質問があります。 irrlichtでxファイルを読み込むときに右手、左手の座標系を指定して読み込ませることって できるんでしょうか? ttp://gamdev.org/up/img/11075.jpg ↑のようにXSIで作成しているときと、Xファイルビューアまたはirrlicht上で表示したときに鏡 像のような表示になってしまうのを、なんとかしたいのです。 環境はWinXP VC2008 irrlicht-1.4 です。
437 名前:名前は開発中のものです。 mailto:sage [2008/02/18(月) 20:53:38 ID:9PaR4TSR] >>432 driverに預けてあるテクスチャを本体が先に開放してるくさい どこかで既にremoveTextureが呼ばれてる気がする addTextSceneNodeの後にfont->grab()でもしておけばエラー回避は可能 その代わり、テクスチャ開放がされなくなります どうしたものか
438 名前:名前は開発中のものです。 mailto:sage [2008/02/19(火) 11:43:22 ID:CEbiXydm] ニコニコ吹いたw
439 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 02:38:40 ID:eWBznvro] 過疎り杉で全俺が泣いた。 ところで、436の件が自己解決したので報告。 汚い方法ではあると思うけど irrlichtのCXMeshFileLoaderを元にx座標を反転させながら xファイルを読み込むファイルローダを作って解決させました。
440 名前:名前は開発中のものです。 mailto:sage [2008/02/24(日) 11:04:27 ID:OyDG9+KH] >>439 おつかれです。
441 名前:名前は開発中のものです。 mailto:sage [2008/02/26(火) 23:42:36 ID:ve4woYRm] カメラがどんな向きを向いていても 常に手前から光が当たる 手抜きライティングをするにはどうすればいいですか?
442 名前:名前は開発中のものです。 mailto:sage [2008/02/27(水) 00:44:37 ID:pSPDiQm8] >>441 ライティングしないようにするとかはダメ? (ポリorテクスチャの色そのまま表示するように) 対象ノード->setMaterialFlag(irr::video::EMF_LIGHTING, false);
443 名前:lesson.ifdef.jp mailto:sage [2008/02/27(水) 01:28:06 ID:7TCghY78] >>441 考え方として、以下のようなものはどうでしょう? 1.カメラの背後に光源という感じに、カメラを親として光源を設定 2.キーが押されたら、カメラの代わりにワールドを動かす これで、一応はカメラの方向から必ずライティングされるかと
444 名前:名前は開発中のものです。 mailto:sage [2008/02/28(木) 15:18:04 ID:e5iGSVK/] いつになったらゲームパッド対応するんだろう・・・
445 名前:名前は開発中のものです。 mailto:sage [2008/02/28(木) 23:49:36 ID:9jMY1Ybl] >>442 立体感つけたいのでライティングします。 >>443 CameraSceneNodeFPSと組み合わせたいのでそれはちょっと。
446 名前:lesson.ifdef.jp mailto:sage [2008/02/29(金) 19:57:00 ID:MU+29BuV] >>441 「常にカメラの方向からライティングされる」という意味ですよね? 「常に手前」という表現がちょっと曖昧なので、上記で解釈しました。 ライトを作成する時に、親を「ライト」にすれば大丈夫です。 (前回のは、親に設定したはずが別の値を設定していたため、 期待した動きにならなかったので、別の方法を提示してみました。 今日見たら引数が間違ってた・・・) //FPSカメラを作成 ICameraSceneNode *CameraNode = smgr->addCameraSceneNodeFPS(0,100,5); //カメラを親にライトを設定(ライトはカメラの位置) smgr->addLightSceneNode(CameraNode, vector3df(0,0,0), SColorf(0xFFFF0000), 100.0f); 第1引数にカメラのnodeをセット 第2引数に親からの位置を(0,0,0)=親と一緒をセット で、やってみてください。
447 名前:lesson.ifdef.jp mailto:sage [2008/02/29(金) 19:59:41 ID:MU+29BuV] 446の修正 ・ライトを作成する時に、親を「ライト」にすれば大丈夫です。 ↓ ・ライトを作成する時に、親を「カメラ」にすれば大丈夫です。
448 名前:441 mailto:sage [2008/03/04(火) 23:27:13 ID:+F3tYXlG] 出来ました!こんな感じでやりました。 scene::ICameraSceneNode *camera = smgr->addCameraSceneNodeFPS(0, 100.f, 100.f); camera->setPosition( core::vector3df(0,0,-100) ); scene::ILightSceneNode *light = smgr->addLightSceneNode( camera, core::vector3df(0,0,0) ); light->getLightData().Type = video::ELT_DIRECTIONAL;
449 名前:lesson.ifdef.jp mailto:sage [2008/03/08(土) 20:08:31 ID:42plfOng] >>441 おめでとー! これを少しいじれば、太陽のように見せることもできそうですね。 あとでやってみようかな。
450 名前:441 mailto:sage [2008/03/08(土) 23:32:53 ID:vuhDlgNP] >>448 あれ、ELT_POINTでも同じになっている気がします・・。 点光源なのに離れても暗くなりません。 あと、テクスチャつきだとライトの色は反映されているみたいですが影がつきません。
451 名前:lesson.ifdef.jp mailto:sage [2008/03/09(日) 01:14:28 ID:QaJyCdZ9] >>441 テクスチャつきのオブジェに対してのライトは マテリアルの設定を操作する必要があります。 SMaterialのLightingを見てみてください。 これがライトの影響を受けるか受けないかです。 (デフォルトでは影響を受けないようになってたかも)
452 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 21:38:47 ID:qxZlvuLX] αつきテクスチャを貼り付けたビルボードをαテストを使って透過させつつ、 頂点カのαを減少させてフェードアウトってできるんでしょうか? EMT_TRANSPARENT_ALPHA_CHANNELに頂点のα値を反映させたいんです
453 名前:名前は開発中のものです。 mailto:sage [2008/03/11(火) 23:26:06 ID:txVQuh45] lessonさんのライトのところを見たんですが FPSゲームでよく使われるスポットライトも作れるんでしょうか その場合カメラと連動してライトも動かさないといけないのですが・・・
454 名前:名前は開発中のものです。 mailto:sage [2008/03/12(水) 22:51:57 ID:biTsIJxr] >>451 いや、デフォルトではtrueですが・・。 何でだろ、examplesのSpecial FxのroomMeshを読み込む部分のコードを そのままコピーしたらちゃんとライティングされています。
455 名前:441 mailto:sage [2008/03/12(水) 23:35:51 ID:biTsIJxr] その内ソースをupします。
456 名前:名前は開発中のものです。 mailto:sage [2008/03/13(木) 16:26:24 ID:Aiv+dbIO] SIRENみたいなゲームも作れそうですね
457 名前:名前は開発中のものです。 mailto:sage [2008/03/13(木) 17:25:48 ID:23U/XaUN] >>453 頂点単位でしかライティングできないから、ライトマップ使わないとだめ。 勘違いしてたらすまん。
458 名前:名前は開発中のものです。 mailto:sage [2008/03/14(金) 22:33:58 ID:HWct05mu] >>457 いや、出来なくないと思いますが? バンプマッピングとかパララックスマッピング使えますし。 フォンシェーディングは自分でシェーダー読み込まないと使えないみたいですが。
459 名前:名前は開発中のものです。 mailto:sage [2008/03/17(月) 23:23:15 ID:haIYreE8] >>453 スポットライトはパララックスマッピングやバンプマッピングでは使えないようです・・。 しかもライト2個までだし!!自分で実装しないといけませんね、これは。 ttp://gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=4407 ライティングはどうやってもうまくいかないのであきらめることにしました・・。 それよりさまざまな問題が。 何故かどうやっても1バイトのメモリリークがなくなりません。行やファイル名が表示されないんです。 OBBTreeを使ったメッシュ同士の衝突判定クラスで、 三角形を含む全ての当たっているOBBを検出したいのですが1個しか検出できません。 ソースのDLKEYはobbtreeです。 ttp://home7.highway.ne.jp/nomura_y/prog005.htm OBBTreeの使い方はここを参考にしました。というよりプログラムをコピーしました。
460 名前:441 [2008/03/17(月) 23:32:00 ID:haIYreE8] >>459 = >>441 とりあえず上げときます。
461 名前:名前は開発中のものです。 [2008/03/21(金) 13:41:00 ID:k9t2KKAY] 単純なコリジョンについて誰か教えてください。 BB対BB、セレクタ対セレクタ、セレクタ対BBのどれかで 単純に現在接触しているかを知るにはどうすればいいですか?
462 名前:名前は開発中のものです。 mailto:sage [2008/03/21(金) 17:06:47 ID:ipDiEarq] 円が2個あるとします。 接触する事とは、中心と中心の距離で求められます。
463 名前:名前は開発中のものです。 mailto:sage [2008/03/21(金) 18:15:39 ID:k9t2KKAY] >>462 手のジョイント位置と対象位置でバウンディングスフィアしてパンチ!とか一応やってみました。 でもirrlichtの機能の範囲でBBなんかでさくっと判定できる方法があればやり方を知りたいです。 具体的にはCSceneNodeAnimatorCollisionResponseを参考にしてみたんですが 移動抜きで現時点の接触を知りたい場合にスフィアなりせずにirrlichtの機能任せにできないかなと思って。
464 名前:441 mailto:sage [2008/03/22(土) 21:30:03 ID:KVorMeSU] >>461 BBって一般的なAxis Aligned Bounding Box(AABB)のことですよね。 template<class T> bool irr::core::aabbox3d<T>::intersectsWithBox(const aabbox3d<T> & other) const [inline] でAABB同士の当たり判定ができます。 セレクタ対セレクタは、・・・難しそうですね。 セレクタ対BBは、ITriangleSelectorに指定したAABBに含まれる三角形ポリゴンを取り出す機能があります。 それにしてもうpから5日経つのに音沙汰なしですか・・? >>459 の OBBTree使ったメッシュ同士の当たり判定。結構高速でそれなりに正確です。 ゲームに使うには十分だと思います。 ttp://www-2ch.net:8080/up/download/1206188724122478.uVc1b2 流れちゃったので再うpします。DLKEYはobbtreeです。OBBTreeの部分は ttp://home7.highway.ne.jp/nomura_y/prog005.htm をIrrlicht用に移植しました。TriangleSelectorとしての機能もつけたいんですがうまくいきません・・。 ほかにもいろいろ問題がありますが、まぁ動いたのでいいでしょう・・・。
465 名前:名前は開発中のものです。 mailto:sage [2008/03/23(日) 17:58:02 ID:YyMn0R5A] また単発質問させてください。 スクリーンの大きさぴったりに描画されるビルボードの作り方はありますでしょうか? (カメラを親にしてビルボードを作成しているので常に目の前にビルボードを描画するところまではできています。) 何をしたいかというと 1回テクスチャにレンダしたデータを画面に表示するときにピクセルシェーダを経由して表示させようとしています。 draw2dimageではシェーダーマテリアルの設定がうまくいきませんでした。 何かヒントでもあればご教示ください。
466 名前:lesson.ifdef.jp mailto:sage [2008/03/23(日) 22:41:58 ID:fLRzMwSc] プロバイダが9日から規制されてて書き込みできずorz 規制解除されたので書き込みを >>441 ライトはビデオカードによって表示できる個数に制限があるかもです 古いカードでも3個まではライトを確認してます (前面から青、背面から赤、カメラ位置に白で確認) うちの環境だとバンプマッピングができず、ビデオカード変えると OpenGLでの描画ができず・・・ (初期不良か ファイルはダウンロードできたのでOBBTreeを見てみたいと思います 当たっているOBBが違う色で表示されれば目視が楽そうですね 色々いじってみます(rockwall.bmpがなかったので適当に作りました)
467 名前:441 mailto:sage [2008/03/24(月) 21:11:28 ID:cbUStkSt] >>465 2D用の命令ではシェーダーが適用されない使用になっているのでだめです。(ソースを見ると、シェーダー無しの状態に戻していました) struct VS_OUTPUT { float4 pos : POSITION0; float2 texCoord : TEXCOORD0; }; VS_OUTPUT vs_main( float4 inPos: POSITION ) { VS_OUTPUT o = (VS_OUTPUT) 0; inPos.xy = sign( inPos.xy); o.pos = float4( inPos.xy, 0.0f, 1.0f); // get into range [0,1] o.texCoord = (float2(o.pos.x, -o.pos.y) + 1.0f)/2.0f; return o; } RenderMonkeyのScreen-AlignedQuadから取ってきた頂点シェーダーです。(HLSL) 別にカメラを親にしなくても、このシェーダーを適用するだけで表示される・・筈です。 シーンノードで描画する場合はsetAutomaticCullingでカリングのモードをEAC_OFFにしておきましょう。 >>466 当たっているOBBは赤で表示されます。最初に見つかった1ペアだけですが。 Irrlicht SDKに含まれていますよrockwall.bmp (だからIrrlicht SDKと同じフォルダ構造にしていたんです)
468 名前:465 mailto:sage [2008/03/24(月) 23:59:55 ID:YyeAT6+O] >>467 ご指摘ありがとうございます。 指摘されたHLSLを使うことで、うまくできました。 以下が作ってたサンプルになります。 (内容は法線MAPを使って輪郭描画を行うサンプルです。) ttp://gamdev.org/up/img/11248.zip
469 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 00:01:49 ID:YyeAT6+O] あ、書き込み全部書く前に投稿してしまた、、orz.. 上のZIPですが、自分の環境がirrlichtライブラリの中に手を入れたりしているので そのままではコンパイルできないかも知れませんので注意してください。
470 名前:名前は開発中のものです。 mailto:sage [2008/03/29(土) 00:01:52 ID:9eKD+9jY] キャラクタークラスはどう作ります? 候補と印象は以下 1、エンティティの中にシーンノードを保持する。 シーンノードを自由に組み合わせられるのは魅力的だが、 特殊な表現をするには結局新しいシーンノードを作る必要がありそう。 2、シーンノードを継承する。 自由に描画処理を記述できるメリットは大きいが面倒そう。 3、シーンノードアニメータを継承してシーンノードに追加する。 複数のシーンノードを組み合わせて使うのが大変そう。 4、それ以外。
471 名前:名前は開発中のものです。 mailto:sage [2008/03/30(日) 23:27:58 ID:q0Ctn/EA] ttp://www.irrlicht3d.org/wiki/index.php?n=Main.Shaders Special Shader Pack by Nadroって何処からDL出来るんですか? フォーラムに飛びますが何処からDLするのか分かりません。
472 名前:lesson.ifdef.jp mailto:sage [2008/04/04(金) 22:03:23 ID:I+kk4Izj] >>441 遅くなりましたがOBBTreeの報告です COBBTreeTriangleSelector.cpp内の17行目辺り bool COBBTreeTriangleSelector::_checkCollision()の この部分を if (!childAL && !childAR && !childBL && !childBR) { result = true; } trueを返していますが、コメントアウトしておいてください。 if (!childAL && !childAR && !childBL && !childBR) { // result = true; } これで、当たり判定があった部分は全て表示が変わります。 ただし問題が1つあって、回転させた場合、 「回転する前のオリジナルのOBBTreeの位置に当たり判定が発生」しています。 これは、createRotationAnimator()が悪さをしているのだとは思いますが そこまでは調べていません。 とりあえず報告まで お試しください
473 名前:lesson.ifdef.jp mailto:sage [2008/04/04(金) 22:10:21 ID:I+kk4Izj] >>470 キャラクタークラスを作成するにあたって、 私としては「2、シーンノードを継承する。」が一番楽だとは思います。 キャラを用意して、動きなどを設定してあげれば render()で全て描画してくれるので確かに楽です。 getPosition/setPosition/getRotationなどがすぐに使えるのがいいです。 気になる点としては、描画順番の管理の仕方でしょうか? (弾丸を発射させても、MAPの後ろに隠れて表示されないなど そういう問題が発生して、どうしようかと思っている所です) これは、他にわかる人からの助言が欲しいです。
474 名前:lesson.ifdef.jp mailto:sage [2008/04/04(金) 22:18:25 ID:I+kk4Izj] >>472 17行目ではなく147行目です・・・ 関数名で検索してください;; >>471 Nadro氏の投稿記事内で時々URLが出ていますが、 全てがダウンロードできるわけではなさそうです。 ttp://rapidshare.com/files/38691306/Chernobyl_Shaders.rar.html ttp://rapidshare.com/files/39444062/Chernobyl_Shaders_Multi_Lighting.rar.html ttp://rapidshare.com/files/41942562/0_1_CGE_Plastic.rar あとは、同じように記事内にShaderのプログラムがそのまま 記載されているので、それを必要な部分に組み込む形になるかと思います。
475 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 00:16:57 ID:Naj1qGbT] >>473 ソースを見た限り、Irrlichtはノードをテクスチャでソートしてしまっているので、 細かい描画順の管理(Ogreのプライオリティ管理のようなもの)は出来ないかと思います。 が、半透明オブジェクトのパスは、通常オブジェクトのパスより後に来ることは保証されているので、 マップのような半透明のHUDで弾オブジェクトが隠れてしまうのを防ぎたいのであれば、 registerNodeForRendering の引数に ESNRP_TRANSPARENT を指定するといいんではないでしょうか。
476 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 00:25:09 ID:8nqMAlGm] >>472 ありがとうございます!試してみます >「回転する前のオリジナルのOBBTreeの位置に当たり判定が発生」しています。 どうりで当たっていないOBBが赤くなると思いましたよ・・。 さて、どうすりゃいいか・・。
477 名前:lesson.ifdef.jp mailto:sage [2008/04/06(日) 01:01:36 ID:qjatMiVM] >>475 >Irrlichtはノードをテクスチャでソートしてしまっているので、 やっぱり、ソートしてる感じですかorz 特定の向きだと表示される場合があったりしてすごいはまりました。 情報ありがとうございます。 はまる前はISceneNodeを継承させずにやってたので気づきませんでした。
478 名前:lesson.ifdef.jp mailto:sage [2008/04/06(日) 01:19:50 ID:qjatMiVM] >>476 アニメータが悪さしてるかと思っていましたが setPosition/setRotationで移動/回転を行ってみたところ こちらでもオリジナルの座標で計算していました。 なので、_checkCollisionなどで「回転」も与えないと厳しそうですね。 オリジナル版では接触部分の色変化はさせていなかったので、 もしかしたら気づかなかったのかもしれません。
479 名前:名前は開発中のものです。 [2008/04/07(月) 17:33:46 ID:tTPi+peN] Irrlicht lessonのとうりインストールしましたが、エラーが出てコンパイルできません。 Vista,VC++Expressで、プロジェクト名lessonです。どこが悪いか教えてください <出力> 1>------ ビルド開始: プロジェクト: lesson, 構成: Debug Win32 ------ 1>マニフェストを埋め込んでいます... 1>mt.exe : general error c10100b1: Failed to load file "..\Debug\lesson.exe". U_Q9LdK 1>~[ 1>ビルドログは "file://c:\irrlicht-1.4\lesson\lesson\Debug\BuildLog.htm" に保存されました。 1>lesson - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== ビルド ログ ビルド 開始: プロジェクト: lesson、構成: Debug|Win32 コマンド ライン 一時ファイル "c:\irrlicht-1.4\lesson\lesson\Debug\RSP00000113044012.rsp" を作成しています。内容 : [ /outputresource:"..\Debug\lesson.exe;#1" /manifest ".\Debug\lesson.exe.intermediate.manifest" ] コマンド ライン "mt.exe @"c:\irrlicht-1.4\lesson\lesson\Debug\RSP00000113044012.rsp" /nologo" を作成しています。 出力ウィンドウ マニフェストを埋め込んでいます... mt.exe : general error c10100b1: Failed to load file "..\Debug\lesson.exe". U_Q9LdK ~[ 結果 ビルドログは "file://c:\irrlicht-1.4\lesson\lesson\Debug\BuildLog.htm" に保存されました。 lesson - エラー 1、警告 0
480 名前:名前は開発中のものです。 [2008/04/07(月) 17:35:25 ID:tTPi+peN] >>479 VC++2008Expressです
481 名前:441 mailto:sage [2008/04/07(月) 21:45:06 ID:HN/Waynt] >>478 >なので、_checkCollisionなどで「回転」も与えないと厳しそうですね。 行列を使って回転の処理もちゃんとしているつもりでしたが どうやら何処か処理が間違っているようです。 野村XX氏のは行列を移動用と回転用で分けて渡していますがこのプログラムでは そうしていません。core::matrix4のtranslateVectとrotateVectを使えば分けなくてすむと 思ったのでそうしました。
482 名前:lesson.ifdef.jp mailto:sage [2008/04/08(火) 00:32:01 ID:UBGq2D2b] >>479 >Irrlicht lessonのとうりインストールしましたが、エラーが出てコンパイルできません。 むむ、すみません。ファイルを作成した場合は、 ビルドする対象に設定する(ソリューションに追加する)必要があります。 その部分を更に詳しく追記しておきましたので、確認してください。 ■エラー内容 通訳?すると、ビルドする対象が存在しないためビルドに失敗しました、です。 ■対処方法 ソリューションにmain.cppを追加してください。 lesson.ifdef.jp/000.html の下部に詳細を追記しておきました。 ソリューション エクスプローラーにファイルを追加すると大丈夫です。 >>441 OBB自体の描画は問題ないようなので、当たり判定をする時の座標を 注目すれば何とかなりそうな気はします。 こちらでも、確認できたら再度お知らせします。 オリジナルよりも簡潔になっている部分も多々あったので応援してます。
483 名前:名前は開発中のものです。 [2008/04/08(火) 19:37:04 ID:46Ui6/PR] >>482 できました。ありがとうございます またお願いします
484 名前:441 mailto:sage [2008/04/08(火) 23:57:58 ID:s2YHW7Mx] とりあえずイベントレシーバーを使ってオブジェクトを自由に移動、回転できるようにしてみました。 でも今日うpは無理かもです。
485 名前:441 [2008/04/10(木) 21:51:47 ID:x0tHNvR8] 1箇所修正しただけで直りました! COBBTreeTriangleSelector::isCollisionの boxA.Matrix.rotateVect(vecAtoBTrans, boxA.Center - boxB.Center); となっているところを boxA.Matrix.rotateVect(vecAtoBTrans, boxB.Center - boxA.Center); にしなければならなかったようです。
486 名前:441 mailto:sage [2008/04/10(木) 23:42:49 ID:x0tHNvR8] 変更予定 1.基底クラスをITriangleSelectorではなく独自のに変更する (CTriangleSelectorだとTrianglesがCOBBTreeTriangleSelectorを作るたび配列Trianglesが 毎回作られ処理時間とメモリが無駄) 2.できればOBBの面が裏返らないようにしたい 3.接触しているポリゴンのペアと交点を取得可能にする 4.OBBTree以外にも球や直方体と当たり判定が可能にする lesson.ifdef.jpさんデバッグありがとうございます
487 名前:名前は開発中のものです。 [2008/04/11(金) 19:18:44 ID:guvAZOSL] こんにちは、Irrlicht Lessonを利用させていただいている者です。 LessonB03ーXファイルの表示について、lesson.exeを実行するとちゃんと表示できます。しかし、Lesson.dswを開いてVC++上で実行するとコンパイルはできても、tiger.xが真っ黒でテキスチャが反映されません。一応Debugフォルダにtiger.xを入れてみてもやっぱりだめです。 何が原因かがわかりません。 Lesson006-テクスチャはともにうまくいきました。 どうぞご確認ください
488 名前:lesson.ifdef.jp mailto:sage [2008/04/11(金) 22:13:29 ID:5Azux61S] >>483 VCの初期設定の不足分の指摘ありがとうございました。開発がんばです! >>441 修正お疲れ様です! 変更予定箇所が沢山ありますね。 変更は大変なので、バックアップを忘れずにっっ >>487 ご利用ありがとうございます。微妙にライトの挙動がおかしいですね… プロジェクトから実行した際に、真っ黒なのを確認しました。 現段階の対応策として、nodeの定義の後に以下を追記してください。 ライトの影響を無視するので、テクスチャの確認は可能です。 node1->setPosition(vector3df(-2,0,0)); node1->setMaterialFlag(EMF_LIGHTING, true); //←これ追加 false:ライト無視 : node2->setPosition(vector3df(2,0,0)); node2->setMaterialFlag(EMF_LIGHTING, true); //←これ追加 false:ライト無視 <<お土産>> 現在作っているFPSゲームの実行ファイルをアップしておきます。 lesson.ifdef.jp/file/irrlesson_hb.zip
489 名前:lesson.ifdef.jp mailto:sage [2008/04/11(金) 22:36:35 ID:5Azux61S] >>487 ご利用ありがとうございます。微妙にライトの挙動がおかしいですね… プロジェクトから実行した際に、真っ黒なのを確認しました。 現段階の対応策として、nodeの定義の後に以下を追記してください。 ライトの影響を無視するので、テクスチャの確認は可能です。 node1->setPosition(vector3df(-2,0,0)); node1->setMaterialFlag(EMF_LIGHTING, false); //←これ追加 false:ライト無視 : ^^^^^ node2->setPosition(vector3df(2,0,0)); node2->setMaterialFlag(EMF_LIGHTING, false); //←これ追加 false:ライト無視 ^^^^^ ※trueではなくfalseです…。 trueで表示されないことを確認して、そのままupしてしまったorz
490 名前:名前は開発中のものです。 [2008/04/13(日) 10:39:19 ID:DXszE/f/] こんなかんじで 2sen.dip.jp:81/cgi-bin/upgun/up4/source/up0364.zip
491 名前:lesson.ifdef.jp mailto:sage [2008/04/13(日) 21:34:01 ID:yZyopwHg] >>490 数日で戦車のXファイルを表示できるまでになったのはスゴイですね キー操作で動かせるようになると、さらに楽しくなるのでオススメです
492 名前:名前は開発中のものです。 mailto:sage [2008/04/13(日) 23:09:36 ID:++ZLZc4W] www-2ch.net:8080/up/download/1208095633541460.Oyrgk4 まだまだ間違いがありました・・。 DLKEYはobbtreeです。多分入れ忘れは無いと思います
493 名前:lesson.ifdef.jp mailto:sage [2008/04/13(日) 23:50:10 ID:yZyopwHg] >>492 ダウンロードしてみましたが、以下の2つが見つかりませんでした… CCameraSceneNode.cpp CCameraTPSSceneNode.cpp とりあえずご報告まで
494 名前:441 mailto:sage [2008/04/14(月) 22:12:55 ID:u3RVdEoB] 現在は使っていないのでなくても大丈夫だと思います・・・
495 名前:470 [2008/04/16(水) 11:25:01 ID:0VSRffog] >>473 返信遅れてすいません。 シーンノードはデータ駆動でデータを再現すれば状態を復元できます。 ゲームの特徴と一致していますし 「キャラクターはシーンノードを継承する」というので同感です。 ただ、言われた通り描画順序の問題や更新処理のみを行うことが困難です。 本格的にやるならIrrlichtの改造が必要そうですね。
496 名前:441 mailto:sage [2008/04/17(木) 22:45:15 ID:t7r2WetS] 三角形同士の当たり判定って結構重いですね・・。 BVHとか使わなきゃいけないんでしょうか?
497 名前:lesson.ifdef.jp mailto:sage [2008/04/19(土) 18:08:01 ID:IeoDZSma] >>441 使用していないファイルをプロジェクトから外すことで 問題なく動作するのを確認できました。 キーで2つのオブジェクトも操作できるので当たり判定の確認も わかりやすくなっていました。 >>470 キャラクターの描画だけであれば、シーンノードで特に問題はありません。 銃弾や他オブジェクトはシーンノードを継承せずに、 drawIndexedTriangleList/drawIndexedTriangleFanを使用して 回避することも可能です。 できればシーンノードを継承していきたいですが、 私としては当分は自前の描画で対応してみようかなと思っています。