[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/29 12:35 / Filesize : 247 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】 DirectX初心者質問スレ Part18 【C】



1 名前:デフォルトの名無しさん mailto:ライシンマハケン [2008/07/17(木) 13:50:04 ]
1 名前:デフォルトの名無しさん[sage] 投稿日:2008/04/09(水) 09:55:56
※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ

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

【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。

【C++】 DirectX初心者質問スレ Part17 【C】
pc11.2ch.net/test/read.cgi/tech/1207702556/

2 名前:デフォルトの名無しさん mailto:ハイホイハーイ [2008/07/17(木) 13:51:20 ]
>>1


3 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 14:02:03 ]
超初心者用にさきほど質問をしたのですが、まったく返事がこないので
こちらで質問させてください。

DirectX SDK 9.0をインストールして、その中にあったVoiceClientServerの
voiceserverを試しにビルドしてみたのですが、
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(236) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。
などのコンパイルエラーがでてしまいます。
検索をしたらいくつかみつかったのですが、はっきりとした原因と解決策はわかりませんでした。
申し訳ありませんが、何か知っている方がいらっしゃいましたら教えてください。
お願いします。

4 名前:3 mailto:sage [2008/07/17(木) 14:08:19 ]
補足します。
IDEはVisual C++ 2008 Express Editionです。

5 名前:3 mailto:sage [2008/07/17(木) 14:55:57 ]
超初心者用の方で回答いただきました。
マルチのようになってしまい申し訳ありません。

以下に解決方法を報告させていただきます。

該当行の直前に
#define POINTER_64 __ptr64
を追加しやりすごすことができました。

次のエラーはrcファイルの中でインクルードしているafxres.hがみつからないというものでした。
検索してみると、
#include <windows.h>
#define IDC_STATIC (-1)
と書いたafxres.hをカレントディレクトリにおけば解決とかいてありそれで大丈夫でした。
あとはライブラリの名前dplay.libをdplayx.libに修正したらできました。

ありがとうございました。

6 名前:3 mailto:sage [2008/07/17(木) 14:57:08 ]
該当行というのは
winnt.hの
typedef void * POINTER_64 PVOID64;
のことです。

7 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 17:47:21 ]
>該当行の直前に
>#define POINTER_64 __ptr64
>を追加しやりすごすことができました。

winnt.hのバージョンが古かったって落ちはないか?

8 名前:3 mailto:sage [2008/07/17(木) 18:00:28 ]
>>7さん

winnt.hをみたところBUILD Version: 0091とあります。
フォルダはv6.0A\Includeです。

とりあえず報告まで。

9 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 18:45:29 ]
【関連サイト】

MSDN DirectX
www.microsoft.com/japan/msdn/directx/default.aspx

DirectX Home Page
www.microsoft.com/japan/windows/directx/default.mspx

BBX (掲示板)
ttp://isweb8.infoseek.co.jp/computer/bbx/

DXライブラリ置き場
ttp://homepage2.nifty.com/natupaji/DxLib/

Lamp:ゲーム開発とその学習をサポートするミドルウェア
ttp://lamp.sourceforge.jp/

TWINTAIL LOVERS.
ttp://www.twin-tail.jp/

[t-pot] PROGRAMMING
ttp://www.t-pot.com/program/

GamDevPukiWiki - DirectX総合スレ (過去ログ等)
gamdev.org/w/?%5B%5BDirectX%C1%ED%B9%E7%A5%B9%A5%EC%5D%5D

GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
gamdev.org/w/?%5B%5B3DCG%C0%BD%BA%EE%A5%BD%A5%D5%A5%C8%5D%5D

ゲームを作るための素材を集めよう まとめサイト(※消えているようです)
paw.my-sv.net/index.html


10 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 18:47:30 ]
----------------------------------------------------------------------
4 デフォルトの名無しさん [sage] 2008/04/09(水) 15:18:25

マルペケつくろーどっとコム
ttp://marupeke296.com/

↑これも入れてもいいんじゃね?
てかここ読めば大抵わかるのと、超初心者ターゲットのしつこいくらいの説明がいい
----------------------------------------------------------------------


通りすがりの俺がテンプレ貼るっていったい・・・



11 名前:デフォルトの名無しさん mailto:sage [2008/07/17(木) 23:23:11 ]
前スレの話だけど、自前フォーマット作れないのは
プログラミングの技術っていうより、理論がわかっていないんだと思う

12 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 10:49:43 ]
シェーダープログラムで
CommitChangeってやらなくてもシェーダープログラム内のデータは
かわってるけど、これが必要な場面というか
明示的にやらないとダメな理由ってあるのかな?




13 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 11:10:18 ]
>>11
だから、理論をわかるための入門としてXファイルは手頃なんじゃないか

14 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 14:16:49 ]
RADEON系のビデオチップで
1024x1024のRHW付き2次元テクスチャをある一定以上拡大すると、
マイナス座標の頂点が固定される(それ以上マイナス方向に拡大できなくなる)
ようになってしまうのですが、なにかレンダリング設定等で回避する方法はないでしょうか?
ちなみにnVidia系ではこの現象は出てないです。

開発環境はDirectX9c,Win2k,VC++2005

15 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 16:45:57 ]
>>14
それは頂点座標がGuardBand***を超えてるだろう。
ポリゴンを自分でクリッピングすればいい。

16 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 23:20:45 ]
>>14
別にRadeonに限った話じゃない。
自分でシザリングすればいいだけの事。

nVIDIAは・・・まぁ中で勝手にやってるんだろうな。

17 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 01:14:37 ]
そんな感じで変換済み頂点はハードに影響する部分があるので
変換行列や頂点シェーダでごにょごにょして入力座標値とスクリーン座標値を
一致させるやり方をお勧めするよ。

18 名前:14 mailto:sage [2008/07/19(土) 13:13:48 ]
>>15-17
回答ありがとうございます。

やっぱり自前でクリッピングしないとだめですか。
回転なしの四角平面ポリゴンならそれも簡単なんですが、
回転が入ると最悪8頂点に分割しなければならないので、
ソフトウェア処理で余計な処理コストが追加されるのが嫌だったのですが。

とりあえず、回転行列を監視して個別に振り分けて処理コストが最低限で済ませる
ようにアルゴリズムを考えてみます。

19 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:17:56 ]
シザリング面倒なら16x16の格子とかにすりゃいいだけのヤカン

20 名前:デフォルトの名無しさん [2008/07/20(日) 18:50:30 ]
>>11

で、それを言って何の参考になる?
マスターベーションでもやってろ、仕様もない糞が。



21 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 14:28:41 ]
D3DXMatrixPerspectiveOffCenterLHを使っているんですが
引数のl,r,b,tはどこの値なんですか?
Nearプレーン(zn)での描画する範囲が幅r-l、高さt-bの長方形ということでいいんですか

22 名前:デフォルトの名無しさん [2008/07/23(水) 16:52:18 ]
カメラの向きを回転したいのですが、縦の回転が出来ません。どうやったら良いのでしょうか?
横の回転は、
D3DXMATRIXA16 m;
D3DXMatrixIdentity( &m );
D3DXMatrixRotationY( &m, 回転量 );
vDir = vLookAt - vEye;
D3DXVec3TransformCoord( &vDir, &vDir, &m );
vLookAt = vEye + vDir;
で求めています。

D3DXMatrixRotationY( &m, 回転量 );
の部分に
D3DXMatrixRotationX( &m, 回転量 );
D3DXMatrixRotationZ( &m, 回転量 );
を追加しても変な動きになってしまいます。

23 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 17:32:20 ]
横回転はY軸を回す。
だったら縦はX軸を回すだろ?
どううまくいかないんだ?

24 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 17:59:29 ]
>>23
現在向いている方向が(0,0,1)として。
Xだけで回転すると正面と真後ろを向いている時は上手く行くんだけど、真横を向くと上下に回転しなくなります。
一方Zだけで回転すると、真横は上手く行くけど正面真後ろがダメになります。

25 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:09:39 ]
そりゃそうだろ。
D3DXVec3TransformCoord()使うとかクォータニオン使うとかでどうか

26 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:53:42 ]
>>25
何故そうなるのかもD3DXVec3TransformCoordを使うやり方も分かりません

27 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:24:37 ]
くだすれの方でも同じような質問あったから除いてみ

28 名前:22 mailto:sage [2008/07/23(水) 22:01:30 ]
調べてみましたがさっぱり分かりません。
XYZと回転マトリクスを1つずつ計算してみたりしましたが、最初よりバグっています。
どう計算したらいいんでしょうか?ソースを書いて貰えると助かります。
根本的に理解できていないなら、その根本的な部分を説明するサイトか書籍を教えてください。

29 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 22:37:36 ]
XとZの回転量って個々にちゃんと計算してるの?それが不安

30 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 01:47:30 ]
>>28
「一次変換 行列」でググってみて。

メラの行列がわからないって事は、
カメラの行列を作るときに何が起きているかを理解していないって事。
「透視射影行列」あたりでググってみても良い。

行列の本は簡単なので良いから1冊ぐらいは読もうね。
キーワードは「線形代数」ね。



31 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 01:50:35 ]
>>28
個人的なお勧め本は 「リアルタイム レンダリング 第2版」
本の内容を一通り理解して頭に入れとけばどけばまず間違いないと思う。

32 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 05:45:51 ]
>>28
昔、座標系に関してお世話になったサイト思い出して
ぐぐってみたらあってびっくりした

宇治社中
web.archive.org/web/20030405025753/www.cc.rim.or.jp/~devilman/3dCoding/3dCoding.html

なつかしす・・・

文字化けしてたら
メニュー→表示→文字エンコーディング→日本語のなにか
で治ると思う

3Dはまず行列使いにならないと他の話についていけないので
ローカルからワールド、ワールドからローカルへと変換できるようになっておいたほうがいいと思う

33 名前:デフォルトの名無しさん [2008/07/24(木) 12:16:14 ]
>>28
マイクロソフトのフレームワークや書籍のサンプルを筆頭に、何で誰もそのソースを書かないと思う?
xz回転を加えるだけで、ソースが何百行も追加になり複雑になるからだよ。
directxのAPIだけじゃ不可能で、要素を1個ずつsin,cosで計算しないといけないから、行列を根元の部分から理解していないと絶対に作れない。
y軸だけならAPI1行で済む。
そんな簡単にカメラが動いたら、今頃世の中に大作ゲームがわんさか溢れてるよ。
ジンバルロックの問題もあるし、xz回転はしない方がいい。素人にはお勧めしない。

34 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 18:25:29 ]
つか
カメラまわしてから注視点きめるんじゃなくて
注視点まわせばええんとちゃう?

35 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 18:38:58 ]
視点と注視点の概念がまだわかってないんじゃないだろうか?

36 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 18:42:23 ]
いろいろやってみりゃわかってくるね。
でもいきなり数値大きく変えると何がどう影響したのかわかりにくいが。

37 名前:28 [2008/07/24(木) 20:10:17 ]
レスありがとうございます。
皆さんのおかげで、オイラーは難易度が高いので使わない方が良いということが分かりました。
オイラーを止めてクォータニオンを使うことにしたのですが、今度は回転の補間の説明ばかりで平行移動が分かりません。
hikari-hinomoto.hp.infoseek.co.jp/PDF/DX305.pdfにほとんど書いてあるのですが、肝心の部分が書かれていなくて困っています。

void CCamera::Move(const float inFront, const float inUp, const float inRight)
{
// カメラの方向ベクトルを取り出す
D3DXVECTOR3 right(m_View._11, m_View._12, m_View._13);
D3DXVECTOR3 up (※ここは各自考えましょう);
D3DXVECTOR3 front(※ここは各自考えましょう);
// 移動
right *= inRight;
up *= inUp;
front *= inFront;
m_Position += front + up + right;
}

の、ここは各自考えましょうの部分が分かりません。
予想では
m_View._21, m_View._22, m_View._23
m_View._31, m_View._32, m_View._33
ですが、本当に合っているのか分かりません。
これはどこを調べたら分かるのですか?
クォータニオン周りを調べましたが、本のリンクが出てきただけでさっぱり分かりませんでした。
その本も買いましたが、glTranslateを使えばおkとしか書かれていないので、肝心の中身が分かりません。
DirectX版のglTranslateを探せば通るとは思うのですが、理解しないまま進むのも嫌なので。
これはどこをどう調べたら分かるのですか?

38 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:20:37 ]
>>37
そんなになんにも理解してない状態でそのレベルの理解を要求されても困るw

39 名前:37 mailto:sage [2008/07/24(木) 20:47:36 ]
自己解決しました。ビュー変換行列を見ていたらありました。

>>38
初心者スレということで、理解できるレベルまでお願いします><

40 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:09:44 ]
>>39
一次変換の意味はわかる?
行列を掛け合わせることをやるとどういう行列が出来るかはわかる?
行列の積に可換性がないのはなぜかわかる?
クオータニオンと行列の違いはわかる?
透視変換行列の作り方は理解している?

上のことを一つずつ解決していけば出来るようになってるはず。



41 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 23:57:18 ]
まあ、そんなとこだよね
まず数学だからなぁ・・・
テキトーにキーワードかき集めてはめてみて→動いた!→OK!
って人間にはならんほうがええぞ
答えを焦り過ぎだ
理解も時間が解決するときがあるべよ

42 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 00:36:54 ]
DirectX初心者スレなのでDirectXのことで分からなければいくらでも答えるんだけどねぇ。
行列の意味や仕組みや動作すらわからないのは線形代数の本を抱いて寝てくれとしか言えん。

43 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:56:30 ]
教えて欲しけりゃ金持ってこいっつーの

44 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:57:00 ]
つI

45 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:55:21 ]
つD

46 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 18:51:04 ]
つ ミ
      I

47 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 18:52:39 ]
           . . I
      (ノ'A`)ノ
      (  )
   , , , , / >

48 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 09:46:18 ]
あ、でも正直、この辺って感覚的なもんも大事だから
色んな人の本を読むといいと思う

色んな人の色んな行列の解釈を読んだほうが勉強になると思う
実際、ゲームで使うとなったら
この動きはオイラーのほうがよくてアニメーションはクオータニオンで
この動きはこの座標を中心にして極座標で動かして・・・

って条件分岐の荒らしになるのは仕方ねーことだし
汎用座標系クラスなんて無意味なもん作ろうとするとソースがヤバイ行数になって死ぬw

49 名前:デフォルトの名無しさん [2008/07/27(日) 05:33:37 ]
directxとは直接関係なくて悪いのですが・・・

3Dプログラミングを学ぶにあたって、最低限知っておくべき数学・算数を教えて下さい
私頭悪いので、最低限のものでお願いいたします



50 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 05:51:58 ]
高校理系卒業レベルは必須



51 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 06:47:08 ]
>>49
そんな大きな枠で括られても高校数学まではなんでも食えとしかいいようがない
必要になったら必要な分だけ理解すればいいんじゃない?
とりあえず行列とベクトルが必要なのはわかってるんだから
勉強してみればいいんじゃない?

52 名前:デフォルトの名無しさん [2008/07/27(日) 16:27:32 ]
>>51
ありがとうございます
今のところわかっているには、行列・三角関数です
上記2点を理解するためにさらにほかのをやらなきゃならんようですが・・・


53 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:48:35 ]
わかっているのはっていうのは、なにをやればいいかってことです
理解しているというわけじゃありません 

スレ汚しスマヌ

54 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 16:55:49 ]
4x4行列演算・空間図形・四元数・三角関数・ベクトル演算
この辺は押さえておくよろし

55 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 17:04:57 ]
質問があります。

30〜60枚を1単位としたアニメーションを表示させたいのです。
1フレームに1枚で、60枚で1秒間のアニメーションと考えてください。
このアニメーションが約20〜30種類あります。

問題は、このそれぞれのアニメを「いつ」「どれを」表示するかが決まっていないのです。
とはいえ、こんなに大量の画像データをメモリにおいておくわけにもいかず困っています。

アニメの表示命令が下った時点でそのアニメをリアルタイムに読み込みする
ように組んでみたのですが、(1フレームに1枚ずつ読み出す)
Textureの読み込みが非常に重く、処理落ちが酷くなってしまいます。

何か有効な手段、ごまかし方など、ありませんでしょうか?
ちなみに使用している画像フォーマットはDXT、DirectXのバージョンは9.0cです。

56 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:37:37 ]
>>55
仕様を聞いてみないとなんとも

アクションゲームのキャラ絵だったら諦めろとしかいいようがないし
ステータス画面のちょっと凝ったサムネイル(アイコン?)だったら
カーソルをロード時間分置いたら表示されるようになってるゲームが多いな

57 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 18:58:28 ]
1枚のテクスチャに30〜60枚分の画像を収める
サイズにもよるけど

58 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 19:44:13 ]
インタラクティブな場所でないならムービー化

59 名前:デフォルトの名無しさん [2008/07/27(日) 21:37:36 ]
すいません 質問させてください

directshowがdirectx9の後半(?)から使用できないっていうんで
しかたなくdirectx8でdirectshowやってるんですが

3dの描画にはdirectx9を使用しています

directx9と8の両方が使用されているゲームをPLAYするには

9,8両方のランタイムが必要になるのでしょうか・・・
教えてくださいm(_ _)m

60 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 21:56:57 ]
9のランタイムが入っている=1〜9のランタイムが入っている



61 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 22:00:19 ]
1〜9?アホか?

62 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 00:11:29 ]
【狂育部】ソフトウエア興業11【業無部】
science6.2ch.net/test/read.cgi/infosys/1216289288/599

C++の洒落プログラムを落としただけで炎上したんだがwww
読むとかなり面白いw

世の中こんな会社もあるから気をつけてくれw

マジで!

63 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 04:55:59 ]
DirectSoundでループ再生を行う場合に再生開始は曲の開始からでも
ループした際は曲の途中から再生したいんですが、こういうのって
やはり、再生が終わった事を検出して自分で再生位置を指定して…っていう
やり方になるんでしょうか?

それともループ再生用のパラメータ等が存在するのでしょうか?

64 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 05:23:24 ]
回答どうもありがとうございます。

>>56
ちょっと違うけど、「アクションゲームのキャラ絵」という表現が近いです。
扱いとしてはキャラのモーションとかゲームのエフェクトとかになると思います。
やっぱり諦めるしかないですかねー…

>>57
小さい画像なら、それでいけそうですね。
大きい画像(200x200とか)の場合はどうしようもなさそうですが…

>>58
コーデック必須にしたくないので、たぶん無理かと思われます…
無圧縮にするくらいなら、画像全部メモリに持ってろって話になると思いますし。

65 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 10:40:53 ]
>>64
画像を一気に読み込むとして、
どれぐらいのメモリが必要か計算してみると良いよ。
システムメモリで行けそうだったらシステムメモリに確保すればいい。
200x200ピクセル で 60fps、30秒だと 200MB ぐらい。きついね。
ムービーが無難。

無責任なことを書くと、メモリマップドファイルでベタで画像情報をファイルにしておくとか?
出来たとしても速度は出ないと思うけど。

66 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 11:31:46 ]
>>64
そういうときは普通ポリゴンモデルを使うんじゃねぇの。
毎フレーム分の画像なんてアホな事普通やら無いぞ。
2Dアクションならせいぜい5フレとかで間引くし。

コーデックが云々いうがWindows95とかターゲットにしない限り
MPEG1が再生できない環境なんてないと思うが。

67 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 20:09:33 ]
もろに2Dゲームが無くなった理由そのものだしな
3Dに比べて、使うメモリに対して表現能力が少なすぎる>2D

68 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 21:44:11 ]
スパロボのカットインのようなことがやりたい、に100万ペソ

69 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 23:26:37 ]
そんとき読み込むので十分だろwあんなのw

70 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 00:27:58 ]
スパロボのはおもいっきり解像度落としてるし、
そもそもツール上でキーフレームアニメのエディットしてるだろ。

全フレーム画像もってるわけがねえ。



71 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 02:23:56 ]
多数のmeshをマテリアルの設定だけを変えてDrawSubsetしているのですが
描画するmeshの数が1000くらいあってDrawSubsetを一回ずつ呼び出して描画
すると重くなってしまって困っています.
一回のDrawSubsetで一度に描画できたり,あるいはその他の方法で
あまり負荷をかけずに描画するにはどうすればいいか教えてください

72 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 06:12:52 ]
>>71
カメラにmeshは全部入るの?
カメラに入らないmeshはちゃんと省けてる?(=視錐台カリングはちゃんとできてる?)

73 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 06:39:24 ]
>72
はい.カメラに入るメッシュだけDrawSubsetしてます

74 名前:デフォルトの名無しさん [2008/07/29(火) 07:26:32 ]
質問です。
DirectX で描画した上に、ウィンドウコントロール(具体的にはテキストエディット)をおきたいと思っています。
そこで、描画が終わったら必ずウィンドウコントロールも再描画されるように、
下のような感じのメインループを書きました。

for (;;) {
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
if (msg.message != WM_QUIT) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
break;
}
} else {
Render();
RedrawWindow(コントロールのHWND, NULL, NULL, RDW_INVALIDATE);
}
}

しかし、まだコントロールがちらつくことがあります。
DirectX の描画と WM_PAINT のタイミングの問題のような気がしているんですが、
こういうとき、どの辺をチェックすればいいでしょうか?


75 名前:デフォルトの名無しさん [2008/07/29(火) 07:39:09 ]
>>73
それで1000個?
ハードにできないことやろうとしてない?
最適化してやっと動く程度ならやらんほうがいいかもよ
マップチップとかなら一つに纏めるとはやいって聞くけど
それがどのくらいかわからん

なんていうかそもそも仕様がハードに合っているか
っていうのから考えたほうが良さげ


76 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 08:28:03 ]
>>73
一つのメッシュは何ポリゴンぐらい?
1フレーム当たりの描画ポリゴン数を計算してみた?

77 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 09:32:33 ]
>>73
DrawSubsetというかDrawPrimitiveは非常に重い処理。
流石に1フレームに1000回はかなり無茶なレベルだぞ。

まったく同じモデルを複数表示してるならジオメトリインスタンスを使え。

78 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 10:42:52 ]
>>74
GDIとDirect3Dの共存は基本的には無理。
GDIはGDIサーフェスという固定のバックバッファに対してしか描画しないが、
Direct3DのフルスクリーンモードではFlipにより画面に表示されるバッファが
入れ替わり、GDIサーフェス以外のバックバッファが表示されたりする。
ただし、SetDialogBoxMode(TRUE)を使えば一応可能。

ウインドウモード限定なら、WS_CLIPCHILDRENスタイルを指定すれば、
コントロールが上書きされなくなるので再描画も必要ない。

79 名前:74 mailto:sage [2008/07/29(火) 11:08:32 ]
>>78
ありがとうございます!
WS_CLIPCHILDREN を知りませんでした。ためしてみます。


80 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:21:14 ]
>>79
全部DirectXで書く方が早いし楽だと思うが・・・



81 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 00:30:10 ]
文字描画の方法を知らないからコントロール叩いてるんだろな

82 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 10:16:23 ]
デバッグビルドにはd3dx9d.lib、リリースビルドにはd3dx9.libといったようにリンクすると思うのですが、
これはコンパネから変更できるDirectXランタイムのデバッグ/リテールとは関係ないのですか?
リリースする時にはリリースビルドに下上で、ランタイムをリテールにしてビルドしなければいけないのでしょうか?

83 名前:デフォルトの名無しさん [2008/07/30(水) 11:20:24 ]
pow2textureとnonpow2の違いってなんなんでしょうか?

84 名前:デフォルトの名無しさん [2008/07/30(水) 13:32:32 ]
質問です。
ゲームでログイン時やチャット時などのテキスト入力する箇所って
Win32APIのエディットコントロールを利用してるのでしょうか?
それともDirectX側でそのような機能が用意されてたりするのでしょうか?

SDKのサンプルを調べてみようと思っていたのですが
自分の環境だとサンプルで使う用のプラットフォームSDKの
インストールが上手く行かずコンパイルが出来ず調べ辛く、
そういったUI部分をDirectXで実装する事を詳しく紹介してる
サイト・書籍などあれば教えていただけると助かります。
(「DXUTを使え」とかじゃなしに、SDKを利用した実装方法が知りたい)

85 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 13:44:14 ]
自力でキー関係のウィンドウメッセージを処理し、(必要によっては)IMEを呼び出し、文字を描き、
あたかもエディットコントロールかのような動作を実装している

86 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 13:44:46 ]
>>77さんの言われているジオメトリインスタンスについて載っているサイト等教えていただけませんか?
探しているのですが、探し方が悪いのか見つかりません。

87 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 14:26:53 ]
msdn.microsoft.com/en-us/library/bb173349(VS.85).aspx

88 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 16:46:28 ]
質問です。
「任意軸による回転」のプログラムってどんな時に使うのが理想なのでしょうか?
実装はできましたが、いまいち面白い使い方がわかりません・・・。
ググってみましたが、調べ方が下手なのか任意軸で回転させる行列の作り方ばかりで
具体的な使用箇所等は見つかりませんでした。

89 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 17:12:42 ]
「任意軸による回転」が1つあれば、「X軸の回転」「Y軸の回転」「Z軸の回転」を3つ別々に作らなくて済む

90 名前:デフォルトの名無しさん [2008/07/30(水) 17:17:30 ]
メモリ上にあるxファイルのバイナリデータを読み込む関数ってありますか?
D3DXCreateTextureFromFileInMemoryExみたいな感じで



91 名前:デフォルトの名無しさん [2008/07/30(水) 17:21:26 ]
( ^ω^)なんというD3DXLoadMeshFromXInMemory


92 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 17:21:57 ]
ボールが転がるようなの作るのときに使ったよ
まっすぐ転がすだけならX軸回転だけでいいが、途中で横に転がるなんて場合に便利

93 名前:デフォルトの名無しさん [2008/07/30(水) 17:27:23 ]
( ^ω^)D3DXLoadMeshFromXInでググッてでてこなかったからあきらめて質問してしまった、さんくすなり


94 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 17:30:51 ]
>>64
・全アニメーションの前半部分(最初の10フレ分とか)だけをメモリにおいておき、
 それを再生中に残りを読む。
・リングバッファでデータを持っておき、1度読みこんだものはしばらく解放しない。
・使用頻度の高いもの、即時応答が必要なもののみを事前ロード
 →対戦格闘なら待機モーション+そこから派生する最初の動作のみ。
・圧縮してメモリに置いておく。使用する度に解凍する。

詳しい仕様が解ればもっとネタ出せるかも。

95 名前:88 mailto:sage [2008/07/30(水) 17:49:25 ]
回答ありがとうございます。
知らないことが多いので非常に参考になります。

>>89
マジですか、現状D3DXMatrixRotationを3回使って行列作ってますから
それだけコスト掛かってるって事になりますね。
やり方はわかりませんが、ちょっと調べてみます。

>>92
まだ任意軸の仕様がきっちりわかっていませんでしたが、
ちょっと考えればなんとなく分かりました。
つまりボールの移動しているベクトルと(0,1,0)のようなベクトルと
外積をとればXZ方向で回転させたい方向のベクトルがとれるってことですね。
なるほど、非常に参考になりました。

96 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 17:54:15 ]
えーと・・

97 名前:デフォルトの名無しさん mailto:sage [2008/07/30(水) 22:12:11 ]
>>95
任意軸回転は3軸それぞれ回転するくらいの処理負荷は普通に食うぞ。
それにそこまでやるならもう四元数使え。めんどうくせえ。

98 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 01:03:05 ]
>>97
分かりました。
ちょうどそのあたりの本も揃えたので、やってみようと思います。
ありがとう!

99 名前:デフォルトの名無しさん mailto:sage [2008/07/31(木) 06:59:29 ]
>dsound.hのコンパイルが通らないので、どうにかしたい
[環境]WinXP(sp2) VC++2005(pro) DirectXSDK(oct 2006) PlatformSDK(?最新)
[設定]ツール>オプション>VC++ディレクトリ>インクルード、ライブラリ、Bin
の設定をPlatform>DirectXの順にして設定。※DirectXSDKのライブラリはx86を指定
[ソース]
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "dsound.lib")
#pragma comment(lib, "winmm.lib")
#include <windows.h>
#include <dsound.h>
int _tmain(int argc, _TCHAR* argv[])
{
return 1;
}
[エラー]
c:\program files\microsoft directx sdk (october 2006)\include\dsound.h(230) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft directx sdk (october 2006)\include\dsound.h(230) : error C2143: 構文エラー : ';' が '*' の前にありません。
以下省略
エラーの場所:typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
[備考]
mmreg.hでWAVEFORMATEXが宣言されていいて、PlatformSDKに含まれている。
PlatformSDKの設定を失敗している??
参考にしたURL:ttp://www.cppdrive.jp/vc/sdk/index1.html

上記、問題解決へのヒントなり参考サイトなり紹介していただければと思います。






100 名前:74 mailto:sage [2008/07/31(木) 07:02:13 ]
>>84 さんとは別人ですが、やりたいことは同じでした。
Win32API を使って文字入力をしているゲームはあんまりないですね。
IME とかを使っていると、変換中の文字が画面の左上にでてきたりするし。

>>85 さんの言うように全部実装するという手もありますが、
IME や右クリックしたときのコンテキストメニュー、
その他もろもろを実装するのはあんまり現実的じゃないかなと。
この辺はユーザビリティにどの程度重きを置くかで選択が変わってくると思います。



101 名前:99 mailto:sage [2008/07/31(木) 08:20:20 ]
>追記 ※半分解決※
新規プロジェクト>Win32プロジェクト>空のプロジェクト
でプロジェクトを作成するとコンパイルが通ります。

通常のWin32のテンプレート(空のプロジェクトではない場合など)
を使ったプロジェクトでは >>99 同様エラーが出ます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<247KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef