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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
1 名前:デフォルトの名無しさん[sage] 投稿日:2008/04/09(水) 09:55:56
※回答する人も、質問する人も必ず読んでください

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

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

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

【C++】 DirectX初心者質問スレ Part17 【C】
http://pc11.2ch.net/test/read.cgi/tech/1207702556/
2デフォルトの名無しさん:2008/07/17(木) 13:51:20
>>1
3デフォルトの名無しさん: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' の前に必要です。
などのコンパイルエラーがでてしまいます。
検索をしたらいくつかみつかったのですが、はっきりとした原因と解決策はわかりませんでした。
申し訳ありませんが、何か知っている方がいらっしゃいましたら教えてください。
お願いします。
43:2008/07/17(木) 14:08:19
補足します。
IDEはVisual C++ 2008 Express Editionです。
53: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に修正したらできました。

ありがとうございました。
63:2008/07/17(木) 14:57:08
該当行というのは
winnt.hの
typedef void * POINTER_64 PVOID64;
のことです。
7デフォルトの名無しさん:2008/07/17(木) 17:47:21
>該当行の直前に
>#define POINTER_64 __ptr64
>を追加しやりすごすことができました。

winnt.hのバージョンが古かったって落ちはないか?
83:2008/07/17(木) 18:00:28
>>7さん

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

とりあえず報告まで。
9デフォルトの名無しさん:2008/07/17(木) 18:45:29
【関連サイト】

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

DirectX Home Page
http://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総合スレ (過去ログ等)
http://gamdev.org/w/?%5B%5BDirectX%C1%ED%B9%E7%A5%B9%A5%EC%5D%5D

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

ゲームを作るための素材を集めよう まとめサイト(※消えているようです)
http://paw.my-sv.net/index.html
10デフォルトの名無しさん:2008/07/17(木) 18:47:30
----------------------------------------------------------------------
4 デフォルトの名無しさん [sage] 2008/04/09(水) 15:18:25

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

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


通りすがりの俺がテンプレ貼るっていったい・・・
11デフォルトの名無しさん:2008/07/17(木) 23:23:11
前スレの話だけど、自前フォーマット作れないのは
プログラミングの技術っていうより、理論がわかっていないんだと思う
12デフォルトの名無しさん:2008/07/18(金) 10:49:43
シェーダープログラムで
CommitChangeってやらなくてもシェーダープログラム内のデータは
かわってるけど、これが必要な場面というか
明示的にやらないとダメな理由ってあるのかな?


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

開発環境はDirectX9c,Win2k,VC++2005
15デフォルトの名無しさん:2008/07/18(金) 16:45:57
>>14
それは頂点座標がGuardBand***を超えてるだろう。
ポリゴンを自分でクリッピングすればいい。
16デフォルトの名無しさん:2008/07/18(金) 23:20:45
>>14
別にRadeonに限った話じゃない。
自分でシザリングすればいいだけの事。

nVIDIAは・・・まぁ中で勝手にやってるんだろうな。
17デフォルトの名無しさん:2008/07/19(土) 01:14:37
そんな感じで変換済み頂点はハードに影響する部分があるので
変換行列や頂点シェーダでごにょごにょして入力座標値とスクリーン座標値を
一致させるやり方をお勧めするよ。
1814:2008/07/19(土) 13:13:48
>>15-17
回答ありがとうございます。

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

とりあえず、回転行列を監視して個別に振り分けて処理コストが最低限で済ませる
ようにアルゴリズムを考えてみます。
19デフォルトの名無しさん:2008/07/19(土) 13:17:56
シザリング面倒なら16x16の格子とかにすりゃいいだけのヤカン
20デフォルトの名無しさん:2008/07/20(日) 18:50:30
>>11

で、それを言って何の参考になる?
マスターベーションでもやってろ、仕様もない糞が。
21デフォルトの名無しさん: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デフォルトの名無しさん:2008/07/23(水) 17:32:20
横回転はY軸を回す。
だったら縦はX軸を回すだろ?
どううまくいかないんだ?
24デフォルトの名無しさん:2008/07/23(水) 17:59:29
>>23
現在向いている方向が(0,0,1)として。
Xだけで回転すると正面と真後ろを向いている時は上手く行くんだけど、真横を向くと上下に回転しなくなります。
一方Zだけで回転すると、真横は上手く行くけど正面真後ろがダメになります。
25デフォルトの名無しさん:2008/07/23(水) 18:09:39
そりゃそうだろ。
D3DXVec3TransformCoord()使うとかクォータニオン使うとかでどうか
26デフォルトの名無しさん:2008/07/23(水) 18:53:42
>>25
何故そうなるのかもD3DXVec3TransformCoordを使うやり方も分かりません
27デフォルトの名無しさん:2008/07/23(水) 20:24:37
くだすれの方でも同じような質問あったから除いてみ
2822:2008/07/23(水) 22:01:30
調べてみましたがさっぱり分かりません。
XYZと回転マトリクスを1つずつ計算してみたりしましたが、最初よりバグっています。
どう計算したらいいんでしょうか?ソースを書いて貰えると助かります。
根本的に理解できていないなら、その根本的な部分を説明するサイトか書籍を教えてください。
29デフォルトの名無しさん:2008/07/23(水) 22:37:36
XとZの回転量って個々にちゃんと計算してるの?それが不安
30デフォルトの名無しさん:2008/07/24(木) 01:47:30
>>28
「一次変換 行列」でググってみて。

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

行列の本は簡単なので良いから1冊ぐらいは読もうね。
キーワードは「線形代数」ね。
31デフォルトの名無しさん:2008/07/24(木) 01:50:35
>>28
個人的なお勧め本は 「リアルタイム レンダリング 第2版」
本の内容を一通り理解して頭に入れとけばどけばまず間違いないと思う。
32デフォルトの名無しさん:2008/07/24(木) 05:45:51
>>28
昔、座標系に関してお世話になったサイト思い出して
ぐぐってみたらあってびっくりした

宇治社中
http://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デフォルトの名無しさん:2008/07/24(木) 18:25:29
つか
カメラまわしてから注視点きめるんじゃなくて
注視点まわせばええんとちゃう?
35デフォルトの名無しさん:2008/07/24(木) 18:38:58
視点と注視点の概念がまだわかってないんじゃないだろうか?
36デフォルトの名無しさん:2008/07/24(木) 18:42:23
いろいろやってみりゃわかってくるね。
でもいきなり数値大きく変えると何がどう影響したのかわかりにくいが。
3728:2008/07/24(木) 20:10:17
レスありがとうございます。
皆さんのおかげで、オイラーは難易度が高いので使わない方が良いということが分かりました。
オイラーを止めてクォータニオンを使うことにしたのですが、今度は回転の補間の説明ばかりで平行移動が分かりません。
http://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デフォルトの名無しさん:2008/07/24(木) 20:20:37
>>37
そんなになんにも理解してない状態でそのレベルの理解を要求されても困るw
3937:2008/07/24(木) 20:47:36
自己解決しました。ビュー変換行列を見ていたらありました。

>>38
初心者スレということで、理解できるレベルまでお願いします><
40デフォルトの名無しさん:2008/07/24(木) 23:09:44
>>39
一次変換の意味はわかる?
行列を掛け合わせることをやるとどういう行列が出来るかはわかる?
行列の積に可換性がないのはなぜかわかる?
クオータニオンと行列の違いはわかる?
透視変換行列の作り方は理解している?

上のことを一つずつ解決していけば出来るようになってるはず。
41デフォルトの名無しさん:2008/07/24(木) 23:57:18
まあ、そんなとこだよね
まず数学だからなぁ・・・
テキトーにキーワードかき集めてはめてみて→動いた!→OK!
って人間にはならんほうがええぞ
答えを焦り過ぎだ
理解も時間が解決するときがあるべよ
42デフォルトの名無しさん:2008/07/25(金) 00:36:54
DirectX初心者スレなのでDirectXのことで分からなければいくらでも答えるんだけどねぇ。
行列の意味や仕組みや動作すらわからないのは線形代数の本を抱いて寝てくれとしか言えん。
43デフォルトの名無しさん:2008/07/25(金) 13:56:30
教えて欲しけりゃ金持ってこいっつーの
44デフォルトの名無しさん:2008/07/25(金) 13:57:00
つI
45デフォルトの名無しさん:2008/07/25(金) 14:55:21
つD
46デフォルトの名無しさん:2008/07/25(金) 18:51:04
つ ミ
      I
47デフォルトの名無しさん:2008/07/25(金) 18:52:39
           . . I
      (ノ'A`)ノ
      (  )
   , , , , / >
48デフォルトの名無しさん:2008/07/26(土) 09:46:18
あ、でも正直、この辺って感覚的なもんも大事だから
色んな人の本を読むといいと思う

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

って条件分岐の荒らしになるのは仕方ねーことだし
汎用座標系クラスなんて無意味なもん作ろうとするとソースがヤバイ行数になって死ぬw
49デフォルトの名無しさん:2008/07/27(日) 05:33:37
directxとは直接関係なくて悪いのですが・・・

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

50デフォルトの名無しさん:2008/07/27(日) 05:51:58
高校理系卒業レベルは必須
51デフォルトの名無しさん:2008/07/27(日) 06:47:08
>>49
そんな大きな枠で括られても高校数学まではなんでも食えとしかいいようがない
必要になったら必要な分だけ理解すればいいんじゃない?
とりあえず行列とベクトルが必要なのはわかってるんだから
勉強してみればいいんじゃない?
52デフォルトの名無しさん:2008/07/27(日) 16:27:32
>>51
ありがとうございます
今のところわかっているには、行列・三角関数です
上記2点を理解するためにさらにほかのをやらなきゃならんようですが・・・
53デフォルトの名無しさん:2008/07/27(日) 16:48:35
わかっているのはっていうのは、なにをやればいいかってことです
理解しているというわけじゃありません 

スレ汚しスマヌ
54デフォルトの名無しさん:2008/07/27(日) 16:55:49
4x4行列演算・空間図形・四元数・三角関数・ベクトル演算
この辺は押さえておくよろし
55デフォルトの名無しさん:2008/07/27(日) 17:04:57
質問があります。

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

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

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

何か有効な手段、ごまかし方など、ありませんでしょうか?
ちなみに使用している画像フォーマットはDXT、DirectXのバージョンは9.0cです。
56デフォルトの名無しさん:2008/07/27(日) 18:37:37
>>55
仕様を聞いてみないとなんとも

アクションゲームのキャラ絵だったら諦めろとしかいいようがないし
ステータス画面のちょっと凝ったサムネイル(アイコン?)だったら
カーソルをロード時間分置いたら表示されるようになってるゲームが多いな
57デフォルトの名無しさん:2008/07/27(日) 18:58:28
1枚のテクスチャに30〜60枚分の画像を収める
サイズにもよるけど
58デフォルトの名無しさん: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デフォルトの名無しさん:2008/07/27(日) 21:56:57
9のランタイムが入っている=1〜9のランタイムが入っている
61デフォルトの名無しさん:2008/07/27(日) 22:00:19
1〜9?アホか?
62デフォルトの名無しさん:2008/07/28(月) 00:11:29
【狂育部】ソフトウエア興業11【業無部】
http://science6.2ch.net/test/read.cgi/infosys/1216289288/599

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

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

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

それともループ再生用のパラメータ等が存在するのでしょうか?
64デフォルトの名無しさん:2008/07/28(月) 05:23:24
回答どうもありがとうございます。

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

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

>>58
コーデック必須にしたくないので、たぶん無理かと思われます…
無圧縮にするくらいなら、画像全部メモリに持ってろって話になると思いますし。
65デフォルトの名無しさん:2008/07/28(月) 10:40:53
>>64
画像を一気に読み込むとして、
どれぐらいのメモリが必要か計算してみると良いよ。
システムメモリで行けそうだったらシステムメモリに確保すればいい。
200x200ピクセル で 60fps、30秒だと 200MB ぐらい。きついね。
ムービーが無難。

無責任なことを書くと、メモリマップドファイルでベタで画像情報をファイルにしておくとか?
出来たとしても速度は出ないと思うけど。
66デフォルトの名無しさん:2008/07/28(月) 11:31:46
>>64
そういうときは普通ポリゴンモデルを使うんじゃねぇの。
毎フレーム分の画像なんてアホな事普通やら無いぞ。
2Dアクションならせいぜい5フレとかで間引くし。

コーデックが云々いうがWindows95とかターゲットにしない限り
MPEG1が再生できない環境なんてないと思うが。
67デフォルトの名無しさん:2008/07/28(月) 20:09:33
もろに2Dゲームが無くなった理由そのものだしな
3Dに比べて、使うメモリに対して表現能力が少なすぎる>2D
68デフォルトの名無しさん:2008/07/28(月) 21:44:11
スパロボのカットインのようなことがやりたい、に100万ペソ
69デフォルトの名無しさん:2008/07/28(月) 23:26:37
そんとき読み込むので十分だろwあんなのw
70デフォルトの名無しさん:2008/07/29(火) 00:27:58
スパロボのはおもいっきり解像度落としてるし、
そもそもツール上でキーフレームアニメのエディットしてるだろ。

全フレーム画像もってるわけがねえ。
71デフォルトの名無しさん:2008/07/29(火) 02:23:56
多数のmeshをマテリアルの設定だけを変えてDrawSubsetしているのですが
描画するmeshの数が1000くらいあってDrawSubsetを一回ずつ呼び出して描画
すると重くなってしまって困っています.
一回のDrawSubsetで一度に描画できたり,あるいはその他の方法で
あまり負荷をかけずに描画するにはどうすればいいか教えてください
72デフォルトの名無しさん:2008/07/29(火) 06:12:52
>>71
カメラにmeshは全部入るの?
カメラに入らないmeshはちゃんと省けてる?(=視錐台カリングはちゃんとできてる?)
73デフォルトの名無しさん: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デフォルトの名無しさん:2008/07/29(火) 08:28:03
>>73
一つのメッシュは何ポリゴンぐらい?
1フレーム当たりの描画ポリゴン数を計算してみた?
77デフォルトの名無しさん:2008/07/29(火) 09:32:33
>>73
DrawSubsetというかDrawPrimitiveは非常に重い処理。
流石に1フレームに1000回はかなり無茶なレベルだぞ。

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

ウインドウモード限定なら、WS_CLIPCHILDRENスタイルを指定すれば、
コントロールが上書きされなくなるので再描画も必要ない。
7974:2008/07/29(火) 11:08:32
>>78
ありがとうございます!
WS_CLIPCHILDREN を知りませんでした。ためしてみます。
80デフォルトの名無しさん:2008/07/30(水) 00:21:14
>>79
全部DirectXで書く方が早いし楽だと思うが・・・
81デフォルトの名無しさん:2008/07/30(水) 00:30:10
文字描画の方法を知らないからコントロール叩いてるんだろな
82デフォルトの名無しさん: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デフォルトの名無しさん:2008/07/30(水) 13:44:14
自力でキー関係のウィンドウメッセージを処理し、(必要によっては)IMEを呼び出し、文字を描き、
あたかもエディットコントロールかのような動作を実装している
86デフォルトの名無しさん:2008/07/30(水) 13:44:46
>>77さんの言われているジオメトリインスタンスについて載っているサイト等教えていただけませんか?
探しているのですが、探し方が悪いのか見つかりません。
87デフォルトの名無しさん:2008/07/30(水) 14:26:53
88デフォルトの名無しさん:2008/07/30(水) 16:46:28
質問です。
「任意軸による回転」のプログラムってどんな時に使うのが理想なのでしょうか?
実装はできましたが、いまいち面白い使い方がわかりません・・・。
ググってみましたが、調べ方が下手なのか任意軸で回転させる行列の作り方ばかりで
具体的な使用箇所等は見つかりませんでした。
89デフォルトの名無しさん: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デフォルトの名無しさん:2008/07/30(水) 17:21:57
ボールが転がるようなの作るのときに使ったよ
まっすぐ転がすだけならX軸回転だけでいいが、途中で横に転がるなんて場合に便利
93デフォルトの名無しさん:2008/07/30(水) 17:27:23
( ^ω^)D3DXLoadMeshFromXInでググッてでてこなかったからあきらめて質問してしまった、さんくすなり
94デフォルトの名無しさん:2008/07/30(水) 17:30:51
>>64
・全アニメーションの前半部分(最初の10フレ分とか)だけをメモリにおいておき、
 それを再生中に残りを読む。
・リングバッファでデータを持っておき、1度読みこんだものはしばらく解放しない。
・使用頻度の高いもの、即時応答が必要なもののみを事前ロード
 →対戦格闘なら待機モーション+そこから派生する最初の動作のみ。
・圧縮してメモリに置いておく。使用する度に解凍する。

詳しい仕様が解ればもっとネタ出せるかも。
9588:2008/07/30(水) 17:49:25
回答ありがとうございます。
知らないことが多いので非常に参考になります。

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

>>92
まだ任意軸の仕様がきっちりわかっていませんでしたが、
ちょっと考えればなんとなく分かりました。
つまりボールの移動しているベクトルと(0,1,0)のようなベクトルと
外積をとればXZ方向で回転させたい方向のベクトルがとれるってことですね。
なるほど、非常に参考になりました。
96デフォルトの名無しさん:2008/07/30(水) 17:54:15
えーと・・
97デフォルトの名無しさん:2008/07/30(水) 22:12:11
>>95
任意軸回転は3軸それぞれ回転するくらいの処理負荷は普通に食うぞ。
それにそこまでやるならもう四元数使え。めんどうくせえ。
98デフォルトの名無しさん:2008/07/31(木) 01:03:05
>>97
分かりました。
ちょうどそのあたりの本も揃えたので、やってみようと思います。
ありがとう!
99デフォルトの名無しさん: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

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




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

>>85 さんの言うように全部実装するという手もありますが、
IME や右クリックしたときのコンテキストメニュー、
その他もろもろを実装するのはあんまり現実的じゃないかなと。
この辺はユーザビリティにどの程度重きを置くかで選択が変わってくると思います。
10199:2008/07/31(木) 08:20:20
>追記 ※半分解決※
新規プロジェクト>Win32プロジェクト>空のプロジェクト
でプロジェクトを作成するとコンパイルが通ります。

通常のWin32のテンプレート(空のプロジェクトではない場合など)
を使ったプロジェクトでは >>99 同様エラーが出ます。
102デフォルトの名無しさん:2008/07/31(木) 08:33:07
>>99
プロジェクトのプロパティで、
Configuration Properties→Advanced→Show Includes
を Yes にしてからコンパイルすると、
インクルードしている順番とかがわかるので、
それでなにかわかるかも。
10399:2008/07/31(木) 09:02:26
>>102
レスサンクスです。
早速やってみたのですが、、、順番として
dsound.hの前にmmreg.hがあるか確認したのですが、、、
そもそもmmreg.hが読み込まれていません、、、orz

104デフォルトの名無しさん:2008/07/31(木) 10:49:49
>>100
チャットの文字とかそういうのもコピペできるようにしたいの?
IMEの制御と入力中の文字のコピペぐらいで良いと思うんだけどね。
コンテキストメニューは無しで。
105デフォルトの名無しさん:2008/07/31(木) 11:31:22
>>103
とりあえず、これ入れてみては?
#include <mmsystem.h>
106デフォルトの名無しさん:2008/07/31(木) 11:50:17
ちょっとやってみたよ。
stdafx.h の中の↓の行、消すかコメントにしてみ
#define WIN32_LEAN_AND_MEAN // Windows ヘッダーから使用されていない部分を除外します。
107デフォルトの名無しさん:2008/07/31(木) 11:52:20
ってプリコンパイルヘッダ使ってないのか。
まあ、WIN32_LEAN_AND_MEAN のdefineがどっかにあると思うけどな。
10899:2008/07/31(木) 12:38:34
レスサンクスです。

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

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

みなさんの助言ありがとうございます。
もう少し自力で調べてみます。
109デフォルトの名無しさん:2008/07/31(木) 12:39:26
あったのか、、
消したらリビルドな
110デフォルトの名無しさん:2008/07/31(木) 12:41:56
あと空のプロジェクトだとうまくいくって書いてたが、
そのうまくいくやつのwindows.hをincludeする前に
#define WIN32_LEAN_AND_MEAN
してごらん。
11199:2008/07/31(木) 12:46:19
>>109

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

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

11299:2008/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デフォルトの名無しさん:2008/07/31(木) 14:14:09
>>100
DirectX SDKにあんたのやりたいこと全て、ソースコード付きで入ってるよ。
まぁ、そのままだと微妙に使い物にならないから、少し手直しが必要だが。
114デフォルトの名無しさん:2008/07/31(木) 14:50:29
>>113
Samples\C++\Direct3D\CustomUI
だね
日本語だと確定するまで違うところに表示されるのはしょうがないのかね
115デフォルトの名無しさん:2008/07/31(木) 15:17:38
>>114
そのサンプル触った上で言ってるの?
116デフォルトの名無しさん:2008/07/31(木) 16:56:43
>>74
コントロールの位置が分かってるなら
マスクかければいいじゃn
117デフォルトの名無しさん:2008/07/31(木) 17:23:02
>>115
よく見てなかった
11864:2008/07/31(木) 23:59:47
>>65
200Mだと、メモリに置いてもツライ量ですね…
メモリマップドにしても、結局ディスクから読むので変わらないのかな…

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

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

詳しい仕様は…そうですね、エフェクトに使うと思ってもらえればいいと思います。
1〜2秒のエフェクトが30個ほどあり、どれがいつ必要になるかわからないという状況です。
(実際には少し違いますが)
色々試したところ、どうも重くなるのは初回のみなので、あらかじめ確保→開放して
キャッシュにいれておくなんて手法もありかもしれません。
(問題は人によってキャッシュの大きさがまちまちな点ですが…)
119デフォルトの名無しさん:2008/08/01(金) 00:07:24
家庭用機でもメモリに置いといて解凍してVRAMに展開とかはやると思う
この場合はCPUの速度が固定なのでやりやすいとは思うんだが
それでもPCから比べればかなり貧弱でも十分に出来ると思う
もちろんPCの場合はどんなCPUつんでるかは不明だから間に合わないってケースも出てくるだろうけど
それでも大よそのケースで間に合うと思うけどな
どんな絵かはわからんが、20%ぐらいの圧縮率とかにはなるんじゃね?
エフェクトに使うってことで非可逆でも構わないならそれこそかなり圧縮できると思う
120デフォルトの名無しさん:2008/08/01(金) 00:23:08
エフェクトならそれこそ3Dで作って2Dで描画しろよ、ってレベルだな
121デフォルトの名無しさん:2008/08/01(金) 00:24:31
とりあえず 30fps にするんだ。メモリ消費は半分だ。
122デフォルトの名無しさん:2008/08/01(金) 00:28:23
>>120
2Dエフェクトを作るツールの使い勝手の良さ考えると
それと同じレベルのを3Dで作るにはかなり敷居高いと思うが
123デフォルトの名無しさん:2008/08/01(金) 00:41:26
>>122
似たようなもんだろ
はじめの選択ミスがひきづってるだけの話でしょ?
次はきっと彼もうまくやれるさ
124デフォルトの名無しさん:2008/08/01(金) 00:56:17
>>122
結果的にそれ以上の苦労を実機側でしているのだから意味がない
125デフォルトの名無しさん:2008/08/01(金) 01:02:33
エフェクト作ってるのが自分じゃなければ
その苦労は単純に比較できないんでは?

見てる限りだと圧縮で解決する感じがするけど
126デフォルトの名無しさん:2008/08/01(金) 01:12:29
いいたくはないけど、仕様のミスだよ、明らかに。
メモリをちゃんと計算しなかったのが原因。
12794:2008/08/02(土) 10:09:14
なんていうか、お題だけを考えれば
「大容量のアニメーションをスムーズに再生するには?」
というだけなのに、設計とかを否定するのはどうかと思う。
仕事でゲーム開発してれば、こんな難関はいくらでもやってくる。その度に
プログラマーの強権発動して「仕様的に無理」っていきなり言っちゃうのは
怠慢だと思う。(そして、ある日隣のプログラマーに「○○すれば簡単にできますよ♪」
とか言われて肩身が狭くなっちゃう。)まずは色々考えてみようよ。
どれかで上手くいくかもしれないし。まぁ仕事じゃないけどさw

個人的には>>119の意見を支持。不可逆で圧縮が可能なら楽にいけそう。
ってかこんな展開シェーダー誰かが作ってそう。
キャッシュに頼るなら、事前にその場では使わないヤツを全部解放しておくと
ちょっと親切かも。
128デフォルトの名無しさん:2008/08/02(土) 10:22:14
WMVの7ならXP以降は標準搭載されているし、
DVD並の画質なら展開しつつテクスチャに転送しつつ再生しても、
CeleronM程度の型落ちCPUでも問題なく動くが、
お前らはいったい何を気にしているんだ?
129デフォルトの名無しさん:2008/08/02(土) 10:25:49
アルファ抜きとかかな
130デフォルトの名無しさん:2008/08/02(土) 11:01:33
>>127
でも、会社の職場で
「3Dでやってればもっとたくさん表現できたよね?」
って言われたらどういいわけするの?
いっとくけどデザイナさんにとっては3Dで作ろうが2D作ろうが
あんまり労力は変わらないかもしれないよ
こんなことも提示できないでデザイナさんにひたすら作らせた後
「ごめんなさい、やっぱこの仕様だときついかもしれません」
とかいうの?

こんな不安要素を抱えてしまうぐらいなら安全策をとるべきでしょ
趣味でやってるなら自由にやればいいと思うけど
会社でやったら恨まれますよ〜(みんな表だっては言わないけどねw)
13194:2008/08/02(土) 11:32:46
>>130
それはプログラマーとして提言しても決定することはないんじゃない?
表現の仕方や方向性はデザイナーや企画が決めるんではないかと。
会社によって方針(力関係w)が違うだろうから解んないけど。

>>130の言いたいことは良く解る。リスクを抱える開発はプログラマーとしては褒められない。
しかしながら、やりたい事はそれに矛盾する。
「では、できるかどうか検証してみましょう。」
というのが今この場ではないかと、勝手に思ってるんだけども。
もちろん「できない。」と迅速に判断して次にいくのもあり。
「いやいや、方法はあるんでない?」というのが俺の意見。
判断は難しいけどねw
132デフォルトの名無しさん:2008/08/02(土) 11:47:51
>>131
そう?
他のゲームはどうなってんだろ?

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

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

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

と初心者スレだし言ってみるテスト
133デフォルトの名無しさん:2008/08/02(土) 12:57:14
やる前に、かかる工数を見積もって(難しいだろうけど)
予算と相談しないとな
134デフォルトの名無しさん:2008/08/02(土) 13:37:15
今回の内容は見積もりがどうこう言うほど難しい作業じゃないぞ。
どれだけ技能が低いんだよ。
135デフォルトの名無しさん:2008/08/02(土) 13:45:21
そういう考えがスケジュールの遅延を招く。
たとえどんなものでも仕事として発生するなら
ちゃんとスケジュールに組み込んで管理するのが基本。
136デフォルトの名無しさん:2008/08/02(土) 14:02:24
能力が低いと見積もりが積もり積もって大変だよな。
137デフォルトの名無しさん:2008/08/02(土) 14:05:15
比較対象で出ている、3Dでエフェクト作るっていうのは具体的にはどうやればいいのでしょうか?
モデルにモーション付けてもらってそれを再生するという感じ?
例えば爆発のエフェクトであれば、炎や火の粉をアニメ付きのモデルで大量に表示とかになるのでしょうか?
138デフォルトの名無しさん:2008/08/02(土) 14:08:52
能力の高さとスケジュール管理は別のスキルだろう。
仕事が溢れそうならマネージャーに相談して溢れる分を他に振るなり増員なりで解決する。

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

>>137
ビルボード/パーティクル等など
いくらなんでも1個1個モデル表示なんてしないぞ。
139デフォルトの名無しさん:2008/08/02(土) 14:20:54
ビルボードやパーティクルで作るというのは、そういうツールみたいなのがあるのでしょうか?
140デフォルトの名無しさん:2008/08/02(土) 14:32:53
そういうツールを作ればよい
141デフォルトの名無しさん:2008/08/02(土) 15:15:10
そのツールを作ってデザイナーに使いこなしてもらう手間考えれば・・
とか思ったけど、もしかしてどこでも当たり前にそういうことやってて今更議論するような程でもないってぐらいのことだったりしますか?
142デフォルトの名無しさん:2008/08/02(土) 15:24:12
初心者質問スレという意味合いではそんなツール作れるかよ!

プロと言う意味ではPG的にはその程度のツールもないのかよ!
デザイナー的にはその程度のツールも使えないヤツはいらない。
143デフォルトの名無しさん:2008/08/02(土) 16:37:33
そして多くの開発ではコンバータを作成し、
バージョン互換を恐れて古いツールを使い続ける。。。
144デフォルトの名無しさん:2008/08/02(土) 17:48:58
>>142
仕様はよく考えられてても、UIがコマンドラインだったり、
フォーマットの変更まで考えました、とかいって、
死ぬほど使いづらいツールを作ってきたりする奴もいるからな。

そして、そういうツールに限って不安定。ちょっとテキストファイルに
ゴミ文字が入ってただけで落ちたりしてな。
145デフォルトの名無しさん:2008/08/02(土) 18:02:49
>>144
それはツールを作る人間の技量の問題。
その程度のヤツにツールを作らせる人的リソースの不足も問題。
146デフォルトの名無しさん:2008/08/02(土) 18:27:25
とりあえずUndoがないツールは糞
147デフォルトの名無しさん:2008/08/03(日) 02:02:44
は?んなツール作らなくてもとりあえず
デザイナさんがモデリングした通りに出してみたらどうよ?
適当にボーン入れてアニメーションさせたモデルを加算半透明ではってみりゃ
立派なエフェクトのできあがりっしょ
何に手間かけようとしてんだ
こういうところからプラグイン使えたら便利かなとかそういう考えが浮かんでくるんだぜ
モデリングツールでできることは極限まで活かせよ
まずは、モデルをアニメーションさせるところから説明しないと駄目なほど馬鹿でもないだろ?

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

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

>>142
デザイナーにとっては使いこなすに値するツールかどうかだろう
これはプログラマーの次第だと思う
149デフォルトの名無しさん:2008/08/03(日) 08:19:52
>>148
3Dで爆発なんてそれっぽいもやもやを拡縮するだけで終わりってのも考えられるんじゃね?
しかもそれはモデリングのアニメーションで設定できる話で
プログラマはそれを再生すれば終わりでしょ?
だからこれはアニメーションモデルの再生でしかないと思うんだけど?
3Dの何が手間なの?
勝手な想像で手間だと思ってるだけじゃない?
150デフォルトの名無しさん:2008/08/03(日) 15:51:26
>>149
旧世代のキノコの成長の早回しです、
みたいなドン臭い爆発だったらプログラマーの負荷は少ないけど、
パーティクルを使って云々ってやってると結構めんどくさいよ。
151デフォルトの名無しさん:2008/08/03(日) 17:21:22
>>150
そうか?
それもモデリングツールにちょちょっと細工して
モデルのアニメーションで出るようにしたら終いな話でしょ?

3Dで苦しくなるような想定ばっかしててもしょうがないと思うんだけど?
152デフォルトの名無しさん:2008/08/03(日) 17:32:14
まぁゲーム内容次第だべ。
CoD4の手榴弾みたいなリアルな爆発が欲しい時と
GCのゼルダみたいなアニメ調のが欲しい時では話が違うんだし。
153デフォルトの名無しさん:2008/08/03(日) 17:39:46
大抵モデリングツールからの出力をそのままだしゃいいのに
くっだらないイレギュラー想定して発言を潰す作戦ですか?
154デフォルトの名無しさん:2008/08/03(日) 17:58:19
それらのやり方にパーティクルイリュージョンほどの使い勝手があるとは思えないんだけど
155デフォルトの名無しさん:2008/08/03(日) 18:26:19
>>151
パーティクルやったこと無いんじゃない?
156デフォルトの名無しさん:2008/08/03(日) 19:42:54
>>155
あるある
うちのモデリングツールのプラグインに吐き出す奴あるもん

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

どっちもモデルのアニメーション扱いでいけるようになってる
157デフォルトの名無しさん:2008/08/03(日) 19:47:42
手間がかからず実装できるとかじゃなくて会社にあるツール自慢を初心者スレでされても・・・
158デフォルトの名無しさん:2008/08/03(日) 19:57:35
市販のツールを使うのが一番簡単なわけだが
159デフォルトの名無しさん:2008/08/03(日) 19:58:00
それぞれの環境を試したこと無い人達が自分達の方が楽とかいうのはどうなの?
2Dやってる人は、モデルデータからエフェクト作ってみなよ
3Dやってる人は、パーティクルイリュージョンとか使ってみなよ
160デフォルトの名無しさん:2008/08/03(日) 20:02:56
>>159
ないならないで仕様を固定すればやりようはいかようにもある
ただ、その方法を挙げても別のイレギュラー的例を挙げて
そういう案を潰すことばっかりさっきからしてるじゃん

それじゃなんにも進まんと思うのよね
だから2Dで全部アニメーション・・・みたいな馬鹿な選択肢を選んじゃうわけでさ

もっと現実的な話を考えたらぶっちゃけ3Dしか道はないのは誰の目にも明らかで
2Dゲーがなくなっちゃった理由はまさにメモリ使用量に対する表現力の貧弱さなので
あってこんなところ問題じゃないように思うんだけどどう?
161デフォルトの名無しさん:2008/08/03(日) 20:08:54
だからこういう問題にぶち当たる前にするべきなのは技術的な話じゃなくて
あくまでも仕様の固定化なんだよね

ってのはもうずいぶん前に学習した
どんな開発であっても汎用ツールを作ってはならない

まずこういう問題にぶちあたってしまったら
その時点ですでにゲームオーバーな状態にあるわけで手遅れなんだよね
プログラマとしての腕を見せる前にこういう問題を起こしてしまうプログラマってのは
社会人としてすでに駄目な場合が多い

作るときにたくさん疑問がでて細かい警告をいくつも見つけてたのにも関わらず
誰にも相談しないで勝手に想定して勝手に自爆してしまっているんだよね

って初心者スレで過去の自分を振り返って語ってるテスト
162デフォルトの名無しさん:2008/08/03(日) 20:13:17
>>160
いや勝手に色々と決め付けてその案を潰そうとしてるのはお前の方だと思うんだ
それに対して2Dって選択肢は間違いでもないだろって話であって
今回のだって圧縮のやりようで許容範囲でしょ
163デフォルトの名無しさん:2008/08/03(日) 20:16:37
時間も金も無限にあるわけじゃないんだから、必ずしも毎回ベスト目指せるような環境とは限らん
あーこれ駄目だよな、とか思いながら騙し騙しやっていくもんじゃないだろうか?
164デフォルトの名無しさん:2008/08/03(日) 20:22:47
今時ならGPGPUでデータのリアルタイム解凍しながら描画とか出来るしな。
165デフォルトの名無しさん:2008/08/03(日) 22:10:27
>>156
テクスチャアニメーションで粒子を表現って普通のパラパラアニメじゃないの?
頂点シェーダではき出すって、頂点シェーダのプログラムをはき出すの?
166デフォルトの名無しさん:2008/08/03(日) 22:12:12
>>164
GPU 周りが GPGPU を使えるほど余裕があるようなシチュエーションってそんなにあるか?
167デフォルトの名無しさん:2008/08/03(日) 23:08:26
>>166
3Dゲームだとぶっちゃけない。
ただ2Dでパラパラアニメするって言ってるんだから
殆どGPU使わないような2Dゲーなのかと思っただけ。
168デフォルトの名無しさん:2008/08/04(月) 01:30:50
>>162
>今回のだって圧縮のやりようで許容範囲でしょ
じゃ、やれば?
ただ、3Dだったらもっとよくなったかもねw
16964:2008/08/04(月) 03:41:04
ものすごい議論が進んでしまっているようで
なんだか割り込んでしまう形になってしまうのですが、一応報告を…

あ、ちなみに今回のは学校の友達と一緒に作っているようなレベルで
高価な機材やソフトとかも全然無い状況なのです。
なので締切りも無く、時間が限られてるわけでもなかったりします。

なので、とりあえず3Dでやってみることにしました。
今までDirectDrawしか触ってなかったもので、3Dには正直疎いのですが
これを機に勉強してみることにしました。

圧縮やフレーム数の削減なども考えたのですが、
これを機に3Dにも手を出してみることにします。
(アニメ調のものもあるので、表現しきれるかはわかりませんが…)

相談に乗ってくださってありがとうございました!
170デフォルトの名無しさん:2008/08/04(月) 14:37:05
お互い相手の良い所が見えてない生き物が自己主張してるだけなので
この話題はこの後もグダグダ続く。
適当に教わったことにして話題を切り上げた>>64は優秀。
171デフォルトの名無しさん:2008/08/04(月) 23:20:29
切り上げたのに余計な蛇足つけんでも(笑)
172デフォルトの名無しさん:2008/08/05(火) 14:56:26
directXで背景が3Dの2DSTGを作ろうと思ってるんですが。

DXライブラリの様にクライアント領域左上が(0,0)で座標の管理がしたいんですが
どういった関数郡を使えば良いんでしょうか。

DXライブラリとdirectXの両方で使おうとおもってDXライブラリの設定にしたら
directXでプログラムしたところがエラー吐いてどうすればいいのか。

DXライブラリで出来るということは元のdirectXで出来ると考えて良いんですよね?

どなたか助言頂けると幸いです。
173デフォルトの名無しさん:2008/08/05(火) 15:15:01
3D描画も左上(0,0)にしたいのか?
2D描画のみでいいなら楽だが
174デフォルトの名無しさん:2008/08/05(火) 15:19:47
レスありがとうございます。

3Dの部分を描画した後2D部分を描画すれば問題なさそうなので
2D部分のみでも良い方法があったら是非教えて頂きたいです。
175デフォルトの名無しさん:2008/08/05(火) 15:28:45
関数群ってよりかカメラの設定かな。
DirectXならD3DXMatrixOrthoOffCenterLHを使うと、
物体を遠くに置いても小さくならない。座標を2D画面の様に使える。
詳しく知らないけどDXライブラリで出来ることはDirectXでできると考えて問題いと思うよ。
ただ、共存はどうだろう?俺がライブラリ作者なら勝手に内部数値変えといて後でバグ報告されるとたまらんから、
非推奨、自己責任でってするけど。
176デフォルトの名無しさん:2008/08/05(火) 15:29:33
射影行列変換に
D3DXMatrixOrthoLHを使う(引数wとhはウインドウサイズ)
座標変換済み頂点の板ポリで2D描画する
177デフォルトの名無しさん:2008/08/05(火) 15:31:09
DXライブラリは使ったことがないので知らんが、
3D座標上の特定の奥行きをスクリーン座標に合わせるのであれば、
奥行きと視野角から行列を逆算すればいい。
178デフォルトの名無しさん:2008/08/05(火) 15:57:53
おお、こんなにレスが、、ありがとうございます。

カメラの
D3DXMatrixLookAtLH を D3DXMatrixOrthoOffCenterLHに

射影変換の
D3DXMatrixPerspectiveFovLH を D3DXMatrixOrthoLHにでいいんでしょうか?

とりあえずやってみたら板ポリゴンも何も表示されなくなってしまいました。
179デフォルトの名無しさん:2008/08/05(火) 16:01:55
とりあえず該当箇所は現状こんな感じでプログラムしてました。

//ビューマトリックスの設定
VOID ViewMatrix(LPDIRECT3DDEVICE9 theDevice) {
D3DVIEWPORT9 vp;
if(FAILED(theDevice->GetViewport(&vp))) {
return;
}

// アスペクト比の計算
float aspect;
aspect = (float)vp.Width / (float)vp.Height;

// 初期化
D3DXMatrixIdentity(&m_proj);
// 射影マトリックスを作成
D3DXMatrixPerspectiveFovLH(&m_proj,
D3DXToRadian(45.0f), // カメラの画角
aspect, // アスペクト比
1.0f, // nearプレーン
1000.0f); // farプレーン
//ここにD3DXMatrixOrthoLH(&m_proj,640,480,0,0);?
// マトリックスをレンダリングパイプラインに設定
theDevice->SetTransform(D3DTS_PROJECTION, &m_proj);
}
180デフォルトの名無しさん:2008/08/05(火) 16:02:26
//カメラの設定
VOID Camera(LPDIRECT3DDEVICE9 theDevice) {
D3DXMatrixIdentity(&m_view);
D3DXMatrixLookAtLH(&m_view, &D3DXVECTOR3(0.0f, 0.0f, -50.0f),
&D3DXVECTOR3(0.0f, 0.0f, 0.0f),
&D3DXVECTOR3(0.0f, 1.0f, 0.0f));
//ここにD3DXMatrixOrthoOffCenterLH(&m_view,0,640,0,480,0,0);?
theDevice->SetTransform(D3DTS_VIEW, &m_view);
}
181デフォルトの名無しさん:2008/08/05(火) 16:22:53
D3DXMatrixLookAtLHは変えなくていい
D3DXMatrixOrthoLHにnearプレーンとfarプレーンが設定されてない
D3DXMatrixOrthoLH(&m_proj,640,480,1,1000);
182デフォルトの名無しさん:2008/08/05(火) 16:42:05
出来ました、この場合だと中心が0.0になるんですね。
でもこれでかなり理想に近い状態になりました。

本当にありがとうございました、皆様に追いつけるよう頑張ります、、、
183デフォルトの名無しさん:2008/08/05(火) 16:51:47
だから座標変換済み頂点を使えと
D3DFVF_XYZRHWか
D3DDECLUSAGE_POSITIONTでぐぐれ
184デフォルトの名無しさん:2008/08/06(水) 15:13:11
WinXPで(D3D10を使用しないで)、最新GPUのリソースをフルに使うには
どういう選択肢がある?
nVidiaならCUDA?
ATiは?
185デフォルトの名無しさん:2008/08/06(水) 16:16:13
directXのカメラの原点を一時的に移動するにはどうしたらいいでしょうか。
(0,0,0)にある原点を(30,0,0)に移動して描画した後また(0,0,0)に戻したりしたいのですが。
186185:2008/08/06(水) 16:23:08
言葉で上手く表せないので絵にしてみました。
ttp://hishou.ddo.jp/~bbs/up/img/up084.jpg
187デフォルトの名無しさん:2008/08/06(水) 20:08:10
文字通りカメラの原点を移動して戻せばいいんじゃね?
188デフォルトの名無しさん:2008/08/06(水) 20:41:47
そのやり方がわからなかったんですけど、うんこしてる間に自己解決しました。
189デフォルトの名無しさん:2008/08/07(木) 00:19:27
>>184
ビデオカード毎に全部作る気概があるの?
そうでないならシェーダーでよくね?
190デフォルトの名無しさん:2008/08/07(木) 07:08:44
GPUの性能をフルに引き出すのが目的なのか、
何らかの目的のためにGPU性能を引き出したいのか・・
191デフォルトの名無しさん:2008/08/07(木) 07:42:46
GPUの性能なんて、フルに引き出したら発熱量が増えるだけじゃん。
192デフォルトの名無しさん:2008/08/08(金) 00:55:42
ちょっと疑問なんですが。

winapiのタイマーで10mscに1回WM_TIMERを送ってrenderを呼んでるんですが
10mscの間にrenderの処理が終わらなかったら処理はどうなるんでしょうか?

処理ののコマ抜けみたいなのが起きたりするんじゃないかと不安なんですが。
変数ループで1から100の間の50ループ目だけ飛んだり。

ちなみにリフレッシュレートはD3DPRESENT_RATE_DEFAULTで固定してます。
これってリフレッシュレートに合わせて描画してると考えて良いんですよね?

だとすると尚更メッセージループとの誤差が生じるんでは内科と心配なのです。
193デフォルトの名無しさん:2008/08/08(金) 01:07:52
処理し終わってから次のWM_TIMERが来る
194デフォルトの名無しさん:2008/08/08(金) 02:32:27
タイマーが10msに一度やってくるとでも思ってるのだろうか
195デフォルトの名無しさん:2008/08/08(金) 10:00:49
サンタが街にやってきた
196デフォルトの名無しさん:2008/08/09(土) 12:25:47
CとC++の勉強が一通り終わったのでDirectXのグラフィックについて勉強しようと思うのですが
WIN32APIを極めないで勉強するのは無謀ですか?
少しだけ勉強したのでWIN32APIの基礎ならわかります。
197デフォルトの名無しさん:2008/08/09(土) 12:29:35
>>196
極めてる人はそういないと思うよ
いつまでたってもヘルプ見ながら書いている俺
198デフォルトの名無しさん:2008/08/09(土) 12:31:02
窓開いてHelloWorld出せる程度でとりあえずは十分
199デフォルトの名無しさん:2008/08/09(土) 12:37:35
>>197 >>198
なるほど〜。
C言語に比べて覚えることが多すぎてちょっとびっくりしていましたw
アドバイスありがとうございました!
200デフォルトの名無しさん:2008/08/09(土) 14:45:56
>>199
そりゃぁあんた、「日常会話を英語でする」のと「代数幾何を英語で学ぶ」のとででは必要な知識が桁違いに決まっているだろ。
201デフォルトの名無しさん:2008/08/09(土) 14:56:11
独自フォーマットの3Dモデルデータを描画しようとしています。
1つのメッシュで2つ以上の物体が離れて存在する場合、
D3DPT_TRIANGLESTRIPの設定で1回で描画するのは無理なのでしょうか。
エラーが出るわけでは無いのですが、物体が離れているメッシュを描画すると1つの三角形が橋渡しのように表示されます。
D3DPT_TRIANGLELISTだと必要な頂点数がかなり増えるため使用は控えたいです。

Xファイルでは1つのメッシュをDrawSubsetで描画できていますし、頂点の並び方に法則があったりでもするのでしょうか。
202デフォルトの名無しさん:2008/08/09(土) 14:57:30
そうなるように頂点データを構築すればいい。以上。
203デフォルトの名無しさん:2008/08/09(土) 14:58:42
ちなみにDrawSubset()は中でD3DPT_TRIANGLELISTを使ってDrawIndexedPrimitive()を呼んでいる。
204デフォルトの名無しさん:2008/08/09(土) 15:10:29
縮退三角形でググってみ。
205デフォルトの名無しさん:2008/08/09(土) 15:26:52
>D3DPT_TRIANGLELISTだと必要な頂点数がかなり増えるため使用は控えたいです。
なんでインデックスを使わずに、効率の悪い方法を選ぶんだ?
206デフォルトの名無しさん:2008/08/09(土) 16:12:50
インデックスにしてもストリップのほうが3分の2から半分ぐらいになるから自前ならストリップにするほうがいいけどね。
別に数kb増えたところでどうってことはないけど物量で勝負するアプリなら恩恵は受けられるんじゃないかな。
207デフォルトの名無しさん:2008/08/09(土) 16:16:05
nVIDIA先生も言ってるがキャッシュ効率を考えたら最速はリストだろう。
208デフォルトの名無しさん:2008/08/09(土) 16:17:57
いやTRIANGLELISTと比べてってことでしょ
どうでもいい話だが。
209デフォルトの名無しさん:2008/08/09(土) 16:24:47
速度や効率を考えたらどう考えてもストリップの出番はない
210デフォルトの名無しさん:2008/08/09(土) 20:32:57
確かにな
踊り終わるまで待ってるのダルイ・・・・
211デフォルトの名無しさん:2008/08/10(日) 10:34:21
あれ。インディックスのストリップってないんだっけ?
212デフォルトの名無しさん:2008/08/10(日) 11:29:33
あるけどインデックス使うならリスト使った方がいいだろ。
213デフォルトの名無しさん:2008/08/10(日) 11:43:18
場合によりけりだけど複数描画するならリストで1回ならストリップのほうがいいかな。
検証用の単純なものであればリストが有利だけど
かなり組みあがっているアプリの所々ストリップに直したらCPU/GPU負荷が平均で5%ほど下がった。
214デフォルトの名無しさん:2008/08/10(日) 11:59:39
自作のスキンメッシュデータをインデックスのストリップとリストに相互変換するプログラムを組んでみたが、
リストの方が確実にFPSが上昇した。
215デフォルトの名無しさん:2008/08/10(日) 12:01:25
名前が緑になるんですが 青にはどうすればなれますか?
216デフォルトの名無しさん:2008/08/10(日) 12:04:18
光の波長を変える
217デフォルトの名無しさん:2008/08/10(日) 14:52:13
>>213,214
モデルの形状も影響するんじゃなかろうか。
ストリップをぶつ切りにする必要のある形状だと当然効果は薄いし、
なるべく法線の近いもの同士でストリップを繋ぐと、
陰面消去の時に効率が上がる場合がある。
メッシュでどこまでやってくれているか解らないけど、
ストリップを繋ぐアルゴリズムって奥が深いらしい。
218デフォルトの名無しさん:2008/08/10(日) 15:03:06
奥が深いというより本気で最適化しようとするとロジックが複雑になるというだけの話。
そんな状況でメリットが全く見えない。
219デフォルトの名無しさん:2008/08/10(日) 15:06:13
縮退なしで書けるなんて状況まずないからな。
いちいち反転するからCPUでコリジョンとる時とか面倒だし。
220デフォルトの名無しさん:2008/08/10(日) 15:12:37
そもそもモデリングデータをストリップで吐き出すデータ形式を見たことがない。
データを読み込んだ後にわざわざストリップに変換しているライブラリを見たことがない。

ちまたで見かけるのは平面を書くだけの単純なサンプルで、
インデックスを使わずにストリップのみで構成している、
まともに組むときには書かないようなダメソースぐらい。
221デフォルトの名無しさん:2008/08/10(日) 17:00:24
半透明とかストリップだときつそうだし、いろいろ細かい部分が面倒。
UVの割れとかも考えると、効率的にもそんなに変わらない気がする。
のっぺりテクスチャ無しの球でテストしてるときとは違うし。
222デフォルトの名無しさん:2008/08/10(日) 17:28:46
インデックスリストはGPUの頂点キャッシュアルゴリズム依存という問題はあるが、
淘汰されて4社しか残ってない今となってはどうでもいいな。
223デフォルトの名無しさん:2008/08/10(日) 19:46:57
>>222
GPUの頂点キャッシュアルゴリズム依存度よりも、
ユーザーの財布依存度の方が高いから。
224デフォルトの名無しさん:2008/08/12(火) 03:36:47
バックバッファについて教えてください。
1.アプリ毎に専用のバックバッファを持つんですか?
2.窓モードのバックバッファのウィンドウ外の領域は何も描画されていないんですか?窓サイズ変更時にバックバッファサイズも変更される?
3.窓モードで、ディスプレイに表示されている画像は全てのバックバッファを重ねたものと言うことですか?
225デフォルトの名無しさん:2008/08/12(火) 04:45:59
ちょっと描画するくらいなら既存のバックバッファ使った方が良い?
新しいバックバッファを追加するコストが知りたい
226デフォルトの名無しさん:2008/08/12(火) 08:08:29
効率なんて実装方法によって子となるんだから、自分で作って最適解を見つけろよ。
知りたいなら試せ。
227デフォルトの名無しさん:2008/08/12(火) 11:10:25
>>224
1.そうだ
2.そうだ
3.違う 1つだけだ

>>225
そうだ
バックバッファいじらないならデフォのまま使うんだ
228デフォルトの名無しさん:2008/08/12(火) 13:07:36
>>224
アプリ毎に持ちます

バックバッファの大きさは任意です。窓の大きさとは関連しません。
まぁデフォルトの窓の大きさ(たとえばゲームなら640x480とかね)と一致させるのが一般的。

窓の大きさを変えるたびにバックバッファの大きさを変えるのはあまりないんじゃないかね
窓が大きくなったら、バックバッファから窓への転送時に拡大する

ディスプレイも1つバックバッファを持っている。
アプリが自分の窓へ描画=ディスプレイのバックバッファへの描画
229デフォルトの名無しさん:2008/08/12(火) 13:25:22
ツールとかでドラッグで大きさ自在に変えるような場合は
デスクトップと同じサイズで作って窓の大きさ分を左上に描画して使ってるな。
サイズが変わるたびに作り直すのは流石に無茶。
230デフォルトの名無しさん:2008/08/14(木) 01:37:02
スタート画面にクリックしたらそれぞれのシーンへ飛ぶボタンを表示させたいのですが
何か良い方法は無いでしょうか?
231デフォルトの名無しさん:2008/08/14(木) 01:49:16
スタート画面をクリックする前はボタンを描画しないで、
スタート画面をクリックした後はボタンを描画すればよい
232デフォルトの名無しさん:2008/08/14(木) 17:29:06
スレの主旨から言ってDirectXで、という話だと思うけど
DXUTが一番楽なのでは。
後はイルリヒトとかコンポーネントっぽいのが入ってた気がする。
ダイアログを置いてオーナードローでDirectX描画っつー手もあるけど
多分、面倒臭いと思う。
233デフォルトの名無しさん:2008/08/17(日) 05:45:47
質問です

スペースキーを押したらゲーム本体が始まる様にしたいのですが
実行するとキーの状態を取得せずにいきなりゲーム本体が始まってしまいます
どうすれば最初にスタート画面を表示し続けれるのでしょうか?

スタート画面処理
{
  if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ){
スタート画面を描画する
}
}

while(1){
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
〜略〜
}else{
スタート画面処理
ゲーム本体
Sleep(1);
}
}
234デフォルトの名無しさん:2008/08/17(日) 08:14:20
何と言う糞設計

DirectX関係ないし
235233:2008/08/19(火) 10:23:26
>>234
は?黙れ
236デフォルトの名無しさん:2008/08/19(火) 10:27:09
いやでもDirectX以前の話。
そこまでひどいとどこから説明していいのか途方にくれるわ。
237233:2008/08/19(火) 10:33:45
なんだよ つかえねーな
238デフォルトの名無しさん:2008/08/19(火) 11:11:24
 if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ) なの?
239デフォルトの名無しさん:2008/08/19(火) 19:26:21
アドバイスのしようがないほどのソースは久しぶりに見た。
まずはメインループを書ける様になってからだ。
240デフォルトの名無しさん:2008/08/19(火) 20:02:05
「DirectXゲームグラフィックスプログラミング」の他にDirectXの基礎事項を勉強できるおすすめの本はありますか?
241デフォルトの名無しさん:2008/08/20(水) 00:49:17
if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 ) でイインジャネ?
242デフォルトの名無しさん:2008/08/20(水) 09:59:44
入力待ちしないものでいくら判断したって押されてなけりゃそのまま通過するだけだろうが。
243デフォルトの名無しさん:2008/08/20(水) 15:43:01
if (GetAsyncKeyState(VK_SPACE) & 0x8000)
else if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 )
244デフォルトの名無しさん:2008/08/20(水) 20:19:13
ひどいソースわろた
245デフォルトの名無しさん:2008/08/20(水) 21:57:09
常にスペース押しとけばいつか動くさ
246デフォルトの名無しさん:2008/08/23(土) 00:32:29
DirectShowの質問です。

ムービーの動画をテクスチャに移して加工した上で表示させたいと思い、
ネット上のサンプルを読み漁ってとりあえず組んでみたのですが
以下の疑問点が発生しました。
どなたかわかる方が居ましたら、答えていただければありがたいです。

1. ムービーファイルの画像を「1枚ずつ」「任意のタイミングで」取得する方法はありますか?
 現在のコードでは、DirectDrawに再生させておいて
 描画時にテクスチャを取得して再生する、という構造になっています。
 おそらく別のスレッドで再生させているのだとは思いますが
 このシステムでは、負荷でメインスレッドのFPSが落ちた場合などに
 当然ながら同期のズレが発生してしまいます。
 (動画とメインループのフレームの比率が変化してしまうため)
 アプリ側から任意のタイミングでフレームを進めることはできますでしょうか?
 
2. 実際に再生させるルーチンまでは作れたのですが
  動画ファイルの読み込みに250msほど時間がかかってしまいます。
  特にIGraphBuilderのRenderFileメソッドが非常に重く、
  ここだけで200ms持って行かれてしまいます。
  これはムービーファイルを再生する上で回避できない時間なのでしょうか?
  ちなみに、ムービー形式はサンプルに沿ってwmvを使用しています。

DirectShowというと、マイナーでネット上のサンプルも少ないというイメージで
触っている人が少ないかもしれないかと思うのですが、わかる方が居ましたら
よろしくお願いいたします。
247デフォルトの名無しさん:2008/08/23(土) 00:34:11
ここまで書いてふと思ったのですが、
DirectShowなどに頼らずに自分で動画をデコードするような
コードを書いたほうが早いのでしょうか…
再生する形式はwmvなりmpegなり1形式に絞れるので。
248デフォルトの名無しさん:2008/08/23(土) 10:01:06
ム板かマ板にDirectShowと戦うスレがあったはず
DirectShowがDirectXから切り離されてひさしいので
そっちで聞いたほうがいいかと
249デフォルトの名無しさん:2008/08/23(土) 12:36:26
ありがとうございます。

この板にDirectShowと戦うスレ Part 4というスレがあったので
そちらで再度質問してみることにします。
250デフォルトの名無しさん:2008/08/24(日) 17:50:09
テクスチャフィルタをポイントに設定するにはどうすれば良いでしょうか?
現状はバイリニアのかかったような少しぼけた画像が
表示されてしまいます。
SetSamplerStateでポイントサンプリングに設定しても変わりませんでした
251デフォルトの名無しさん:2008/08/24(日) 20:40:46
交差している半透明のポリゴンを正しく表示するにはどうしたら良いでしょうか?
252デフォルトの名無しさん:2008/08/24(日) 21:11:17
交線でポリゴンを切り分ければ良し
253デフォルトの名無しさん:2008/08/24(日) 23:59:52
質問いいですか?テクスチャのピクセルを取得しようとしています。

D3DXCreateTextureFromFileEx(
pd3dDevice, L"pattern.bmp", 64, 64, 1, D3DUSAGE_DYNAMIC, D3DFMT_X8R8G8B8,
D3DPOOL_SYSTEMMEM, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &texPattern);

// テクスチャ情報取得
D3DSURFACE_DESC desc;
texPattern->GetLevelDesc(0, &desc);

// テクスチャをロック
D3DLOCKED_RECT lockrect;
texPattern->LockRect(0, &lockrect, NULL, 0);
DWORD* ptr = (DWORD*)lockrect.pBits;

DWORD pixel_color=0x0;
short getx=10;//取得したいピクセル
short gety=10;//取得したいピクセル
254デフォルトの名無しさん:2008/08/25(月) 00:00:10
if (0<=x && x<(short)desc.Width){
if (0<=y && y<(short)desc.Height){
pixel_color=ptr[getx+gety*(short)desc.Height];
}
}

texPattern->UnlockRect(0);

short color_r=(pixel_color>>16)&0xFF;
short color_g=(pixel_color>> 8)&0xFF;
short color_b=(pixel_color )&0xFF;

上のプログラムで正確な色が取得できません。
指定するピクセルによって違う値が返ってきているので、
きちんとテクスチャを参照してはいると思うのですが。

どうか教えてください。よろしくお願いします。
255デフォルトの名無しさん:2008/08/25(月) 06:28:58
pixel_color=ptr[getx+gety*(short)desc.Height];
これを直すといいかもしれない
うそいったらごめん
256デフォルトの名無しさん:2008/08/25(月) 08:41:11
>>253
サーフェスの横幅は、D3DLOCKED_RECT構造体のPitchを参照しないと駄目。
パディングでdesc.Widthと一致しない場合がある。
257デフォルトの名無しさん:2008/08/25(月) 12:27:09
つーか、desc.Height掛けてどうするよ。
258デフォルトの名無しさん:2008/08/25(月) 15:56:26
>>255
具体的にどう直せばいいのか教えてもらえると助かります。

>>256
Pitchのほうですか?
あれは余計なところまで含めたものらしいんで使えないはずです。
試してもらえばわかりますが、Pitchのところまで表示させるとゴミが出ますよ。

>>257
yは縦ですからHeightでしょう、高さという意味ですし。
259デフォルトの名無しさん:2008/08/25(月) 16:05:38
>>255,257見てもうちょっと考えろよ
260デフォルトの名無しさん:2008/08/25(月) 16:07:59
DirectX以前だな。

・ぼーるがたてに5つよこに4つならんでいます。
・ぼーるをひだりうえからいちだんずつよこにじゅんばんにばんごうをつけることにしました。
・いちばんひだりうえが0で、いちばんみぎうえが3です。
・みぎはしまできたのでいちだんさがってつぎのだんのひだりはしが4になります。
・いかどうようにばんごうをつけるといちばんみぎしたは19になります。

さて、ひだりから0からかぞえて2ばんめ、うえから0からかぞえて3ばんめのぼーるはなんばんでしょうか。
けいさんしきがわからなかったら、えにかいてみるといいですよ。
261デフォルトの名無しさん:2008/08/25(月) 16:13:49
Q. 3Dプログラミングに行列等、数学の知識は必要か
A. 掛け算程度は出来ないとお話になりません

>258
算数からやり直せ
262デフォルトの名無しさん:2008/08/25(月) 16:29:40
正方形ならうまくいったのになw
263デフォルトの名無しさん:2008/08/25(月) 16:34:37
>>258は質問者を騙った釣りだろう
sageてるし
内容があからさまに釣りだし
264デフォルトの名無しさん:2008/08/25(月) 17:14:33
質問です
布シミュに手を出して満足のいくものができたので、次は髪の毛にいこうかと思っています。
布シミュは「布シミュ」や「クロスシミュレーション」でうまく資料を探せたのですが、髪の毛はうまく資料をぐぐれません。

何か良いキーワードか、ページを教えていただけないでしょうか
よろしくお願いします
265デフォルトの名無しさん:2008/08/25(月) 21:35:38
3DのRPGを作ろうと思っているのでDirectXを勉強しようと思ったのですが
数学や物理の知識が必要と聞いたので
三角関数・ベクトル・行列を一通り勉強したのですが
他にやっておいたほうがいい分野はありますか?

ゲーム開発のための数理学物理学入門は一通り理解しました
266デフォルトの名無しさん:2008/08/25(月) 21:39:36
RPGってどんなのを作るつもりかわからんけど
3Dの知識以前にゲーム製作の総合的な知識が必要になると思うぞ
3Dの部分についてはとりあえず作り始めちゃって問題が出たらその都度調べればいいと思う
267デフォルトの名無しさん:2008/08/25(月) 21:41:26
>>266
アドバイスありがとうございます
268デフォルトの名無しさん:2008/08/25(月) 23:03:00
質問があります。
ATL/WTLにてDirectXを扱うにはどの様にしたらよいのでしょうか

クライアント領域を別のビュークラスで定義しサブクラス化しており、色々調べたところ
ビュークラスのHWNDを渡してしまうとCreateDeviceが通らないためウィンドウのHWNDで初期化し、
Render関数にて引数にCDC*を取り

LPDIRECT3DSURFACE9 pSuf = NULL;
m_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pSuf);

上記でバックバッファを取得し、

pSuf->GetDC(pdc->m_hDC);

とビューのHDCとバックバッファのHDCを関連づける方法にたどり着いたのですが、
Clearすら通りません。
問題のあるところを指摘していただけないでしょうか。
269デフォルトの名無しさん:2008/08/25(月) 23:07:25
最強の同人ソフトウエアーを作るにはどのグラボを買えばOKでしょうか?
270デフォルトの名無しさん:2008/08/25(月) 23:20:07
>269
Intelのオンボード
271デフォルトの名無しさん:2008/08/25(月) 23:21:15
>268
>ビュークラスのHWNDを渡してしまうとCreateDeviceが通らないため
普通に通るぞ
272デフォルトの名無しさん:2008/08/25(月) 23:41:55
あれ、ほんとだ。
初期化関数に渡すハンドルをクライアントのに変えただけであっさり通りました
むしろ何故以前は通らなかったのか……

いずれにせよ前に進めました。ありがとうございます。
273デフォルトの名無しさん:2008/08/26(火) 08:20:34
DirectX9.0cなのに「診断ツール」がありません・・・
どうやったらdxdiag.exeをインストールできますか?
274デフォルトの名無しさん:2008/08/26(火) 09:46:50
dxdiag.exeはDirectXのドライバ入れたら(=ビデオカードがあれば)
Windowsに入ってると思うが。
275273:2008/08/26(火) 11:23:20
Cドライブでdxdiag.exeの検索かけても何処にも無い位は実行済み
更新しようとしても「最新だからインストール必要なし」と表示されます
276デフォルトの名無しさん:2008/08/26(火) 11:36:26
ファイル名を指定して実行、とか、Windows\system32の中、とか無いの?
今まで無かったためしがないのでないという状況がよくわからん。
277デフォルトの名無しさん:2008/08/26(火) 12:00:56
DirectXを学ぶときって関数を暗記する必要ありますか?
278デフォルトの名無しさん:2008/08/26(火) 12:47:42
>>277
暗記してもすぐ仕様が変わるから無駄
279デフォルトの名無しさん:2008/08/26(火) 15:35:54
暗記する必要はないが、どんな関数があるかくらいは一度全部
目を通した方がいい。
280デフォルトの名無しさん:2008/08/26(火) 16:47:25
パソコンのDirectXバージョンがDirectX10で
製品の動作機種がDirectX9対応グラフィックでは正しく使えるのでしょうか?
それともDirectXというのは同じバージョンでしか対応しないものなのですか?
281デフォルトの名無しさん:2008/08/26(火) 16:58:16
>>280
10以下のはすべて使えると思う
282デフォルトの名無しさん:2008/08/26(火) 21:56:47
>>281
回答ありがとうございます
283デフォルトの名無しさん:2008/08/26(火) 23:03:10
とりあえず280GTXってのを買ってきました。これでコミケに出れます。
284デフォルトの名無しさん:2008/08/26(火) 23:06:12
今からDirectXの勉強を始めようと思うのですが
入門書としてDirectXゲームグラフィックスプログラミングVer2.1
を買いました。

DirectXGraphicsの初期化などは暗記して見ないで打てるようにしたほうがいいですか?
285デフォルトの名無しさん:2008/08/26(火) 23:10:38
初期化なんかゲーム1本につき1回しか書かないから、ちゃんと動くの1回書けたら忘れていいよ
286デフォルトの名無しさん:2008/08/26(火) 23:10:39
なんか暗記とか数学どこまで勉強とかって・・・
日曜プログラマならみんなコピペでいいよ
コピペで駄目になってから考えろ
287デフォルトの名無しさん:2008/08/27(水) 01:11:50
みんなでコピペした結果がこれだよ!

http://www.watch.impress.co.jp/game/docs/20070927/wv.htm
288デフォルトの名無しさん:2008/08/27(水) 07:18:41
>>283
待つんだゲフォの280は地雷だ。
らでの4850にしとけ。
大差ないスペックで大量の消費電力と3倍近い値段するんだぞ280は。
289デフォルトの名無しさん:2008/08/27(水) 07:52:34
>>287
March 2008でも直ってねーじゃん
290デフォルトの名無しさん:2008/08/27(水) 07:58:17
日曜プログラマでも脳みそは使わなきゃダメだ
291デフォルトの名無しさん:2008/08/27(水) 09:43:51
提供元のサンプルはコピペのためにあるようなもんだしなw
DVD出たときにパイオニアと東芝がしょっちゅう同じバグ出してたのもコピペだったんだろうなあ
292デフォルトの名無しさん:2008/08/27(水) 11:30:57
>>291
昔買ったNECのマウスのファームウェアがサンプルのコピペでワロタ
CY7C63101のサンプルコードに書いてあった仮のベンダーIDとかそのまんまになってた
293デフォルトの名無しさん:2008/08/27(水) 13:49:52
DC版VF3がSAMPLE GAMEなのと同じですね、違いますね。
294デフォルトの名無しさん:2008/08/28(木) 00:58:23
Windosゲームを作っていて、
ゲーム起動時に32*32のフォント画像のテクスチャーを約8000個作りたいんですが、
その処理に15秒くらいかかってしまいます。

CreateTextureやバッファにフォント画像を書き込むこと自体は、
全然時間がかからないんですが、
↓の処理が凄く遅いです。

D3DLOCKED_RECT lockRect;
pTexture->LockRect(0, &lockRect, NULL, D3DLOCK_DISCARD);

高速化する方法ってないでしょうか。
295294:2008/08/28(木) 01:12:25
自己解決しました。
CreateTextureのプールを、
D3DPOOL_DEFAULT から D3DPOOL_MANAGED に変えたらちょっぱやになりました。

理由はよく分かりませんが、
D3DPOOL_DEFAULTだとLockRectでVRAMにアクセスするから遅い?
296294:2008/08/28(木) 01:20:42
LPDIRECT3DVERTEXBUFFER9を頻繁にLockして色を変えたりする場合も、
もしかして、D3DPOOL_MANAGEDの方が速いのでしょうか?

D3DPOOL_MANAGEDとD3DPOOL_DEFAULTの長所短所がよく分からないんですが、
詳しい人いたら教えてもらえませんか?
297デフォルトの名無しさん:2008/08/28(木) 06:54:13
POOL_DEFAULTは適切な使い方をすればちょっぱやになります。
あなたの使い方は論外です、今は素直にPOOL_MANAGEDを利用して
いつか分かるようになったらそのとき色々考えましょう。

っていうかDEFAULTのテクスチャをロックするなよ。
298294:2008/08/28(木) 08:47:12
今までリソースは全てPOOL_DEFAULTで作ってたんですが、
POOL_DEFAULTはどういう場合に使うのが適切なんでしょうか?
いつかじゃなくて今知りたいんですが、教えてもらえないでしょうか。
299294:2008/08/28(木) 09:23:29
かなり苦労してデバイスロスト時のリソース開放復帰処理を作ったので、
適切なところはPOOL_DEFAULTを使いたいんです。
300デフォルトの名無しさん:2008/08/28(木) 10:53:32
その前にテクスチャ8000個の方に突っ込むべきな気もする…
301デフォルトの名無しさん:2008/08/28(木) 11:24:46
淫乱負数からディスプレイアダプタを取得する方法が分からないのですが
誰か教えていただけませんか?

// ディスプレイアダプタを表すためのデバイスを作成
// 描画と頂点処理はハードウェアで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
// 失敗した場合
// 描画処理はハードウェアで、頂点処理はCUPで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SPFTWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
// 失敗した場合
// 描画と頂点処理をCUPで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_REF,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
//取得失敗
return E_FAIL;

これだとコンパイルエラーが出ます。。。
302デフォルトの名無しさん:2008/08/28(木) 11:45:18
D3DPOOL_DEFAULT とかD3DPOOL_MANAGED考える前に
テクスチャ8000個ってのを改善しろよ

8000個なんて使うときあるか?
303デフォルトの名無しさん:2008/08/28(木) 12:41:51
>>302
日本語全部だとそのくらいじゃないの
知らないけど
304デフォルトの名無しさん:2008/08/28(木) 12:44:54
1文字ずつバラしてんのか
305デフォルトの名無しさん:2008/08/28(木) 12:51:47
1枚でつくって切りだして使えよ
306デフォルトの名無しさん:2008/08/28(木) 13:22:12
>>305
じゃあ聞きますけど1枚に全部入りますか?
書き込む前に考えるクセをつけるべきだと思います。
307デフォルトの名無しさん:2008/08/28(木) 13:27:35
jpeg3なら可能なんでない?
マトリョーカシからの圧縮も対応してるし
12000*8000のサイズも余裕で収まるっしょ?
308デフォルトの名無しさん:2008/08/28(木) 13:27:56
糞設計ブーム到来中
309デフォルトの名無しさん:2008/08/28(木) 13:31:38
「1枚じゃはいらないなぁ」

「でも複数にするとどの文字が
どのテクスチャに収納されてるのか考えないと・・・」

「そうだ!1文字テクスチャでつくればいいんじゃね」←いまここ


こういうことだろ?
どんだけ手抜きなんだよ
310デフォルトの名無しさん:2008/08/28(木) 13:35:26
書き込む前に考えるクセをつけるべきなのは>>306だなwwww
311デフォルトの名無しさん:2008/08/28(木) 13:52:55
---煽りあいはここまで---
312デフォルトの名無しさん:2008/08/28(木) 17:22:10
32*32を8000枚って、30MB超えたんだが、いったいどんな富豪グラボを想定してるんだろうw
313デフォルトの名無しさん:2008/08/28(木) 17:55:04
大丈夫
いまどきの富豪なグラボは1GBある
314デフォルトの名無しさん:2008/08/28(木) 17:57:52
淫乱負数からディスプレイアダプタを取得する方法が分からないのですが
誰か教えていただけませんか?

// ディスプレイアダプタを表すためのデバイスを作成
// 描画と頂点処理はハードウェアで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
// 失敗した場合
// 描画処理はハードウェアで、頂点処理はCUPで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
D3DCREATE_SPFTWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
// 失敗した場合
// 描画と頂点処理をCUPで行う
if(FAILED(m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_REF,
hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&m_D3DPP, &m_pD3DDevice))) {
//取得失敗
return E_FAIL;

これだとコンパイルエラーが出ます。。。
315デフォルトの名無しさん:2008/08/28(木) 18:42:55
とりあえずエラーの内容も書こうぜ
316デフォルトの名無しさん:2008/08/28(木) 18:55:45
Renderer.cpp(266行目) 淫乱負数からのポインタが取得できません

ちなみに使っているコンパイラは現役専門学生の友達が作ってくれたものです。
317デフォルトの名無しさん:2008/08/28(木) 19:53:57
DEFAULTはそれこそ毎フレーム書き換えるようなデータに使うのが一般的。
その場合は当然DYNAMICフラグとセットにしてな。

それ以外のただの画像テクスチャなんてものはMANAGEDで問題ない。
速度的にDEFAULTが速いとか勘違いしてるかもしれないが
作成時に1回だけ書き換える程度の静的なデータには無意味だ。

一般的といっていいかは分からないけど、
MMOみたいな大量の文字を使うようなゲームでも普通は事前に
テクスチャに展開してUVで切り出して描画をするぞ。

1文字1テクスチャは色々とおかしいといわざるを得ない。
1文字単位でテクスチャの切り替えが発生するしキャッシュ効率も最悪。
318デフォルトの名無しさん:2008/08/28(木) 22:45:27
>>316
淫乱負数について詳しく
319デフォルトの名無しさん:2008/08/28(木) 23:23:35
【淫乱負数】

デクリメント負数のサイズ (バイト単位)。柔軟な頂点フォーマット (デクリメント) 頂点バッファの場合は、
淫乱負数 は少なくとも 1 つの頂点を格納できる大きさでなければならないが、頂点サイズの倍数である必要はない。
淫乱負数 は非 FVF バッファについては検証されない。
320294:2008/08/29(金) 00:13:09
>>309
手抜きじゃなくて、無知で初心者なだけです。
常に最善を求めて頑張っています。

>>310
とりあえず>>306は私じゃないのであしからず。

>>312
いまどきのグラボは30MBくらいいけると想定して、
古いグラボはすっぱりと切る心づもりでした。
321294:2008/08/29(金) 00:14:46
>>317
参考意見ありがとうございます。

charがどの文字に対応するかは絶対1つずつ判定が必要ですよね。
そしたら後は、1枚から特定の場所を切り出す処理がない分、
1つずつのテクスチャにした方が効率がいいかと思ったんですが、
そうではないんでしょうか?

私はプログラムやコンピュータに触りだしたのが最近で、
キャッシュ効率(たぶんハード寄りなこと?)というのがよく分からないんですが、
大量のテクスチャを使えば一時保存領域などを頻繁に入れ替えることになるから、
その分オーバーヘッドが生じて遅くなるってことでしょうか?
322デフォルトの名無しさん:2008/08/29(金) 01:21:10
>>317
その書き方では、DEFAULTはロック書き換え用だと読めるが、
そうなの?
別に実測値を出せとは言わんが、それを示すドキュメントとかあるか?
323デフォルトの名無しさん:2008/08/29(金) 01:25:44
扇形を簡単に描画させる方法ってないですか?
60度の角度で上方向に扇形を描画さしたいのですが(円弧の方が上)
開始地点は275から半径50の扇形を描画さしたいのですが
pD3Device->SetTexture(0, pTexture[0]);
pt[0].x = 250.0f;
pt[1].x = 300.0f;
pt[3].x = 275.0f;
pt[2].x = 275.0f;

pt[0].y = 225.0f;
pt[1].y = 225.0f;
pt[2].y = 275.0f;
pt[3].y = 275.0f;

pt[0].tu = pt[3].tu = 0.0f  / 1024;
pt[1].tu = pt[2].tu = 200.0f / 1024;
pt[0].tv = pt[1].tv = 0.0f  / 1024;
pt[2].tv = pt[3].tv = 200.0f / 1024;

pD3Device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,pt,sizeof(CUSTOMVERTEX));

これでは普通に三角形ができただけで・・・
角度計算とかで簡単に扇形にできないでしょうか?
324デフォルトの名無しさん:2008/08/29(金) 04:00:28
>>321
テクスチャの切り替えはなるべく少なくした方が高速
325233:2008/08/29(金) 05:00:57
解決しました
粗末な物を張ってすみませんでした
326デフォルトの名無しさん:2008/08/29(金) 07:17:27
淫乱負数って一体何なんだ
327デフォルトの名無しさん:2008/08/29(金) 07:33:53
>>321
テクスチャの切り出しなんて文字コードをインデックスにして
テーブルからUVを引っ張ってくるだけだろ。
今のCPUのキャッシュ容量なら余裕で全部乗る程度のキャッシュサイズだし、
別にテクスチャ自体を切り出して作るわけじゃないぞ。

「テクスチャの切り替えをする」ということはそのつど「DrawPrimitive」を呼ぶということだ。
昨今のグラフィックカードは細かいデータをたくさん出すようには設計されてないので致命的なほど遅い。
なので可能なら1枚のテクスチャに格納⇒文字全てを1個の頂点バッファに格納⇒DrawPrimitive1回で全ての文字を描画
これが実測でも理論でも最速になる。

DrawPrimitiveの連打に比べたら頂点データの作成やUVテーブルの参照なんてゴミみたいな負荷。

>322
SDKに入ってるドキュメントに書かれてるよ。

>動的な頂点バッファおよびインデックス バッファの使い方
>
>理想は頂点データまたはインデックス データがまったく変化しないことですが、これは必ずしも可能ではありません。
>アプリケーションがフレームごとに頂点データまたはインデックス データを変更する場合は多くあり、
>フレームあたり複数回変更することさえあります。
>このような場合は、D3DUSAGE_DYNAMIC を使って頂点バッファまたはインデックス バッファを作成する必要があります。
>この利用法フラグによって Direct3D を頻繁なロック処理用に最適化します。
>D3DUSAGE_DYNAMIC はバッファを頻繁にロックする場合にのみ有用であり、
>変化しないデータは静的な頂点バッファまたはインデックス バッファに格納する必要があります。

テクスチャやサーフェイスの場合だとシステムメモリにコピーをいちいち作れない、
レンダリングターゲットや深度バッファなんかもDEFAULTで作る必要あるけど。
328327:2008/08/29(金) 07:43:05
補足。

D3DUSAGE_DYNAMICフラグはD3DPOOL_DEFAULTと一緒じゃないと使えない。

D3DPOOL_MANAGEDって単にシステムメモリにコピーもってて、
システム側のバッファ⇒DMA転送⇒VRAMのバッファってやってるだけ。
だからデバイスがロストしても復旧できる。
当然だけど描画中のバッファをLock()しようとした場合は描画終わるまで待たされる。

そうなると頻繁にバッファ書き換えるなら直接VRAMのバッファ変えるほうが速いのは当然だし
DYNAMICフラグの場合はLock()する度に別のアドレス返してくるからMANAGEDみたいに
データの保障は出来ないってことだな。

DYNAMICしたバッファは
Lock()→新しいビデオメモリ領域をmalloc()→そのアドレスを返す→描画終わったらドライバがfree()
っていう処理だから他のバッファみたいに描画中のバッファに干渉してパイプラインを止めなくてすむ。

だから書き換えないならMANAGEDでいいし、頻繁に書き換えるならDEFAULT+DYNAMICにしとけってな話。

ドキュメントの「DirectXGraphics」→「プログラミング ガイド」→「プログラミングのヒント」→「パフォーマンスの最適化」を参照。
329デフォルトの名無しさん:2008/08/29(金) 11:06:50
書き込むスレ間違えたのでマルチスレッドになるかもですが、

シーンの作成時やレンダラーの初期化時に

HRESULTをいうのを使っているのですが
HRESULT Renderer::Initialize(HWND hWnd, BOOL isFullScreen, int clientWidth, int clientHeight)

LRESULTとの違いってなんですか?
LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

ウィンドウプロシージャルを定義するときはLのほうを使って
DirectXの初期化の時などはHを使うって事ですか?
330デフォルトの名無しさん:2008/08/29(金) 11:23:45
LRESULTはもともとlongだったものからきてる、longで結果を返すものと思っていい。
HRESULTは内容が決まってる。COMが返すものと思っていい。
自分で作った関数は、よそから返ってきたHRESULTをそのまま返すもの以外はあまり使わないと思うよ。
331デフォルトの名無しさん:2008/08/29(金) 11:36:43
>>330
なるほど〜〜

ありがとうございました!
332デフォルトの名無しさん:2008/08/29(金) 12:29:25
テイルズっぽいゲームを作ろうと思っているのですがエフェクトの所で悩んでます
戦闘時のエフェクトとかってDirectXで描写するのとAdobeEffectsとかで作ったのを描写するのどっちが一般的なんですか?
333デフォルトの名無しさん:2008/08/29(金) 12:39:54
3Dなら、プログラム率高い
2Dなら、ベタでいいんじゃね?
絵の量が多いと、プログラムしないとメモリが足りないけど
334デフォルトの名無しさん:2008/08/29(金) 12:40:58
335デフォルトの名無しさん:2008/08/29(金) 12:47:28
>>332
このスレ64から嫁
一般的かって話なら3Dで作るのが一般的
336デフォルトの名無しさん:2008/08/29(金) 13:30:03
質問もマルチスレッドの時代になったか
337294:2008/08/29(金) 20:40:02
>>327
文字列全てを1個の頂点バッファに格納するというのは、
同じ板ポリゴンに、位置をずらしながら1文字ずつ貼り付けていくということですよね。

板ポリの4頂点にテクスチャのUVを指定して、
板ポリ全体にテクスチャを貼り付ける方法しか知らないんですが、
板ポリゴンの一部にテクスチャを貼り付けるにはどうすればいいんでしょうか?
338デフォルトの名無しさん:2008/08/29(金) 20:44:59
>>337
いうてる意味がわからんが「描画する文字数 x 4角形」分の大きさの頂点バッファをこしらえるだろ。
339デフォルトの名無しさん:2008/08/29(金) 21:19:35
1文字あたりポリゴン2枚(三角形×2)
1個の頂点バッファにたくさんポリゴンを詰め込んで、1回のDrawPrimitiveで全部描く
340デフォルトの名無しさん:2008/08/29(金) 22:21:31
>>328
D3DPOOL_MANAGEDはレンダリングターゲットには出来ない。
ということはGPUによる書き換えは発生せず、内容の書き換えが起こるとするとすれば
それは常にCPUからの場合のみ。

だとすれば、D3DPOOL_MANAGEDのリソースは、
メインメモリ側がマスタで、ビデオメモリ側がスレーブという考え方でかまわない訳で、
lockした場合は、常にメインメモリ側のポインタを返し、
unlockした時点でスレーブに反映させればいいから、別にCPUはストールしない。

と、勝手に思っていた訳だが。根拠はないが。
341デフォルトの名無しさん:2008/08/29(金) 22:26:55
また、SDKの記述だが
D3DUSAGE_DYNAMIC+D3DPOOL_DEFAULTが
D3DPOOOL_MANAGEDより優位だとは特に書いていないぞ。
342デフォルトの名無しさん:2008/08/29(金) 23:51:45
>>340
CPUのメモリに書き込む⇒CPU→GPUの転送をする⇒GPUのバッファが描画待ち状態だった⇒さぁどうなる?

>>341
毎フレームロックするような2Dのスプライトみたいなものとか、
3Dのパーティクルみたいなものには有利とは書かれているぞ。

モデルみたいな作りっぱのデータにはむしろマイナスだろう。
343294:2008/08/30(土) 00:45:36
>>338
>>339
理解しました。頂点バッファって三角形何個でも繋げられるんですね。
今まで常に三角形2枚の長方形で1個の頂点バッファにしてました。
どうもありがとうございます。
344294:2008/08/30(土) 00:47:27
>>328
起動時のフォントテクスチャ作成を、
D3DPOOL_DEFAULT、D3DUSAGE_DYNAMICから、
D3DPOOL_MANAGED、USAGEなしに変えたら、
LPDIRECT3DTEXTURE9#LockRectが20倍くらい速くなったんですが、
描画中だとD3DPOOL_DEFAULTの方がロック速いけど、
描画してない状態だとD3DPOOL_MANAGEDの方がロック速いってことでしょうか。

いずれにせよ、色々実測してみようと思います。
345デフォルトの名無しさん:2008/08/30(土) 22:46:27
dxerr.lib dxguid.lib d3dx9.lib d3d9.lib このライブラリの中で
ゲーム会社の採用試験の作品提出の時に使ったまずいのってありますか?
346デフォルトの名無しさん:2008/08/30(土) 22:53:47
まずいのはそんなことを質問するお前の頭
その時点で不採用決定だから気にするな
347デフォルトの名無しさん:2008/08/30(土) 22:58:44
流石にネタだろw
348デフォルトの名無しさん:2008/08/30(土) 22:59:47
>>345

windowsアプリケーションを作る時
#include <windows.h>
がないとの同じだぞ?
349デフォルトの名無しさん:2008/08/30(土) 23:03:22
>>345
お前は心臓がなくて生きてられるか?(ペースメーカーなど除く)
350デフォルトの名無しさん:2008/08/30(土) 23:25:28
>>345
d3d9.libだけは使ったらまずい。ほかは使っても大丈夫だよ
採用試験がんがれ!

>>346-349
しんだほうがいい
351デフォルトの名無しさん:2008/08/30(土) 23:28:48
>>345
プログラマーって>>350みたいなの多いから気をつけた方がいいよ
別に気に入らなければ答えなきゃいいだろうっていう質問をネタに遊ぶ連中だから
352デフォルトの名無しさん:2008/08/30(土) 23:32:30
再配布禁止なのはd3dx9***.dll系だろ・・・
353デフォルトの名無しさん:2008/08/31(日) 00:28:48
こういうくだらない話に喰いつく奴をみると
ネット経験が浅いんだろうなぁ、ウザいなぁと何時も思う。
354デフォルトの名無しさん:2008/08/31(日) 01:01:16
>>352
実行ファイルの隣に置いておくのが駄目なだけで
再配布が禁止されてるわけじゃないよ
355デフォルトの名無しさん:2008/08/31(日) 01:49:17
採用担当はいちいちそんな所みてねぇよ
356294:2008/08/31(日) 04:38:21
色々試してみましたが、
やっぱうちだとPOOL_DEFAULT より POOL_MANAGEDの方が速いっぽいです。
あと、HARDWARE_VERTEX_PROCESSING より SOFTWARE_VERTEX_PROCESSINGの方が速い。
357デフォルトの名無しさん:2008/08/31(日) 05:24:16
>>356
システムメモリとビデオメモリを理解してないんですね
わかります
358デフォルトの名無しさん:2008/08/31(日) 08:08:45
>>356
そりゃロック速度は速いだろうけど描画は遅くなるだろ・・・
359デフォルトの名無しさん:2008/08/31(日) 08:47:02
>356
測定条件が明確じゃないのに、ここでどっちが早いとか
書いても意味ねーぞ
360294:2008/08/31(日) 14:24:52
C#で測定ツールを作ってみたんですが、
測定条件こんな感じでどうですか?
http://www.sepia.dti.ne.jp/zigzag/test.zip
Managed DirectXは少し遅いらしいけど。
361デフォルトの名無しさん:2008/08/31(日) 14:33:26
>>354
エーダメだったの?
362デフォルトの名無しさん:2008/08/31(日) 16:28:42
>>360
いやぁ
その前にシステムメモリとビデオメモリの違い
ってわかる?
多分、そんなの測ってもケースバイケースよ?
いまのままだとどんな条件のときにそのプログラムが速くて
そんな条件のときにそのプログラムが遅いのかわかんないでしょ?

それを知りたい?
それとも虚構の条件でのみ速いって主張するそのプログラムを
みんなに認めてもらいたいだけ?

どっちか選んで方針決めてよ
363294:2008/08/31(日) 16:59:03
何の違いですか?転送速度とか?
詳しい違いはしりません。

>それを知りたい?
知りたい。
364294:2008/08/31(日) 17:00:47
あとはうち以外の環境でも実測して、
結果と理論を合致させたいです。
365デフォルトの名無しさん:2008/08/31(日) 17:01:41
何で敢えて「その前にシステムメモリとビデオメモリの違い」を無視しているのかなぁ。
366デフォルトの名無しさん:2008/08/31(日) 18:59:07
iPhoneのように画像をマウスの動きに合わせて左右にスライドさせて見るような画像ブラウザを作りたいのですがDirectXで可能でしょうか
お勧めのライブラリーなどあればよろしくお願いします
367デフォルトの名無しさん:2008/08/31(日) 18:59:37
>>361
ちゃんと書いてあっただろ・・・。
もし商業でやってたらアウトだぞ。

再配布していいのは「再配布パッケージ」だけで
「再配布パッケージの中のファイル(d3dx9_32.dllなど)」を
単独で再配布してはいけない

>>363
その詳しい違いを調べてるんじゃないの?
ただロックして書き込み速度だけみたいなら
mallocしたバッファにでも書けば?
368デフォルトの名無しさん:2008/08/31(日) 19:32:36
>>363
んじゃ

システムメモリってのはPCのCPUで演算させるときに
データをおかなきゃならんところなんよ
ビデオメモリってのはグラフィックボードのGPUで
演算させるときにデータをおかなきゃならんところよ

>あと、HARDWARE_VERTEX_PROCESSING より SOFTWARE_VERTEX_PROCESSINGの方が速い。
これもさ、LockとかDrawPrimitiveUpやってんじゃねぇの?

なのでそんな結果になっちゃうわけよ

つまりな、描画方法がグラボの能力をまったく使えてないw
369デフォルトの名無しさん:2008/08/31(日) 20:35:00
>>367
エーそうだったのか
ありがとう
370デフォルトの名無しさん:2008/09/01(月) 13:49:43
2Dスプライトを実装する際の
頂点バッファ、インデックスバッファの扱いについて質問です
これらはスプライト毎に用意したほうがいいのでしょうか?
それともシステムに対して一つ用意してそれを使いまわせばいいのでしょうか?
371デフォルトの名無しさん:2008/09/01(月) 14:56:14
>>370
1個だけ作っておいて
スプライトを順次埋め込んでいけばオッケ
表示するときに一発で済む
372デフォルトの名無しさん:2008/09/01(月) 17:59:13
>>371
一つの頂点バッファに動的に頂点を追加し
テクスチャごとにインデックスバッファを作成して描画ということでしょうか?

一つの動的な頂点バッファをマイフレームロックして書き換えるのと
テクスチャごとに静的頂点バッファを生成して切り替えて使うのだと
どちらがパフォーマンスにやさしいのでしょうか?
373デフォルトの名無しさん:2008/09/01(月) 19:01:41
初めてDirectXクリックしたら はい いいえの文字が出たのでいいえクリックしたら
DirectX診断ツールが出てきた・・・はい いいえの内容教えてください
たしか はい がおすすめですと書いてあった
バージョンが最新?DirectX 9.0cになってたいいえクリックすると自動で9.0cがインストールするの?
詳しい方教えてくださいおねがいします。
374デフォルトの名無しさん:2008/09/01(月) 21:59:35
なんでこの文はFAILEDが2個もあるんですか?

//--------------------------------------
// モデルを生成
//--------------------------------------
// 球体(Sphere)の生成
if(FAILED( FAILED(D3DXCreateSphere( pD3DDevice,
1.0f,
36,
36,
&m_pMesh,
NULL)))) {
return E_FAIL;
}
375デフォルトの名無しさん:2008/09/01(月) 21:59:50
とりあえず
・プログラミングの話しではない
・日本語がおかしい
376デフォルトの名無しさん:2008/09/01(月) 22:10:08
>話しではない

お前も日本語がおかしい
377デフォルトの名無しさん:2008/09/01(月) 22:15:36
if(FAILED(D3DXCreateSphere( pD3DDevice, これでいいと思うんですけど

if(FAILED( FAILED(D3DXCreateSphere( pD3DDevice, これにする理由ってなんですか?
378デフォルトの名無しさん:2008/09/01(月) 22:36:14
>>377
後生ですからFAILEDマクロの定義を調べた上で初心者スレに出直してください。DirectXには関係がありませんから。
379デフォルトの名無しさん:2008/09/02(火) 00:56:57
DirectXの画面上にエディットコントロールを貼り付けると激しくちらつきますが、
これは相性が悪いのであきらめろということですか?
380デフォルトの名無しさん:2008/09/02(火) 08:26:34
>>372
異なるテクスチャを要求されるか
頂点バッファが一定量(例えばスプライト100個)を越えるまで
一つの頂点バッファに溜め込んで
上記条件を満たしたら表示する

>>379
DX搭載のUIを使うか
エディットコントロールの部分をクリッピングする
381デフォルトの名無しさん:2008/09/02(火) 10:24:08
>>380
その手法はヘルプには書いてありましたが
たとえば
スプライト0〜49がテクスチャA
スプライト50〜99がテクスチャBを資源にしている場合
ひとつの頂点バッファで一括で100個描画をする方法あるのでしょうか?
パーティクルみたいに同じテクスチャを数100個表示するようなときには有効そうですが
382デフォルトの名無しさん:2008/09/02(火) 11:31:27
>>381
テクスチャごとに(その例では50)表示しても
マルチテクスチャで無理して全部(その例では100)表示しても
速度差は出ないぞ
383デフォルトの名無しさん:2008/09/02(火) 11:49:29
>>380ハァハァ・・・めんどいよぉ〜
384デフォルトの名無しさん:2008/09/02(火) 12:01:55
ウィンドウならWS_CLIPCHILDRENで
385デフォルトの名無しさん:2008/09/02(火) 12:02:54
超初心者でプログラミングのサイトを読み進めながら組んでるんですが、
"error C2065: 'm_pD3Ddev' : 定義されていない識別子です。"
こんなエラーが出てビルドする事が出来ません。

恐れ入りますが、よろしくお願いします。
386デフォルトの名無しさん:2008/09/02(火) 12:04:57
LPDIRECT3DDEVICE8 m_pD3DDev;
をクラス定義に入れろ。
387デフォルトの名無しさん:2008/09/02(火) 12:44:28
>>386
有難うございます。
無事に解決する事が出来ました。
388デフォルトの名無しさん:2008/09/02(火) 13:28:41
って8でよかったのか?
389デフォルトの名無しさん:2008/09/02(火) 16:48:14
>>384わおすげー できた!おじちゃんありがとー!
390デフォルトの名無しさん:2008/09/02(火) 23:57:18
LWでXファイルを書きだしたあとDirectXで読み込むときテクスチャーが読み込まれないの何でですか?
DirectXのほうでテクスチャーを張り付ける処理をしなければいけないってことです?
391デフォルトの名無しさん:2008/09/03(水) 00:10:54
DirectXをダウンロードしたのですがスタートメニューから[DirectX]を検索して
プログラム欄のフォルダを見ても中が空なんですがこれできちんとダウンロードされているのでしょうか?

よろしくお願いします。。
392デフォルトの名無しさん:2008/09/03(水) 00:14:21
OSはvista
DirectX10.0です

いまいち効果が感じられないので質問するに至りました
393デフォルトの名無しさん:2008/09/03(水) 00:14:51
DirectXってどれ?
ランタイム?SDK?
394デフォルトの名無しさん:2008/09/03(水) 09:19:46
>>390
DirectXの何で読み込んでいるかにもよる
ポリゴンしか読んでないなら
そりゃテクスチャも読まないとダメでしょう

よくあるトラブルは
テクスチャへのパスが間違っていること
一度Xファイルを覗いてみてパスが正しいか確認すべし
395デフォルトの名無しさん:2008/09/04(木) 17:33:09
DirectXとOpenGLで共用できるようなメッシュクラスを作りたいと思っているのですが、
OpenGLのように頂点座標や法線、テクスチャ座標が別々の配列に分かれているデータを
一度に描画する方法はないのでしょうか? どなたか教えて下さい。
396デフォルトの名無しさん:2008/09/04(木) 17:53:30
FVFに直すしかないんじゃね?
397デフォルトの名無しさん:2008/09/04(木) 18:53:35
>>395
このへんが参考になるんじゃね?

ttp://marupeke296.com/DXG_No53_DrawUsingStream.html
398デフォルトの名無しさん:2008/09/04(木) 19:59:01
そんなのあったんだ!
399デフォルトの名無しさん:2008/09/04(木) 20:41:08
スキンメッシュAと普通のメッシュaをそれぞれD3DXLoadMeshHierarchyFromXとD3DXLoadMeshFromX
で読み込ませたところ、なぜかaがAのモーションに引き寄せられるのですが。
解決方法が分かる人はいませんか?
400399の補足:2008/09/04(木) 20:47:16
普通のメッシュを複数読み込んだ場合、最初の一つ以外は普通に描画されます。
401399:2008/09/04(木) 21:16:59
>>399 >>400
すいません。直りました。レンダリングさせる順番を間違えてました。
402395:2008/09/05(金) 08:36:21
>>397
 どうもありがとうございます! とても参考になりました。
403デフォルトの名無しさん:2008/09/06(土) 19:28:57
テ゜バイスがなくなったときの処理はなくてもいいの?
404デフォルトの名無しさん:2008/09/06(土) 19:46:37
×テ゜バイス
○デバイス
405デフォルトの名無しさん:2008/09/06(土) 21:58:35
突然、何の前提条件の説明もなく質問する脳味噌の足りない馬鹿って、
どうして発生するんだろう?
406デフォルトの名無しさん:2008/09/06(土) 22:04:21
DirectX以外の事もおおむね初心者だからです
あなたのESP能力が試されているのです

というわけでデバイスロストでググってまたきなさい
407デフォルトの名無しさん:2008/09/07(日) 11:00:33
if(pD3DDevice->present(0,0,0,0)) {
pD3DDevice->Reset(&m_D3DPP);
408デフォルトの名無しさん:2008/09/07(日) 11:33:22
>>407
そんな最低のソース組むやつと仕事は出来ない。
409デフォルトの名無しさん:2008/09/07(日) 11:40:01
>>408
トンマ ドベ アンポンタン ダボ アホ
410デフォルトの名無しさん:2008/09/07(日) 11:47:58
2000ミリ秒って何秒ですか?
411デフォルトの名無しさん:2008/09/07(日) 11:51:59
2秒?
412デフォルトの名無しさん:2008/09/07(日) 12:33:11
>>410
PG辞めろ
413デフォルトの名無しさん:2008/09/07(日) 12:34:06
>>412
トンマ ドベ アンポンタン ダボ アホ
414デフォルトの名無しさん:2008/09/07(日) 12:43:22
>>413
トンマ ドベ アンポンタン ダボ アホ
415デフォルトの名無しさん:2008/09/07(日) 16:46:28
>>414
トンマ ドベ アンポンタン ダボ アホ
416デフォルトの名無しさん:2008/09/07(日) 17:06:00
この流れを何とかしてくれ

無視するわけにはいかない
417デフォルトの名無しさん:2008/09/07(日) 17:07:42
>>41
トンマ ドベ アンポンタン ダボ アホ
418デフォルトの名無しさん:2008/09/07(日) 17:20:20
自演にしては手が込んでるな・・・
ID出ないからって調子乗りすぎ
419デフォルトの名無しさん:2008/09/07(日) 17:21:24
>>418
トンマ ドベ アンポンタン ダボ アホ スケベ ノロマ
420デフォルトの名無しさん:2008/09/07(日) 23:39:23
キーフレームアニメーションの分野に入ったんですけど この分野の概念は重要ですか?
421デフォルトの名無しさん:2008/09/08(月) 00:52:12
>>420
それが重要かどうかは、420が何をしようとしているか分からなければ答えられないんじゃないか?

まずはそれよりも、
>キーフレームアニメーションの分野に入ったんですけど 
もうちょっと、自分が言わんとしていることが人に伝わる文章になっているか、それを気にしたほうがいい。
422デフォルトの名無しさん:2008/09/08(月) 19:35:57
コリジョンが簡単にできるPosbiliedクラスって本当に売ってるんですか
423デフォルトの名無しさん:2008/09/08(月) 20:38:25
>>420
そのぐれー理解しとけレベルとして聞いてるならもちろん理解しなきゃダメレベル

っていうかこれ嫌がったらキャラのアニメーション、エフェクトのアニメーションとか
アニメーションまわり全部苦手になるじゃん
理解しろ
424デフォルトの名無しさん:2008/09/09(火) 16:27:56
板ポリに張り付けたテクスチャの透明度を動的に変化させたいのですが

いままではカラー情報無の頂点(座標+テクスチャ座標のみ)をつかって
ピクセルシェーダーで直接テクスチャカラーを
指定したアルファ値で書き換えていたのですが
これを固定機能パイプラインで再現するにはどうしたらよいのでしょうか?

調べた限りでは頂点情報にカラー情報を入れて
そこのアルファ値を使ってブレンドしているようなものは見つけましたが
これだとアルファ値を変化させるたびにLockして書き換えることになるような気がします
なにかさっくりとブレンド比を指定することはできないのでしょうか?

固定機能パイプラインを使ったプログラムほとんどしたことがないのでよろしくお願いします
425デフォルトの名無しさん:2008/09/09(火) 17:16:48
板ポリなんだから、DrawPrimitiveUPを使えばいいんじゃない?
いちいちロックしなくて済むし
426デフォルトの名無しさん:2008/09/09(火) 18:49:08
DrawPrimitiveUPのUPって何の略ですか?
427デフォルトの名無しさん:2008/09/09(火) 18:55:05
ウンポーコ
428デフォルトの名無しさん:2008/09/09(火) 19:04:09
User memory Pointer
429デフォルトの名無しさん:2008/09/09(火) 19:46:21
>>428
THXRY
430デフォルトの名無しさん:2008/09/10(水) 04:52:39
>>424
俺も悩んだ。頂点毎に色を変える必要がなければ、
1.レンダーステートでライトを有効にする。
2.ライト自体は全てOFF。
3.マテリアルカラーのデヒューズあたりをいぢる。
で変わったはず。
ただし、この方法だとなぜか元々頂点カラーの入っているポリゴン(グーローポリゴン)
は変えることができなかった。解決方法は今も模索中。
431デフォルトの名無しさん:2008/09/10(水) 10:33:18
>>430
ありがとうございます
D3DRS_BLENDFACTORにて対応することにしました
432デフォルトの名無しさん:2008/09/10(水) 17:33:59
StreamDataサンプル
ttp://msdn.microsoft.com/ja-jp/library/cc370842.aspx

が見つからないんですが、どのバージョン落とせば入ってるんでしょうか・・・
February2007を使っています。
どこかでサンプルだけ落とすことって出来るんですか?
あとDirect Sound詳しく解説しているページや書籍があったら教えて頂きたいです。。。
433デフォルトの名無しさん:2008/09/11(木) 22:48:19
drawprimitiveとLPD3DXSPRITE->Drawによる描画を同時に使っているのですが
描画した結果をキャプチャして一枚のテクスチャにするにはどうすればいいですか?
434デフォルトの名無しさん:2008/09/11(木) 22:58:04
テクスチャをターゲットにする
435デフォルトの名無しさん:2008/09/11(木) 23:06:31
スプライトに関連づけられたデバイスがSetRenderTargetでテクスチャ指定すれば
DrawPrimitiveのものだけでなくスプライトもそのテクスチャに描画されるということですか?
436デフォルトの名無しさん:2008/09/11(木) 23:09:45
グダグダ言う前にとっととやれ
437デフォルトの名無しさん:2008/09/11(木) 23:48:51
D3DUSAGE_RENDERTARGETでテクスチャを作成して
・レンダーターゲットに設定して描画
・GetRenderTarget→StretchRectでフレームバッファからコピー

お好きな方をどうぞ
438デフォルトの名無しさん:2008/09/14(日) 17:04:12
DirectInput使ってキー入力してるんですが、ウィンドウを一旦非アクティブにすると、それ以降全てのキーが押された状態になるようです。
どうすれば直るでしょうか・・・
439デフォルトの名無しさん:2008/09/14(日) 17:56:34
協調レベルの設定を見直したら大丈夫になりました。
自己完結です。ご迷惑おかけしました
440デフォルトの名無しさん:2008/09/14(日) 21:24:29
行列計算とか距離計算だけをGPU?にやって欲しいんだけども、どうしたらそこで計算してくれますか?
441デフォルトの名無しさん:2008/09/14(日) 21:42:21
ちょっと立ち止まって
ホントにGPUで計算したほうが結果的にはやくなるのか考えてみよう
442デフォルトの名無しさん:2008/09/14(日) 22:41:23
昔はGPUでやってたよね(´・ω・`)
443デフォルトの名無しさん:2008/09/14(日) 23:53:34
ゲームの場合
どう考えてもCPUの遊んでる時間のほうが長いんじゃね?
444デフォルトの名無しさん:2008/09/14(日) 23:54:32
>>443
何いってるんだ・・・?
445デフォルトの名無しさん:2008/09/15(月) 08:37:45
つかFPU以上に速く処理できる場所ってあるのか?
446デフォルトの名無しさん:2008/09/15(月) 10:10:32
頂点毎に行列計算があるっていうなら止めないけど
あくまでキャラのローカル座標程度ならCPUのほうがいいと思うよ
447デフォルトの名無しさん:2008/09/15(月) 10:42:46
そろそろ破線描画について考えようぜ
448デフォルトの名無しさん:2008/09/15(月) 11:46:16
1軸固定のビルボードで余裕
449デフォルトの名無しさん:2008/09/15(月) 12:50:24
>>445
GPU
450デフォルトの名無しさん:2008/09/16(火) 20:09:45
今まで全然気づかなかったんだけど、Manaded DirextX9のDirectDrawって
もしかしてアルファブレンドに対応してるんですか?
SDK見てたらAlphaSourceConstantプロパティとか見つけたけど
また実装されてないとか・・・かな。
451デフォルトの名無しさん:2008/09/17(水) 12:51:44
よく考えたらこれスプライトのことだな、すまん
452デフォルトの名無しさん:2008/09/19(金) 15:43:38
DirectXをマスターしたいんですがお勧めの本教えてください。
453デフォルトの名無しさん:2008/09/19(金) 15:46:51
その前にマスターの基準を明確にしてください。
454デフォルトの名無しさん:2008/09/19(金) 15:48:00
MikuMikuDanceが作りたいです。
455デフォルトの名無しさん:2008/09/19(金) 18:01:31
つDirectX逆引き500
つGameProgramingGems1〜6
つGPUGems
つリアルタイムレンダリング
456デフォルトの名無しさん:2008/09/20(土) 12:08:13
DirectXゲームグラフィックスプログラミングを買ってきました。
457デフォルトの名無しさん:2008/09/20(土) 17:40:28
ウィンドウのクライアント領域サイズのテクスチャと変換済み座標を持つ頂点をつかって、
画面全体に画像を表示しようとすると、微妙にゆがんでしまいます。
これはどういったことが原因として考えられるでしょうか。
458デフォルトの名無しさん:2008/09/20(土) 18:36:45
どうゆがむのかな
459デフォルトの名無しさん:2008/09/20(土) 19:11:48
1ピクセルおきの格子画像を作って表示させると、モワレ見たいになってしまいます
460デフォルトの名無しさん:2008/09/20(土) 19:14:53
ノートパソコンじゃあるまいな
461デフォルトの名無しさん:2008/09/20(土) 19:17:32
普通に画像を表示させたらモワレがでないので、ディスプレイの問題とは思えないのです
462デフォルトの名無しさん:2008/09/20(土) 19:24:20
普通って?
463デフォルトの名無しさん:2008/09/20(土) 19:25:13
すいません、ペイントとかで開くとってことです
464デフォルトの名無しさん:2008/09/20(土) 19:27:41
クライアント領域の大きさはいくつ?
DrawPrimitiveUPとかでやってるのならUVの設定とか頂点位置の設定が怪しいような
465デフォルトの名無しさん:2008/09/20(土) 19:28:17
同じ画面モードで表示してみてダメなのか?違うモードでは?複数のビデオカードでも同じなのか?ドライバのバージョンは?CRTや液晶では?
466デフォルトの名無しさん:2008/09/20(土) 19:42:25
0.5ずらして書いてないとかいうふざけた理由じゃあるまいな
467デフォルトの名無しさん:2008/09/21(日) 12:24:04
いきなり返事がなくなったな
468デフォルトの名無しさん:2008/09/21(日) 22:31:47
どうも困ったことになってしまいましたので、教えてください。

今まで何の問題もなく快適な速度で動いていた3Dベンチや3Dゲームなんですが、
久々に動かしてみると「3D処理系のゲーム全般含めて…」初めのほうはいいんですど、
途中でいきなり60fps前後のものが30〜20fpsにまでフレームが落ち込んで処理落ちしています。。。

3年ほど前に購入したFFXIベンチ動作認定済みのハイエンド型のノート型なんですけど、
実際に動かしている3Dゲームはこれよりも遥かに要求スペックの低いものです。
おかしなことに2Dゲームのときもこの症状が出てきます。これって何が原因かと思いますか?

ツールを使って自分でチェックしたけど、もうダメ・・・解らなかったです。。。

ビデヲメモリの容量も問題ないと思うし、バス幅も問題ないと思う。CPU&GPUの性能も問題ないと思います。
メインメモリの一部の領域が壊れたら、こんな症状になるのかな?と、思ってMEMTEST86+にてメモリチェック
を行ってみましたが、エラーもなく正常でした。

他に、ゲーム中にいきなりフレームが2/1にまで落ち込む原因は何が考えられるでしょうか?
教えてくだされば助かります。よろしくお願いします。

----------------------------------------------------------------
原因のパソコン : [DynaBook G8 / 型番:X20PDEW]
OS : WindowsXP SP2 / DirectX 9c

詳細仕様 : http://dynabook.com/pc/catalog/dynabook/030512g8/spec.htm
URL : http://dynabook.com/pc/catalog/dynabook/030512g8/hard.htm
----------------------------------------------------------------
469デフォルトの名無しさん:2008/09/21(日) 22:44:37
で、C/C++と何の関係があるのかをまずは明確に説明しろ。
470デフォルトの名無しさん:2008/09/21(日) 22:46:44
DirectX初心者質問スレ、って言ってもここはプログラム板なんだが…
471デフォルトの名無しさん:2008/09/21(日) 22:49:53
>>468
リカバリーしる!
472デフォルトの名無しさん:2008/09/21(日) 23:01:33
そういうときはOS再インスコでまっさらな状態にするのと簡単に直る。
長年使ってると色々な所でボトルネックが増えてきて新品時とはありえないほどパフォーマンスが落ちる。
473デフォルトの名無しさん:2008/09/22(月) 00:52:58
リカバリーだな

それでも「途中で落ちてくる」場合は放熱系の性能が落ちてるかもしれんね
なら分解して掃除機orサポート逝きだな
474デフォルトの名無しさん:2008/09/22(月) 00:56:10
サポートやってるとそれぐらいのは来るんじゃね?
475デフォルトの名無しさん:2008/09/22(月) 09:54:47
DirectX勉強中なのですがDirectXにはテキストボックスとかは
無いのでしょうか?
全部自前でやるのでしょうか?
476デフォルトの名無しさん:2008/09/22(月) 10:04:49
なんか定期的にその話出るな・・・
やり方は複数ある。もちろん自前でやってもいい
477デフォルトの名無しさん:2008/09/22(月) 13:06:00
ヘタレの俺はダイアログ出してそこにエディットコントロールだがな・・・
478デフォルトの名無しさん:2008/09/22(月) 13:11:07
勉強中ならDXUTでいいんじゃね?
てか、最近のサンプルって全部DXUT使って書いてあるよね
479デフォルトの名無しさん:2008/09/22(月) 13:27:30
凝り性の俺は自前で処理する
どうでもいい部分に凝るのはなかなかに楽しい
進捗に貢献しないのでほどほどにしておかないといけないけれど・・・
480デフォルトの名無しさん:2008/09/22(月) 13:30:37
給料泥棒ですね
481デフォルトの名無しさん:2008/09/22(月) 15:00:38
質問です。
xファイルを読み込んでプログラムでボーンを動かして
アニメーションしたいと考えてますが
ボーンを動かす方法がわかりません
ヒントください...
482デフォルトの名無しさん:2008/09/22(月) 15:39:19
ひどい質問だな
483デフォルトの名無しさん:2008/09/22(月) 16:12:57
単にスキンメッシュがしたいんです。
ってことなのか
頂点シェーダや固定機能パイプラインを使わないで
CPUでボーンを動かしたいんです。
のどっちなんだ?
484デフォルトの名無しさん:2008/09/22(月) 17:55:35
DirectXを使うならbccじゃなくてvc++のほうを使ったほうがいいんでせうか?
485デフォルトの名無しさん:2008/09/22(月) 17:57:03
C++自体もVCの方がいいよ
486デフォルトの名無しさん:2008/09/22(月) 18:41:22
XFile
なんとかAllocaterとか使わず
自前で読み込んでやってみたら意外と簡単で感動した
487デフォルトの名無しさん:2008/09/23(火) 18:02:38
すいません、ここの処理がよく分からないのですが

//--------------------------------------
// 背景を描画
//--------------------------------------
// Z比較を行なう
pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);

// 元画像に合わせてオブジェクトのスケールを変える
if(m_imgInfoBack.Height != 0) {
aspect = (float)m_imgInfoBack.Width / (float)m_imgInfoBack.Height;
}
vScale.x = aspect;
D3DXMatrixScaling(&mScale, vScale.x, vScale.y, vScale.z);
mWorld = mScale;

// ワールド変換マトリックスをパイプラインにセット
pD3DDevice->SetTransform(D3DTS_WORLD, &mWorld);

これだけじゃ質問の意味が分からないかもしれません・・・、申し訳ない

// 元画像に合わせてオブジェクトのスケールを変える の所の処理について説明してもらえませんか
よろしくお願いします
488デフォルトの名無しさん:2008/09/23(火) 18:26:42
正方形状に頂点を配置してるから、元画像の縦横比を保つために変換行列で正方形を横に広げることを指示してる。
489デフォルトの名無しさん:2008/09/23(火) 19:14:07
>>488

ありがとうございます
490デフォルトの名無しさん:2008/09/24(水) 16:13:21
GPUの描画能力を活かして描画ソフト(ポリゴンで二次元的な線や図形を描く)を作りたいのですが、
最終的にレンダリングされた画面をファイルに保存するときはどのような手順を踏めばよいでしょうか?
491デフォルトの名無しさん:2008/09/24(水) 16:24:40
つD3DXSaveTextureToFile
492490:2008/09/24(水) 17:28:10
>>491
ありがとうございました!!
493デフォルトの名無しさん:2008/09/24(水) 18:19:38
最強の入門書は?
494デフォルトの名無しさん:2008/09/24(水) 19:15:33
DirectX以前の質問になってしまうが、教えて欲しい。
直方体や円柱の林の中を一人称視点で移動できるようなプログラムが
組める位までの知識が欲しいんだけどお勧めの書籍とかある?

当方のスキルは算数は困らん程度に出来るが、数学は微妙だ。
プログラムの言語はCとC++は一通り出来る(はず)。
MFC使って自分用のツールを作る程度のことは出来る。
495デフォルトの名無しさん:2008/09/24(水) 20:45:39
http://sorceryforce.com/programing/mdx/
こんなわかりやすいサイトないですか?
496デフォルトの名無しさん:2008/09/24(水) 22:49:58
キーボード、マウス、ゲームコントローラーとして認識されていない機器をDirectInputで扱うことはできますか?

トランジスタ技術8月号についてきた78k0マイコンにスイッチを付けてコントローラーの様にしようと思ったのですが、
パソコンには仮想comポートとして認識されているため途方に暮れてます。
497デフォルトの名無しさん:2008/09/25(木) 09:55:44
ドライバ書くのがいいかも。
って署名なしは入れにくいか
498デフォルトの名無しさん:2008/09/25(木) 11:39:02
>>494
三角関数、ベクトル、行列あたりの知識は絶対必要。
499デフォルトの名無しさん:2008/09/25(木) 11:46:47
>>494 程度なら行列は使い方だけ分かれば数学的な知識なくても何とかなるけどな
500デフォルトの名無しさん:2008/09/25(木) 12:14:29
すみません超初心者版で質問したのですが
スレが消えてしまったのでこちらに改めて質問させてください

リアルタイムロードシステムの妄想をしているのですが
テクスチャをロードする際にMipMapの低レベルサーフェイスから順に
読み込めないかといろいろ試しているのですがいい方法が浮かびません

デバイスのCreateTextureで必要なバッファを確保し、あとから自力で
DDSファイルなりを読み込んでロックして放り込めば出来るかと思ったのですが
D3DPOOL_DEFAULTで作成したものしかロックできないんだとか
USAGE_DYNAMICは効率が悪いから使いたくないよ・・・・

なんかいい方法ないでしょうか?
501デフォルトの名無しさん:2008/09/25(木) 12:40:31
>USAGE_DYNAMICは効率が悪いから使いたくないよ・・・・
この考えが間違っている
使え

以上
502デフォルトの名無しさん:2008/09/25(木) 13:47:54
>>501 回答ありがとうございます!
リファレンスのD3DUSAGE_DYNAMICを見直してみたところ、
頂点バッファに関しては配置場所が変わる可能性があるようですが、
テクスチャに関しては特にそういった記述が見当たりませんでした。

つまりテクスチャに関してはDYNAMICにしても、速度的なデメリットは無いんでしょうか?
宜しくお願いしますm(_ _)m
503デフォルトの名無しさん:2008/09/25(木) 15:15:51
MipMapの低レベルサーフェスから順に読み込む理由が知りたい。
っていうか、Lockできる条件を勘違いしてるだろ。

>D3DPOOL_DEFAULT で作成されたテクスチャはロックできない。
(SDKのヘルプより)
504494:2008/09/25(木) 16:02:40
>>498、499
とりあえず教えて貰ったキーワードを元に、
ググる先生に参考書になりそうな本を聞いてくる。
505デフォルトの名無しさん:2008/09/25(木) 16:05:47
>>504
来月始め頃にちょうどいいのが出るような気がした
506デフォルトの名無しさん:2008/09/25(木) 16:08:09
っと、名前忘れてたんで探してきた、これだ
ttp://www.oreilly.co.jp/books/9784873113777/
もちろん1行も読んでないので、どんなもんかはわからん。
507デフォルトの名無しさん:2008/09/25(木) 16:12:26
移動するくらいなら算数だけできればおk
508500:2008/09/25(木) 16:20:39
低レベルから順にロードする理由は、数フレームにわたってリアルタイムロードする場合は
低解像度でもいいので出来る限り早く読み込んで表示したいからです

それから
>D3DPOOL_DEFAULTで作成したものしかロックできないんだとか

>D3DPOOL_DEFAULTで作成したものは、USAGE_DYNAMICを指定しないとロックできないんだとか
の間違いでした。すみません
509デフォルトの名無しさん:2008/09/25(木) 17:00:08
>>508
D3DPOOL_DEFAULTならLockするより、UpdateTextureや
UpdateSurfaceを使った方が速い。
510500:2008/09/25(木) 17:45:03
ご意見どうもです

UpdateSurfaceでやると、ロックするのと違いなぜ速くなるのでしょうか?
システムメモリ上にもテクスチャを作ることになりそうであまりやりたくないかなと^^;

また、D3DXLoadSurfaceFromMemoryと言う関数を見つけたのですが、
これで代用することもできますでしょうか?
511デフォルトの名無しさん:2008/09/25(木) 17:58:41
入門書はなにがよろしくって?
512デフォルトの名無しさん:2008/09/25(木) 19:22:44
>>510
UpdateTextureはDMAが使用される。
転送速度そのものは、DMAを使おうが使うまいが大差ないが
DMAの場合は転送中にCPUがフリーになって他の処理ができる。
513デフォルトの名無しさん:2008/09/25(木) 21:32:03
>>512
それならMANAGEDでいいですやんって話
514デフォルトの名無しさん:2008/09/25(木) 23:44:30
ポイントプリミティブを同じ座標に描画して色のブレンドを行いたいのですが上手く行きません。

これは無理なことなんでしょうか?
515デフォルトの名無しさん:2008/09/26(金) 02:42:55
directx10 SDK だとdirectsoundが使えないとかないよね?

音が鳴らない・・・
516デフォルトの名無しさん:2008/09/26(金) 07:46:42

音だけ鳴らす最小限のサンプルを見つけて、そこからチェックしてみたら?
517デフォルトの名無しさん:2008/09/26(金) 07:49:48
DirectX10のSDKなんてないだろ。
DirectSound自体はDirectX8の頃から変わってないし最新SDK使ってても普通に鳴るぞ。
518デフォルトの名無しさん:2008/09/26(金) 12:12:09
自分のプラグラムのバグだとは思わないのかね
何でも人のせいにするんじゃないよ
519デフォルトの名無しさん:2008/09/26(金) 12:18:32
directx10 SDK→Vistaを使ってる
VistaとDirectSoundの相性関係でうまく再生できてない

って事はない?
何れにしろ再生できるはず
520デフォルトの名無しさん:2008/09/26(金) 12:54:06
存在しないSDKの名を上げ、何をどうしたのかも書かず、
自分のプログラムを疑わず他人のせいにする。

プログラマ適性0だから、そのそも足を洗うのが正しい選択だろう。
521デフォルトの名無しさん:2008/09/26(金) 17:27:24
OpenALへようこそ
522デフォルトの名無しさん:2008/09/26(金) 17:41:30
やっぱそういう流れなのかな^^;
日本語ドキュメントさえあればそれでもいいんだけど

XAudio2ってどうなってんの?未だ未完成だよね
523デフォルトの名無しさん:2008/09/26(金) 17:46:29
3DCGツールにボーンってあるじゃないですか?
あれってDirectXの機能じゃないですよね?
自分で実装する領域ですよね?
素人ですまそ。
524デフォルトの名無しさん:2008/09/26(金) 17:48:16
補助機能みたいなのはあるにはあるが自分で実装する部分だね
525デフォルトの名無しさん:2008/09/26(金) 17:50:46
>>524
そうですよね。ありがとうございます。

例えば人体のモデルがあったとしても
ボーンを入れるならボーンごとにモデルを分けないと
いけないってことですよね。
526デフォルトの名無しさん:2008/09/27(土) 15:14:37
>ボーンごとにモデルを分けないと
頂点バッファやインデックスバッファ自体はひとつでもいい。
各頂点にボーンの番号付けて、頂点シェーダでそれ見て変換する。
527デフォルトの名無しさん:2008/09/27(土) 15:29:06
>>525
別のボーンに限らずモデル描画自体は自分で全部実装する部分なのでボーンだけが特別なわけじゃない。
528デフォルトの名無しさん:2008/09/27(土) 15:58:52
>>459と同じ状況に陥りました。拡大するとより一層モアレが目立ちます。

デバイスタイプをHALからREFに変えたら画像がはっきりするのですが、
かなり重たくなってしまいます。
REFを使わないでモアレを消す方法を知っている方がいればお願いします。

PCは「Let'Note」で「directx9 」使ってます。
529デフォルトの名無しさん:2008/09/27(土) 16:48:55
ビデオカードを変える
530デフォルトの名無しさん:2008/09/27(土) 16:52:16
ビデオカードによって見た目は変わるんだよ

現状でモアレを消すならミップマップを使う、モアレの出ないような絵にする
531デフォルトの名無しさん:2008/09/27(土) 17:29:54
>>529 >>530 ビデオカード変えたらかなり綺麗になりました。
こんなに変わるものなんですね・・・
ミップマップの方も挑戦しようと思います。
アドバイスくれた方ありがとう御座いました m(>_<)m







532デフォルトの名無しさん:2008/09/27(土) 20:38:37
>>531
デバイスの初期値もあまりあてにはならない。
全てのステートを起動時に初期化するべき。

あとビデオカードのユーティリティで強制的に
異法性フィルタやMSAAとかがONになっている可能性もある。
533468:2008/09/28(日) 00:10:55
>>471-473
レスが遅れてしまいましてすみません。
貴重なご意見をありがとうございました。
皆さんの意見を参考に、こちらで色々と作業をやってみたいと思います。
原因解消の復旧というか、最後の手段はやはりOSの再セットアップしかなさそうですね。


がっばってみます。
534504:2008/09/29(月) 14:06:49
>>505-506
レスが遅くなってすまん。
まさにぴったりなタイトルだよ。 マジサンクス。
早速、密林に予約した。
535デフォルトの名無しさん:2008/09/29(月) 18:24:39
DirectX9勉強して1年になるのですが、関数が多すぎて全部覚えられそうにありません・・・。

皆さんはどんなふうに覚えてますか?
536デフォルトの名無しさん:2008/09/29(月) 18:26:36
名前とかスコア表示用にアルファベットと数字のビットマップを等間隔で出力するツールってないかな?
537デフォルトの名無しさん:2008/09/29(月) 18:29:14
>>536

SentSentBampTool ???

538デフォルトの名無しさん:2008/09/29(月) 18:39:28
>>535
覚えない
いつもMSDNを参照してる
539デフォルトの名無しさん:2008/09/29(月) 18:53:09
>>535
関数を沢山覚える必要はないが、

貴方のやりたい事にもよるけど、例えば

マルチパスレンダリングの手順などは覚えていた方がいいと思う。

皆はどう思う?
540デフォルトの名無しさん:2008/09/29(月) 21:32:07
DirectX 初心者です。 DirectX9 を用いて下記のことを
やっているのですが、上手く表示が出来なくて困っています。

DrawPrimitiveにてD3DPT_TRIANGLELISTを指定して
4つ三角形をテクスチャを貼り付けてレンダリングしようと
しているのですが、D3DRS_ZENABLE=TRUE , D3DRS_ZWRITEENABLE=TRUE
とした時にテクスチャがうまく貼り付けられなくて困っています。
D3DRS_ZENABLE=FALSE とすると、うまく貼り付けられるのですが
今度は各三角形を個別に描画したような絵になってしまいます。

D3DRS_ZENABLE=TRUE, D3DRS_ZWRITEENABLE=TRUEでも、D3DRS_ZFUNCに
D3DCMP_ALWAYS とするとテクスチャはうまく貼り付けられるのですが、
D3DRS_ZENABLE=FALSE とした場合同様、各三角形を個別に描画した
ような絵になってしまいます。

よろしくおねがいします。
541デフォルトの名無しさん:2008/09/29(月) 22:29:13
Zの問題とテクスチャの問題は別だ
まずZENABLE=FALSEの状態で正しく描画されるようにしよう
うまく描けたら、ZENABLE=TRUEの状態でもいけるように直す

テクスチャ座標がまずいんでない?
542デフォルトの名無しさん:2008/09/29(月) 22:39:00
>>541
ありがとうございます。 こんな感じで定義しています。

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1 )

typedef struct {
FLOAT x, y, z;
FLOAT u,v;
} CUSTOMVERTEX;

CUSTOMVERTEX vertices[] = {
{ 0.0f, 0.5f, -0.5f, 0.0f, 0.0f },
{ 0.0f, 0.5f, 0.5f, 1.0f, 0.0f },
{ 0.0f, -0.5f, -0.5f, 0.0f, 1.0f },

{ 0.0f, 0.5f, 0.5f, 1.0f, 0.0f },
{ 0.0f, -0.5f, 0.5f, 1.0f, 1.0f },
{ 0.0f, -0.5f, -0.5f, 0.0f, 1.0f },

{ -0.5f, 0.5f, 0.0f, 0.0f, 0.0f },
{ 0.5f, 0.5f, 0.0f, 1.0f, 0.0f },
{ -0.5f, -0.5f, 0.0f, 0.0f, 1.0f },

{ 0.5f, 0.5f, 0.0f, 1.0f, 0.0f },
{ 0.5f, -0.5f, 0.0f, 1.0f, 1.0f },
{ -0.5f, -0.5f, 0.0f, 0.0f, 1.0f }
};

よろしくお願いします。
543デフォルトの名無しさん:2008/09/29(月) 23:18:37
>>541
すみません。
ZENABLE=FALSE の時には正しく描画されているように見えます。
ただ、1つ1つの三角形を個別にレンダリングしたような感じになっ
てしまいます。(陰影などが全く反映されません)

よろしくお願いします。
544デフォルトの名無しさん:2008/09/29(月) 23:47:55
それは、テクスチャが貼れてないだけ?
ポリゴン自体は描けてる?
Zバッファのクリアをミスってるとか
545デフォルトの名無しさん:2008/09/29(月) 23:51:19
法線がないようだが、ライティングはオフにしてる?
546デフォルトの名無しさん:2008/09/29(月) 23:57:28
>>544
>>545
ありがとうございます。

はい、テクスチャがうまく描画されないだけみたいです。

Zバッファのクリアはとくにしていないのですが、どうやれば
良いでしょうか?

はい、ライティングは無効にしてあります。

SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
SetRenderState( D3DRS_LIGHTING, FALSE );
SetRenderState( D3DRS_ZENABLE, TRUE );
SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL );
SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
SetRenderState( D3DRS_SPECULARENABLE, FALSE );
SetRenderState( D3DRS_DITHERENABLE, FALSE );
SetRenderState( D3DRS_FOGENABLE, FALSE );
SetRenderState( D3DRS_SPECULARENABLE, FALSE );
SetRenderState( D3DRS_RANGEFOGENABLE, FALSE );
SetRenderState( D3DRS_STENCILENABLE, FALSE );

よろしくお願いします。
547デフォルトの名無しさん:2008/09/30(火) 00:10:28
>>544
>>545
ありがとうございます 動きました!
Zバッファをクリアする必要があることを知りませんでした。。。orz...

本当にありがとうございました。
548デフォルトの名無しさん:2008/09/30(火) 13:02:49
すごく初歩的な質問で恥ずかしいのですが・・・
DirectXで3Dゲームを作る場合、3Dグラフィクス自体は(キャラクターのモーションなど)専用のグラフィックツールで作ると言う形なのでしょうか?
549デフォルトの名無しさん:2008/09/30(火) 13:09:52
あ・た・り・ま・え
550デフォルトの名無しさん:2008/09/30(火) 17:44:47
1>gamemain.cpp
1>c:\documents and settings\^^^^^^\デスクトップ\src\test90walking\test1\../../class/classlib.h(70) : fatal error C1083: include ファイルを開けません。'dpaddr.h': No such file or directory

これと同じエラーが20個もでてコンパイルできないのですがどう対処すればいいのでしょうか・・・?

3Dリアルタイムアニメーションという書籍のサンプルです。
551550:2008/09/30(火) 17:45:25
dpaddrというヘッダファイルがどこにもなくて・・・。
552デフォルトの名無しさん:2008/09/30(火) 17:56:38
DirectX SDK には以下のコンポーネントは含まれなくなりました。

Direct3D 8 とそれ以前のすべてのバージョン
Direct3D RM
DirectAnimation
DirectMusic
DirectInput7 およびそれ以前のすべてのバージョン
DirectPlay
DirectPlayVoice
DirectX 8 時代の HRESULT 変換ルーチン
Managed DirectX サンプルとドキュメント
これらのコンポーネントをご利用になりたいデベロッパーは、MSDN から入手可能な August 2007 DirectX SDK をダウンロードする必要があります。
553デフォルトの名無しさん:2008/09/30(火) 17:56:48
DirectPlay関連のヘッダーだろ
DirectX8のSDKにあるんじゃないかな。
554デフォルトの名無しさん:2008/09/30(火) 18:09:13
ありがとうございます
インストールしてみます
555デフォルトの名無しさん:2008/09/30(火) 22:17:42
BCCでDirectXを使うにはどうすればいいんですか?
556デフォルトの名無しさん:2008/09/30(火) 22:20:24
SDK入れよう
557デフォルトの名無しさん:2008/10/01(水) 00:45:19
>>548に便乗して質問。
どんなグラフィックソフト使ってる?
558デフォルトの名無しさん:2008/10/01(水) 07:37:30
3DS MAX
559デフォルトの名無しさん:2008/10/01(水) 08:36:05
うらやましい限りだぜ
俺はBlender
560デフォルトの名無しさん:2008/10/01(水) 09:14:54
Mayaってどうなんだろ
561デフォルトの名無しさん:2008/10/01(水) 09:39:52
この手のツールは無料から始めたほうがよさげ。
使い切れずに放り投げるには高すぎるからなw
562デフォルトの名無しさん:2008/10/01(水) 09:50:07
金があったら
ZBrush+3DSMAXが最強な希ガス
563デフォルトの名無しさん:2008/10/01(水) 10:30:15
俺はMikuMikuDance
564デフォルトの名無しさん:2008/10/01(水) 10:35:51
MAXの無料版ってもう無いの?
565デフォルトの名無しさん:2008/10/01(水) 10:42:11
先日買った書籍に3Dリアルタイムアニメーションというのがあるのですが。

LightWaveで作ったアニメーションをUViewで読み込んでOBJ形式で描きだして
DirectXで読み込む方法を使っているのですがUViewは現在販売していないらしく
他のソフトで代用して欲しいと最後に筆者が記述していたのですが
他のソフトってどんな物があるのですか?

何個か教えてもらえたら嬉しいです!
566デフォルトの名無しさん:2008/10/01(水) 11:41:51
obj形式なら普通にエクスポート出来ると思うが?
じゃなくてOBJ形式をXファイルに変換とか?
何れにしてもLightWaveの標準機能で出来た希ガス
567デフォルトの名無しさん:2008/10/02(木) 10:46:19
ID3DXEffectを使用した場合、シェーダのグローバル変数の共有や、ステートの一括変更などが可能ですが
これらの処理をID3DXEffectを使用しないで自前で実装することは可能でしょうか?

リファレンスを見ているのですが、変数を共有する方法は全く見当たりませんし
ステートブロックを自前で管理したとしても、API呼び出しは回数は減らせないですよね?

ID3DXEffectを使用しないという人は結構いると思うのですが、この辺はどうやって解決しているんでしょうか・・・
宜しくお願いしますm(_ _)m
568567:2008/10/02(木) 10:51:24
すみません、ステートブロックに関してはIDirect3DStateBlock9が使えることが分かりました
これに関しては何とかなりそうです。
569デフォルトの名無しさん:2008/10/02(木) 11:06:45
俺はMayaかってしまった。マジすごいなこれ。
570デフォルトの名無しさん:2008/10/02(木) 12:05:45
ブルジョワジーめ
571デフォルトの名無しさん:2008/10/02(木) 16:20:40
August 2007のDirectX SDKを入れていますが、IA64のライブラリがついていません。
付属してるバージョンのSDKを知ってる方はいませんか?
572デフォルトの名無しさん:2008/10/02(木) 16:34:22
うああああああ
シェーダー定数の共有のさせ方わっかんねーwww
燃えてきたぜ
573567:2008/10/02(木) 17:22:54
結局sharedキーワードでうまく共有する方法は分からないが
レジスタを直接指定すれば共有できることは分かった
取りあえずこれでいこうと思います。もっといい方法があったら教えていただけると助かりますm(_ _)m
574デフォルトの名無しさん:2008/10/02(木) 22:51:57
>>573
1、ID3DXEffectPoolオブジェクトを作成(D3DXCreateEffectPoolを使用)
2、sharedをつけた変数を宣言したFXファイルを作成
3、共有したいFXファイル全てに2のFXファイルをインクルード
4、3のFXファイルをコンパイル時、D3DXCreateEffectに1のID3DXEffectPoolオブジェクトを引数で渡す。
575デフォルトの名無しさん:2008/10/02(木) 22:59:03
ん?
ID3DXEffectを使わないで変数の共有をしたいって言ってるのか?
そりゃー、逆アセンブルしてD3DXがどう解決しているか確認してみりゃいいんじゃね
まーEffectPoolなんて使ってる以上、力技だろってのは想像がつくがな
576デフォルトの名無しさん:2008/10/02(木) 23:04:30
単純に変数を一時的にEffectPoolに入れておいてるだけで、
結局描画時に全部毎回マッチングしてレジスタに設定してるんじゃ無いっけ?

あくまでユーザー側からは同じ変数のように見えているだけで。
577デフォルトの名無しさん:2008/10/03(金) 08:32:57
>>576
マジすかw
だとしたら効率的には何の意味もないんだな^^;
578デフォルトの名無しさん:2008/10/03(金) 10:58:52
頂点シェーダーにハードウェア対応していないグラフィックカードでは
頂点処理はCPUで実行されると思いますが、その場合に
D3DPOOL_DEFAULTを指定して作成したっ頂点データは
システムメモリ上に配置される可能性が高いんでしょうか?

システムメモリ上に配置されるということはレンダリングの度にシステムメモリから
ビデオカードへのデータ転送が発生しているのでしょうか?
579デフォルトの名無しさん:2008/10/03(金) 13:08:38
>>576
そういえば、頂点シェーダー(VS)とピクセルシェーダ(PS)を別々にビルドしてセットする場合って、
VSとPSそれぞれの定数テーブルに値をセットする必要があると思うけど
(VSとPSでレジスタ空間が違うからなのか?違うよね?)
この辺もD3DXEffect系使った時って意識しないから、やっぱD3DXEffect系は内部でいろいろやってるのか…
580デフォルトの名無しさん:2008/10/03(金) 20:26:43
1>.\MapModel.cpp(622) : error C2065: 'DXFILEFORMAT_BINARY' : 定義されていない識別子です

最後にこのエラーだけ解決できません・・・。

対処方法を教えていただけませんか?
581デフォルトの名無しさん:2008/10/03(金) 20:32:44
>>578
頂点変換をハードウェアで対応してなければ
システムメモリから転送するしかない。

RadeonHD3450が5000円で買えるんだから
素直にDirectX10対応のビデオカード買えばいい。

>>579
かといって自分で全部管理した方が速くなるのか?という話になると
どちらかといえば遅くなるだろうから素直にID3DXEffect使う方がいい。

すでにDirectX10ではそれしかないし。
582580:2008/10/03(金) 20:37:52
if (FAILED(D3DXSaveMeshToX(name, pMesh, NULL, material, NULL, 3, DXFILEFORMAT_BINARY)))
return false;
return true;
}

コードです
583デフォルトの名無しさん:2008/10/03(金) 20:55:18
>>582

使ってるSDKが新しすぎるんじゃね?

よく分からんわ
584デフォルトの名無しさん:2008/10/03(金) 22:28:42
>>580
それは、dxfile.hに定義がある。
使いたければ、includeしろ。
てか、それ間違ってるんで
#include <d3dx9xof.h>
を追加して
D3DXF_FILEFORMAT_BINARYを使え。
585デフォルトの名無しさん:2008/10/03(金) 22:33:51
おまいらどうやってDirectX勉強したの?
独学?
586デフォルトの名無しさん:2008/10/03(金) 22:45:02
独学
587デフォルトの名無しさん:2008/10/03(金) 23:00:30
すっげー
588デフォルトの名無しさん:2008/10/03(金) 23:05:32
俺はDirectX5の頃からだぞ、なめんな
あと歳は聞くな
589デフォルトの名無しさん:2008/10/03(金) 23:13:15
WinGから
じじい言うな
590デフォルトの名無しさん:2008/10/04(土) 00:11:11
d3dx9_xx.dllにはいろんなバージョンがありますが、ロードするのは一番数字が大きいものでいいのでしょうか。
それとも、各バージョンごとで互換性が低いのでしょうか。
591デフォルトの名無しさん:2008/10/04(土) 01:15:57
つかってるSDKによって勝手に対応するバージョンのものが呼ばれる
592デフォルトの名無しさん:2008/10/04(土) 01:23:05
それはd3dx9.libをリンクしていたらってことですよね。
友達にプログラムを渡したら二人が二人ともd3dx9_xx.dllがないとエラーが出るといっていたので、
とりあえず一番に、最新のDirectXを入れるように言ったのですが、
プログラム側で選択してもよいものなのかと疑問に思ったのです。
593デフォルトの名無しさん:2008/10/04(土) 01:28:19
>>592
>プログラム側で選択してもよいものなのかと疑問に思ったのです。

それをやれるだけのスキルがあるならやればいいと思うけど、
「やってみたいんですけどうまくいきません」というのならやるなと言いたい。
594デフォルトの名無しさん:2008/10/04(土) 01:31:04
>>592

Web Installerで全部のd3dx9_xx.dllをインストールしてくれるから、これ実行してもらうといいよ。
http://www.microsoft.com/downloads/details.aspx?familyid=2da43d38-db71-4c1b-bc6a-9b6652cd92a3&displaylang=ja
595デフォルトの名無しさん:2008/10/04(土) 01:37:51
ということは少なからず差異があるようですね。
>>594のページを教えて、インストールさせようと思います。
ありがとうございました。
596デフォルトの名無しさん:2008/10/04(土) 05:27:32
Direct3D 9 Driver Development Kitなんて何処にあるんだ・・・?
597デフォルトの名無しさん:2008/10/04(土) 07:23:51
ぶっちゃけ
自分のPCにはいってる一番番号の大きいdllを
exeと同じフォルダに入れて渡せば動くよ
598デフォルトの名無しさん:2008/10/04(土) 10:49:32
>>588
WinG〜GameSDK
599デフォルトの名無しさん:2008/10/04(土) 13:29:21
typedef struct _D3DLVERTEX {
D3DXVECTOR3 pos;
D3DCOLOR color;
D3DCOLOR specular;
D3DVALUE tu;
D3DVALUE tv;
} D3DLVERTEX, *LPD3DLVERTEX;

#define D3DFVF_LVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1)

_D3DLVERTEX についている_の意味ってなんですか?
600デフォルトの名無しさん:2008/10/04(土) 13:44:02
別にそこで使った名前は他で使わないから適当でううんだけど
よそと名前がぶつかったら困るでしょ。
そのために自分たちだけで決めたルール
601デフォルトの名無しさん:2008/10/04(土) 14:30:43
なるほど そういうことですか

ありがとうございjます
602デフォルトの名無しさん:2008/10/04(土) 22:58:01
おしえてください。

ウィンドウサイズの変更イベント OnSize() の中で、
Reset() を使っているのですが、D3DERR_INVALIDCALL
というエラーが出て先に進めなくてこまっています。orz...

D3DPRESENT_PARAMETER の中身は、

BackBufferWidth 0
BackBufferHeight 0
BackBufferFormat D3DFMT_X8R8G8B8
BackBufferCount 0
MultiSampleType D3DMULTISAMPLE_NONE
MultiSampleQuality 0
SwapEffect D3DSWAPEFFECT_DISCARD
hDeviceWindow = GetSafeHwnd() で取得したハンドル
Windowed 1
EnableAutoDepthStencil 1
AutoDepthStencilFormat D3DFMT_D16
Flags 0
FullScreen_RefreshRateInHz 0
PresentationInterval 0

です。

よろしくお願いします m(_ _)m
603デフォルトの名無しさん:2008/10/04(土) 23:02:45
ウィンドウハンドルがNULLとか
604デフォルトの名無しさん:2008/10/04(土) 23:23:42
>>603
ありがとうございます。

D3DERR_INVALIDCALLが発生する原因がわかりました。
リソースをD3DPOOL_DEFAULTで確保するとダメみたいです。

OnSize() でウィンドウサイズを可変した時に3D画像のアスペクト比が
変わってしまうのを防ぎたかったのですが、Resetを呼び出してもダメ
みたいです。

アスペクト比を固定するにはどのようにすれば良いでしょうか?

よろしくお願いします。
605デフォルトの名無しさん:2008/10/04(土) 23:32:34
D3DPOOL_DEFAULTで作成したリソースをいったん削除してからデバイスをリセットして、その後でリソースを作り直す。
606デフォルトの名無しさん:2008/10/04(土) 23:39:07
>>605
ありがとうございます。

早速ためしてみます。
607デフォルトの名無しさん:2008/10/04(土) 23:41:30
>>604
何がしたいのかわからないんだが
ウインドウサイズが変わった時点で
変更後のサイズからアス比を再計算して
射影行列を作る時に指定しているアス比を変更するだけじゃだめなのか?
D3DXMatrixPerspectiveFovLHとかの話



ついでに流れ的に関係あるようでないような質問
テクスチャとかメッシュとかはパフォーマンス的には置いといて
デバイスのロストを気にしなくても良い様にできるけど
ID3DXEffectだけは対応しなくちゃいけない感じなんだが
これって何かの設定で対応しなくて良いようにできるものなの?
608デフォルトの名無しさん:2008/10/04(土) 23:50:09
>>607バックバッファの大きさは変わらないんだからぼんやりしちゃうだろ
609デフォルトの名無しさん:2008/10/05(日) 00:23:15
デフォルトのバックバッファを使わないで、
後から確保した物を使えばリセットする必要性は皆無
610デフォルトの名無しさん:2008/10/05(日) 00:48:32
>>607
ID3DXEffectの仕様として管理下はサポートされていないので
それは無理だろ。
ただ、ロスト対応が必要な理由として、シェーダ引数のテクスチャと
ステートブロックがあるからだろうと考えられるので
エフェクトに渡すテクスチャは管理下のみ、
pass内でステートの変更はしない、ステートブロックは使わない、などの
対策をすれば、大丈夫になるかもね。
611デフォルトの名無しさん:2008/10/05(日) 00:51:57
マルチディスプレイで
WindowモードのWindowを他方のWindowへ移動すると
presentが遅くなるのはどうしようも無いですか?
612デフォルトの名無しさん:2008/10/07(火) 16:03:48
VOID DrawText(ID3DXFont* pFont, char* text, DWORD x, DWORD y, D3DCOLOR Color)
{
RECT Rect;

SetRect(&Rect, x, y, CW_USEDEFAULT, CW_USEDEFAULT);
pFont->DrawTextA(text, -1, &Rect, DT_LEFT | DT_NOCLIP, Color);

}


pFont->DrawTextA(text, -1, &Rect, DT_LEFT | DT_NOCLIP, Color);

この部分で
error C2660: 'ID3DXFont::DrawTextA' : 関数に 5 個の引数を指定できません。

と言うエラーが出てしまいます
自力で調べた所DirectX SDKの仕様が変わったためにコンパイルできないらしいと言うところまではわかったんですが
どのように書き直せば良いのかわかりません
どのように直せば良いのでしょうか

ちなみにSDKはaugust 2007です

よろしくお願いします
613デフォルトの名無しさん:2008/10/07(火) 16:14:53
第一引数にD3DXSPRITEを渡さないとダメ
最新のSDKのマニュアルとサンプルを見るべし
614612:2008/10/08(水) 14:40:09
ありがとうございました
やってみます
615デフォルトの名無しさん:2008/10/08(水) 15:35:55
これからDirectXをまなぼうと思っています
ゲームをつくりながら解説していくようなサイトを探しています
オススメがありましたら教えてください
C++とWINAPIの基本は理解しています
616デフォルトの名無しさん:2008/10/08(水) 15:36:41
age失礼しました
617デフォルトの名無しさん:2008/10/08(水) 16:12:12
DirectInputで作成したマウスデバイスで、強調レベルを非排他に設定したときだけAquireメソッドが成功しません。
どういうときに失敗するのでしょうか。
618デフォルトの名無しさん:2008/10/08(水) 18:39:17
>>617
Aquireは排他制御のためのメソッドだから、非排他設定なら必要ないだろう。
619617:2008/10/08(水) 21:22:12
どんなサイトの解説を見ても、必ずAcquireメソッドをよんでるんですが・・・
少なくともサイトの管理人の環境では、実行できてるってことですよね?
620デフォルトの名無しさん:2008/10/08(水) 21:40:22
>>619
Acquireを呼んでいるのと、Acquireが成功するかは別問題。

MSのサンプルだってAcquireは呼んでいる。
でも、それが成功したかなんて気にしていない。
621617:2008/10/08(水) 21:54:33
日本語版のMSDNでようやく該当する記述を見つけました。
Acquireの戻り値として、
>DIERR_OTHERAPPHASPRIO 他のアプリケーションの優先レベルの方が高いので、この呼び出しを実行できない。
>この値は、標準の COM 戻り値である E_ACCESSDENIED に等しい。このエラーが返されるのは、
>デバイスに対するアプリケーションのアクセス権がフォアグラウンド アクセス権であるにもかかわらず、
>バックグラウンドであるときにデバイスを取得しようとした場合である。
とありました。WM_CREATEの処理内で呼び出していたために失敗していたようです。
大変お騒がせしました。まさか日本語ページの方が詳しいなんて・・・
622デフォルトの名無しさん:2008/10/09(木) 00:11:47
DirectSoundはDirextX8も9も一緒なんですか?
DirectSoundCreate8からDirectSoundCreate9になるのかと思ったんですがないといわれます。
ライブラリの追加はdsound.lib dxguid.lib winmm.lib だけでいいんですか?
623デフォルトの名無しさん:2008/10/09(木) 02:15:01
質問です。
DirectXで作られたゲームを公開する場合、マイクロソフトの著作権表記などは
必要なのでしょうか?

ttp://www.microsoft.com/japan/msdn/directx/japan/license/eula.aspx
ttp://www.microsoft.com/japan/msdn/directx/japan/license/dx_license.aspx

一応上を読んでみたのですが、ごちゃごちゃ書いてあって正直よくわかりません。
624デフォルトの名無しさん:2008/10/09(木) 08:26:40
>>622
dsound.hの中を見ればわかるよ
DIRECTSOUND_VERSION >= 0x0800
なので8も9も同じ
libはそれでいいんじゃない
未解決とか言われたら追加すればいい
625デフォルトの名無しさん:2008/10/09(木) 10:12:20
質問です
DirectX8で作られた古いソースが出てきたのですが、現在PCには9.0cのSDKが入っています。
上記ソースをコンパイルしようとしたところ
#include <d3d8.h>
#include <d3dx8.h>
こいつらがないと言われてしまったのですが、DirectX8のSDKをインストールしないとダメってことでしょうか。
(普段は9のプログラムを組んでいるので)競合しそうで怖いのですが、何か良い手はありますでしょうか
626デフォルトの名無しさん:2008/10/09(木) 10:19:36
俺も場合は複数バージョンのSDKをインストールしないで解凍して保管する
で、includeやlibは新しいバージョンを優先しとけばないものだけ古いものから参照される
627デフォルトの名無しさん:2008/10/09(木) 12:46:20
628デフォルトの名無しさん:2008/10/09(木) 13:06:39
>>625
オプションのVC++ディレクトリを
C:\Program Files\Microsoft DirectX SDK (March 2008)\Include
C:\Program Files\Microsoft DirectX SDK (August 2007)\Include


こんな感じにしてるが心配ならDX8のときは順番を入れ替えればいいんじゃない
629デフォルトの名無しさん:2008/10/09(木) 15:14:18
DirectInputのマウスデバイスで相対座標のデータを得るとき、値1が1pxと対応しているわけではないと思うのですが、
どうやってピクセル単位の座標変化を求めればいいでしょうか。
630デフォルトの名無しさん:2008/10/09(木) 15:59:32
対応してた気がするが?
631デフォルトの名無しさん:2008/10/09(木) 16:09:01
629
つまりプログラムのミスですか。確認してみますorz
632デフォルトの名無しさん:2008/10/09(木) 17:09:17
サウンドバッファはプライマリとセカンダリ両方作る必要はあるんですか?サンプルを見たんですが、2つ作ってるのにセカンダリしかつかってないように見えるんですが
633629:2008/10/09(木) 19:43:32
やっぱりどうしても、実際のカーソルの位置と、DirectInputで求めたカーソル移動量が食い違います。
スクリーン上で1000px水平に移動させると、移動量の合計が600〜800くらいになっています。
下がそのコードなのですが、どこか間違っているところがありますか?
void MouseDevice::UpdateState()
{
HRESULT hr;
if (hr = pDevice_->Acquire(), FAILED(hr))
{
LOG_WARN("IDirectInputDevice8::Acquire 非アクティブになった?");
return;
}

DIMOUSESTATE mouseState;
if (hr = pDevice_->GetDeviceState(sizeof(mouseState), &mouseState), FAILED(hr))
{
LOG_ERROR("IDirectInput8::GetDeviceState");
return;
}

cursorPos_.x = clamp(cursorPos_.x + mouseState.lX, 0L, 1279L);
cursorPos_.y = clamp(cursorPos_.y + mouseState.lY, 0L, 1023L);

//SetCursorPos(cursorPos_.x, cursorPos_.y);

POINT pt;
GetCursorPos(&pt);

std::stringstream ss;
ss << "MOUSE " << cursorPos_.x << "," << cursorPos_.y << " (" << pt.x << "," << pt.y << ")";
LOG_INFO(ss.str().c_str());
}
634デフォルトの名無しさん:2008/10/09(木) 20:07:33
>>633
関係ないけど ,演算子をそんな風に使う人は初めて見た
635デフォルトの名無しさん:2008/10/09(木) 20:10:37
WAVEFORMATEX構造体のnSamplesPerSecに値がはいらないんですが、どうしてですか?
WAVEFORMATEX FEX;
ZeroMemory(&FEX, sizeof(WAVEFORMATEX));
FEX.nSamplesPerSec = 44100;
ここで変数をみても44100が入ってなくて0なんですけど
636デフォルトの名無しさん:2008/10/09(木) 20:12:16
>>633
試してないのでわからんけど、マウスカーソルの加速の分がずれてるとか・・・?
637デフォルトの名無しさん:2008/10/09(木) 20:25:37
>>636
ありがとうございます。「directinput マウス 加速」で検索したら解決しました。
DirectInputではマウスドライバから直接データを得るので、ウィンドウズのカーソルを意識するアプリケーションは
Win32関数かメッセージを使うように書いてありました。
638デフォルトの名無しさん:2008/10/09(木) 20:30:29
//ローカル回転&ワールド移動 >> ワールド変換行列設定
//
//角度はRAD
HRESULT CDXDevice::SetWorldTransformLW(D3DVECTOR &l_rot, D3DVECTOR &w_trans, int index)
{
D3DXMATRIX mat,mat2;
D3DXMatrixIdentity(&mat);


if (l_rot.x) {
D3DXMatrixRotationX(&mat2, l_rot.x);
D3DXMatrixMultiply( &mat, &mat, &mat2);
}
if (l_rot.z) {
D3DXMatrixRotationZ(&mat2, l_rot.z);
D3DXMatrixMultiply( &mat, &mat, &mat2);
}
if (l_rot.y) {
D3DXMatrixRotationY(&mat2, l_rot.y);
D3DXMatrixMultiply( &mat, &mat, &mat2);
}

D3DXMatrixTranslation( &mat2, w_trans.x, w_trans.y, w_trans.z);
D3DXMatrixMultiply( &mat, &mat, &mat2);

return SetWorldTransform( &mat, index);
}

行列を掛ける順番って x z yなんですか?
639デフォルトの名無しさん:2008/10/09(木) 20:36:35
望む結果に応じて好きな順序で掛ければ良い
640デフォルトの名無しさん:2008/10/09(木) 21:37:53
どなたか>>623の質問に答えられる人はいませんか?
641デフォルトの名無しさん:2008/10/09(木) 23:19:49
DIRECTXで描画をしながら、Windowsのテキストボックスなどを表示したいのですが
どのような方法がありますでしょうか?

普通にウィンドウにコントロールを作成するだけでは
DIRECTX側のpresentで上書きされてしまい、表示することができません。

ウィンドウモードならば、ウィンドウ作成時にWS_CLIPCHILDRENを指定することで
テキストボックスを部分のみをクリッピングすることができたのですが
フルスクリーンモードでは、当然上書きされてしまいます。

フルスクリーンモードでも通用する、何か良い方法はありませんでしょうか?

642デフォルトの名無しさん:2008/10/09(木) 23:25:12
GXUT custom UI
643デフォルトの名無しさん:2008/10/10(金) 00:00:03
ニセフルスクリーンモードにする
644デフォルトの名無しさん:2008/10/10(金) 00:01:41
>>641
上書きしないところに描かなければ良いだけ
そんな当たり前なことを聞く意味が分からない
645デフォルトの名無しさん:2008/10/10(金) 00:11:34
>>644
日本語でおk
646デフォルトの名無しさん:2008/10/10(金) 00:14:58
上書きしたくなければ、その位置に描くなということだろ
647デフォルトの名無しさん:2008/10/10(金) 00:21:06
>>644
上書きしなきゃいいって問題じゃない。
GDIサーフェスについて勉強してこい。
648デフォルトの名無しさん:2008/10/10(金) 00:34:59
設定をフリップにせず、present時に適切に描画位置を指定すれば上書きされない。
いくら無能でもその程度のことぐらい理解出来るだろ。
649デフォルトの名無しさん:2008/10/10(金) 01:31:48
別途専用ウィンドウを描画する
650デフォルトの名無しさん:2008/10/10(金) 07:31:36
このメソッドは、Microsoft Windows Graphics Device Interface (GDI) のダイアログ ボックスを、フルスクリーン モードのアプリケーションで使えるようにします。

構文

HRESULT SetDialogBoxMode( BOOL bEnableDialogs );
651デフォルトの名無しさん:2008/10/10(金) 13:22:58
>>635
どうやって確認してるの
ブレークポイント?
652デフォルトの名無しさん:2008/10/10(金) 23:28:45
StretchRectでモザイク的なもの作ろうと思ってるんだが、どうもメソッドが失敗しちゃう。
GetRenderTargetで成功しているコピー元とコピー先と同じの使ってるから何とかなると思ったが・・・
しかもMSDNの言ってることがよー分からん。RTテクスチャって何ですか?単純なオフスクリーンってなんですか・・・

天才が居たら助言頼む
653デフォルトの名無しさん:2008/10/11(土) 00:31:44
そういう用途に使うのなら素直にテクスチャとして、適切に位置指定して描画しろ。
654デフォルトの名無しさん:2008/10/11(土) 00:47:19
規制で書き込めませんでした…

>>642
DXUTでしょうか? ちょっと調べてみます。

>>643
自前で解像度変更して、ごまかすことも考えたのですが
強制終了した場合に解像度が戻らなくなってしまったりしそうで悩んでいます

>>644
>>648
言ってることはわかりますし、以前にその方法も考えたのですが
コントロールが単純な位置にあり、少ない方形でまとめられるのならまだしも、
「コントロールの位置が固定でなく、しかも複数が散らばる」という
状況ではどうしようもなくなってしまうので止めました。

>>649
テキストボックスから入力が必要な場面のみダイアログを描画、という
方法も考えたのですが、できるだけ1ウィンドウでやりたいと思っております。
(どうしようもなかったら、ダイアログを出そうかとも思っていますが…)

>>650
使用してみましたが、やはりフルスクリーンでは効果がないようです。
色々と調べてみた限りでは、ダイアログやメニューに対して効果があるようですが
ウィンドウに、子ウィンドウとして貼り付けたコントロールにも使用できるのでしょうか?
655デフォルトの名無しさん:2008/10/11(土) 00:55:41
クリッピング程度の単純な処理すら書けないのなら、
そもそもプログラムを組むのを諦めろ。
656デフォルトの名無しさん:2008/10/11(土) 01:01:18
>>654
逆に考えるんだ
ダイアログに効果があるのならダイアログに貼り付ければいいだろ
657デフォルトの名無しさん:2008/10/11(土) 01:21:36
>>655
>>648で言われたようにクリッピング的な処理は調べてみたのですけども、
今回の条件の場合には適切な方法なのでしょうか?

presentにはrect単位で転送領域を区切る方法などもあるようです。
ですが、仮にど真ん中にBOXがあったら、これを避けるように方形で区切ると
上下左右の4個の領域に区切るということになり、
仮にこのコントロールが複数ある場合には、非現実的に思えました。
(見当違いな意見を言っているようでしたら、すいません)

>>656
やはり難しいようなので、ダイアログを使って別ウィンドウに出すか、
もしくは最初に言われたDXUTとやらの勉強を始めてみたいと思います。
一応、presentの「後に」GDIでコントロールの画像を転送する、
という方法でトライしてみましたが、どうもちらついたりしてダメみたいです。
658デフォルトの名無しさん:2008/10/11(土) 02:16:27
複数矩形があろうが、その分だけ分解すればいいだけ。
その程度のことが非現実的だったら、
Windowsが行っているGUIのクリッピングは超常現象なのか?
659デフォルトの名無しさん
まっさきにDXUTのサンプル動かしてみるようじゃないと、今後も苦労しそうだな・・・