トップページgamedev
989コメント399KB

【3Dエンジン】Irrlicht初心者質問スレ【高速描画】

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2006/10/05(木) 06:50:19ID:UN/zUzoQ
zlibライセンスでクロスプラットホームなゲームライブラリ、Irrlichtのスレです。

※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近Irrlichtを始めたばかり
3.SDKを見ても、Googleで検索しても、エキサイト翻訳でもいまいち理解できない人

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「英語読め」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する人 】
・ どんな事で躓いているのか明確にする。
・ 長くならないなら躓いている部分のコードを晒してみてください。
・ 解決した場合、お礼を言うのは当然ですが、何をどうしたら解決したかを明確に書くこと。

前スレ
http://pc8.2ch.net/test/read.cgi/tech/1104179696/
0402名前は開発中のものです。2008/01/24(木) 01:14:49ID:YttCO1k2
>>400
おまいさんのこだわりは結構だし、それを止める気はないが、
現実によっぽど長編の小説でも実際に使われてる文字は
せいぜい2000文字ぐらいだぞ。
(以前トルストイの「戦争と平和」の訳で約1800文字種とかいうのを読んだ)
普通のゲームならせいぜい1000文字ぐらいじゃないか?
なので、限りなく杞憂に近いとは思う。
が、まあがんがれ
0403名前は開発中のものです。2008/01/24(木) 04:50:43ID:xvOsgKrW
横から失礼。

コンシューマだとシナリオ作った後に
よく使う文字をカウントして、必要最低限の文字をもたせたり、
あとは、最近(?でもないか)ならキャッシュ機構をもたせて、
よく使うのはキャッシュヒット、あまり使わないのはその場で生成する。

MLのライブラリの中身見てないから、すでに実装されてるよ!だったらスマソ
0404名前は開発中のものです。2008/01/24(木) 09:52:27ID:YttCO1k2
>>403
CGUITTFontはキャッシング機構を持ってる。
で、400が言ってるのは、
「キャッシュに上限がないみたいだけど、メモリ大丈夫?」
ということ。
で、現実としてそう問題にならんよ、と返答されてる
0405名前は開発中のものです。2008/01/24(木) 10:23:18ID:FpXK7fP/
>>403
CGUITTFontは一度でも現れた文字は必ずキャッシュされているようです。
だからビデオメモリの消費量が心配なのですが…

>>402
情報ありがとうございます。ですがもうFreeTypeでレンダリングするところ
まではできてしまったので、もうこのままテクスチャ転送まで進めたいと思います。
1枚絵表示するのにテクスチャ確保するのもあほみたいなので、フレームバッファに
直接書き込む手段と、2D周りがかなり弱いのでその辺補うライブラリも構築することにします。

それと動的ロードの話が出てきましたけど、IReferenceCountedの実装を見るとヘッダ
ファイルのなかでdelete thisしてます。
これは、コンパイラの最適化か何かでDLL呼び出し元でdeleteされるとまずくないですかね?
new/deleteの実装が異なるコンパイラで作成されたDLLを動的ロードすると、delete時に
不整合を起こすような気がします。あまり詳しくないのでひょっとしたら無駄な心配
なのかもしれませんが…
0406名前は開発中のものです。2008/01/24(木) 10:45:41ID:FpXK7fP/
>>401
回答ありがとうございます。
フルスクリーン切り替えは面倒ですね…。
0407名前は開発中のものです。2008/01/24(木) 10:49:29ID:YttCO1k2
>>405
0.5ぐらいの時代だから2年近く前?にdeleteの問題は公式フォーラムで議論されてたはず。
で、結論は「問題なす」だったはづ
0408名前は開発中のものです。2008/01/24(木) 17:48:13ID:FpXK7fP/
>>407
以前に議論された話題だったのですね。失礼しました。
0409名前は開発中のものです。2008/01/25(金) 19:00:41ID:MPN2QJSG
質問です。直感でさくっとお答え頂きたいです。
FPSゲーを作ろうとしていて、よさげなライブラリを探しています。
画面を左右2分割にして、2人でプレイ出来るようにしたいのですが、
irrlicht での実装は描画の面において楽に出来ますか?
0410名前は開発中のものです。2008/01/25(金) 20:32:40ID:jU51nQMI
>>409
ビューポートとカメラの切り替えで実現できると思います>分割対戦
0411名前は開発中のものです。2008/01/25(金) 22:21:07ID:Vt/UlEbN
>>409
公式のチュートリアルに画面分割のサンプルあるお
0412名前は開発中のものです。2008/01/25(金) 23:45:04ID:+c4l9exa
OctreeTriangleSelectorを使ってメッシュのどの面とどの面が
衝突したかまで分かる詳細な衝突判定ってできますか?
04134092008/01/26(土) 06:10:08ID:/SAwn9ff
>>409-410
レスありがとうございます!
ュルルルリッヒエンジンでがんばってみます。
0414名前は開発中のものです。2008/01/26(土) 06:11:19ID:/SAwn9ff
スマソ >>410-411ですた。ありがとう!
0415名前は開発中のものです。2008/01/26(土) 18:00:09ID:0EKxzkd2
OGREからこっちに鞍替えを目論んでます。
本家のFeaturesに「BlenderのエクスポーターがSDKにあるよ」みたいな事が書いてあったんで1.4のSDK落としてみたんですが、見つかりません…
readmeのフォルダ一覧にもexportersフォルダが書いてあるのに見つからず。
どうすれば…orz
OGRE用のメッシュファイル(.mesh)も読めるみたいですが、試してみた方いますか?
0416名前は開発中のものです。2008/01/26(土) 18:35:32ID:zD+QiSlQ
>>415
OGREのCVSに「blenderimport」と「blendersceneexporter」ってフォルダがあるけど
これがBlender関係のSDKじゃね?
0417名前は開発中のものです。2008/01/26(土) 21:19:47ID: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の組み合わせでやってる人、居ませんか?
0418名前は開発中のものです。2008/01/26(土) 22:32:35ID:zD+QiSlQ
>>417
すまん、「本家のFeatures」を、OGREのFeaturesと勘違いしてたみたいだ
Irrlichtのスレなのにな・・・

Irrlicht + Blenderなら、アニメーションが出来るDirectXのメッシュ(.x)使った方がいい
IrrlichtはXメッシュをそのまま読めるからIrrlicht用にわざわざコンバートしなくて済むしな

ただ、Xメッシュはツールによってフォーマットが少し異なる場合があるので注意な
0419名前は開発中のものです。2008/01/27(日) 00:34:07ID:+Y3aPJmy
メタセコで作ると「{」の位置のせいで読めなかったりな。
仕方ないから「{」の前に改行入れるコンバータ作っちまった。
0420名前は開発中のものです。2008/01/27(日) 15:56:59ID:oNRFDMwA
>>418
.xで試してみました。
IrrlichtのMesh Viewerで読めたので、たぶんコレで大丈夫だと思います。
ありがとうございます。
0421名前は開発中のものです。2008/01/28(月) 17:43:17ID:afuGywxJ
>>420
ところでOGREからこっちに移行する気になった理由はなんだったんだろか
0422名前は開発中のものです。2008/01/28(月) 17:58:37ID:XOEvg/3a
どうせ「英語読めない」でしょ
0423名前は開発中のものです。2008/01/28(月) 23:58:25ID:G7mZ8jO6
自分はOGRE知らないのですが、ライセンスに惹かれてIrrlichtを選択しました。

ところで、drop()を忘れそうな自分はboost::intrusive_ptrを愛用していますが、
使ってる人はいるでしょうか?
0424名前は開発中のものです。2008/01/30(水) 11:06:43ID:+OYkniIM
>>423
俺も昔は使ってたけど、サイズがでかくなるし、ポインタコピーするたびに
内部でごにょごにょやってるしで精神衛生上よろしくない

だから、解放処理が必要なオブジェクトはシングルトンなマネージャクラスに任せてる

マネージャのコンストラクタで生成&初期化して、デストラクタで開放させれば
管理する必要が無くなる
やろうと思えば手動開放もできる


使うときは

IrrlichtDevice *dev = IrrManager::getSingleton().getIrrDevice();

みたいな感じで、初期化さえしとけばいつでもどこでもアクセスできる


OGRE使ってこの方法を見てから、俺の中ではこれが主流になってる
0425名前は開発中のものです。2008/02/02(土) 16:46:40ID: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);
0426名前は開発中のものです。2008/02/05(火) 00:59:32ID:iDwHPm2h
Material.Thickness=10.0;
driver->setMaterial(Material);
driver->draw3DLine(・・・)

というとき、Thicknessの値をいろいろ変えても画面上の線が常に1ドット幅なんですが、
どうすれば2ドットの線などを描けますか?
0427名前は開発中のものです。2008/02/05(火) 20:36:47ID:iDwHPm2h
エンジンをDX9からOPENGLにしたらうまくいきました
メインサポートがOpenGLだったんですね
0428名前は開発中のものです。2008/02/06(水) 00:53:20ID:Ac93WCkK
たぶん、ラインのサイズ指定がOpenGL依存なんだろうと思う
0429名前は開発中のものです。2008/02/13(水) 21:57:17ID:sC00+SwF
OpenGLだとaddLightSceneNodeで照らしたaddCubeSceneNodeがちゃんと見えるのに、
DirectXだと光源がない状態になってしまいます。(真っ黒

しかし、ある友人のパソコンでは、
OpenGLのときにguifont->drawをするとクラッシュしてしまうので、(DXなら動く)
DirectXのサポートは続けておきたいのですが、どうしたらいいですか?

その他人のパソコンでguifont->drawが使えない理由としてどんなものか考えられるか、と、
DirectXに切り替えると上の事例が起きる問題の解決方法を教えてください。
0430名前は開発中のものです。2008/02/13(水) 23:32:38ID:1ZAmjx1a
>>429
友人のGPUがOpenGL2.0に準拠してないかバグ持ちドライバな可能性がある
0431名前は開発中のものです。2008/02/13(水) 23:43:28ID:sC00+SwF
>>430
うーなるほど そうだとするとこっちには手が無いですね・・・ ありがとうございます
0432名前は開発中のものです。2008/02/15(金) 13:19:44ID:uwsfmr7Z
IrrlichtML版のgetFontで得た日本語フォントをISceneManager::addTextSceneNodeに渡すと、
CGUITTGlyphのデストラクタでエラーが出ます。

サンプルでもNode関係を使っているのはなさそうなので、
これは仕様なのでしょうか?
環境はWindowsXPMCEのSP2、IrrlichtML1.4、VisualStudio2005Pro、freetype-2.3.5です。
0433名前は開発中のものです。2008/02/15(金) 22:44:27ID:aJ3r8mIn
>>425
見えない敵とかの描画を省略しようと思ったらそら交差判定が必要になるでしょう
0434名前は開発中のものです。2008/02/16(土) 00:11:18ID:Kcju6cnr
ttp://lesson.ifdef.jp/B03.html
このバグ、1.4では直ってないの
0435名前は開発中のものです。2008/02/16(土) 19:51:58ID:BJXzP4O8
皆さん音楽はIrrlichtで音楽はどうしてますか?IrrKangはフリー以外だとライセンス購入が
必要ですし…何かお勧めのライブラリがあれば教えてほしいです。
0436名前は開発中のものです。2008/02/17(日) 11:12:58ID:k/Iqe8sD
xファイルの読み込みについて質問があります。
irrlichtでxファイルを読み込むときに右手、左手の座標系を指定して読み込ませることって
できるんでしょうか?

ttp://gamdev.org/up/img/11075.jpg
↑のようにXSIで作成しているときと、Xファイルビューアまたはirrlicht上で表示したときに鏡
 像のような表示になってしまうのを、なんとかしたいのです。

環境はWinXP VC2008 irrlicht-1.4 です。
0437名前は開発中のものです。2008/02/18(月) 20:53:38ID:9PaR4TSR
>>432
driverに預けてあるテクスチャを本体が先に開放してるくさい
どこかで既にremoveTextureが呼ばれてる気がする

addTextSceneNodeの後にfont->grab()でもしておけばエラー回避は可能
その代わり、テクスチャ開放がされなくなります
どうしたものか
0438名前は開発中のものです。2008/02/19(火) 11:43:22ID:CEbiXydm
ニコニコ吹いたw
0439名前は開発中のものです。2008/02/24(日) 02:38:40ID:eWBznvro
過疎り杉で全俺が泣いた。

ところで、436の件が自己解決したので報告。
汚い方法ではあると思うけど
irrlichtのCXMeshFileLoaderを元にx座標を反転させながら
xファイルを読み込むファイルローダを作って解決させました。
0440名前は開発中のものです。2008/02/24(日) 11:04:27ID:OyDG9+KH
>>439
おつかれです。
0441名前は開発中のものです。2008/02/26(火) 23:42:36ID:ve4woYRm
カメラがどんな向きを向いていても
常に手前から光が当たる
手抜きライティングをするにはどうすればいいですか?
0442名前は開発中のものです。2008/02/27(水) 00:44:37ID:pSPDiQm8
>>441
ライティングしないようにするとかはダメ?
(ポリorテクスチャの色そのまま表示するように)
対象ノード->setMaterialFlag(irr::video::EMF_LIGHTING, false);
0443lesson.ifdef.jp2008/02/27(水) 01:28:06ID:7TCghY78
>>441
考え方として、以下のようなものはどうでしょう?
1.カメラの背後に光源という感じに、カメラを親として光源を設定
2.キーが押されたら、カメラの代わりにワールドを動かす
これで、一応はカメラの方向から必ずライティングされるかと
0444名前は開発中のものです。2008/02/28(木) 15:18:04ID:e5iGSVK/
いつになったらゲームパッド対応するんだろう・・・
0445名前は開発中のものです。2008/02/28(木) 23:49:36ID:9jMY1Ybl
>>442
立体感つけたいのでライティングします。
>>443
CameraSceneNodeFPSと組み合わせたいのでそれはちょっと。
0446lesson.ifdef.jp2008/02/29(金) 19:57:00ID: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)=親と一緒をセット
で、やってみてください。
0447lesson.ifdef.jp2008/02/29(金) 19:59:41ID:MU+29BuV
446の修正
・ライトを作成する時に、親を「ライト」にすれば大丈夫です。
 ↓
・ライトを作成する時に、親を「カメラ」にすれば大丈夫です。
04484412008/03/04(火) 23:27:13ID:+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;
0449lesson.ifdef.jp2008/03/08(土) 20:08:31ID:42plfOng
>>441
おめでとー!

これを少しいじれば、太陽のように見せることもできそうですね。
あとでやってみようかな。
04504412008/03/08(土) 23:32:53ID:vuhDlgNP
>>448
あれ、ELT_POINTでも同じになっている気がします・・。
点光源なのに離れても暗くなりません。
あと、テクスチャつきだとライトの色は反映されているみたいですが影がつきません。
0451lesson.ifdef.jp2008/03/09(日) 01:14:28ID:QaJyCdZ9
>>441
テクスチャつきのオブジェに対してのライトは
マテリアルの設定を操作する必要があります。

SMaterialのLightingを見てみてください。
これがライトの影響を受けるか受けないかです。
(デフォルトでは影響を受けないようになってたかも)
0452名前は開発中のものです。2008/03/11(火) 21:38:47ID:qxZlvuLX
αつきテクスチャを貼り付けたビルボードをαテストを使って透過させつつ、
頂点カのαを減少させてフェードアウトってできるんでしょうか?
EMT_TRANSPARENT_ALPHA_CHANNELに頂点のα値を反映させたいんです
0453名前は開発中のものです。2008/03/11(火) 23:26:06ID:txVQuh45
lessonさんのライトのところを見たんですが
FPSゲームでよく使われるスポットライトも作れるんでしょうか
その場合カメラと連動してライトも動かさないといけないのですが・・・
0454名前は開発中のものです。2008/03/12(水) 22:51:57ID:biTsIJxr
>>451
いや、デフォルトではtrueですが・・。
何でだろ、examplesのSpecial FxのroomMeshを読み込む部分のコードを
そのままコピーしたらちゃんとライティングされています。
04554412008/03/12(水) 23:35:51ID:biTsIJxr
その内ソースをupします。
0456名前は開発中のものです。2008/03/13(木) 16:26:24ID:Aiv+dbIO
SIRENみたいなゲームも作れそうですね
0457名前は開発中のものです。2008/03/13(木) 17:25:48ID:23U/XaUN
>>453
頂点単位でしかライティングできないから、ライトマップ使わないとだめ。
勘違いしてたらすまん。
0458名前は開発中のものです。2008/03/14(金) 22:33:58ID:HWct05mu
>>457
いや、出来なくないと思いますが?
バンプマッピングとかパララックスマッピング使えますし。
フォンシェーディングは自分でシェーダー読み込まないと使えないみたいですが。
0459名前は開発中のものです。2008/03/17(月) 23:23:15ID: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の使い方はここを参考にしました。というよりプログラムをコピーしました。
04604412008/03/17(月) 23:32:00ID:haIYreE8
>>459 = >>441
とりあえず上げときます。
0461名前は開発中のものです。2008/03/21(金) 13:41:00ID:k9t2KKAY
単純なコリジョンについて誰か教えてください。
BB対BB、セレクタ対セレクタ、セレクタ対BBのどれかで
単純に現在接触しているかを知るにはどうすればいいですか?
0462名前は開発中のものです。2008/03/21(金) 17:06:47ID:ipDiEarq
円が2個あるとします。 接触する事とは、中心と中心の距離で求められます。
0463名前は開発中のものです。2008/03/21(金) 18:15:39ID:k9t2KKAY
>>462
手のジョイント位置と対象位置でバウンディングスフィアしてパンチ!とか一応やってみました。
でもirrlichtの機能の範囲でBBなんかでさくっと判定できる方法があればやり方を知りたいです。
具体的にはCSceneNodeAnimatorCollisionResponseを参考にしてみたんですが
移動抜きで現時点の接触を知りたい場合にスフィアなりせずにirrlichtの機能任せにできないかなと思って。
04644412008/03/22(土) 21:30:03ID: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としての機能もつけたいんですがうまくいきません・・。
ほかにもいろいろ問題がありますが、まぁ動いたのでいいでしょう・・・。
0465名前は開発中のものです。2008/03/23(日) 17:58:02ID:YyMn0R5A
また単発質問させてください。

スクリーンの大きさぴったりに描画されるビルボードの作り方はありますでしょうか?
(カメラを親にしてビルボードを作成しているので常に目の前にビルボードを描画するところまではできています。)

何をしたいかというと
1回テクスチャにレンダしたデータを画面に表示するときにピクセルシェーダを経由して表示させようとしています。
draw2dimageではシェーダーマテリアルの設定がうまくいきませんでした。

何かヒントでもあればご教示ください。
0466lesson.ifdef.jp2008/03/23(日) 22:41:58ID:fLRzMwSc
プロバイダが9日から規制されてて書き込みできずorz
規制解除されたので書き込みを

>>441
ライトはビデオカードによって表示できる個数に制限があるかもです
古いカードでも3個まではライトを確認してます
(前面から青、背面から赤、カメラ位置に白で確認)
うちの環境だとバンプマッピングができず、ビデオカード変えると
OpenGLでの描画ができず・・・ (初期不良か

ファイルはダウンロードできたのでOBBTreeを見てみたいと思います
当たっているOBBが違う色で表示されれば目視が楽そうですね
色々いじってみます(rockwall.bmpがなかったので適当に作りました)
04674412008/03/24(月) 21:11:28ID: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と同じフォルダ構造にしていたんです)
04684652008/03/24(月) 23:59:55ID:YyeAT6+O
>>467
ご指摘ありがとうございます。
指摘されたHLSLを使うことで、うまくできました。

以下が作ってたサンプルになります。
(内容は法線MAPを使って輪郭描画を行うサンプルです。)
ttp://gamdev.org/up/img/11248.zip
0469名前は開発中のものです。2008/03/25(火) 00:01:49ID:YyeAT6+O
あ、書き込み全部書く前に投稿してしまた、、orz..
上のZIPですが、自分の環境がirrlichtライブラリの中に手を入れたりしているので
そのままではコンパイルできないかも知れませんので注意してください。
0470名前は開発中のものです。2008/03/29(土) 00:01:52ID:9eKD+9jY
キャラクタークラスはどう作ります?
候補と印象は以下

1、エンティティの中にシーンノードを保持する。
 シーンノードを自由に組み合わせられるのは魅力的だが、
 特殊な表現をするには結局新しいシーンノードを作る必要がありそう。

2、シーンノードを継承する。
 自由に描画処理を記述できるメリットは大きいが面倒そう。

3、シーンノードアニメータを継承してシーンノードに追加する。
 複数のシーンノードを組み合わせて使うのが大変そう。

4、それ以外。
0471名前は開発中のものです。2008/03/30(日) 23:27:58ID:q0Ctn/EA
ttp://www.irrlicht3d.org/wiki/index.php?n=Main.Shaders
Special Shader Pack by Nadroって何処からDL出来るんですか?
フォーラムに飛びますが何処からDLするのか分かりません。
0472lesson.ifdef.jp2008/04/04(金) 22:03:23ID: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()が悪さをしているのだとは思いますが
そこまでは調べていません。

とりあえず報告まで お試しください
0473lesson.ifdef.jp2008/04/04(金) 22:10:21ID:I+kk4Izj
>>470
キャラクタークラスを作成するにあたって、
私としては「2、シーンノードを継承する。」が一番楽だとは思います。
キャラを用意して、動きなどを設定してあげれば
render()で全て描画してくれるので確かに楽です。
getPosition/setPosition/getRotationなどがすぐに使えるのがいいです。

気になる点としては、描画順番の管理の仕方でしょうか?
(弾丸を発射させても、MAPの後ろに隠れて表示されないなど
 そういう問題が発生して、どうしようかと思っている所です)
これは、他にわかる人からの助言が欲しいです。
0474lesson.ifdef.jp2008/04/04(金) 22:18:25ID: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のプログラムがそのまま
記載されているので、それを必要な部分に組み込む形になるかと思います。
0475名前は開発中のものです。2008/04/06(日) 00:16:57ID:Naj1qGbT
>>473
ソースを見た限り、Irrlichtはノードをテクスチャでソートしてしまっているので、
細かい描画順の管理(Ogreのプライオリティ管理のようなもの)は出来ないかと思います。

が、半透明オブジェクトのパスは、通常オブジェクトのパスより後に来ることは保証されているので、
マップのような半透明のHUDで弾オブジェクトが隠れてしまうのを防ぎたいのであれば、
registerNodeForRendering の引数に ESNRP_TRANSPARENT を指定するといいんではないでしょうか。
0476名前は開発中のものです。2008/04/06(日) 00:25:09ID:8nqMAlGm
>>472
ありがとうございます!試してみます

>「回転する前のオリジナルのOBBTreeの位置に当たり判定が発生」しています。
どうりで当たっていないOBBが赤くなると思いましたよ・・。
さて、どうすりゃいいか・・。
0477lesson.ifdef.jp2008/04/06(日) 01:01:36ID:qjatMiVM
>>475
>Irrlichtはノードをテクスチャでソートしてしまっているので、
やっぱり、ソートしてる感じですかorz
特定の向きだと表示される場合があったりしてすごいはまりました。
情報ありがとうございます。

はまる前はISceneNodeを継承させずにやってたので気づきませんでした。
0478lesson.ifdef.jp2008/04/06(日) 01:19:50ID:qjatMiVM
>>476
アニメータが悪さしてるかと思っていましたが
setPosition/setRotationで移動/回転を行ってみたところ
こちらでもオリジナルの座標で計算していました。

なので、_checkCollisionなどで「回転」も与えないと厳しそうですね。
オリジナル版では接触部分の色変化はさせていなかったので、
もしかしたら気づかなかったのかもしれません。
0479名前は開発中のものです。2008/04/07(月) 17:33:46ID: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



0480名前は開発中のものです。2008/04/07(月) 17:35:25ID:tTPi+peN
>>479
VC++2008Expressです
04814412008/04/07(月) 21:45:06ID:HN/Waynt
>>478

>なので、_checkCollisionなどで「回転」も与えないと厳しそうですね。
行列を使って回転の処理もちゃんとしているつもりでしたが
どうやら何処か処理が間違っているようです。
野村XX氏のは行列を移動用と回転用で分けて渡していますがこのプログラムでは
そうしていません。core::matrix4のtranslateVectとrotateVectを使えば分けなくてすむと
思ったのでそうしました。
0482lesson.ifdef.jp2008/04/08(火) 00:32:01ID:UBGq2D2b
>>479
>Irrlicht lessonのとうりインストールしましたが、エラーが出てコンパイルできません。
むむ、すみません。ファイルを作成した場合は、
ビルドする対象に設定する(ソリューションに追加する)必要があります。
その部分を更に詳しく追記しておきましたので、確認してください。

■エラー内容
通訳?すると、ビルドする対象が存在しないためビルドに失敗しました、です。

■対処方法
ソリューションにmain.cppを追加してください。
http://lesson.ifdef.jp/000.html の下部に詳細を追記しておきました。
ソリューション エクスプローラーにファイルを追加すると大丈夫です。

>>441
OBB自体の描画は問題ないようなので、当たり判定をする時の座標を
注目すれば何とかなりそうな気はします。
こちらでも、確認できたら再度お知らせします。
オリジナルよりも簡潔になっている部分も多々あったので応援してます。
0483名前は開発中のものです。2008/04/08(火) 19:37:04ID:46Ui6/PR
>>482
できました。ありがとうございます
またお願いします
04844412008/04/08(火) 23:57:58ID:s2YHW7Mx
とりあえずイベントレシーバーを使ってオブジェクトを自由に移動、回転できるようにしてみました。
でも今日うpは無理かもです。
04854412008/04/10(木) 21:51:47ID:x0tHNvR8
1箇所修正しただけで直りました!

COBBTreeTriangleSelector::isCollisionの

boxA.Matrix.rotateVect(vecAtoBTrans, boxA.Center - boxB.Center);
となっているところを
boxA.Matrix.rotateVect(vecAtoBTrans, boxB.Center - boxA.Center);
にしなければならなかったようです。
04864412008/04/10(木) 23:42:49ID:x0tHNvR8
変更予定
1.基底クラスをITriangleSelectorではなく独自のに変更する
(CTriangleSelectorだとTrianglesがCOBBTreeTriangleSelectorを作るたび配列Trianglesが
毎回作られ処理時間とメモリが無駄)
2.できればOBBの面が裏返らないようにしたい
3.接触しているポリゴンのペアと交点を取得可能にする
4.OBBTree以外にも球や直方体と当たり判定が可能にする

lesson.ifdef.jpさんデバッグありがとうございます
0487名前は開発中のものです。2008/04/11(金) 19:18:44ID:guvAZOSL
こんにちは、Irrlicht Lessonを利用させていただいている者です。
LessonB03ーXファイルの表示について、lesson.exeを実行するとちゃんと表示できます。しかし、Lesson.dswを開いてVC++上で実行するとコンパイルはできても、tiger.xが真っ黒でテキスチャが反映されません。一応Debugフォルダにtiger.xを入れてみてもやっぱりだめです。
何が原因かがわかりません。
Lesson006-テクスチャはともにうまくいきました。
どうぞご確認ください
0488lesson.ifdef.jp2008/04/11(金) 22:13:29ID: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ゲームの実行ファイルをアップしておきます。
http://lesson.ifdef.jp/file/irrlesson_hb.zip
0489lesson.ifdef.jp2008/04/11(金) 22:36:35ID: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
0490名前は開発中のものです。2008/04/13(日) 10:39:19ID:DXszE/f/
こんなかんじで
http://2sen.dip.jp:81/cgi-bin/upgun/up4/source/up0364.zip
0491lesson.ifdef.jp2008/04/13(日) 21:34:01ID:yZyopwHg
>>490
数日で戦車のXファイルを表示できるまでになったのはスゴイですね
キー操作で動かせるようになると、さらに楽しくなるのでオススメです
0492名前は開発中のものです。2008/04/13(日) 23:09:36ID:++ZLZc4W
http://www-2ch.net:8080/up/download/1208095633541460.Oyrgk4
まだまだ間違いがありました・・。
DLKEYはobbtreeです。多分入れ忘れは無いと思います
0493lesson.ifdef.jp2008/04/13(日) 23:50:10ID:yZyopwHg
>>492
ダウンロードしてみましたが、以下の2つが見つかりませんでした…
CCameraSceneNode.cpp
CCameraTPSSceneNode.cpp
とりあえずご報告まで
04944412008/04/14(月) 22:12:55ID:u3RVdEoB
現在は使っていないのでなくても大丈夫だと思います・・・
04954702008/04/16(水) 11:25:01ID:0VSRffog
>>473
返信遅れてすいません。

シーンノードはデータ駆動でデータを再現すれば状態を復元できます。
ゲームの特徴と一致していますし
「キャラクターはシーンノードを継承する」というので同感です。

ただ、言われた通り描画順序の問題や更新処理のみを行うことが困難です。
本格的にやるならIrrlichtの改造が必要そうですね。
04964412008/04/17(木) 22:45:15ID:t7r2WetS
三角形同士の当たり判定って結構重いですね・・。
BVHとか使わなきゃいけないんでしょうか?
0497lesson.ifdef.jp2008/04/19(土) 18:08:01ID:IeoDZSma
>>441
使用していないファイルをプロジェクトから外すことで
問題なく動作するのを確認できました。
キーで2つのオブジェクトも操作できるので当たり判定の確認も
わかりやすくなっていました。

>>470
キャラクターの描画だけであれば、シーンノードで特に問題はありません。
銃弾や他オブジェクトはシーンノードを継承せずに、
drawIndexedTriangleList/drawIndexedTriangleFanを使用して
回避することも可能です。
できればシーンノードを継承していきたいですが、
私としては当分は自前の描画で対応してみようかなと思っています。
04984412008/04/20(日) 20:58:58ID:A28b/pa+
"Cache-Ef?cient Layouts of Bounding Volume Hierarchies"
を読んでみる事にします。
04994412008/04/20(日) 21:02:14ID:A28b/pa+
すいませんコピーするときfiを直すの忘れてました。
Cache-Efficient Layouts of Bounding Volume Hierarchies
です。果たして実装できるのだろうか?
ttp://gamma.cs.unc.edu/COLBVH/
ttp://lucille.atso-net.jp/blog/?p=177
ttp://lucille.atso-net.jp/wiki/index.php?%B6%F5%B4%D6%A5%C7%A1%BC%A5%BF%B9%BD%C2%A4
05004702008/04/26(土) 22:21:42ID:LvlHrFkO
>>497
自前で描画できれば最高ですね。
実力不足でシーンノードを利用するというのが本音です。
できればオブジェクトは統一的に管理したいので
OnRegisterSceneNodeを呼ぶタイミングを操作する手もあるかもしれません。
これならIrrlichtを修正する必要はないですしね。
色々と検討してみます。
05014702008/04/26(土) 22:43:32ID:LvlHrFkO
>>500
テクスチャでソートされてましたね・・・。
すいません、忘れてました。
勉強してきます。
■ このスレッドは過去ログ倉庫に格納されています