■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

【C++】 DirectX初心者質問スレ 【C++】
501 名前:デフォルトの名無しさん :04/10/24 22:05:42
>>500
画像見てもらえばy軸方向に数字がすこしずつずれていってるのがわかると思います
http://houjicha.mxx.jp/up/img/img20041024220414.bmp
丸の画像は(0,0)からy軸方向に32ドットの間隔で配置
数字も同様に(0,0)からy軸方向に32ドットの間隔で配置してます

502 名前:501 :04/10/24 22:21:51
ウインドウの大きさを変化さすとそれに応じた割合で丸画像は拡大縮小されるけど
DCで書かれた数字は同じ位置に表示されたまま変化ないんだけど
それと関係あるのかな?
ウインドウの横幅と縦幅の初期設定と
directxの初期設定の
       // 横ドット幅設定
gl_d3dpp.BackBufferWidth
// 縦ドット幅設定
gl_d3dpp.BackBufferHeight
は全く同じにしてあるんだけどな…

なんでずれるんだろう?

503 名前:デフォルトの名無しさん :04/10/24 22:25:04
>>501
>>498

504 名前:デフォルトの名無しさん :04/10/24 22:33:52
>>502
つまり自分でウインドウサイズに合わせて、
描画するように指定しているだけの話だろう。
自らやっていることに文句を言うのは筋違い。

505 名前:501 :04/10/24 22:36:52
>>504
どこをどういじればいいのか教えてください

506 名前:デフォルトの名無しさん :04/10/24 22:37:56
>>502
ウィンドウにはタイトルバーとかボーダーがあるの忘れてないか?

507 名前:501 :04/10/24 22:41:30
プログラム実行後ウインドウの大きさを一切変えないでも
ずれるんで困ってます

508 名前:デフォルトの名無しさん :04/10/24 22:44:18
ウインドウのクライアント領域の大きさと、
デバイスサイズがずれているからだろう。
もはやDirectXの話とは無関係。
Windowsプログラミングの基礎からやり直せ。

509 名前:501 :04/10/24 22:44:22
>>506
といいますとどういうことでしょうか?

510 名前:501 :04/10/24 22:46:58
>>508
どこのスレで聞けばいいんでしょうか?
もしよろしければ誘導お願いします

511 名前:デフォルトの名無しさん :04/10/24 22:57:06
>>510
聞くんじゃなくて基礎からやり直せといっている。
コトバツウジマスカ?

512 名前:デフォルトの名無しさん :04/10/24 22:58:51
教えてあげればいいのに

513 名前:デフォルトの名無しさん :04/10/24 23:03:18
GetSystemMetrics
AdjustWindowRect
とか
DirectX 全然関係ないですね!

514 名前:デフォルトの名無しさん :04/10/24 23:06:00
システム情報を拾っても、メニューが二行になっただけで計算が崩壊するので、
普通は目的のサイズになるまで適当に繰り返すんだが、この話はスレ違いだ。

515 名前:501 :04/10/24 23:24:52
>>513
AdjustWindowRect使ったらうまいこといきました

レスくださったみなさんありがとうございました

516 名前:デフォルトの名無しさん :04/10/25 13:23:15
DirectX9.0cで追加された

PS2.aと2.bは従来の2.0は何がどう違うんでしょうか。

517 名前:デフォルトの名無しさん :04/10/25 17:25:37
開発環境
:WindowsXP
:VC++6.0
:DirectX7 SDK

DirectDrawで320*240*16のフルスクリーンをやってみたけど、
全体的に画面がずれてしまいます。
マウスカーソルを一番右に寄せると、実際のディスプレイの右端から2〜3cm程度の箇所で、カーソルが止まってしまいます。
自分が作ったもの以外にも、フリーで流れてるソフトで320*240のフルスクリーンでも同じ現象が見られました。

EnumDisplayModesで、対応しているディスプレイを調べてみても、ちゃんと320*240*16は対応しているみたいなんですが…。
フルスクリーン時にプリントスクリーンして、ペイントに貼り付けてみたらちゃんと320*240になってました。
試しに640*480にしたら、ちゃんと描画されてました。

320*240で画面がずれるのは、うちの環境に限った事なんでしょうか?
もし、対処方があれば教えてください。

518 名前:デフォルトの名無しさん :04/10/25 17:27:25
>>517
ディスプレイの調節しろ。

519 名前:デフォルトの名無しさん :04/10/25 17:32:21
>>517
ここはDirectX初心者質問スレであって、PC初心者スレではない。

520 名前:デフォルトの名無しさん :04/10/25 17:44:03
>>517,518
すみませんでした。ディスプレイ調節したら治りました。
俺がアホでした…。OTL
わざわざ、ありがとうございました。


521 名前:517 :04/10/25 17:45:07
アンカーミスった…OTL
>>518,519
ありがとうございました。

522 名前:デフォルトの名無しさん :04/10/26 14:57:10
1ウィンドウ内にDirextXの画面と
通常GUI画面を同時に表示する方法が解りません。
※ウィンドウの右半分がDirectX,左半分がWin32Dialogといった感じです

環境は
Visual Studio .NET 2003 VC++7.0
Win32 & DirectX 9.0 SDK
です

通常のウィンドウリソースで1ウィンドウ内に2つのダイアログを表示する場合を
簡易的に説明します(引数は判断に必要そうなのしかかいてません)


523 名前:522 :04/10/26 14:57:38
hInstance < WinMain から取得

main_x = 0;
main_y = 0;
main_w = 400;
main_h = 200;

mainwindow_class = "hoge";
hMainWindow = CreateWindow(mainwindow_class,main_x, main_y, main_w, main_h, PARENT_WND_NULL, hInstance);

sub0_class = "myDialog0";
sub1_class = "myDialog1";
style = WS_VISIBLE | WS_CHILD;
sub0_x = 0;
sub0_w = 200;
sub1_x = sub0_w;
sub1_w = 200;
sub_y = 0;
sub_h = 200;

hSubWindow0 = CreateWindow(sub0_class, style, sub0_x, sub_y, sub0_w, sub_h, hMainWindow, hInstance);
hSubWindow1 = CreateWindow(sub1_class, style, sub1_x, sub_y, sub1_w, sub_h, hMainWindow, hInstance);

以上のような手順でリソースを作成すると
問題なく表示されます。


524 名前:522 :04/10/26 14:58:13
hInstance < WinMain から取得

main_x = 0;
main_y = 0;
main_w = 400;
main_h = 200;

mainwindow_class = "hoge";
hMainWindow = CreateWindow(mainwindow_class,main_x, main_y, main_w, main_h, PARENT_WND_NULL, hInstance);

sub0_class = "myDialog0";
sub1_class = "myDialog1";
style = WS_VISIBLE | WS_CHILD;
sub0_x = 0;
sub0_w = 200;
sub1_x = sub0_w;
sub1_w = 200;
sub_y = 0;
sub_h = 200;

hSubWindow0 = CreateWindow(sub0_class, style, sub0_x, sub_y, sub0_w, sub_h, hMainWindow, hInstance);
hSubWindow1 = CreateWindow(sub1_class, style, sub1_x, sub_y, sub1_w, sub_h, hMainWindow, hInstance);

以上のような手順でリソースを作成すると
問題なく表示されます。


525 名前:522 :04/10/26 14:59:13
はう・・・523と5242重投稿になってしまいました;;すいません

526 名前:522 :04/10/26 14:59:48
ここで DirextX の画面を hSubWindow0 に割り当てようと思い
IDirect3D9::CreateDevice
のhFocusWindow引数に hSubWindow0 を渡そうと考えたのですが

MSDN には

hFocusWindow
[in] この MicrosoftR Direct3DR デバイスでフォーカスを設定するウィンドウ ハンドル。
指定するウィンドウは、フルスクリーンの最上位ウィンドウでなければならない。

と書いてあって困ってしまいました。
最上位とは
HWND_DESKTOP
意外許されないのでしょうか?
*単一ウィンドウにDirectXをわりあてる時はHWND_DESKTOPを使用していました

ためしに, hFocusWindow に hSubWindow0 を渡してみました。
しかしD3D_OK を返すのですがだめでした。
DirectXに割り当てた hSubWindow0 は画面が更新されない状態で何も表示されていない状態になっていました。
DirectXのプログラム部分は画面を黒く塗りつぶす単純なものだけを入れて確認しました。
単一ウィンドウの場合は不具合なく動くのですが・・


527 名前:522 :04/10/26 15:00:39
どうすれば解決できるのでしょうか・・?
フリーの3Dモデルビューワーなどでは結構やっているのをみるので、可能だとは思うのですが・・・
よろしくお願いします。


528 名前:デフォルトの名無しさん :04/10/26 16:16:10
デバイスを作るときはトップフレーム、
描画するときはサブウインドウを指定すればいいだけ。

529 名前:デフォルトの名無しさん :04/10/26 16:53:52
>>527
っ[ IDirect3DDevice9::Present ]

530 名前:デフォルトの名無しさん :04/10/26 20:29:47
ボクセルのデータをボリュームレンダリングするのに
ボリュームフォグをつかうと高速にできたりするんでしょうか?
現在はVTKというライブラリを使っているのですが そのなかでは レイトレーシング法での表示とテクスチャをつかった擬似表示があります
しかし あまりにも表示速度が遅いので(たった256*256*35のデータでも3FPS程度)
DirectXのHLSLあたりをうまくつかって高速に処理できないかと考えているのですがさっぱりわかりません
フォグがだめならピクセルシェーダでレイトレーシングさせたらCPUより高速にできやしないかとも考えているのですが できるんでしょうか?
ご教授お願いします

531 名前: ◆Z0vd5w812U :04/10/27 14:18:20
>>530
GPUレイトレーシングは最近ホットな分野。
つまり、「できる」


532 名前:デフォルトの名無しさん :04/10/27 18:51:00
VTKはハードウェアアクセラレーションが利用できるはずだから内部ではすでにやってたりはしないの?
マシンの性能にもよるけど256*256*35って結構なピクセル数レンダリングしてるんじゃないか?
とてもCPUだけで出せるパフォーマンスとは思えないけど
まぁ専門じゃないんで思うだけなんだけどね

そういう用途のマシンてただのPCじゃないんでしょ?
興味本位で聞くんだけど、どのくらいのスペックのマシン使ってるの?

533 名前:デフォルトの名無しさん :04/10/28 10:30:16
いきなり長文でごめんなさい。よかったら下のプログラムのどこが悪いのか教えてほしいです。
ビルドはできるのですが、実行途中で”このプログラムは応答していません”てでてきて。途中
で強制終了するしかなくなるの。。。どこらへんでどんなふうにでるかいいますと実行してActive
Movie Windowがでてきて5秒後くらいに出てくるの。なんでかわかんないですT_T。プログラムカキコ
します。
#include "..\include\dshow.h"
#include "..\include\qedit.h"
#include <iostream>
using namespace std;
//ピンの列挙
IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir)
{
BOOL bFound = FALSE;
IEnumPins *pEnum;
IPin *pPin;
pFilter->EnumPins(&pEnum);
while(pEnum->Next(1, &pPin, 0) == S_OK)
{
PIN_DIRECTION PinDirThis;
pPin->QueryDirection(&PinDirThis);
if (bFound = (PinDir == PinDirThis)) // 引数で指定した方向のピンならbreak
break;
pPin->Release(); //pPinの解放          
}
pEnum->Release(); //pEnumの解放
return (bFound ? pPin : 0);
}

534 名前:デフォルトの名無しさん :04/10/28 10:44:41
//残り
int main(int argc, char* argv[])
{
CoInitialize(NULL);
------------------------------途中省略-------------------------
// 3. キャプチャビルダ(キャプチャグラフやその他のカスタムフィルタグラフ)の作成
ICaptureGraphBuilder2 *pBuilder = NULL;
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void **)&pBuilder);
pBuilder->SetFiltergraph(pGraph);
//ファイルファイタフィルタの設定
IBaseFilter *pMux = NULL;
IFileSinkFilter *pSink = NULL;
// 4. 一枚撮る
// 4-1. サンプルグラバの設定
IBaseFilter *pF = NULL; //ファイルを制御するメソッド作成
ISampleGrabber *pSGrab; //フィルタグラフ内の通る個々のメディアサンプル作成
CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (LPVOID *)&pF);
pF->QueryInterface(IID_ISampleGrabber, (void **)&pSGrab);
// 4-2. メディアタイプの設定
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = MEDIATYPE_Video; // Sample Grabber の入力ピン(Capture Device の出力ピン)はUYVY
mt.subtype = MEDIASUBTYPE_UYVY;
mt.formattype = FORMAT_VideoInfo;
pSGrab->SetMediaType(&mt);
// 4-3. フィルタグラフへ追加
pGraph->AddFilter(pF, L"Grabber");

535 名前:デフォルトの名無しさん :04/10/28 10:47:58
 //残り2
 // 4-4. サンプルグラバの接続
IPin *pSrcOut = GetPin(pSrc, PINDIR_OUTPUT); // A
IPin *pSGrabIN = GetPin(pF, PINDIR_INPUT); // B
IPin *pSGrabOut = GetPin(pF, PINDIR_OUTPUT); // C
pGraph->Connect(pSrcOut, pSGrabIN); //ピンを他のピンと接続する
pGraph->Render(pSGrabOut);
// 4-5. グラバのモードを適切に設定
pSGrab->SetBufferSamples(TRUE);
pSGrab->SetOneShot(FALSE);
// ファイルへ
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\dvcap_tmp.avi", &pMux, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSrc, NULL, pMux);
REFERENCE_TIME rtStart = 50000000, rtStop = 80000000;
pBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSrc, &rtStart, &rtStop,
0, 0 );
// ディスプレイへ
pBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pSrc, NULL, NULL );
HRESULT hr;


536 名前:デフォルトの名無しさん :04/10/28 10:49:11
//最後
// 5. キャプチャ開始
IMediaControl *pMediaControl = NULL;
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pMediaControl->Run();
long *buffer = NULL;
long bufsize = 0;
// サイズ取得
do{
pSGrab->GetCurrentBuffer(&bufsize, NULL);
}while(bufsize <= 0);
cerr << "bufsize : " << bufsize << endl;
buffer = (long *)malloc(sizeof(char)*bufsize);
if(buffer==NULL){
cerr << "can't allocate memory\n";
return 1;
}
// 一枚キャプチャ
MessageBox(NULL, "Click to capture & stop.", "DirectShow", MB_OK);
// バッファ取得
hr = pSGrab->GetCurrentBuffer(&bufsize, buffer);
if(hr==S_OK){
cerr << "Capture Succeeded\n";
}
-------------Release省略
長すぎてごめんなさい。よろしければ情報お願いします。初心者なんで無礼かもしれませんが。。。

537 名前:530 :04/10/28 11:59:56
>>532
今使ってるはただのPCです(まだ機能の検証段階なので)
VTKにはハードアクセラレーション機能はあるのですが
専用のハードウェアを搭載しないと使えないので ふつうのPC環境ではうごきません(ハード処理でもカクカクらしいです)
ボリュームレンダリングは基本的にレイトレーシングという光の進路を追跡して ボクセルデータを平面に映しこむ処理をするのですが
これは3Dグラフィックスの機能をなんら使用していないので CPUのみの力に頼ります
最近のGPUは非常に高速なのでGPUに処理をさせた場合どのくらいの結果が得られるのか
ゲーム技術を応用して 擬似的に高速な表示方法はないのかを考えているところです
なにぶん学部4年でCGの教育をまったく受けていないものでぜんぜん解っていないのですが 努力していこうと思います

538 名前:530 :04/10/28 12:12:48
>>531
たしかにググってみるとものすごく熱くなってる分野であることが実感できました
最高レベルのGPUならそこそこのスピードが期待できそうなのでがんばって勉強していきたいと思います

539 名前:デフォルトの名無しさん :04/10/28 13:38:07
DirectInputに関して質問なのですが、パッドを入力装置として使用するにはどうすればいいのでしょうか?
SDKを読んでInputオブジェクトを作り、次にInputデバイスの生成まで理解できたのですが、
それから一向に分からないので教えてください。
よういされているゲームパッド用のクラスを宣言すればいいのでしょうか?
それとゲームパッドから入力された情報はどのような形式でどこに格納されるのでしょうか?

540 名前:デフォルトの名無しさん :04/10/28 19:06:14
>>533-536
マルチうぜー

541 名前:デフォルトの名無しさん :04/10/28 19:29:12
>>539
まずはキーボードかマウスの入力やってみたら?

542 名前:デフォルトの名無しさん :04/10/28 23:08:34
>>533-536
そんなに長くなるくらいならソース上げろ
あとマルチするな

543 名前:デフォルトの名無しさん :04/10/28 23:36:58
ワンショットでいいなら pSGrab->SetOneShot(FALSE); は 引数がTRUEじゃね?

544 名前:デフォルトの名無しさん :04/10/29 02:03:09
質問スレは公開デバッグセンターではない

545 名前:デフォルトの名無しさん :04/10/29 12:02:19
539です
マウスやキーボードはマニュアルに書いてある通りやればできるのですが
パッドやジョイスティックになると理解できなくなるんです。
パッド等の入力装置を使う場合には自分で設定したクラスを宣言しなければならないんでしょうか?
それともキーボードやマウス同様にもう既に準備されてるんでしょうか?

546 名前:533-536 :04/10/29 12:11:26
長文すみませんでした。デバッガ使用しましたら無限ループしてるとこ発見しました。
みなさんありがとうございました。

547 名前:デフォルトの名無しさん :04/10/29 13:05:16
他にも言う事があるだろう。

548 名前:デフォルトの名無しさん :04/10/29 15:37:10
しつもんです
ttp://gamdev.org/up/img/1714.zip
上のファイルをVC6でビルドすると、外部参照未解決のエラーが出ます。
どうもD3DXMatrixPerspectiveFovLHメソッドを入れるとd3dx9.lib内でエラー
が出るのですが、原因とかわかりますでしょうか。



549 名前:デフォルトの名無しさん :04/10/29 15:58:04
>548
VC.NETだが普通にコンパイル通った


550 名前:548 :04/10/29 16:11:31
あれー?(´・ω・`)
自分とこはこうでます

プロジェクト 'EGAS - Win32 Debug' 用の中間ファイルおよび出力ファイルを削除しています。
--------------------構成: EGAS - Win32 Debug--------------------
コンパイル中...
Core.cpp
WinInfo.cpp
DXInfo.cpp
Stage.cpp
WinMain.cpp
リンク中...
d3dx9.lib(cpudetect.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です
d3dx9.lib(ssefasttable.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です
d3dx9.lib(d3dxmathx3d.obj) : error LNK2001: 外部シンボル "___security_cookie" は未解決です
d3dx9.lib(cpudetect.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です
d3dx9.lib(ssefasttable.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です
d3dx9.lib(d3dxmathx3d.obj) : error LNK2001: 外部シンボル "@__security_check_cookie@4" は未解決です
EGAS.exe : fatal error LNK1120: 外部参照 2 が未解決です。
link.exe の実行エラー

EGAS.exe - エラー 7、警告 0


(´・ω・`)

551 名前:デフォルトの名無しさん :04/10/29 16:20:56
>>550
DirectXのVC6用のExtrasパッチを上書きしる

552 名前:548 :04/10/29 16:35:39
>>551
Extras落として上書きしたらビルドできました。
ありがとう!


553 名前:梅宮辰夫 :04/10/29 19:31:51
シンボルッ
シンボルッ

外部のしん〜ぼる〜ぅぅ〜

554 名前:デフォルトの名無しさん :04/10/29 21:17:18
メッシュについての質問なのですが、
XファイルでFrameTransformMatrixに入っている行列は
参照したり変更したりできるんでしょうか?
プログラム中でメッシュオブジェクトを作って中身を入れる
サンプルというのはいくつかありますが、この行列の
扱いはどうなっているものかと。

555 名前:デフォルトの名無しさん :04/10/30 02:06:36
みんなXファイルとかメッシュとか結構使ってるんだな

556 名前:デフォルトの名無しさん :04/10/30 02:28:55
SDK落としたんですが、
有効なWin32アプリケーションではありません
といわれてインストーラが起動しないんですが、対処方法を教えて頂けないでしょうか?

557 名前:デフォルトの名無しさん :04/10/30 02:38:35
補足:
再ダウンロード、Irvineでダウンロード等やってみましたが、ダメでした。

558 名前:デフォルトの名無しさん :04/10/30 04:53:28
独自形式
となると自分でモデリングソフト作るか
独自形式のコンバーター作らないといけないし
手間掛かりすぎる

559 名前:デフォルトの名無しさん :04/10/30 09:06:54
>>556
プロキシ抜くとか
雑誌付録CD-ROMを探すとか

560 名前:デフォルトの名無しさん :04/10/30 11:53:49
DirectXを初期化するときに、描画する領域を指定する方法を教えてください
例えばウィンドウの描画領域が640×480のときに、
DirectXで描画する領域を
始点100, 100
幅 320
高さ240

とか、三面図+透視図のように描画する領域を4つにして
ウィンドウの画面全体にDirectXで描画する領域を4つにする
みたいなことがやりたいんです。

561 名前:デフォルトの名無しさん :04/10/30 14:11:28
DirectX8で点や線を描くにはどういう命令を使えばいいのでしょうか?

562 名前:デフォルトの名無しさん :04/10/30 16:04:58
>561
typedef enum _D3DFILLMODE {
    D3DFILL_POINT = 1,
    D3DFILL_WIREFRAME = 2,
    D3DFILL_SOLID = 3,
    D3DFILL_FORCE_DWORD = 0x7fffffff
} D3DFILLMODE;

563 名前:デフォルトの名無しさん :04/10/30 16:07:19
バイナリ実行するとき画面更新の頻度を無理やり半分とかに抑えるツールってない?

564 名前:デフォルトの名無しさん :04/10/30 16:12:26
ここはクレクレ厨房が書き込んでいいスレではない。
厨房板に帰れ。

565 名前:デフォルトの名無しさん :04/10/30 16:15:27
>>562
D3DFILLMODEを検索してみましたが
利用例が載ってないのでどうやってつかえばいいのかわかりません
使用例などを教えていただけないでしょうか

566 名前:デフォルトの名無しさん :04/10/30 16:17:51
使い方が分からない場合は、分かるまで試行錯誤を繰り返せば、そのうち何とかなる。
プログラムはそういうものだ。

567 名前:デフォルトの名無しさん :04/10/30 16:47:58
>>566
一つ例がないと取っ掛かりがないので試行錯誤しづらいです

568 名前:デフォルトの名無しさん :04/10/30 16:50:27
試行錯誤しづらいということ自体を、まず試行錯誤すればいい。

569 名前:デフォルトの名無しさん :04/10/30 16:58:44
DirectX8で画像の表示の仕方はたくさん載ってるのに
なんで点とか線の描画法は載ってないのかな…
資料がなさすぎです

570 名前:デフォルトの名無しさん :04/10/30 17:23:07
>>569
DrawPrimitiveUPあたりから始めれ

571 名前:デフォルトの名無しさん :04/10/30 17:28:41
>>570
ヒントありがとうございます

572 名前:名無しさん@お腹いっぱい。 :04/10/30 18:08:10
・RTS系のゲームで建物ユニットを置くときにメッシュが
 テクスチャと青っぽい色をブレンドしたみたいな色でレンダリングされたり
・MMO系のゲームでキャラクターとか落ちてる小物とかをマウス選択すると
 発光したような感じの色でレンダリングされたり
・アクション系のゲームでダメージを喰らった時に赤っぽく色が点滅したり
 
そんな感じで、読み込んだXfileに指定の色をブレンドしてレンダリングするには
どうしたらよいでしょうか。
DX9を使っていますが、ピクセルシェーダーとかは使わずに実現したいです。

573 名前:デフォルトの名無しさん :04/10/30 18:14:10
D3DPT_LINELISTはプログラムが勝手に点と点をつなげるみたいですけど
自分が意図した順番で点と点を線でつなぐにはどうしたらいいのでしょうか?

574 名前:デフォルトの名無しさん :04/10/30 18:53:25
普通は指示したとおりにしか動作しないのだが、>>573のところでは勝手に動くのか。
AI搭載の最新環境なんだろうな。

575 名前:デフォルトの名無しさん :04/10/30 20:24:49
>572
マテリアル変えればいい

576 名前:デフォルトの名無しさん :04/10/30 20:25:16
>>574
>>573の件は解決しました

頂点色が白以外だと表示したビットマップと頂点色がブレンドされてしまうんですが
ビットマップの色だけが表示されるようにするにはどうしたらいいのでしょうか?

577 名前:デフォルトの名無しさん :04/10/30 20:29:06
D3DRS_COLORVERTEX

てか一度ヘルプのD3DRENDERSTATETYPE 列挙型に目を通して
SetRenderStateでどういったことができるのか大雑把にでもいいので把握することをお勧めする
もしかしたらライティングもいじらないといけないかも

578 名前:デフォルトの名無しさん :04/10/30 20:31:36
おまえらゲームが完成するまで付き合わされるぞw

579 名前:デフォルトの名無しさん :04/10/30 20:42:40
付き合わされても結局完成しないに首ちょん一つ。

580 名前:デフォルトの名無しさん :04/10/30 20:47:15
>578
まぁ初心者質問スレだからいいんじゃね?
とはいえ漏れも常駐しているわけではないので、
ググルなりヘルプで検索かけるなりすることを覚えたほうがいいぞ

てかスレのルールは
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
なんでよろしく > 質問するみなさん

581 名前:デフォルトの名無しさん :04/10/30 20:59:20
>>577
今調べて
gl_lpD3ddev->SetRenderState(D3DRS_COLORVERTEX, FALSE);
やってみましたけどブレンドされてしまいます

582 名前:デフォルトの名無しさん :04/10/30 21:04:51
テクスチャ貼り付ける場合は頂点色は白じゃないとブレンドされて変な色になるような仕様なのかな…

583 名前:デフォルトの名無しさん :04/10/30 21:38:35
基本的に教える側も

センセイ方に学校で懇切丁寧に[教えていただいてる]セーガクなので

あまり難しいことや「習ってない」ことは答えられないので
あまり期待しないように。

584 名前:556 :04/10/30 22:27:32
>>559
プロキシは入れてないんですが。
ミラーサイトみたいのないっすよね……M$じゃ。

585 名前:デフォルトの名無しさん :04/10/30 22:56:25
D3DXVECTOR3構造体にXYZを入れられるみたいに
HPB(or YPR)を入れる構造体ってないですか?
別に自分で作ってもいいのですが、
あれば使ったほうが便利だし統一性があってなんとなく気持ちよいので
使いたいのですが。

586 名前:556 :04/10/30 23:27:36
すまん。結局実行出来ないみたいなんで、exeを解凍して、出てきたexeを更に解凍して、
CDのファイル構成の様な物が出てきたので、そこでやっとインスコ出来ました。

587 名前:デフォルトの名無しさん :04/10/31 01:47:25
ひとつ質問させてください。

DirectX9+VS.netでスプライト描画をしようとしているのですが、
先日SDKをアップデートしたところ
ID3DXSprite::Drawメソッドが「7個の引数は指定できません」
というエラーが出てくるようになってしまいました
アップデートする前はエラー等は全く無かったのですが・・・

pSprite->Draw(pTexture,&rect,&vec2Scale,&vec2RotationCenter,0,&vec2Position,0x55ffffff);
こんな感じの使い方してます。

MSDNの日本語ヘルプみる限りでは引数7個なのに・・・

どなたかご教授願えませんでしょうか(´・ω・)

588 名前:デフォルトの名無しさん :04/10/31 01:59:11
>>587
日本語DX9のヘルプは、アップデートしたSDKのヘルプとは違うものだろ
適合するヘルプを読め

589 名前:デフォルトの名無しさん :04/10/31 02:19:05
しかし2004/9/27作成の日本語ヘルプすら間違ってるってのは怠慢だよなー

>>587
これがGoogle検索だ!
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/directx9_c/directx/graphics/reference/d3dx/interfaces/id3dxsprite/draw.asp

590 名前:589 :04/10/31 02:20:29
スマン、まちがった
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/graphics/reference/d3dx/interfaces/ID3DXSprite/Draw.asp

591 名前:デフォルトの名無しさん :04/10/31 02:23:40
>>588-590
ありがトン(´;ω;)

消えた二つの引数はどこで処理されるんだろう・・・

592 名前:587 :04/10/31 03:46:06
たびたびごめんなさい
今度はスプライトが表示されなくなりますた・・・

VOID DrawSprite()
{
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET,D3DCOLOR_XRGB(100,100,100), 1.0f, 0 );
if( SUCCEEDED( pDevice->BeginScene() ) )
{
RECT rect={0,0,100,100};
D3DXVECTOR3 vec3Center( 0,0,0);
D3DXVECTOR3 vec3Position(0,0,0);
pSprite->Draw( pTexture, &rect, &vec3Center, &vec3Position, 0xffffffff);
pDevice->EndScene();
}
pDevice->Present( NULL, NULL, NULL, NULL );
}

pDeviceにはすでに画像のポインタははいってます。
どこでかわってしまったのでしょうか・・・。
「D3DX: ID3DXSprite::Draw called outside a Begin/End pair」
すでに両側でやってるはずなのですが・・・うーん?

593 名前:デフォルトの名無しさん :04/10/31 06:00:10
D3DX: ID3DXSprite::Draw called outside a *Begin/End* pair

BeginScene/EndScene じゃない。
ID3DXSpriteのメンバを良く見る。

594 名前:593 :04/10/31 06:12:43
「BeginScene/EndScene じゃない」
だと、語弊があるか…。

BeginScene/EndScene
Begin/End
両方のペアが必要ってこった。

595 名前:587 :04/10/31 15:45:16
>>593
ありがとうございました・・・
Beginメソッドいれるだけでできました。

pSprite->Begin(D3DXSPRITE_ALPHABLEND);
   (略)
pDevice->EndScene();
こんな感じで。

しかし、スケール情報と回転のための数値はどこへ・・・


596 名前:デフォルトの名無しさん :04/10/31 17:18:54
英語のドキュメントも見るようにした方がいいよ。DrawTransformでマトリクス使ってやるようになったんで。
最初は使いにくく思うかもしれんけど、マトリクス渡すだけで良くなったので3Dと合わせて使うのに便利になった。

597 名前:デフォルトの名無しさん :04/10/31 21:20:01
Summer2004なんですけど

この座標系ってどうなってるんですか
Drawでスプライト表示させるとき、座標を-で指定しないとちゃんと表示されないんですが





598 名前:597 :04/10/31 21:30:33
アホだ
間違ってCenterに座標設定してた
ちゃんとドキュメント読んでこよ…

すみません

599 名前:デフォルトの名無しさん :04/10/31 21:43:33
あ、ほう。

600 名前:デフォルトの名無しさん :04/10/31 22:58:09
毎フレーム呼ばれる関数(いわゆるゲームループ)から、
以下のような線の描画関数を毎フレーム数百回くらいループをまわして呼ぶと
だんだん重くなって挙動がおかしくなって最悪PCが落ちるのですが、
使い方が間違っているのでしょうか?(間違ってるからそうなるんだと思いますが…)
p1,p2を毎フレーム変えて線をアニメーションさせたりしたいのですが、
その場合、正しくはどんな手順で書いたら良いのか教えてください。

void DrawLine(LPDIRECT3DDEVICE9 lpd3dDev, D3DXVECTOR3 p1, D3DXVECTOR3 p2)
{
CUSTOMVERTEX vertices[] = {
{ p1.x, p1.y, p1.z, 1.0f, 0xffff0000, },// x, y, z, rhw, color
{ p2.x, p2.y, p2.z, 1.0f, 0xff00ff00, }
   };
// Create the vertex buffer.
lpd3dDev->CreateVertexBuffer( 2*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ;

// Now we fill the vertex buffer.
VOID* pVertices;
g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();

lpd3dDev->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
lpd3dDev->SetFVF( D3DFVF_CUSTOMVERTEX );
lpd3dDev->DrawPrimitive( D3DPT_LINELIST, 0, 1 );
}

601 名前:デフォルトの名無しさん :04/10/31 23:35:19
>>600
おい、人質を解放しろよ。

602 名前:デフォルトの名無しさん :04/11/01 00:01:57
>>601
ありがとうございます。VBを開放したらなんとなく大丈夫っぽくなりました。
ただそれ以外の部分もこれで正しいのかどうか自信がないのですが、
毎フレームごとにVB作って開放してって言うのを繰り返してよいのでしょうか?
もちろんハード性能にもよると思うのですが、
たった1000本ほどライン描画するだけでFPSが半分くらいになります。
そういうものって思ってよいのでしょうか。

603 名前:デフォルトの名無しさん :04/11/01 03:53:52
その関数を1フレームに1000回読んでるなら、1回で1000本分のバーテクスバッファ作って1回で表示するように。
そうしてるならスペック不足かなんかじゃないかな。リリースビルドにしてみたら?

604 名前:デフォルトの名無しさん :04/11/01 12:57:50
>>602
基本的に作りがマズイ。
毎フレーム頂点バッファを作成したり、
1000回もLock()、DrawPrimitive()を呼んだりしてはいけない。

>>602の修正するべき点は、

・初期化の段階でライン1000本分の頂点を格納できる頂点バッファを作る。
・1フレームでロックするのは1回だけにする。 (ライン描画時)
・ロック後はすばやく頂点座標を書き換えてアンロックする。
・1フレームでDrawPrimitiveを呼ぶのは1回だけにする。 (ライン描画時)
・それでも動作が遅い場合は頂点バッファを動的メモリ(AGP)に配置してみる。

早い話が1000本まとめて描画しろってこと。(>>603と同じ)

Create系、Lock系、DrawPrimitive系の処理は重いので
呼び出し回数を極力減らすようにすること。

605 名前:デフォルトの名無しさん :04/11/01 13:43:21
DrawPrimitiveUPのD3DPT_LINELISTでライン描いたら指定した色じゃなくて他の色が描かれたんですけどなんでですか?
そのラインは平行移動できるようにしてあるので他の点に接触したときにに点の色に影響受けて色が変化します
点に接していないときは勝手に消えて点に接触すると現れます

606 名前:デフォルトの名無しさん :04/11/01 15:56:19
>>605
ディスプレイ上の1ドットとバックバッファ上の1ピクセルが
1:1になってないような場合必然的にそうなると思われます

赤赤青赤赤 を4ドットで表現しなくてはならない場合
赤紫紫赤 になる という事と同じかと

607 名前:デフォルトの名無しさん :04/11/01 16:46:39
Xファイルのデータの構造みたいなのってどこかに載ってないんでしょうか?


608 名前:デフォルトの名無しさん :04/11/01 17:04:48
>607
>1
>3.SDKを見ても、Googleで検索しても、いまいち理解できない人
へるp

609 名前:デフォルトの名無しさん :04/11/01 18:15:49
>>606
お返事ありがとうございます
どうすれば1:1に対応さすことができるのでしょうか?

610 名前:デフォルトの名無しさん :04/11/01 19:49:03
危ないからさすなよ。

611 名前:デフォルトの名無しさん :04/11/01 20:20:42
ひょっとしてあれか
ちょっと前のあれと同じオチか…

612 名前:554 :04/11/02 00:21:24
失礼しました。あの行列はメッシュオブジェクトとは別のものでした。
電波の缶詰さんのとこのサンプルでも、FrameTransformMatrixは
独立して扱っていました。

というわけで自己解決いたしました。

613 名前:デフォルトの名無しさん :04/11/02 05:40:11
フルスクリーンモードかどうかはどうやって判別するのですか?
タスク切り替えで勝手にウィンドウモードになって困ります。

614 名前:デフォルトの名無しさん :04/11/02 16:38:17
>>613
デバイスロストしたときの復帰方法が適当すぎるだけだと思われ
コピペじゃなくてちゃんと理解して書きましょう

615 名前:デフォルトの名無しさん :04/11/03 02:21:57
質問のしかたが合ってるかどうか・・・

256色の全画面モードでパレットをいじっているのですが、
IDirectDrawPalette_SetEntriesとかってチップによっては処理が遅くなりますか?
Matrox > S3 になってるのですが。

616 名前:613 :04/11/03 02:59:42
>>614
理解できません。

617 名前:デフォルトの名無しさん :04/11/03 03:11:45
>>613
>タスク切り替えで勝手にウィンドウモード
ってのは、正常な動作じゃないの?
まぁ俺が質問の意図をよく理解してないのかもしれないが…。


618 名前:デフォルトの名無しさん :04/11/03 08:34:58
DirectXにはGDIにあるような円を描画する機能は無いのでしょうか?

619 名前:デフォルトの名無しさん :04/11/03 11:51:39
>>618
2DならバックバッファにGetDCしてそのデバイスコンテキストでGDI関数を使う。

3Dだと線で描く必要があったかと。

620 名前:デフォルトの名無しさん :04/11/03 12:39:22
というか堂考えても>>613の日本語がおかしい

621 名前:デフォルトの名無しさん :04/11/03 14:57:30
山岡さん!ケリー候補を慰める料理を考えて!

622 名前:デフォルトの名無しさん :04/11/03 14:59:01
誤爆スマソ

623 名前:613 :04/11/03 23:07:34
>>617
あっ、そうなのですか。
では他のタスクがアクティブになってフルスクリーンモードが解除された後、
ゲームがアクティブになってもフルスクリーンになってくれないのは仕様なのでしょうか?
ウィンドウモードで最大化されて表示されてしまって良くないと思います。



では、フルスクリーンモードが解除された事はどうやって知ることができるのでそうか?


624 名前:デフォルトの名無しさん :04/11/03 23:32:10
>>623
ゲームがアクティブに戻ればまたフルスクリーンに戻るはずだけど…?
ウィンドウかフルスクリーンかは
D3DPRESENT_PARAMETERS の Windowed メンバで決まると
思うんだが、別にいじってないの?

625 名前:624 :04/11/03 23:41:56
あ、デバイスロスト時にしっかりReset処理してればの話だけど。

626 名前:デフォルトの名無しさん :04/11/04 01:47:45
DirectX9 2003Summer + VC6.0を利用しています.
正五角形の表示させようとしています.
//////////////////////////////
D3DXCreateMeshFVF(3,// 面の数
5,// 頂点の数
D3DXMESH_MANAGED, FVFst, device, &m_pMesh);
// 頂点を設定
struct VERTEX *pVertex;
m_pMesh->GetVertexBuffer(&m_pVB);
m_pVB->Lock(0, 0, (void **)&pVertex, 0);
int i = 0;
pVertex[0].p = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
pVertex[1].p = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
for(i = 2; i < 5; i++)
{ pVertex[i].p = D3DXVECTOR3(
cosf(D3DXToRadian(108 * (i - 1))) * pow(-1, i) + pVertex[i - 1].p.x,
sinf(D3DXToRadian(108 * (i - 1))) * pow(-1, i) + pVertex[i - 1].p.z, 0.0f);
}

// インデックスバッファを設定
DWORD *pIndex;
m_pMesh->GetIndexBuffer(&m_pIB);
m_pIB->Lock(0, 0, (void **)&pIndex, 0);
pIndex[i++] = 4; pIndex[i++] = 3; pIndex[i++] = 0;
pIndex[i++] = 3; pIndex[i++] = 2; pIndex[i++] = 0;
pIndex[i++] = 2; pIndex[i++] = 1; pIndex[i++] = 0;
m_pIB->Unlock();

D3DXComputeNormals(m_pMesh, NULL); // 法線ベクトル
/////////////
改行が多いので2度に分けます

627 名前:626 :04/11/04 01:48:25
イメージは↓こんなかんじです.
ttp://up.isp.2ch.net/up/2543664e58c8.gif
実行結果は↓です.
左は,D3DXCreateMeshFVFの第一引数を3に,右は5に変えただけです.
ttp://up.isp.2ch.net/up/72cb2b2bcee3.gif
4に変えても左と同じ結果になりました.

頂点番号が順番に0,1,2,3,4となり,
インデックスバッファに頂点番号を指定して3つずつで1つの面を作っている.
と思っています.
そもそも理解が間違っているのでしょうか.
ご指摘お願いします.

628 名前:デフォルトの名無しさん :04/11/04 02:33:31
インデックスをDWORDで扱ってるからそうなる。

× : DWORD *pIndex;
○ : WORD *pIndex;

>>628のインデックスバッファの中身は実際にはこうなってるはずだ
4,0,3,0,0,0,3,0,2,0,0,0,2,0,1,0,0,0

3頂点ずつ(面)で分割すると
[4.0.3], [0.0,0], [3.0.2], [0.0.0], [2.0.1], [0,0,0]

面の数を5以上にしてやっと全ての面が描かれている
[4.0.3], [3.0.2], [2.0.1]

629 名前:628 :04/11/04 02:55:48
↑のアンカーは>>626の間違いです・・・ orz =3

WORDに変更しても、カリングがでデフォルトのCCWのままだと
何も表示されなくなるので注意。

インデックスを時計回りで指定するか、
もしくはD3DCULLMODEをCW or NONEに設定する必要がある。

630 名前:デフォルトの名無しさん :04/11/04 07:29:57
DirectX9.0c Direct3D のサンプルの
CustomUI
って、
windows2000だとうまく動かないんですか?

付属のバイナリも文字化けするし、自分でビルドしてもダメポ。

631 名前:630 :04/11/04 07:35:20
上げ忘れ。

環境は
win2000
DirectX9.0c
GF4Ti4200
アスロンXP
VC6sp6

です。
.NETも新しいの入ってるし・・・。

XPじゃないとだめなんですかねぇ・・・。

サンプルソースながめるとしますか・・・。

632 名前:630 :04/11/04 07:36:01
いつもの癖で、ついまたさげてしまった・・・。orz

連投すいません。

633 名前:630 :04/11/04 08:49:03
void InitApp()内にて、
g_SampleUI.SetFont( 3, L"MS ゴシック", 16, FW_NORMAL );と、フォント追加して、
pIMEEdit->GetElement( 0 )->iFont = 3;
pIMEEdit->GetElement( 1 )->iFont = 3;
pIMEEdit->GetElement( 9 )->iFont = 3;
と、設定することで、できました・・・。

なんだか、どろくさいなぁ・・・
もっとスマートにできないもんでしょうか?

634 名前:デフォルトの名無しさん :04/11/04 21:32:06
GDIというと欠陥エンジンが思い浮かんでしょうがないのですが。

635 名前:623 :04/11/05 00:20:16
>>624-625
DirectDrawCreate(nil, DD, nil);
DD.SetCooperativeLevel(Handle, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN);
DD.SetDisplayMode(Width, Height, BitCount);
でディスプレイモードを変えているだけなのですが、
どうすれば復帰してくれますか?

636 名前:626 :04/11/05 00:49:05
>>628さん
WORD *pIndex; に直し表示できるようになりました!
ありがとうございます.

637 名前:デフォルトの名無しさん :04/11/05 00:56:05
>>635
EXCLUSIVE と DDSCL_FULLSCREEN
はorじゃなく、必ず一緒に(and)するんじゃなかったっけ。
DD.SetCooperativeLevel(Handle, EXCLUSIVE | DDSCL_FULLSCREEN);

俺はDirectDraw7使ってるせいか、初めて見る記述なんであまり自信ないが。

638 名前:デフォルトの名無しさん :04/11/05 01:03:13
>>637
この場合は Bit毎の or なので、C言語の | と同じ意味です。
Cのand は & だったはず…。

639 名前:637 :04/11/05 01:07:42
>>638
スマソ。もう寝るわ…。

640 名前:デフォルトの名無しさん :04/11/05 01:07:53
>>637
 "|" は "or" の意味ですよ。
DirectDraw7を使ってるせいじゃなくて、使ってない言語記述では?

641 名前:デフォルトの名無しさん :04/11/05 04:24:55
DirectSex!

642 名前:デフォルトの名無しさん :04/11/05 09:38:31
でも意味的には
andなんだよね
これだからマイクロソフトは

643 名前:デフォルトの名無しさん :04/11/05 09:51:04
べつにMSが悪いわけではないだろ。

644 名前:デフォルトの名無しさん :04/11/05 10:28:54
意味的にもANDじゃねー
ゲイツも関係ねー
基礎からやり直せと

645 名前:デフォルトの名無しさん :04/11/05 12:24:49
>>642の言ってるandは
「〜且つ」の意味ではなくて、日本語的な「〜と」のことを言っているのではなかろうか。

どっちにしても>>642はあまりプログラマっぽくないね。

646 名前:デフォルトの名無しさん :04/11/05 13:02:38
英語の A or B → A または B と区別がついてないんじゃないんかと

647 名前:642 :04/11/05 17:48:12
それぐらいわかってるよ
>>645の言うように
これとこれっていう形だからandだろっていう意味

ビット単位のフラグまとめて一つにして渡す
てのは当たり前なんですか

648 名前:デフォルトの名無しさん :04/11/05 17:56:40
ttp://ew.hitachi-system.co.jp/p/r-logic.html
はい、復習してくださいね

649 名前:デフォルトの名無しさん :04/11/06 00:44:05
フルスクリーンなら排他的に決まってるだろ
と言いたいのでは?

650 名前:デフォルトの名無しさん :04/11/06 01:44:05
排他のときには正露丸を歯に詰めるそうですが

なんか意味があるんですか。

651 名前:デフォルトの名無しさん :04/11/06 02:26:42
痛みが一時的に治まる。
が、痛みのない間にますます虫歯が酷くなるのでやめておいたほうがいい。
バファリンとかもだ。

とっとと歯医者に行こう。

652 名前:デフォルトの名無しさん :04/11/06 02:30:56
>650
ぱっと見て何を言ってるかわからんかったが
歯痛的論理和ねw

653 名前:デフォルトの名無しさん :04/11/07 09:49:05
DirectX7の日本語マニュアルはもう手に入らないのでしょうか?
マイクロソフトのサイトにも8までしかないようなんですが・・・
どこか公開しているサイト知っていたら教えてください。

654 名前:デフォルトの名無しさん :04/11/07 10:25:24
>どこか公開しているサイト知っていたら教えてください。
それはつまり無断公開しているサイトを教えろということなのか?

655 名前:デフォルトの名無しさん :04/11/07 11:01:56
そうですが・・・
DirectX7時代の本いくつか持っているのでCDの中身みたんですが英語版しかないのです。


656 名前:デフォルトの名無しさん :04/11/07 11:05:36
DirectXはまったくの初心者でこれから勉強しようと思っている者です。

ある装置を監視するために、現在はMedia Encoderでストリーミング配信しているのですが、
監視を自動化するためにビデオキャプチャしている動画をリアルタイムで簡単な画像認識をしたいです。

キャプチャのサンプルソフトをMedia Encoderと同時に起動すると、
デバイスが他のアプリで使われているというエラーが出るのですが
どのように回避すればよいでしょうか?

657 名前:デフォルトの名無しさん :04/11/07 11:27:19
>>655
それで十分じゃないか・・・。

658 名前:デフォルトの名無しさん :04/11/07 11:49:24
>>657
一応英語は少し読めるけど日本語もほしい・・・
ウプしてくれる猛者いたらお願いします。

659 名前:デフォルトの名無しさん :04/11/07 12:32:28
>>658
英語嫁、以上

660 名前:デフォルトの名無しさん :04/11/07 12:51:15
読みにくかったり間違った日本語訳で誤解してしまうよりは英語のまま読んだ方が理解が早いはず


661 名前:デフォルトの名無しさん :04/11/07 12:54:51
わかりました。時間かかるけど英語の勉強だと思ってがんばります。

662 名前:デフォルトの名無しさん :04/11/07 12:57:04
日本語版は翻訳ミスが多いからなぁ・・・

663 名前:デフォルトの名無しさん :04/11/07 12:58:21
日本語になってないような日本語になってることが多いからなぁ

664 名前:デフォルトの名無しさん :04/11/08 06:39:31
directinputはマウスの座標じゃなくて移動量が取得できるんですね
GetCursorPos()でマウスの初期位置取得してから
初期位置にdirectinputで取得した移動量を加えて座標を求めることになるんでしょうか?

665 名前:345 :04/11/08 16:35:34
gl_lpD3ddev->DrawPrimitiveUP(D3DPT_LINELIST, 2, hoge, sizeof(TLVERTX));

実行中にこの行で
.exe の 0x0044ee4c でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。 。

というエラーがでましたどうすればうまくいくのでしょうか?

666 名前:デフォルトの名無しさん :04/11/08 16:36:37
くだらない質問だとは思うのですが、ご教授ください。
winmm.libはどこにあるのでしょうか。
DirectX9.0SDKをつかってます。

667 名前:デフォルトの名無しさん :04/11/08 16:48:27
>>666
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib

668 名前:デフォルトの名無しさん :04/11/08 17:16:26
>>667
あっありました(泣
本当にありがとうございました。

669 名前:デフォルトの名無しさん :04/11/08 17:40:16
>>667
相手の環境わかるのか、すげー!!!

670 名前:デフォルトの名無しさん :04/11/08 19:21:33
>>669
つまんね

671 名前:デフォルトの名無しさん :04/11/08 20:34:43
>>665
マジで言ってるのかな。
gl_lpD3ddevがNULLなんだよ。

672 名前:デフォルトの名無しさん :04/11/08 21:11:11
>>671
ほんとです
どうすればエラーでなくなりますか?

673 名前:デフォルトの名無しさん :04/11/08 21:12:18
インスタンスがある状態にしろ。

674 名前:デフォルトの名無しさん :04/11/08 23:10:29
DirectX で Midi を演奏させれば、負荷が少なくなるのですか?

675 名前:デフォルトの名無しさん :04/11/08 23:36:07
>>673
やってみます

676 名前:デフォルトの名無しさん :04/11/08 23:44:48
というか理解してソース書いたか?
サンプル部分的にコピって動きませんってレベルな気がするのだが

677 名前:デフォルトの名無しさん :04/11/08 23:47:37
DirectIntputでマウスの位置座標を求める方法を教えてください
直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すそうなので
正確なマウス座標は求められないのでしょうか?
初期値としてGetCursorPos()で求めた座標に
GetMouseState()で求めた移動量を足していくことで座標を計算したのですが
うまいことできなかったので困っています

678 名前:デフォルトの名無しさん :04/11/08 23:49:08
>>676
少し手を加えてみましたけど…

679 名前:デフォルトの名無しさん :04/11/09 00:22:27
>>678
そこがまじぃんだよwきっとw

680 名前:デフォルトの名無しさん :04/11/09 00:43:57
>>677
Win32APIだけで瞬時に解決する問題で、
わざわざDirectInputを混ぜる理由は?

681 名前:デフォルトの名無しさん :04/11/09 00:55:20
>>680
DirectInputをどうしても使ってみたいんです

682 名前:デフォルトの名無しさん :04/11/09 01:30:36
>681
ワラタ
てかズッコケタ

683 名前:デフォルトの名無しさん :04/11/09 01:56:38
>>681
>>677のやり方であっているはず
ソース見ないとわからんが
絶対値モードにしてるとかはないか?

というかマジなら具体的にどううまくできなかったぐらい書け

684 名前:デフォルトの名無しさん :04/11/09 02:03:27
マウスとメッシュの当たり判定をし、当たった面の頂点座標を取得しようとしていますが
コンパイルは通るものの立ち上げた瞬間落ちるのでどこがおかしいかご教授願えませんでしょうか。
メッシュはXファイルを読み込み、LPD3DXMESH pMesh;の形で持っていて、
D3DXIntersectでマウスとメッシュ自体との当たり判定までは成功しているので、
そのときにD3DXIntersectが返してくれた、当たった面へのインデックス(DWORD faceIndex;)を使って、
その面の頂点座標を取得しようとしています。DXは2003summerです。よろしくお願いします。

//D3DXIntersectの返した面のインデックスを使用して頂点を取り出す
IDirect3DVertexBuffer9* pVB;
IDirect3DIndexBuffer9* pIB;
DWORD fvfSize;
WORD* pIndices;
BYTE* pVertices;

pMesh->GetIndexBuffer(&pIB);
pMesh->GetVertexBuffer(&pVB);

// あたった面を形成する3つの頂点のインデックスを取得
pIB->Lock(3*sizeof(WORD)*faceIndex, 3*sizeof(WORD),(void**)&pIndices, D3DLOCK_READONLY);
pVB->Lock(0, 0, (void**)&pVertices, D3DLOCK_READONLY);// 頂点バッファ取得
fvfSize = D3DXGetFVFVertexSize( pMesh->GetFVF());// 頂点フォーマット構造体のサイズを計算

// 面を形成する3つの頂点を取得
D3DVECTOR v0, v1, v2;
v0 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[0] );
v1 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[1] );
v2 = *(D3DVECTOR*)( pVertices + fvfSize*pIndices[2] );

pIB->Unlock();
pVB->Unlock();
pIB->Release() ;
pVB->Release();

685 名前:デフォルトの名無しさん :04/11/09 02:19:56
>>683
エラーとかは出ないのですけど
絶対モードじゃないです
実際のマウスの位置と>>677で求めた座標の位置がずれてるのでなんでかなと思っていろいろ調べてたら
直接入力はデータ取得の呼び出しをした瞬間の入力の状態を返すと書いてあったので
GetMouseState()が実行されてない間のマウスカーソルの移動量は計算されないから
その分だけずれるのかなとかおもったりしてます

もう一度ソース見直してみます
レスありがとうございます

686 名前:デフォルトの名無しさん :04/11/09 05:24:22
>684
デバッガはどの行をさしているんだ?
あとGetIndexBufferとGetVertexBufferで得たpIBとpVBがNULLでないことは確認できてるのか?
あとGetIndexBuffer、GetVertexBuffer、Lock、Unlock、Releaseの戻り値のチェックは?

687 名前:デフォルトの名無しさん :04/11/09 07:29:28
>>686
解決しました。
なんと、常時メッシュと当たってない時も上記の処理をしていた為、
面のインデックスを受け取ってなくて落ちてました。
メッシュと交差した時だけ上記の処理を行うようにしたら
きちんと取れてました。ごめんなさい。

688 名前:デフォルトの名無しさん :04/11/09 09:36:07
>687
てことは多分faceIndexに不正な値が入ってたんだろ?
エラーチェックのコードを入れてたほうがいいぞ

689 名前:デフォルトの名無しさん :04/11/09 11:14:10
実機用のTRIANGLESTRIPのバーテックスバッファがあるんですが、
DrowPrimitiveで表示させる場合ってやはり
ニ、三個くらいのプリミティブ毎にレンダリングするしかないんでしょうか?

実際パフォーマンスの問題と、実機用のソースの変更が必要になるため
避けたいなあと思っているのですが…
普通はどうするものなんでしょうか?

よかったらアドバイスお願いします。


690 名前:デフォルトの名無しさん :04/11/09 11:19:01
>>689
言ってる意味がわからん。
その「実機」ってのも何を指してるのかサッパリ。

691 名前:デフォルトの名無しさん :04/11/09 11:20:06
実機って何だ?

692 名前:689 :04/11/09 11:47:21
実際のゲーム機です。
ゲーム機用のモデルをPCで表示させたいんす。
ハードによってはプリミティブの境目がわかる判別タグとか使って、
TRIANGLESTRIPのバッファを一回のレンダリング命令で表示できたりするんですが、
DirectXではそんなタグ使えないし、タグをとっぱらってただのTRIANGLESTRIPの
バッファとして使ってます。

で、だからただのTRIANGLESTRIPのバッファなんですが、
例によってTRIANGLESTRIPのバッファって細切れなので、
ニ、三個くらいのプリミティブ毎にレンダリングになってしまい、重いと。

693 名前:691 :04/11/09 11:56:09
>>692
X箱でやったことあるが、縮退三角形を挿入して
DrawPrimitiveの回数を減らすとかじゃ駄目なの?

694 名前:デフォルトの名無しさん :04/11/09 12:10:58
TRIANGLESTRIPのバッファが細切れってどういうこと?
メモリ上に不連続にデータが並んでるの?
うまいことストライドで処理できないかな。

695 名前:691 :04/11/09 12:18:20
>>692
変換行列・マテリアル・ステート等が同じで、
ストリップが細切れになってるだけの状況ならば、
無理やり繋げて描いた方がなんぼかマシだと思う。
インデックスバッファ未使用だと効率は良くないが・・・

>>694
> 境目がわかる判別タグ
から察するに、短いストリップが沢山あるということだと思う。
俺の勘違いかな?

ああ、もう出かける時間なので、あとは>>694よろしく

696 名前:689 :04/11/09 12:18:46
どうもありがとうございます。縮退三角形の手法を勉強してみます。

697 名前:デフォルトの名無しさん :04/11/09 12:41:16
うおっ、よろしくされたよ。

なるほどね、タグ方式だからストライドが一定にならないわけか。
細切れストリップを繋ぎ直しするにも、頂点バッファがビデオメモリにあるなら
パフォーマンス激オチじゃないかな。
実際のところ、全部一括でDrawPrimitiveと、細切れDrawPrimitiveではどれくらい
パフォーマンスが違うの?

698 名前:デフォルトの名無しさん :04/11/09 12:50:16
何故自分で試そうとしない?

699 名前:デフォルトの名無しさん :04/11/09 12:56:38
試すよ。興味あるし。でも今すぐは無理だから聞いてみたんだよね。


700 名前:689 :04/11/09 13:28:49
>短いストリップが沢山あるということだと思う。
そのとおりです、すいません。言葉足らずm(__)m

>どれくらいパフォーマンスが違うの?
全部一括って = 繋ぎ直し = 縮退三角形の方法ですよね?
繋ぎ直してやってみます、すまそ。
うーんどっちだろ。
実機よりもPCのが環境良いのに、細切れだと描画速度が実機の30%以下なので…
今は繋ぎ直しの方が魅力的に感じます。

701 名前:デフォルトの名無しさん :04/11/09 15:08:45
>700
漏れもかなりコマ切れのSTRIP扱ったことがあるけど、全然違う
なんで、こんなに重いかなと思ってデータみたらコマギレ…

もちろん縮退三角形で繋いだらツルツル動きました

702 名前:デフォルトの名無しさん :04/11/09 15:19:31
>700
前は繋ぎなおしのライブラリがnVideaにあった気がするけど今もあるのかな?
繋ぎなおしは非常に重いのでデータ読み込みの時にはしないほうがいいと思う
コンバータ作って、データ自体を変えたほうが幸せになれる

703 名前:689 :04/11/09 15:50:44
おぉーありがとうございます。
データ自体変えてしまおうか迷ってて、きつかったらコンバータ作ろうと
思っていました。参考にさせていただきます。

704 名前:デフォルトの名無しさん :04/11/09 17:31:56
DirectX9はC++Builder6でも使えますか?

705 名前:デフォルトの名無しさん :04/11/09 19:16:08
>>704
http://clootie.narod.ru/cbuilder/index.html

706 名前:デフォルトの名無しさん :04/11/09 20:06:44
DirectDrawを使ってゲームを作っているのですが、
SetDisplayModeでフルスクリーンモードへ切り替えたときに、
画面がちゃんと表示されたかどうかを検出することって出来ますか?
(WM_PAINTは画面が表示される前に来るようです)

たとえば起動ロゴを表示する際、
完全に画面が切り替わった後で処理を始めたいと考えています。
現在は2秒ほど待つ処理を入れています。

707 名前:デフォルトの名無しさん :04/11/09 21:47:13
ここ3日前ぐらいからこの世界に入り込んだ者ですが。。
SDKがいるんでマイクロ社のHPにいって一番新しいと思われるOctober 2004を落として勉強するべくサンプルを見てたんですが
Direct3Dのサンプルの大体が「Switching to the reference rasterizer, a software device that implements the entire Direct3D feature set, but runs very slowly.」
と出てあとで起動するんですが激しく重いです...
どうしたら普通に起動出来ますかね?('A`)

あと激しく重いんだったら自分で作ればいいじゃんって思ってサンプルのcppを
ビルドしてみたんですが。。文字セットがUnicodeじゃないと悪いらしく 何処の設定変えればいいのか判らないままです^^;
(ビルドするときはBCC Developer 1.2.21使ってやってます…初心者に良いと思ったんで;)
サンプルのcppをそのままビルドしても出来ないものなでしょうか…

この2つの解決法、誰か教えて下さい('A`)

708 名前:デフォルトの名無しさん :04/11/09 22:16:03
>>707
フリーのコンパイラ使うなら
Visual C++ Toolkit 2003
使ったほうがいいかもしれん。

あと、サンプル見てないからわからんけどソフトウェアエミュレーションで起動してるね・・・
CreateDeviceを検索してみ。
D3DDEVTYPE_HALに設定してないのかな??
・・・関係ないかもしれんな・・・

709 名前:デフォルトの名無しさん :04/11/09 22:30:00
バカばっかり

710 名前:707 :04/11/09 22:52:12
>>708
Visual C++ Toolkit 2003ですか。
考えておきます...

ソフトウェアエミュレーション...?
多分、大丈夫かな…
よくじっくり見たら普通に動いてるのはD3DDEVTYPE_HALなんですが
重い動作してるのはREFでした('A`)
F2押してオプションっぽいところでHALに変えようとしたらREFしか...
始めから動作がスムーズなのは始めからHALになってるしオプションでREFにも変更できるんですが('A`)
なんか謎です…
October 2004よりも実はSummer 2004の方が良いってことは…ないか…。。
CreateDeviceを検索…サンプルのcppの中検索したらその文字ありましたが
普通に起動するやつと重いやつはそこは同じでした...

711 名前:デフォルトの名無しさん :04/11/09 22:54:44
ヴぃでおカードを最新にすれ

712 名前:707 :04/11/09 22:59:11
あぁ。たしかに、オンボーでまだやってますたorz

有難う。

713 名前:デフォルトの名無しさん :04/11/10 01:38:47
オンボードは厳しいぜ

714 名前:デフォルトの名無しさん :04/11/10 02:02:36
てか、なぜにオンボード・・・

715 名前:デフォルトの名無しさん :04/11/10 03:22:27
当たらし目のサンプル類はハードウェアアクセラレートなくてもソフトウェアで処理できる場合はそっちで
なんとか立ち上がるようになってる。

速くならないのは使ってるPCがサポートしてないハードウェア機能を前提に作ってるからだね。

そろそろオンボードもピクセルシェーダまで対応しつつあるけど、まだ前提には作れんよなぁ。

716 名前:デフォルトの名無しさん :04/11/10 04:13:28
というかDirectXの勉強するつもりなら
安いのでいいから買おうよ

717 名前:デフォルトの名無しさん :04/11/10 13:55:05
DirectX9を始めて間もない者なのですが、
二次元配列を使用して円弧を作成しろという課題が出てしまったのですが、
いかんせん初心者な者でどう手をつけてよいのかわかりません。
どなたかご教授宜しくお願いします。
ちなみに、始点と終点と中心(半径r)を決めて始点と終点を結んだ扇形を作りたいです。
このとき中心から始点、中心から終点の線は表示しないで始点と終点のみを結びます。
あと、今DirectX グラフィックのチュ−トリアル4を参考に勉強させていただいてます。
宜しくお願いします。

718 名前:デフォルトの名無しさん :04/11/10 13:58:09
宿題スレにGo

719 名前:デフォルトの名無しさん :04/11/10 13:58:57
円弧をモデリングしてx-fileとして表示して終了。よかったね。

720 名前:デフォルトの名無しさん :04/11/10 14:06:56
扇形の頂点座標計算はできるのか?
バーテックスバッファを作って座標を順番にバッファにつっこんで、
DrawPrimitive。分かれば簡単だが、分かってないと途方に暮れるだろうな。

721 名前:デフォルトの名無しさん :04/11/10 14:14:15
>>710 ありがとうございます。

>>720 扇形の頂点座標計算は良くわからないのですが、
   教えていただけないでしょうか?

722 名前:デフォルトの名無しさん :04/11/10 14:45:21
>717
開始角じゃなくて始点なの?
指定する始点、終点、中心点、半径rに関して、(始点-中心点)と(終点-中心点)かならず半径rである保障はあるの?

723 名前:デフォルトの名無しさん :04/11/10 15:11:21
なんか線、正五角形、円、円弧と来てるね

724 名前:デフォルトの名無しさん :04/11/10 15:11:48
>>721
DirectX以前の問題だな。sinとcosを使った円の式はわかるか?

725 名前:デフォルトの名無しさん :04/11/10 15:18:59
そもそも2Dなのか3Dなのかもわからない
二次元配列を使うって書いてあるから2Dなのかとは思うが


726 名前:721 :04/11/10 15:21:23
>>722
必ずしも半径rでなくてなはならいって事は無いです.

>>724
すいません数学が苦手なもので、ちょっとわかりません。

727 名前:デフォルトの名無しさん :04/11/10 15:41:01
>>726
>すいません数学が苦手なもので
(;´Д`)それじゃどうしようもないじゃないか
数Iの教科書から出直しましょう

728 名前:デフォルトの名無しさん :04/11/10 15:58:30
>726
>必ずしも半径rでなくてなはならいって事は無いです.
???
てことは↓もOK?
ttp://venus.aez.jp/uploda/dat/upload11609.jpg

729 名前:721 :04/11/10 16:04:42
>>725
2Dです。
>>727
高校の教科書を引っ張り出して思い出しました。
申し訳ないです。
>>728
すいません逆です。半径rは必ずです。

730 名前:デフォルトの名無しさん :04/11/10 16:21:48
>729
>すいません逆です。半径rは必ずです。
いや、だから半径が必須だから、描画する曲線はかならずしも始点、終点を通る必要はないってことでしょ?
 始点をA、中心点をO、半径をrとすると
 ベクトルOAを正規化したベクトルをVとして
 本当の始点 = V * r + O
同様に本当の終点を先に求める必要があるってことだよね?


731 名前:721 :04/11/10 16:27:18
>>730
はいそうです。

732 名前:デフォルトの名無しさん :04/11/10 16:44:12
ホントに宿題なんだろうか。宿題を解くための知識が全然無いじゃないか。

733 名前:721 :04/11/10 16:54:35
申し訳ないです。もう一度出直してきます。
アドバイス下さった方ありがとうございますm(__)m

734 名前:デフォルトの名無しさん :04/11/10 16:56:32
sin/cosも分からないで円弧を描こうとしてたのか。。。
いやまあ、x^2 + y^2 = r^2からでも計算できるけどさ。
最近の学生ってこんなんばっかり????

735 名前:デフォルトの名無しさん :04/11/10 16:58:36
んなわけねぇだろ
721がどうしようもなく無勉強なだけ

736 名前:デフォルトの名無しさん :04/11/10 16:59:59
>731
じゃあ最初からそう書いてくれ
はっきりいってDirectX以前の問題
スレ違い
この課題をするにはあまりにも力が足りなさすぎる
だいたい突然この課題が出たわけじゃないだろ?
この課題につながるものをこれまでの授業でやってたはず
ついていけてなかったらこれを機に復習するなり先生に聞くなりしろ
個人的にはこれくらいできないなら、必須単位じゃないなら落として、もう受けるな
必須なら学校やめてしまえ、と思う

737 名前:デフォルトの名無しさん :04/11/10 19:05:16
友達にでも聞けばすむ問題のような気が・・・

738 名前:デフォルトの名無しさん :04/11/10 23:41:44
OSがMEなんだけど
9bはもうダウンロードできない?

739 名前:デフォルトの名無しさん :04/11/11 03:34:58
>738
DLはできるのでは?
インスコはしらんけど

740 名前:デフォルトの名無しさん :04/11/12 11:42:00
ダウンロードできるかどうかまで
OSに決められてしまうのか…

さすがME

741 名前:デフォルトの名無しさん :04/11/13 13:58:02
すいません質問なのですが、DirectPlayのサンプルチュートリアルを開いて
デバックで実行しようとしたのですが
error LNK1104: コンパイラは、ファイル 'dplay.lib' を開くことができません。
とエラーが出て実行できません。

環境は DiextX9.0 Visual Studio.NET 2003   OS: XP
ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。
いろいろ調べてみたのですができないので教えていただけないでしょうか


742 名前:デフォルトの名無しさん :04/11/13 16:49:26
>>741
>>ちゃんとDXSDK\Include DXSDK\Lib は入れてあります。
これをどういう意味で言ってるのか知らんが
設定をちゃんとしていないとか
調べが足りんとしか言えない

他のライブラリは問題ないのか?

743 名前:デフォルトの名無しさん :04/11/13 16:51:04
DirectX と関係あるの

744 名前:デフォルトの名無しさん :04/11/14 22:25:27
自作のコンバーターで作ったデーターをDX9・HLSLシェーダー2.0で表示しています。
データー内のサーフェス(マテリアル)ごとにできる限り最適なシェーダーを組み合わせたいのですが
このままだとシェーダー数が簡単に1000個を超えてしまいそうで、メンテ不可能です。
どなたか良い方法を知りませんか??
ヘルプを読むとID3DXEffectCompilerでのリテラル指定をしての最適化が怪しいと思うのですが
ID3DXEffectCompiler自体がまったく理解できませんTT

745 名前:デフォルトの名無しさん :04/11/14 23:18:17
D3DXLoadMeshHierarchyFromX について詳しい解説はないのかっ!
.Xファイルなんて使いたくないっつーの。どういう構造してんだこれ。

746 名前:デフォルトの名無しさん :04/11/14 23:18:29
>744
大杉
本当に必要なシェーダに絞り込むべきじゃないか?

もしコマンドラインでコンパイルしているなら/Dオプションでマクロが設定できる
マクロとifdefを上手く使えば一つのシェーダのソースから複数のシェーダを生成できる
違うシェーダといっても部分的には他のシェーダと同じってのも多いはずだから
そういったのをまとめて、違う部分をifdefを使ってわける
最終的には1000個でも管理するソースは100個くらいですむかもしれない
その場合makeとかバッチファイルとか併用したほうがよさげだが

あとはあんまりやりたくないがif乱用

まぁでも本当に必要なシェーダに絞り込むのが現実的ぽ

747 名前:デフォルトの名無しさん :04/11/14 23:19:26
>745
電波の缶詰で前に見た気がする
のぞいてみれ

748 名前:デフォルトの名無しさん :04/11/14 23:23:16
>>747
あー、あれね。うん、見た。
一通りググって出たサイトは見た。
でもSDKのSkinningMeshを使い回してるだけで、情報量としてはたいして多くないんだよね。
やっぱSkinningMeshを解読するしかないのか。

749 名前:744 :04/11/15 02:12:11
>746
大変参考になります。
746さんの方法だとエフェクトとして使えるのでしょうか?
もしやFXCで複数のアセンブラソースを出力して、1つのエフェクトファイルにインクルード?
辛いけどやってみますTT
ifは使ってみたのですが、コンパイルすると分岐コードとして吐き出されず最悪の状態になりました。
たとえばボーンが0個とそれ以外(1〜4個)で1度だけ分岐させても、全て4個分のコードとして吐き出されました。

750 名前:デフォルトの名無しさん :04/11/15 03:18:42
>>749
動的コンパイル時にD3DXMACROで分ける。
それとif文がうまくいかないのは
分嵯に使ってるフラグがリテラルじゃないからじゃないか?


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.