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
つ⑩
45:デフォルトの名無しさん
08/07/25 14:55:21
つ⑤
46:デフォルトの名無しさん
08/07/25 18:51:04
つ ミ
⑩
47:デフォルトの名無しさん
08/07/25 18:52:39
. . ⑩
(ノ'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
手間がかからず実装できるとかじゃなくて会社にあるツール自慢を初心者スレでされても・・・
158:デフォルトの名無しさん
08/08/03 19:57:35
市販のツールを使うのが一番簡単なわけだが
159:デフォルトの名無しさん
08/08/03 19:58:00
それぞれの環境を試したこと無い人達が自分達の方が楽とかいうのはどうなの?
2Dやってる人は、モデルデータからエフェクト作ってみなよ
3Dやってる人は、パーティクルイリュージョンとか使ってみなよ
160:デフォルトの名無しさん
08/08/03 20:02:56
>>159
ないならないで仕様を固定すればやりようはいかようにもある
ただ、その方法を挙げても別のイレギュラー的例を挙げて
そういう案を潰すことばっかりさっきからしてるじゃん
それじゃなんにも進まんと思うのよね
だから2Dで全部アニメーション・・・みたいな馬鹿な選択肢を選んじゃうわけでさ
もっと現実的な話を考えたらぶっちゃけ3Dしか道はないのは誰の目にも明らかで
2Dゲーがなくなっちゃった理由はまさにメモリ使用量に対する表現力の貧弱さなので
あってこんなところ問題じゃないように思うんだけどどう?
161:デフォルトの名無しさん
08/08/03 20:08:54
だからこういう問題にぶち当たる前にするべきなのは技術的な話じゃなくて
あくまでも仕様の固定化なんだよね
ってのはもうずいぶん前に学習した
どんな開発であっても汎用ツールを作ってはならない
まずこういう問題にぶちあたってしまったら
その時点ですでにゲームオーバーな状態にあるわけで手遅れなんだよね
プログラマとしての腕を見せる前にこういう問題を起こしてしまうプログラマってのは
社会人としてすでに駄目な場合が多い
作るときにたくさん疑問がでて細かい警告をいくつも見つけてたのにも関わらず
誰にも相談しないで勝手に想定して勝手に自爆してしまっているんだよね
って初心者スレで過去の自分を振り返って語ってるテスト
162:デフォルトの名無しさん
08/08/03 20:13:17
>>160
いや勝手に色々と決め付けてその案を潰そうとしてるのはお前の方だと思うんだ
それに対して2Dって選択肢は間違いでもないだろって話であって
今回のだって圧縮のやりようで許容範囲でしょ
163:デフォルトの名無しさん
08/08/03 20:16:37
時間も金も無限にあるわけじゃないんだから、必ずしも毎回ベスト目指せるような環境とは限らん
あーこれ駄目だよな、とか思いながら騙し騙しやっていくもんじゃないだろうか?
164:デフォルトの名無しさん
08/08/03 20:22:47
今時ならGPGPUでデータのリアルタイム解凍しながら描画とか出来るしな。
165:デフォルトの名無しさん
08/08/03 22:10:27
>>156
テクスチャアニメーションで粒子を表現って普通のパラパラアニメじゃないの?
頂点シェーダではき出すって、頂点シェーダのプログラムをはき出すの?
166:デフォルトの名無しさん
08/08/03 22:12:12
>>164
GPU 周りが GPGPU を使えるほど余裕があるようなシチュエーションってそんなにあるか?
167:デフォルトの名無しさん
08/08/03 23:08:26
>>166
3Dゲームだとぶっちゃけない。
ただ2Dでパラパラアニメするって言ってるんだから
殆どGPU使わないような2Dゲーなのかと思っただけ。
168:デフォルトの名無しさん
08/08/04 01:30:50
>>162
>今回のだって圧縮のやりようで許容範囲でしょ
じゃ、やれば?
ただ、3Dだったらもっとよくなったかもねw
169:64
08/08/04 03:41:04
ものすごい議論が進んでしまっているようで
なんだか割り込んでしまう形になってしまうのですが、一応報告を…
あ、ちなみに今回のは学校の友達と一緒に作っているようなレベルで
高価な機材やソフトとかも全然無い状況なのです。
なので締切りも無く、時間が限られてるわけでもなかったりします。
なので、とりあえず3Dでやってみることにしました。
今までDirectDrawしか触ってなかったもので、3Dには正直疎いのですが
これを機に勉強してみることにしました。
圧縮やフレーム数の削減なども考えたのですが、
これを機に3Dにも手を出してみることにします。
(アニメ調のものもあるので、表現しきれるかはわかりませんが…)
相談に乗ってくださってありがとうございました!
170:デフォルトの名無しさん
08/08/04 14:37:05
お互い相手の良い所が見えてない生き物が自己主張してるだけなので
この話題はこの後もグダグダ続く。
適当に教わったことにして話題を切り上げた>>64は優秀。
171:デフォルトの名無しさん
08/08/04 23:20:29
切り上げたのに余計な蛇足つけんでも(笑)
172:デフォルトの名無しさん
08/08/05 14:56:26
directXで背景が3Dの2DSTGを作ろうと思ってるんですが。
DXライブラリの様にクライアント領域左上が(0,0)で座標の管理がしたいんですが
どういった関数郡を使えば良いんでしょうか。
DXライブラリとdirectXの両方で使おうとおもってDXライブラリの設定にしたら
directXでプログラムしたところがエラー吐いてどうすればいいのか。
DXライブラリで出来るということは元のdirectXで出来ると考えて良いんですよね?
どなたか助言頂けると幸いです。
173:デフォルトの名無しさん
08/08/05 15:15:01
3D描画も左上(0,0)にしたいのか?
2D描画のみでいいなら楽だが
174:デフォルトの名無しさん
08/08/05 15:19:47
レスありがとうございます。
3Dの部分を描画した後2D部分を描画すれば問題なさそうなので
2D部分のみでも良い方法があったら是非教えて頂きたいです。
175:デフォルトの名無しさん
08/08/05 15:28:45
関数群ってよりかカメラの設定かな。
DirectXならD3DXMatrixOrthoOffCenterLHを使うと、
物体を遠くに置いても小さくならない。座標を2D画面の様に使える。
詳しく知らないけどDXライブラリで出来ることはDirectXでできると考えて問題いと思うよ。
ただ、共存はどうだろう?俺がライブラリ作者なら勝手に内部数値変えといて後でバグ報告されるとたまらんから、
非推奨、自己責任でってするけど。
176:デフォルトの名無しさん
08/08/05 15:29:33
射影行列変換に
D3DXMatrixOrthoLHを使う(引数wとhはウインドウサイズ)
座標変換済み頂点の板ポリで2D描画する
177:デフォルトの名無しさん
08/08/05 15:31:09
DXライブラリは使ったことがないので知らんが、
3D座標上の特定の奥行きをスクリーン座標に合わせるのであれば、
奥行きと視野角から行列を逆算すればいい。
178:デフォルトの名無しさん
08/08/05 15:57:53
おお、こんなにレスが、、ありがとうございます。
カメラの
D3DXMatrixLookAtLH を D3DXMatrixOrthoOffCenterLHに
射影変換の
D3DXMatrixPerspectiveFovLH を D3DXMatrixOrthoLHにでいいんでしょうか?
とりあえずやってみたら板ポリゴンも何も表示されなくなってしまいました。
179:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/05 16:22:53
D3DXMatrixLookAtLHは変えなくていい
D3DXMatrixOrthoLHにnearプレーンとfarプレーンが設定されてない
D3DXMatrixOrthoLH(&m_proj,640,480,1,1000);
182:デフォルトの名無しさん
08/08/05 16:42:05
出来ました、この場合だと中心が0.0になるんですね。
でもこれでかなり理想に近い状態になりました。
本当にありがとうございました、皆様に追いつけるよう頑張ります、、、
183:デフォルトの名無しさん
08/08/05 16:51:47
だから座標変換済み頂点を使えと
D3DFVF_XYZRHWか
D3DDECLUSAGE_POSITIONTでぐぐれ
184:デフォルトの名無しさん
08/08/06 15:13:11
WinXPで(D3D10を使用しないで)、最新GPUのリソースをフルに使うには
どういう選択肢がある?
nVidiaならCUDA?
ATiは?
185:デフォルトの名無しさん
08/08/06 16:16:13
directXのカメラの原点を一時的に移動するにはどうしたらいいでしょうか。
(0,0,0)にある原点を(30,0,0)に移動して描画した後また(0,0,0)に戻したりしたいのですが。
186:185
08/08/06 16:23:08
言葉で上手く表せないので絵にしてみました。
URLリンク(hishou.ddo.jp)
187:デフォルトの名無しさん
08/08/06 20:08:10
文字通りカメラの原点を移動して戻せばいいんじゃね?
188:デフォルトの名無しさん
08/08/06 20:41:47
そのやり方がわからなかったんですけど、うんこしてる間に自己解決しました。
189:デフォルトの名無しさん
08/08/07 00:19:27
>>184
ビデオカード毎に全部作る気概があるの?
そうでないならシェーダーでよくね?
190:デフォルトの名無しさん
08/08/07 07:08:44
GPUの性能をフルに引き出すのが目的なのか、
何らかの目的のためにGPU性能を引き出したいのか・・
191:デフォルトの名無しさん
08/08/07 07:42:46
GPUの性能なんて、フルに引き出したら発熱量が増えるだけじゃん。
192:デフォルトの名無しさん
08/08/08 00:55:42
ちょっと疑問なんですが。
winapiのタイマーで10mscに1回WM_TIMERを送ってrenderを呼んでるんですが
10mscの間にrenderの処理が終わらなかったら処理はどうなるんでしょうか?
処理ののコマ抜けみたいなのが起きたりするんじゃないかと不安なんですが。
変数ループで1から100の間の50ループ目だけ飛んだり。
ちなみにリフレッシュレートはD3DPRESENT_RATE_DEFAULTで固定してます。
これってリフレッシュレートに合わせて描画してると考えて良いんですよね?
だとすると尚更メッセージループとの誤差が生じるんでは内科と心配なのです。
193:デフォルトの名無しさん
08/08/08 01:07:52
処理し終わってから次のWM_TIMERが来る
194:デフォルトの名無しさん
08/08/08 02:32:27
タイマーが10msに一度やってくるとでも思ってるのだろうか
195:デフォルトの名無しさん
08/08/08 10:00:49
サンタが街にやってきた
196:デフォルトの名無しさん
08/08/09 12:25:47
CとC++の勉強が一通り終わったのでDirectXのグラフィックについて勉強しようと思うのですが
WIN32APIを極めないで勉強するのは無謀ですか?
少しだけ勉強したのでWIN32APIの基礎ならわかります。
197:デフォルトの名無しさん
08/08/09 12:29:35
>>196
極めてる人はそういないと思うよ
いつまでたってもヘルプ見ながら書いている俺
198:デフォルトの名無しさん
08/08/09 12:31:02
窓開いてHelloWorld出せる程度でとりあえずは十分
199:デフォルトの名無しさん
08/08/09 12:37:35
>>197 >>198
なるほど~。
C言語に比べて覚えることが多すぎてちょっとびっくりしていましたw
アドバイスありがとうございました!
200:デフォルトの名無しさん
08/08/09 14:45:56
>>199
そりゃぁあんた、「日常会話を英語でする」のと「代数幾何を英語で学ぶ」のとででは必要な知識が桁違いに決まっているだろ。
201:デフォルトの名無しさん
08/08/09 14:56:11
独自フォーマットの3Dモデルデータを描画しようとしています。
1つのメッシュで2つ以上の物体が離れて存在する場合、
D3DPT_TRIANGLESTRIPの設定で1回で描画するのは無理なのでしょうか。
エラーが出るわけでは無いのですが、物体が離れているメッシュを描画すると1つの三角形が橋渡しのように表示されます。
D3DPT_TRIANGLELISTだと必要な頂点数がかなり増えるため使用は控えたいです。
Xファイルでは1つのメッシュをDrawSubsetで描画できていますし、頂点の並び方に法則があったりでもするのでしょうか。
202:デフォルトの名無しさん
08/08/09 14:57:30
そうなるように頂点データを構築すればいい。以上。
203:デフォルトの名無しさん
08/08/09 14:58:42
ちなみにDrawSubset()は中でD3DPT_TRIANGLELISTを使ってDrawIndexedPrimitive()を呼んでいる。
204:デフォルトの名無しさん
08/08/09 15:10:29
縮退三角形でググってみ。
205:デフォルトの名無しさん
08/08/09 15:26:52
>D3DPT_TRIANGLELISTだと必要な頂点数がかなり増えるため使用は控えたいです。
なんでインデックスを使わずに、効率の悪い方法を選ぶんだ?
206:デフォルトの名無しさん
08/08/09 16:12:50
インデックスにしてもストリップのほうが3分の2から半分ぐらいになるから自前ならストリップにするほうがいいけどね。
別に数kb増えたところでどうってことはないけど物量で勝負するアプリなら恩恵は受けられるんじゃないかな。
207:デフォルトの名無しさん
08/08/09 16:16:05
nVIDIA先生も言ってるがキャッシュ効率を考えたら最速はリストだろう。
208:デフォルトの名無しさん
08/08/09 16:17:57
いやTRIANGLELISTと比べてってことでしょ
どうでもいい話だが。
209:デフォルトの名無しさん
08/08/09 16:24:47
速度や効率を考えたらどう考えてもストリップの出番はない
210:デフォルトの名無しさん
08/08/09 20:32:57
確かにな
踊り終わるまで待ってるのダルイ・・・・
211:デフォルトの名無しさん
08/08/10 10:34:21
あれ。インディックスのストリップってないんだっけ?
212:デフォルトの名無しさん
08/08/10 11:29:33
あるけどインデックス使うならリスト使った方がいいだろ。
213:デフォルトの名無しさん
08/08/10 11:43:18
場合によりけりだけど複数描画するならリストで1回ならストリップのほうがいいかな。
検証用の単純なものであればリストが有利だけど
かなり組みあがっているアプリの所々ストリップに直したらCPU/GPU負荷が平均で5%ほど下がった。
214:デフォルトの名無しさん
08/08/10 11:59:39
自作のスキンメッシュデータをインデックスのストリップとリストに相互変換するプログラムを組んでみたが、
リストの方が確実にFPSが上昇した。
215:デフォルトの名無しさん
08/08/10 12:01:25
名前が緑になるんですが 青にはどうすればなれますか?
216:デフォルトの名無しさん
08/08/10 12:04:18
光の波長を変える
217:デフォルトの名無しさん
08/08/10 14:52:13
>>213,214
モデルの形状も影響するんじゃなかろうか。
ストリップをぶつ切りにする必要のある形状だと当然効果は薄いし、
なるべく法線の近いもの同士でストリップを繋ぐと、
陰面消去の時に効率が上がる場合がある。
メッシュでどこまでやってくれているか解らないけど、
ストリップを繋ぐアルゴリズムって奥が深いらしい。
218:デフォルトの名無しさん
08/08/10 15:03:06
奥が深いというより本気で最適化しようとするとロジックが複雑になるというだけの話。
そんな状況でメリットが全く見えない。
219:デフォルトの名無しさん
08/08/10 15:06:13
縮退なしで書けるなんて状況まずないからな。
いちいち反転するからCPUでコリジョンとる時とか面倒だし。
220:デフォルトの名無しさん
08/08/10 15:12:37
そもそもモデリングデータをストリップで吐き出すデータ形式を見たことがない。
データを読み込んだ後にわざわざストリップに変換しているライブラリを見たことがない。
ちまたで見かけるのは平面を書くだけの単純なサンプルで、
インデックスを使わずにストリップのみで構成している、
まともに組むときには書かないようなダメソースぐらい。
221:デフォルトの名無しさん
08/08/10 17:00:24
半透明とかストリップだときつそうだし、いろいろ細かい部分が面倒。
UVの割れとかも考えると、効率的にもそんなに変わらない気がする。
のっぺりテクスチャ無しの球でテストしてるときとは違うし。
222:デフォルトの名無しさん
08/08/10 17:28:46
インデックスリストはGPUの頂点キャッシュアルゴリズム依存という問題はあるが、
淘汰されて4社しか残ってない今となってはどうでもいいな。
223:デフォルトの名無しさん
08/08/10 19:46:57
>>222
GPUの頂点キャッシュアルゴリズム依存度よりも、
ユーザーの財布依存度の方が高いから。
224:デフォルトの名無しさん
08/08/12 03:36:47
バックバッファについて教えてください。
1.アプリ毎に専用のバックバッファを持つんですか?
2.窓モードのバックバッファのウィンドウ外の領域は何も描画されていないんですか?窓サイズ変更時にバックバッファサイズも変更される?
3.窓モードで、ディスプレイに表示されている画像は全てのバックバッファを重ねたものと言うことですか?
225:デフォルトの名無しさん
08/08/12 04:45:59
ちょっと描画するくらいなら既存のバックバッファ使った方が良い?
新しいバックバッファを追加するコストが知りたい
226:デフォルトの名無しさん
08/08/12 08:08:29
効率なんて実装方法によって子となるんだから、自分で作って最適解を見つけろよ。
知りたいなら試せ。
227:デフォルトの名無しさん
08/08/12 11:10:25
>>224
1.そうだ
2.そうだ
3.違う 1つだけだ
>>225
そうだ
バックバッファいじらないならデフォのまま使うんだ
228:デフォルトの名無しさん
08/08/12 13:07:36
>>224
アプリ毎に持ちます
バックバッファの大きさは任意です。窓の大きさとは関連しません。
まぁデフォルトの窓の大きさ(たとえばゲームなら640x480とかね)と一致させるのが一般的。
窓の大きさを変えるたびにバックバッファの大きさを変えるのはあまりないんじゃないかね
窓が大きくなったら、バックバッファから窓への転送時に拡大する
ディスプレイも1つバックバッファを持っている。
アプリが自分の窓へ描画=ディスプレイのバックバッファへの描画
229:デフォルトの名無しさん
08/08/12 13:25:22
ツールとかでドラッグで大きさ自在に変えるような場合は
デスクトップと同じサイズで作って窓の大きさ分を左上に描画して使ってるな。
サイズが変わるたびに作り直すのは流石に無茶。
230:デフォルトの名無しさん
08/08/14 01:37:02
スタート画面にクリックしたらそれぞれのシーンへ飛ぶボタンを表示させたいのですが
何か良い方法は無いでしょうか?
231:デフォルトの名無しさん
08/08/14 01:49:16
スタート画面をクリックする前はボタンを描画しないで、
スタート画面をクリックした後はボタンを描画すればよい
232:デフォルトの名無しさん
08/08/14 17:29:06
スレの主旨から言ってDirectXで、という話だと思うけど
DXUTが一番楽なのでは。
後はイルリヒトとかコンポーネントっぽいのが入ってた気がする。
ダイアログを置いてオーナードローでDirectX描画っつー手もあるけど
多分、面倒臭いと思う。
233:デフォルトの名無しさん
08/08/17 05:45:47
質問です
スペースキーを押したらゲーム本体が始まる様にしたいのですが
実行するとキーの状態を取得せずにいきなりゲーム本体が始まってしまいます
どうすれば最初にスタート画面を表示し続けれるのでしょうか?
スタート画面処理
{
if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ){
スタート画面を描画する
}
}
while(1){
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
~略~
}else{
スタート画面処理
ゲーム本体
Sleep(1);
}
}
234:デフォルトの名無しさん
08/08/17 08:14:20
何と言う糞設計
DirectX関係ないし
235:233
08/08/19 10:23:26
>>234
は?黙れ
236:デフォルトの名無しさん
08/08/19 10:27:09
いやでもDirectX以前の話。
そこまでひどいとどこから説明していいのか途方にくれるわ。
237:233
08/08/19 10:33:45
なんだよ つかえねーな
238:デフォルトの名無しさん
08/08/19 11:11:24
if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ) なの?
239:デフォルトの名無しさん
08/08/19 19:26:21
アドバイスのしようがないほどのソースは久しぶりに見た。
まずはメインループを書ける様になってからだ。
240:デフォルトの名無しさん
08/08/19 20:02:05
「DirectXゲームグラフィックスプログラミング」の他にDirectXの基礎事項を勉強できるおすすめの本はありますか?
241:デフォルトの名無しさん
08/08/20 00:49:17
if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 ) でイインジャネ?
242:デフォルトの名無しさん
08/08/20 09:59:44
入力待ちしないものでいくら判断したって押されてなけりゃそのまま通過するだけだろうが。
243:デフォルトの名無しさん
08/08/20 15:43:01
if (GetAsyncKeyState(VK_SPACE) & 0x8000)
else if ( (GetAsyncKeyState(VK_SPACE) & 0x8000) == 0 )
244:デフォルトの名無しさん
08/08/20 20:19:13
ひどいソースわろた
245:デフォルトの名無しさん
08/08/20 21:57:09
常にスペース押しとけばいつか動くさ
246:デフォルトの名無しさん
08/08/23 00:32:29
DirectShowの質問です。
ムービーの動画をテクスチャに移して加工した上で表示させたいと思い、
ネット上のサンプルを読み漁ってとりあえず組んでみたのですが
以下の疑問点が発生しました。
どなたかわかる方が居ましたら、答えていただければありがたいです。
1. ムービーファイルの画像を「1枚ずつ」「任意のタイミングで」取得する方法はありますか?
現在のコードでは、DirectDrawに再生させておいて
描画時にテクスチャを取得して再生する、という構造になっています。
おそらく別のスレッドで再生させているのだとは思いますが
このシステムでは、負荷でメインスレッドのFPSが落ちた場合などに
当然ながら同期のズレが発生してしまいます。
(動画とメインループのフレームの比率が変化してしまうため)
アプリ側から任意のタイミングでフレームを進めることはできますでしょうか?
2. 実際に再生させるルーチンまでは作れたのですが
動画ファイルの読み込みに250msほど時間がかかってしまいます。
特にIGraphBuilderのRenderFileメソッドが非常に重く、
ここだけで200ms持って行かれてしまいます。
これはムービーファイルを再生する上で回避できない時間なのでしょうか?
ちなみに、ムービー形式はサンプルに沿ってwmvを使用しています。
DirectShowというと、マイナーでネット上のサンプルも少ないというイメージで
触っている人が少ないかもしれないかと思うのですが、わかる方が居ましたら
よろしくお願いいたします。
247:デフォルトの名無しさん
08/08/23 00:34:11
ここまで書いてふと思ったのですが、
DirectShowなどに頼らずに自分で動画をデコードするような
コードを書いたほうが早いのでしょうか…
再生する形式はwmvなりmpegなり1形式に絞れるので。
248:デフォルトの名無しさん
08/08/23 10:01:06
ム板かマ板にDirectShowと戦うスレがあったはず
DirectShowがDirectXから切り離されてひさしいので
そっちで聞いたほうがいいかと
249:デフォルトの名無しさん
08/08/23 12:36:26
ありがとうございます。
この板にDirectShowと戦うスレ Part 4というスレがあったので
そちらで再度質問してみることにします。
250:デフォルトの名無しさん
08/08/24 17:50:09
テクスチャフィルタをポイントに設定するにはどうすれば良いでしょうか?
現状はバイリニアのかかったような少しぼけた画像が
表示されてしまいます。
SetSamplerStateでポイントサンプリングに設定しても変わりませんでした
251:デフォルトの名無しさん
08/08/24 20:40:46
交差している半透明のポリゴンを正しく表示するにはどうしたら良いでしょうか?
252:デフォルトの名無しさん
08/08/24 21:11:17
交線でポリゴンを切り分ければ良し
253:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/25 06:28:58
pixel_color=ptr[getx+gety*(short)desc.Height];
これを直すといいかもしれない
うそいったらごめん
256:デフォルトの名無しさん
08/08/25 08:41:11
>>253
サーフェスの横幅は、D3DLOCKED_RECT構造体のPitchを参照しないと駄目。
パディングでdesc.Widthと一致しない場合がある。
257:デフォルトの名無しさん
08/08/25 12:27:09
つーか、desc.Height掛けてどうするよ。
258:デフォルトの名無しさん
08/08/25 15:56:26
>>255
具体的にどう直せばいいのか教えてもらえると助かります。
>>256
Pitchのほうですか?
あれは余計なところまで含めたものらしいんで使えないはずです。
試してもらえばわかりますが、Pitchのところまで表示させるとゴミが出ますよ。
>>257
yは縦ですからHeightでしょう、高さという意味ですし。
259:デフォルトの名無しさん
08/08/25 16:05:38
>>255,257見てもうちょっと考えろよ
260:デフォルトの名無しさん
08/08/25 16:07:59
DirectX以前だな。
・ぼーるがたてに5つよこに4つならんでいます。
・ぼーるをひだりうえからいちだんずつよこにじゅんばんにばんごうをつけることにしました。
・いちばんひだりうえが0で、いちばんみぎうえが3です。
・みぎはしまできたのでいちだんさがってつぎのだんのひだりはしが4になります。
・いかどうようにばんごうをつけるといちばんみぎしたは19になります。
さて、ひだりから0からかぞえて2ばんめ、うえから0からかぞえて3ばんめのぼーるはなんばんでしょうか。
けいさんしきがわからなかったら、えにかいてみるといいですよ。
261:デフォルトの名無しさん
08/08/25 16:13:49
Q. 3Dプログラミングに行列等、数学の知識は必要か
A. 掛け算程度は出来ないとお話になりません
>258
算数からやり直せ
262:デフォルトの名無しさん
08/08/25 16:29:40
正方形ならうまくいったのになw
263:デフォルトの名無しさん
08/08/25 16:34:37
>>258は質問者を騙った釣りだろう
sageてるし
内容があからさまに釣りだし
264:デフォルトの名無しさん
08/08/25 17:14:33
質問です
布シミュに手を出して満足のいくものができたので、次は髪の毛にいこうかと思っています。
布シミュは「布シミュ」や「クロスシミュレーション」でうまく資料を探せたのですが、髪の毛はうまく資料をぐぐれません。
何か良いキーワードか、ページを教えていただけないでしょうか
よろしくお願いします
265:デフォルトの名無しさん
08/08/25 21:35:38
3DのRPGを作ろうと思っているのでDirectXを勉強しようと思ったのですが
数学や物理の知識が必要と聞いたので
三角関数・ベクトル・行列を一通り勉強したのですが
他にやっておいたほうがいい分野はありますか?
ゲーム開発のための数理学物理学入門は一通り理解しました
266:デフォルトの名無しさん
08/08/25 21:39:36
RPGってどんなのを作るつもりかわからんけど
3Dの知識以前にゲーム製作の総合的な知識が必要になると思うぞ
3Dの部分についてはとりあえず作り始めちゃって問題が出たらその都度調べればいいと思う
267:デフォルトの名無しさん
08/08/25 21:41:26
>>266
アドバイスありがとうございます
268:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/25 23:07:25
最強の同人ソフトウエアーを作るにはどのグラボを買えばOKでしょうか?
270:デフォルトの名無しさん
08/08/25 23:20:07
>269
Intelのオンボード
271:デフォルトの名無しさん
08/08/25 23:21:15
>268
>ビュークラスのHWNDを渡してしまうとCreateDeviceが通らないため
普通に通るぞ
272:デフォルトの名無しさん
08/08/25 23:41:55
あれ、ほんとだ。
初期化関数に渡すハンドルをクライアントのに変えただけであっさり通りました
むしろ何故以前は通らなかったのか……
いずれにせよ前に進めました。ありがとうございます。
273:デフォルトの名無しさん
08/08/26 08:20:34
DirectX9.0cなのに「診断ツール」がありません・・・
どうやったらdxdiag.exeをインストールできますか?
274:デフォルトの名無しさん
08/08/26 09:46:50
dxdiag.exeはDirectXのドライバ入れたら(=ビデオカードがあれば)
Windowsに入ってると思うが。
275:273
08/08/26 11:23:20
Cドライブでdxdiag.exeの検索かけても何処にも無い位は実行済み
更新しようとしても「最新だからインストール必要なし」と表示されます
276:デフォルトの名無しさん
08/08/26 11:36:26
ファイル名を指定して実行、とか、Windows\system32の中、とか無いの?
今まで無かったためしがないのでないという状況がよくわからん。
277:デフォルトの名無しさん
08/08/26 12:00:56
DirectXを学ぶときって関数を暗記する必要ありますか?
278:デフォルトの名無しさん
08/08/26 12:47:42
>>277
暗記してもすぐ仕様が変わるから無駄
279:デフォルトの名無しさん
08/08/26 15:35:54
暗記する必要はないが、どんな関数があるかくらいは一度全部
目を通した方がいい。
280:デフォルトの名無しさん
08/08/26 16:47:25
パソコンのDirectXバージョンがDirectX10で
製品の動作機種がDirectX9対応グラフィックでは正しく使えるのでしょうか?
それともDirectXというのは同じバージョンでしか対応しないものなのですか?
281:デフォルトの名無しさん
08/08/26 16:58:16
>>280
10以下のはすべて使えると思う
282:デフォルトの名無しさん
08/08/26 21:56:47
>>281
回答ありがとうございます
283:デフォルトの名無しさん
08/08/26 23:03:10
とりあえず280GTXってのを買ってきました。これでコミケに出れます。
284:デフォルトの名無しさん
08/08/26 23:06:12
今からDirectXの勉強を始めようと思うのですが
入門書としてDirectXゲームグラフィックスプログラミングVer2.1
を買いました。
DirectXGraphicsの初期化などは暗記して見ないで打てるようにしたほうがいいですか?
285:デフォルトの名無しさん
08/08/26 23:10:38
初期化なんかゲーム1本につき1回しか書かないから、ちゃんと動くの1回書けたら忘れていいよ
286:デフォルトの名無しさん
08/08/26 23:10:39
なんか暗記とか数学どこまで勉強とかって・・・
日曜プログラマならみんなコピペでいいよ
コピペで駄目になってから考えろ
287:デフォルトの名無しさん
08/08/27 01:11:50
みんなでコピペした結果がこれだよ!
URLリンク(www.watch.impress.co.jp)
288:デフォルトの名無しさん
08/08/27 07:18:41
>>283
待つんだゲフォの280は地雷だ。
らでの4850にしとけ。
大差ないスペックで大量の消費電力と3倍近い値段するんだぞ280は。
289:デフォルトの名無しさん
08/08/27 07:52:34
>>287
March 2008でも直ってねーじゃん
290:デフォルトの名無しさん
08/08/27 07:58:17
日曜プログラマでも脳みそは使わなきゃダメだ
291:デフォルトの名無しさん
08/08/27 09:43:51
提供元のサンプルはコピペのためにあるようなもんだしなw
DVD出たときにパイオニアと東芝がしょっちゅう同じバグ出してたのもコピペだったんだろうなあ
292:デフォルトの名無しさん
08/08/27 11:30:57
>>291
昔買ったNECのマウスのファームウェアがサンプルのコピペでワロタ
CY7C63101のサンプルコードに書いてあった仮のベンダーIDとかそのまんまになってた
293:デフォルトの名無しさん
08/08/27 13:49:52
DC版VF3がSAMPLE GAMEなのと同じですね、違いますね。
294:デフォルトの名無しさん
08/08/28 00:58:23
Windosゲームを作っていて、
ゲーム起動時に32*32のフォント画像のテクスチャーを約8000個作りたいんですが、
その処理に15秒くらいかかってしまいます。
CreateTextureやバッファにフォント画像を書き込むこと自体は、
全然時間がかからないんですが、
↓の処理が凄く遅いです。
D3DLOCKED_RECT lockRect;
pTexture->LockRect(0, &lockRect, NULL, D3DLOCK_DISCARD);
高速化する方法ってないでしょうか。
295:294
08/08/28 01:12:25
自己解決しました。
CreateTextureのプールを、
D3DPOOL_DEFAULT から D3DPOOL_MANAGED に変えたらちょっぱやになりました。
理由はよく分かりませんが、
D3DPOOL_DEFAULTだとLockRectでVRAMにアクセスするから遅い?
296:294
08/08/28 01:20:42
LPDIRECT3DVERTEXBUFFER9を頻繁にLockして色を変えたりする場合も、
もしかして、D3DPOOL_MANAGEDの方が速いのでしょうか?
D3DPOOL_MANAGEDとD3DPOOL_DEFAULTの長所短所がよく分からないんですが、
詳しい人いたら教えてもらえませんか?
297:デフォルトの名無しさん
08/08/28 06:54:13
POOL_DEFAULTは適切な使い方をすればちょっぱやになります。
あなたの使い方は論外です、今は素直にPOOL_MANAGEDを利用して
いつか分かるようになったらそのとき色々考えましょう。
っていうかDEFAULTのテクスチャをロックするなよ。
298:294
08/08/28 08:47:12
今までリソースは全てPOOL_DEFAULTで作ってたんですが、
POOL_DEFAULTはどういう場合に使うのが適切なんでしょうか?
いつかじゃなくて今知りたいんですが、教えてもらえないでしょうか。
299:294
08/08/28 09:23:29
かなり苦労してデバイスロスト時のリソース開放復帰処理を作ったので、
適切なところはPOOL_DEFAULTを使いたいんです。
300:デフォルトの名無しさん
08/08/28 10:53:32
その前にテクスチャ8000個の方に突っ込むべきな気もする…
301:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/28 11:45:18
D3DPOOL_DEFAULT とかD3DPOOL_MANAGED考える前に
テクスチャ8000個ってのを改善しろよ
8000個なんて使うときあるか?
303:デフォルトの名無しさん
08/08/28 12:41:51
>>302
日本語全部だとそのくらいじゃないの
知らないけど
304:デフォルトの名無しさん
08/08/28 12:44:54
1文字ずつバラしてんのか
305:デフォルトの名無しさん
08/08/28 12:51:47
1枚でつくって切りだして使えよ
306:デフォルトの名無しさん
08/08/28 13:22:12
>>305
じゃあ聞きますけど1枚に全部入りますか?
書き込む前に考えるクセをつけるべきだと思います。
307:デフォルトの名無しさん
08/08/28 13:27:35
jpeg3なら可能なんでない?
マトリョーカシからの圧縮も対応してるし
12000*8000のサイズも余裕で収まるっしょ?
308:デフォルトの名無しさん
08/08/28 13:27:56
糞設計ブーム到来中
309:デフォルトの名無しさん
08/08/28 13:31:38
「1枚じゃはいらないなぁ」
「でも複数にするとどの文字が
どのテクスチャに収納されてるのか考えないと・・・」
「そうだ!1文字テクスチャでつくればいいんじゃね」←いまここ
こういうことだろ?
どんだけ手抜きなんだよ
310:デフォルトの名無しさん
08/08/28 13:35:26
書き込む前に考えるクセをつけるべきなのは>>306だなwwww
311:デフォルトの名無しさん
08/08/28 13:52:55
---煽りあいはここまで---
312:デフォルトの名無しさん
08/08/28 17:22:10
32*32を8000枚って、30MB超えたんだが、いったいどんな富豪グラボを想定してるんだろうw
313:デフォルトの名無しさん
08/08/28 17:55:04
大丈夫
いまどきの富豪なグラボは1GBある
314:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/28 18:42:55
とりあえずエラーの内容も書こうぜ
316:デフォルトの名無しさん
08/08/28 18:55:45
Renderer.cpp(266行目) 淫乱負数からのポインタが取得できません
ちなみに使っているコンパイラは現役専門学生の友達が作ってくれたものです。
317:デフォルトの名無しさん
08/08/28 19:53:57
DEFAULTはそれこそ毎フレーム書き換えるようなデータに使うのが一般的。
その場合は当然DYNAMICフラグとセットにしてな。
それ以外のただの画像テクスチャなんてものはMANAGEDで問題ない。
速度的にDEFAULTが速いとか勘違いしてるかもしれないが
作成時に1回だけ書き換える程度の静的なデータには無意味だ。
一般的といっていいかは分からないけど、
MMOみたいな大量の文字を使うようなゲームでも普通は事前に
テクスチャに展開してUVで切り出して描画をするぞ。
1文字1テクスチャは色々とおかしいといわざるを得ない。
1文字単位でテクスチャの切り替えが発生するしキャッシュ効率も最悪。
318:デフォルトの名無しさん
08/08/28 22:45:27
>>316
淫乱負数について詳しく
319:デフォルトの名無しさん
08/08/28 23:23:35
【淫乱負数】
デクリメント負数のサイズ (バイト単位)。柔軟な頂点フォーマット (デクリメント) 頂点バッファの場合は、
淫乱負数 は少なくとも 1 つの頂点を格納できる大きさでなければならないが、頂点サイズの倍数である必要はない。
淫乱負数 は非 FVF バッファについては検証されない。
320:294
08/08/29 00:13:09
>>309
手抜きじゃなくて、無知で初心者なだけです。
常に最善を求めて頑張っています。
>>310
とりあえず>>306は私じゃないのであしからず。
>>312
いまどきのグラボは30MBくらいいけると想定して、
古いグラボはすっぱりと切る心づもりでした。
321:294
08/08/29 00:14:46
>>317
参考意見ありがとうございます。
charがどの文字に対応するかは絶対1つずつ判定が必要ですよね。
そしたら後は、1枚から特定の場所を切り出す処理がない分、
1つずつのテクスチャにした方が効率がいいかと思ったんですが、
そうではないんでしょうか?
私はプログラムやコンピュータに触りだしたのが最近で、
キャッシュ効率(たぶんハード寄りなこと?)というのがよく分からないんですが、
大量のテクスチャを使えば一時保存領域などを頻繁に入れ替えることになるから、
その分オーバーヘッドが生じて遅くなるってことでしょうか?
322:デフォルトの名無しさん
08/08/29 01:21:10
>>317
その書き方では、DEFAULTはロック書き換え用だと読めるが、
そうなの?
別に実測値を出せとは言わんが、それを示すドキュメントとかあるか?
323:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/29 04:00:28
>>321
テクスチャの切り替えはなるべく少なくした方が高速
325:233
08/08/29 05:00:57
解決しました
粗末な物を張ってすみませんでした
326:デフォルトの名無しさん
08/08/29 07:17:27
淫乱負数って一体何なんだ
327:デフォルトの名無しさん
08/08/29 07:33:53
>>321
テクスチャの切り出しなんて文字コードをインデックスにして
テーブルからUVを引っ張ってくるだけだろ。
今のCPUのキャッシュ容量なら余裕で全部乗る程度のキャッシュサイズだし、
別にテクスチャ自体を切り出して作るわけじゃないぞ。
「テクスチャの切り替えをする」ということはそのつど「DrawPrimitive」を呼ぶということだ。
昨今のグラフィックカードは細かいデータをたくさん出すようには設計されてないので致命的なほど遅い。
なので可能なら1枚のテクスチャに格納⇒文字全てを1個の頂点バッファに格納⇒DrawPrimitive1回で全ての文字を描画
これが実測でも理論でも最速になる。
DrawPrimitiveの連打に比べたら頂点データの作成やUVテーブルの参照なんてゴミみたいな負荷。
>322
SDKに入ってるドキュメントに書かれてるよ。
>動的な頂点バッファおよびインデックス バッファの使い方
>
>理想は頂点データまたはインデックス データがまったく変化しないことですが、これは必ずしも可能ではありません。
>アプリケーションがフレームごとに頂点データまたはインデックス データを変更する場合は多くあり、
>フレームあたり複数回変更することさえあります。
>このような場合は、D3DUSAGE_DYNAMIC を使って頂点バッファまたはインデックス バッファを作成する必要があります。
>この利用法フラグによって Direct3D を頻繁なロック処理用に最適化します。
>D3DUSAGE_DYNAMIC はバッファを頻繁にロックする場合にのみ有用であり、
>変化しないデータは静的な頂点バッファまたはインデックス バッファに格納する必要があります。
テクスチャやサーフェイスの場合だとシステムメモリにコピーをいちいち作れない、
レンダリングターゲットや深度バッファなんかもDEFAULTで作る必要あるけど。
328:327
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/08/29 11:23:45
LRESULTはもともとlongだったものからきてる、longで結果を返すものと思っていい。
HRESULTは内容が決まってる。COMが返すものと思っていい。
自分で作った関数は、よそから返ってきたHRESULTをそのまま返すもの以外はあまり使わないと思うよ。
331:デフォルトの名無しさん
08/08/29 11:36:43
>>330
なるほど~~
ありがとうございました!
332:デフォルトの名無しさん
08/08/29 12:29:25
テイルズっぽいゲームを作ろうと思っているのですがエフェクトの所で悩んでます
戦闘時のエフェクトとかってDirectXで描写するのとAdobeEffectsとかで作ったのを描写するのどっちが一般的なんですか?
333:デフォルトの名無しさん
08/08/29 12:39:54
3Dなら、プログラム率高い
2Dなら、ベタでいいんじゃね?
絵の量が多いと、プログラムしないとメモリが足りないけど
334:デフォルトの名無しさん
08/08/29 12:40:58
参考
URLリンク(rayz.skr.jp)
335:デフォルトの名無しさん
08/08/29 12:47:28
>>332
このスレ64から嫁
一般的かって話なら3Dで作るのが一般的
336:デフォルトの名無しさん
08/08/29 13:30:03
質問もマルチスレッドの時代になったか
337:294
08/08/29 20:40:02
>>327
文字列全てを1個の頂点バッファに格納するというのは、
同じ板ポリゴンに、位置をずらしながら1文字ずつ貼り付けていくということですよね。
板ポリの4頂点にテクスチャのUVを指定して、
板ポリ全体にテクスチャを貼り付ける方法しか知らないんですが、
板ポリゴンの一部にテクスチャを貼り付けるにはどうすればいいんでしょうか?
338:デフォルトの名無しさん
08/08/29 20:44:59
>>337
いうてる意味がわからんが「描画する文字数 x 4角形」分の大きさの頂点バッファをこしらえるだろ。
339:デフォルトの名無しさん
08/08/29 21:19:35
1文字あたりポリゴン2枚(三角形×2)
1個の頂点バッファにたくさんポリゴンを詰め込んで、1回のDrawPrimitiveで全部描く
340:デフォルトの名無しさん
08/08/29 22:21:31
>>328
D3DPOOL_MANAGEDはレンダリングターゲットには出来ない。
ということはGPUによる書き換えは発生せず、内容の書き換えが起こるとするとすれば
それは常にCPUからの場合のみ。
だとすれば、D3DPOOL_MANAGEDのリソースは、
メインメモリ側がマスタで、ビデオメモリ側がスレーブという考え方でかまわない訳で、
lockした場合は、常にメインメモリ側のポインタを返し、
unlockした時点でスレーブに反映させればいいから、別にCPUはストールしない。
と、勝手に思っていた訳だが。根拠はないが。
341:デフォルトの名無しさん
08/08/29 22:26:55
また、SDKの記述だが
D3DUSAGE_DYNAMIC+D3DPOOL_DEFAULTが
D3DPOOOL_MANAGEDより優位だとは特に書いていないぞ。
342:デフォルトの名無しさん
08/08/29 23:51:45
>>340
CPUのメモリに書き込む⇒CPU→GPUの転送をする⇒GPUのバッファが描画待ち状態だった⇒さぁどうなる?
>>341
毎フレームロックするような2Dのスプライトみたいなものとか、
3Dのパーティクルみたいなものには有利とは書かれているぞ。
モデルみたいな作りっぱのデータにはむしろマイナスだろう。
343:294
08/08/30 00:45:36
>>338
>>339
理解しました。頂点バッファって三角形何個でも繋げられるんですね。
今まで常に三角形2枚の長方形で1個の頂点バッファにしてました。
どうもありがとうございます。