【C++】 DirectX初心者質問スレ Part18 【C】 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/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】
スレリンク(tech板)

2:デフォルトの名無しさん
08/07/17 13:51:20
>>1


3:デフォルトの名無しさん
08/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
08/07/17 14:08:19
補足します。
IDEはVisual C++ 2008 Express Editionです。

5:3
08/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
08/07/17 14:57:08
該当行というのは
winnt.hの
typedef void * POINTER_64 PVOID64;
のことです。

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

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

8:3
08/07/17 18:00:28
>>7さん

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

とりあえず報告まで。

9:デフォルトの名無しさん
08/07/17 18:45:29
【関連サイト】

MSDN DirectX
URLリンク(www.microsoft.com)

DirectX Home Page
URLリンク(www.microsoft.com)

BBX (掲示板)
URLリンク(isweb8.infoseek.co.jp)

DXライブラリ置き場
URLリンク(homepage2.nifty.com)

Lamp:ゲーム開発とその学習をサポートするミドルウェア
URLリンク(lamp.sourceforge.jp)

TWINTAIL LOVERS.
URLリンク(www.twin-tail.jp)

[t-pot] PROGRAMMING
URLリンク(www.t-pot.com)

GamDevPukiWiki - DirectX総合スレ (過去ログ等)
URLリンク(gamdev.org)

GamDevPukiWiki - 3DCG製作ソフト (過去ログ等)
URLリンク(gamdev.org)

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


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

マルペケつくろーどっとコム
URLリンク(marupeke296.com)

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


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

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

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




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

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

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

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

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

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

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

18:14
08/07/19 13:13:48
>>15-17
回答ありがとうございます。

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

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

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

20:デフォルトの名無しさん
08/07/20 18:50:30
>>11

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

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

22:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/23 17:32:20
横回転はY軸を回す。
だったら縦はX軸を回すだろ?
どううまくいかないんだ?

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

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

26:デフォルトの名無しさん
08/07/23 18:53:42
>>25
何故そうなるのかもD3DXVec3TransformCoordを使うやり方も分かりません

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

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

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

30:デフォルトの名無しさん
08/07/24 01:47:30
>>28
「一次変換 行列」でググってみて。

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

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

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

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

宇治社中
URLリンク(web.archive.org)

なつかしす・・・

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

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

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

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

35:デフォルトの名無しさん
08/07/24 18:38:58
視点と注視点の概念がまだわかってないんじゃないだろうか?

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

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

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:デフォルトの名無しさん
08/07/24 20:20:37
>>37
そんなになんにも理解してない状態でそのレベルの理解を要求されても困るw

39:37
08/07/24 20:47:36
自己解決しました。ビュー変換行列を見ていたらありました。

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

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

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

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

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

43:デフォルトの名無しさん
08/07/25 13:56:30
教えて欲しけりゃ金持ってこいっつーの

44:デフォルトの名無しさん
08/07/25 13:57:00
つI

45:デフォルトの名無しさん
08/07/25 14:55:21
つD

46:デフォルトの名無しさん
08/07/25 18:51:04
つ ミ
      I

47:デフォルトの名無しさん
08/07/25 18:52:39
           . . I
      (ノ'A`)ノ
      (  )
   , , , , / >

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

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

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

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

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



50:デフォルトの名無しさん
08/07/27 05:51:58
高校理系卒業レベルは必須

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

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


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

スレ汚しスマヌ

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

55:デフォルトの名無しさん
08/07/27 17:04:57
質問があります。

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

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

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

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

56:デフォルトの名無しさん
08/07/27 18:37:37
>>55
仕様を聞いてみないとなんとも

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

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

58:デフォルトの名無しさん
08/07/27 19:44:13
インタラクティブな場所でないならムービー化

59:デフォルトの名無しさん
08/07/27 21:37:36
すいません 質問させてください

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

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

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

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

60:デフォルトの名無しさん
08/07/27 21:56:57
9のランタイムが入っている=1〜9のランタイムが入っている

61:デフォルトの名無しさん
08/07/27 22:00:19
1〜9?アホか?

62:デフォルトの名無しさん
08/07/28 00:11:29
【狂育部】ソフトウエア興業11【業無部】
スレリンク(infosys板:599番)

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

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

マジで!

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

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

64:デフォルトの名無しさん
08/07/28 05:23:24
回答どうもありがとうございます。

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

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

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

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

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

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

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

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

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

69:デフォルトの名無しさん
08/07/28 23:26:37
そんとき読み込むので十分だろwあんなのw

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

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

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

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

73:デフォルトの名無しさん
08/07/29 06:39:24
>72
はい.カメラに入るメッシュだけDrawSubsetしてます

74:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/07/29 07:39:09
>>73
それで1000個?
ハードにできないことやろうとしてない?
最適化してやっと動く程度ならやらんほうがいいかもよ
マップチップとかなら一つに纏めるとはやいって聞くけど
それがどのくらいかわからん

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


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

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

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

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

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

79:74
08/07/29 11:08:32
>>78
ありがとうございます!
WS_CLIPCHILDREN を知りませんでした。ためしてみます。


80:デフォルトの名無しさん
08/07/30 00:21:14
>>79
全部DirectXで書く方が早いし楽だと思うが・・・

81:デフォルトの名無しさん
08/07/30 00:30:10
文字描画の方法を知らないからコントロール叩いてるんだろな

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

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

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

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

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

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

87:デフォルトの名無しさん
08/07/30 14:26:53
URLリンク(msdn.microsoft.com)(VS.85).aspx

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

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

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

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


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

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


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

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

95:88
08/07/30 17:49:25
回答ありがとうございます。
知らないことが多いので非常に参考になります。

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

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

96:デフォルトの名無しさん
08/07/30 17:54:15
えーと・・

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

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

99:デフォルトの名無しさん
08/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:URLリンク(www.cppdrive.jp)

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






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

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

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

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

102:デフォルトの名無しさん
08/07/31 08:33:07
>>99
プロジェクトのプロパティで、
Configuration Properties→Advanced→Show Includes
を Yes にしてからコンパイルすると、
インクルードしている順番とかがわかるので、
それでなにかわかるかも。


103:99
08/07/31 09:02:26
>>102
レスサンクスです。
早速やってみたのですが、、、順番として
dsound.hの前にmmreg.hがあるか確認したのですが、、、
そもそもmmreg.hが読み込まれていません、、、orz



104:デフォルトの名無しさん
08/07/31 10:49:49
>>100
チャットの文字とかそういうのもコピペできるようにしたいの?
IMEの制御と入力中の文字のコピペぐらいで良いと思うんだけどね。
コンテキストメニューは無しで。

105:デフォルトの名無しさん
08/07/31 11:31:22
>>103
とりあえず、これ入れてみては?
#include <mmsystem.h>

106:デフォルトの名無しさん
08/07/31 11:50:17
ちょっとやってみたよ。
stdafx.h の中の↓の行、消すかコメントにしてみ
#define WIN32_LEAN_AND_MEAN // Windows ヘッダーから使用されていない部分を除外します。

107:デフォルトの名無しさん
08/07/31 11:52:20
ってプリコンパイルヘッダ使ってないのか。
まあ、WIN32_LEAN_AND_MEAN のdefineがどっかにあると思うけどな。

108:99
08/07/31 12:38:34
レスサンクスです。

>>105
>#include <mmsystem.h>
なぜか、大量のエラー(88個)が出ました、、、。
[エラー文]
構文エラー : ';' が、識別子 'MMVERSION' の前に必要です。
以下略
[エラー内容 mmystem.h]
typedef UINT MMVERSION;
以下略

>>106
#define WIN32_LEAN_AND_MEAN
を消してみましたが、
>>99 と同様のエラーが発生してダメでした。

みなさんの助言ありがとうございます。
もう少し自力で調べてみます。


109:デフォルトの名無しさん
08/07/31 12:39:26
あったのか、、
消したらリビルドな

110:デフォルトの名無しさん
08/07/31 12:41:56
あと空のプロジェクトだとうまくいくって書いてたが、
そのうまくいくやつのwindows.hをincludeする前に
#define WIN32_LEAN_AND_MEAN
してごらん。

111:99
08/07/31 12:46:19
>>109

も、申し訳ありません、、、。
コンパイル通りました。
大変失礼いたしました。

#define WIN32_LEAN_AND_MEAN
についてこれより詳細に調べます。



112:99
08/07/31 13:26:29
レスサンクスです。
>>110
うまくいかないときと同じ症状になりました、、、。
おっしゃるとおり#define WIN32_LEAN_AND_MEANが原因でした。

追記(同じ過ちを繰り返さぬよう)
#define WIN32_LEAN_AND_MEAN
をはずした後に、今まで組んでいた部分と合体したら、
winsock(winsock2.h)関係でエラーがいっぱいでましたが、
stdafx.hでwinsock2.hを読み込ませることで回避できました。
(windows.hより先にwinsock2.hを読ませないといけない)

諸兄のご尽力により、無事解決となりました。
スレ汚し大変失礼いたしました。

113:デフォルトの名無しさん
08/07/31 14:14:09
>>100
DirectX SDKにあんたのやりたいこと全て、ソースコード付きで入ってるよ。
まぁ、そのままだと微妙に使い物にならないから、少し手直しが必要だが。

114:デフォルトの名無しさん
08/07/31 14:50:29
>>113
Samples\C++\Direct3D\CustomUI
だね
日本語だと確定するまで違うところに表示されるのはしょうがないのかね

115:デフォルトの名無しさん
08/07/31 15:17:38
>>114
そのサンプル触った上で言ってるの?

116:デフォルトの名無しさん
08/07/31 16:56:43
>>74
コントロールの位置が分かってるなら
マスクかければいいじゃn

117:デフォルトの名無しさん
08/07/31 17:23:02
>>115
よく見てなかった

118:64
08/07/31 23:59:47
>>65
200Mだと、メモリに置いてもツライ量ですね…
メモリマップドにしても、結局ディスクから読むので変わらないのかな…

>>66
全くもってその通りなのですが、どうしても2Dでやりたいのです。
MPEG1は検討してみます。ありがとうございました。

>>94
色々とありがとうございます。
リングバッファは試してみる価値があると思います。
前半だけメモリにおいておくのは、結局止まってしまうので
メモリも食うし、中途半端になってしまうかも…
圧縮もありかもしれませんね。
ディスクから読み込むのと、展開するのとどっちが重いかにもよりますが…

詳しい仕様は…そうですね、エフェクトに使うと思ってもらえればいいと思います。
1〜2秒のエフェクトが30個ほどあり、どれがいつ必要になるかわからないという状況です。
(実際には少し違いますが)
色々試したところ、どうも重くなるのは初回のみなので、あらかじめ確保→開放して
キャッシュにいれておくなんて手法もありかもしれません。
(問題は人によってキャッシュの大きさがまちまちな点ですが…)

119:デフォルトの名無しさん
08/08/01 00:07:24
家庭用機でもメモリに置いといて解凍してVRAMに展開とかはやると思う
この場合はCPUの速度が固定なのでやりやすいとは思うんだが
それでもPCから比べればかなり貧弱でも十分に出来ると思う
もちろんPCの場合はどんなCPUつんでるかは不明だから間に合わないってケースも出てくるだろうけど
それでも大よそのケースで間に合うと思うけどな
どんな絵かはわからんが、20%ぐらいの圧縮率とかにはなるんじゃね?
エフェクトに使うってことで非可逆でも構わないならそれこそかなり圧縮できると思う

120:デフォルトの名無しさん
08/08/01 00:23:08
エフェクトならそれこそ3Dで作って2Dで描画しろよ、ってレベルだな

121:デフォルトの名無しさん
08/08/01 00:24:31
とりあえず 30fps にするんだ。メモリ消費は半分だ。

122:デフォルトの名無しさん
08/08/01 00:28:23
>>120
2Dエフェクトを作るツールの使い勝手の良さ考えると
それと同じレベルのを3Dで作るにはかなり敷居高いと思うが

123:デフォルトの名無しさん
08/08/01 00:41:26
>>122
似たようなもんだろ
はじめの選択ミスがひきづってるだけの話でしょ?
次はきっと彼もうまくやれるさ

124:デフォルトの名無しさん
08/08/01 00:56:17
>>122
結果的にそれ以上の苦労を実機側でしているのだから意味がない

125:デフォルトの名無しさん
08/08/01 01:02:33
エフェクト作ってるのが自分じゃなければ
その苦労は単純に比較できないんでは?

見てる限りだと圧縮で解決する感じがするけど

126:デフォルトの名無しさん
08/08/01 01:12:29
いいたくはないけど、仕様のミスだよ、明らかに。
メモリをちゃんと計算しなかったのが原因。

127:94
08/08/02 10:09:14
なんていうか、お題だけを考えれば
「大容量のアニメーションをスムーズに再生するには?」
というだけなのに、設計とかを否定するのはどうかと思う。
仕事でゲーム開発してれば、こんな難関はいくらでもやってくる。その度に
プログラマーの強権発動して「仕様的に無理」っていきなり言っちゃうのは
怠慢だと思う。(そして、ある日隣のプログラマーに「○○すれば簡単にできますよ♪」
とか言われて肩身が狭くなっちゃう。)まずは色々考えてみようよ。
どれかで上手くいくかもしれないし。まぁ仕事じゃないけどさw

個人的には>>119の意見を支持。不可逆で圧縮が可能なら楽にいけそう。
ってかこんな展開シェーダー誰かが作ってそう。
キャッシュに頼るなら、事前にその場では使わないヤツを全部解放しておくと
ちょっと親切かも。

128:デフォルトの名無しさん
08/08/02 10:22:14
WMVの7ならXP以降は標準搭載されているし、
DVD並の画質なら展開しつつテクスチャに転送しつつ再生しても、
CeleronM程度の型落ちCPUでも問題なく動くが、
お前らはいったい何を気にしているんだ?

129:デフォルトの名無しさん
08/08/02 10:25:49
アルファ抜きとかかな

130:デフォルトの名無しさん
08/08/02 11:01:33
>>127
でも、会社の職場で
「3Dでやってればもっとたくさん表現できたよね?」
って言われたらどういいわけするの?
いっとくけどデザイナさんにとっては3Dで作ろうが2D作ろうが
あんまり労力は変わらないかもしれないよ
こんなことも提示できないでデザイナさんにひたすら作らせた後
「ごめんなさい、やっぱこの仕様だときついかもしれません」
とかいうの?

こんな不安要素を抱えてしまうぐらいなら安全策をとるべきでしょ
趣味でやってるなら自由にやればいいと思うけど
会社でやったら恨まれますよ〜(みんな表だっては言わないけどねw)

131:94
08/08/02 11:32:46
>>130
それはプログラマーとして提言しても決定することはないんじゃない?
表現の仕方や方向性はデザイナーや企画が決めるんではないかと。
会社によって方針(力関係w)が違うだろうから解んないけど。

>>130の言いたいことは良く解る。リスクを抱える開発はプログラマーとしては褒められない。
しかしながら、やりたい事はそれに矛盾する。
「では、できるかどうか検証してみましょう。」
というのが今この場ではないかと、勝手に思ってるんだけども。
もちろん「できない。」と迅速に判断して次にいくのもあり。
「いやいや、方法はあるんでない?」というのが俺の意見。
判断は難しいけどねw

132:デフォルトの名無しさん
08/08/02 11:47:51
>>131
そう?
他のゲームはどうなってんだろ?

って解析できるのもプログラマだけだと思うけどね
エフェクトがいるアクション・イベントを3〜4に絞る仕様だってできるわけじゃない?(テイルズ方式)

こんな無理目なことに時間かけてそれに対するリターンはどれほどよ?
って相談までしたんかどうなんか気になるが
まあ、「やってみるけど時間くれる?」まで言ってるならなにもいうべきことはないな
存分に研究してみろ

ただ、決断はしなきゃいけないな
無理なら無理でしっかりいうんだぜ
(もちろんこの期間でこれこれこんなことを試してみたんですけど
試してみた範囲ではこの仕様は実現できませんでした。的なことが必要だ)

と初心者スレだし言ってみるテスト

133:デフォルトの名無しさん
08/08/02 12:57:14
やる前に、かかる工数を見積もって(難しいだろうけど)
予算と相談しないとな

134:デフォルトの名無しさん
08/08/02 13:37:15
今回の内容は見積もりがどうこう言うほど難しい作業じゃないぞ。
どれだけ技能が低いんだよ。

135:デフォルトの名無しさん
08/08/02 13:45:21
そういう考えがスケジュールの遅延を招く。
たとえどんなものでも仕事として発生するなら
ちゃんとスケジュールに組み込んで管理するのが基本。

136:デフォルトの名無しさん
08/08/02 14:02:24
能力が低いと見積もりが積もり積もって大変だよな。

137:デフォルトの名無しさん
08/08/02 14:05:15
比較対象で出ている、3Dでエフェクト作るっていうのは具体的にはどうやればいいのでしょうか?
モデルにモーション付けてもらってそれを再生するという感じ?
例えば爆発のエフェクトであれば、炎や火の粉をアニメ付きのモデルで大量に表示とかになるのでしょうか?

138:デフォルトの名無しさん
08/08/02 14:08:52
能力の高さとスケジュール管理は別のスキルだろう。
仕事が溢れそうならマネージャーに相談して溢れる分を他に振るなり増員なりで解決する。

ギリギリになってからやっぱり終わりませんとか言ってきたらマジで回し蹴りだ。

>>137
ビルボード/パーティクル等など
いくらなんでも1個1個モデル表示なんてしないぞ。

139:デフォルトの名無しさん
08/08/02 14:20:54
ビルボードやパーティクルで作るというのは、そういうツールみたいなのがあるのでしょうか?

140:デフォルトの名無しさん
08/08/02 14:32:53
そういうツールを作ればよい

141:デフォルトの名無しさん
08/08/02 15:15:10
そのツールを作ってデザイナーに使いこなしてもらう手間考えれば・・
とか思ったけど、もしかしてどこでも当たり前にそういうことやってて今更議論するような程でもないってぐらいのことだったりしますか?

142:デフォルトの名無しさん
08/08/02 15:24:12
初心者質問スレという意味合いではそんなツール作れるかよ!

プロと言う意味ではPG的にはその程度のツールもないのかよ!
デザイナー的にはその程度のツールも使えないヤツはいらない。

143:デフォルトの名無しさん
08/08/02 16:37:33
そして多くの開発ではコンバータを作成し、
バージョン互換を恐れて古いツールを使い続ける。。。

144:デフォルトの名無しさん
08/08/02 17:48:58
>>142
仕様はよく考えられてても、UIがコマンドラインだったり、
フォーマットの変更まで考えました、とかいって、
死ぬほど使いづらいツールを作ってきたりする奴もいるからな。

そして、そういうツールに限って不安定。ちょっとテキストファイルに
ゴミ文字が入ってただけで落ちたりしてな。

145:デフォルトの名無しさん
08/08/02 18:02:49
>>144
それはツールを作る人間の技量の問題。
その程度のヤツにツールを作らせる人的リソースの不足も問題。

146:デフォルトの名無しさん
08/08/02 18:27:25
とりあえずUndoがないツールは糞

147:デフォルトの名無しさん
08/08/03 02:02:44
は?んなツール作らなくてもとりあえず
デザイナさんがモデリングした通りに出してみたらどうよ?
適当にボーン入れてアニメーションさせたモデルを加算半透明ではってみりゃ
立派なエフェクトのできあがりっしょ
何に手間かけようとしてんだ
こういうところからプラグイン使えたら便利かなとかそういう考えが浮かんでくるんだぜ
モデリングツールでできることは極限まで活かせよ
まずは、モデルをアニメーションさせるところから説明しないと駄目なほど馬鹿でもないだろ?

こんなところに手間かけてるからお前等苦労ばっかりしてろくなゲーム作れないんだぞ

148:デフォルトの名無しさん
08/08/03 02:18:16
モデルでエフェクト作るのも結構手間だと思うけど
既存の2D系のエフェクト作成ツールでエフェクト作って
それ表示って方のがある程度のレベルまでは時間もかからずに合理的だと思うんだが
個人で作ったショボイツールなんぞよりも何倍も良いものできると思うぞ
最終的に出来ることが3D>2Dだとしても
そこまで行かなければ、使いやすいツールのある環境のがいいものできると思う

それに気の利いたパーティクルツールなんてどこにでもあるようなものとは思えないが
上で出てた爆発みたいなのって爆発のパターン絵描きが書いてプログラマが適当に飛ばして終わりってのが多いんじゃね?
その上で初心者スレってこと踏まえれば
この方法って間違いとかとは全然思えないんだが

>>142
デザイナーにとっては使いこなすに値するツールかどうかだろう
これはプログラマーの次第だと思う

149:デフォルトの名無しさん
08/08/03 08:19:52
>>148
3Dで爆発なんてそれっぽいもやもやを拡縮するだけで終わりってのも考えられるんじゃね?
しかもそれはモデリングのアニメーションで設定できる話で
プログラマはそれを再生すれば終わりでしょ?
だからこれはアニメーションモデルの再生でしかないと思うんだけど?
3Dの何が手間なの?
勝手な想像で手間だと思ってるだけじゃない?

150:デフォルトの名無しさん
08/08/03 15:51:26
>>149
旧世代のキノコの成長の早回しです、
みたいなドン臭い爆発だったらプログラマーの負荷は少ないけど、
パーティクルを使って云々ってやってると結構めんどくさいよ。

151:デフォルトの名無しさん
08/08/03 17:21:22
>>150
そうか?
それもモデリングツールにちょちょっと細工して
モデルのアニメーションで出るようにしたら終いな話でしょ?

3Dで苦しくなるような想定ばっかしててもしょうがないと思うんだけど?

152:デフォルトの名無しさん
08/08/03 17:32:14
まぁゲーム内容次第だべ。
CoD4の手榴弾みたいなリアルな爆発が欲しい時と
GCのゼルダみたいなアニメ調のが欲しい時では話が違うんだし。

153:デフォルトの名無しさん
08/08/03 17:39:46
大抵モデリングツールからの出力をそのままだしゃいいのに
くっだらないイレギュラー想定して発言を潰す作戦ですか?

154:デフォルトの名無しさん
08/08/03 17:58:19
それらのやり方にパーティクルイリュージョンほどの使い勝手があるとは思えないんだけど

155:デフォルトの名無しさん
08/08/03 18:26:19
>>151
パーティクルやったこと無いんじゃない?

156:デフォルトの名無しさん
08/08/03 19:42:54
>>155
あるある
うちのモデリングツールのプラグインに吐き出す奴あるもん

テクスチャアニメーションで粒子を表現するタイプと
頂点シェーダで吐き出してくれるタイプがあるよ

どっちもモデルのアニメーション扱いでいけるようになってる

157:デフォルトの名無しさん
08/08/03 19:47:42
手間がかからず実装できるとかじゃなくて会社にあるツール自慢を初心者スレでされても・・・


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5023日前に更新/247 KB
担当:undef