DelphiX 掲示板過去ログ


こんばんわ 投稿者:  投稿日:06月04日(日)02時24分11秒

◆ to fluit さん

>ウィンドウモードで起動するようにしたらうまくできたようです。
>320*240*8モードのフルスクリーン対応していないパソコンも
>あるのでしょうか・・・それとも何かうまくできる方法があるのでしょうか?

320x240 8bit をサポートしていない環境はあります。
確実に使えるディスプレイモードは640x480 8bitしかないと思ったほうが
良いと思います。これはちょっと言い過ぎかもしれませんが・・・

以下の手順でTDXDrawコンポーネントのプロパティを設定すれば一応320x240に
対応していない環境でもフルスクリーンに出来ると思います。

1. AutoSizeプロパティをFalseに設定する。
2. SurfaceWidth プロパティに 320 を設定する。
3. SurfaceWidth プロパティに 240 を設定する。
4. Options プロパティの doStretch を True に設定する。
5. Options プロパティの doFlip を False に設定する。

◆ to AQRS さん

>IDirect3DDevice7のDrawIndexedPrimitiveVBなんですが
>そこのパラメータのうちlpwIndicesがConstで定義されていますが、
>これはポインタを扱うものみたいなのでVarなんではないでしょうか?

これは前にRIKIMARUさんがここで報告してくださったバグですね(^^;

function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
    dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices: Word; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;

は正しくは

function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
    dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;

でした。

>それと、ついでに確認ですがTDirectDrawSurfaceのDrawAlphaなどのメソッドは
>ソフトウェアで合成しているんですよね?

ソフトウェアで合成しています。

>それでも拡大した半透明合成などを行うと簡単にフレームレートが落ちるんで
>これらの処理をDirectXのAPIでハードウェアで実行するようにはできないんですか?

DirectDrawを使った描写では(定義されている定数を見ると)特殊描写は
半透明しかサポートされていないし、DirectX7 ではその機能はサポート
していないようなので使えないと思ったほうがいいようです。

私はやっぱりD3D IMを使ったほうが良いと思います。

◆ to 陸さん

>ところで「 Delphi X 」のImageListのItem として使用している画像は、
>プログラムの設計時しか変更できないのでしょうか? DXDraw で使用して
>いる最中に突然ファイルから読み込んでそれまでの画像とは違う画像を
>使いたいのですが......

もちろん可能です。

ImageListのItemはTPictureCollectionItemオブジェクトなので
TPictureCollectionItemのプロパテイを変更することで出来ます。

Itemを取得するにはTDXImageListコンポーネントのItemsプロパティを
使います。Itemの画像を変更するには ItemのPicture プロパティを使います。

以下のサンプルはImageListの一番目のItemの画像を変更します。

var
  Item: TPictureCollectionItem;
begin
  Item := ImageList.Items[0];

  // 画像を "c:\test.bmp" のファイルへ差し替える
  Item.Picture.LoadFromFile('c:\test.bmp');

  // サーフェースを再構築することを忘れないでください。
  // 忘れると画像の変更が反映されません。
  Item.Restore;
end;


フルスクリーン駄目です? 投稿者:fluit  投稿日:06月03日(土)00時42分02秒

先日質問を書き込みさせていただいたものですが、
ウィンドウモードで起動するようにしたらうまくできたようです。
320*240*8モードのフルスクリーン対応していないパソコンも
あるのでしょうか・・・それとも何かうまくできる方法があるのでしょうか?


バグでしょうか? 投稿者:AQRS  投稿日:06月01日(木)23時47分26秒

はじめまして

DelphiXのDirectX7ベータ版を使ってみましたが、
バグかもしれないことを見つけたので報告します

IDirect3DDevice7のDrawIndexedPrimitiveVBなんですが
そこのパラメータのうちlpwIndicesがConstで定義されていますが、
これはポインタを扱うものみたいなのでVarなんではないでしょうか?

IMを使うためにいろいろ実験していてどうもこれだけがうまく動かず、
varにするとうまくいくようになりました

まだ、Direct3Dはいじり始めてそんなに時間がたってないので
勘違いしていたらすみません


それと、ついでに確認ですがTDirectDrawSurfaceのDrawAlphaなどのメソッドは
ソフトウェアで合成しているんですよね?

この間作ったアプリが私のG200で高速に動き
友人のTNT2で異様に遅かったので最初原因がよくわからなかったんですが
サーフェイスをSystemMemoryにとるようにしたら普通に動きました
多分私のG200ではVideoMemoryが足りなかったから
最初からSystemMemoryを使っていたんでしょうね

それでも拡大した半透明合成などを行うと簡単にフレームレートが落ちるんで
これらの処理をDirectXのAPIでハードウェアで実行するようにはできないんですか?
一応IMで少し試してみたんですが、減算合成だけがどうしてもうまくいかず
そのまま使うしかないのかなという状況です

何か使用法で勘違いしているかもしれませんが
半透明や、加算減算を高速に実行する方法はないんでしょうか?


ちなみにDelphiXはDirectX3のころから愛用しています
すばらしいライブラリをありがとうございました


単純なことを聞いてもよろしいでしょうか? 投稿者:  投稿日:06月01日(木)17時22分17秒

「 Delphi X 」、たいへんすばらしいとおもいます。 おかげで素人なのに
プロフェッショナルな作品が作れそうです。

ところで「 Delphi X 」のImageListのItem として使用している画像は、
プログラムの設計時しか変更できないのでしょうか? DXDraw で使用して
いる最中に突然ファイルから読み込んでそれまでの画像とは違う画像を
使いたいのですが......

もしよろしければご回答お願いします。


解決しました:スプライトの消し方? 投稿者:とし  投稿日:06月01日(木)14時15分25秒

スプライトの件解決しました。初心者に付き合っていただきありがとうございました。
ぜんぜん気が付きませんでした。やっぱりそのまんまコピーはだめですね。

>MakeSprite2 メソッドで既にある
>画像は追加しないようにするなどがあります
とのことでしたが、ユーザが検索した画像の一覧を並べ、選択された映像を流す。
というソフトなので、同じ画像が何度使われるか分からないので。
TDXImageListのリストの中身もクリアしちゃうことにしました。
静的用と動的用でTDXImageListを2つ用意し動的用の方は
SpriteEngine.Engine.Clear; のタイミングで
DXImageList.Items.Clear; としてみました。
場面の切り替えでリソースが戻ってくるようになりました。
ありがとうございました。




質問なのです。 投稿者:myth  投稿日:06月01日(木)09時49分39秒

はじめまして。

ヘルプファイルを作成したのですが
Delphiとの関連付けの
方法がわかりません。
どなたか教えていただけないでしょうか。


RE:RE:スプライトの消しかた? 投稿者:  投稿日:06月01日(木)00時14分49秒

ソースコードを見るとMakeSprite2メソッドが呼び出される度に
TDXImageListコンポーネントに画像が追加されているようですね。

スプライトを削除するときにこの画像を削除していないとスプライトが
作成される度に画像が追加され続けてリソースを食いつぶしてしまいます。

解決策としては以下のコードのように MakeSprite2 メソッドで既にある
画像は追加しないようにするなどがあります。

それから蛇足かも知れませんがファイル名を指定するときはフルパスで
指定した方がいいです。カレントディレクトリが変わったときに
読めなくなります。

// 動作チェックしていません
procedure TMainForm.MakeSprite2(ImgPath: String);
var
   Src: TDIB;
   Item: TPictureCollectionItem;
   ImgIndex: Integer;
begin
   Src:= TDIB.Create;
   try
      ImgIndex := ImgList.Items.IndexOf(ImgPath);
      if ImgIndex=-1 then
      begin
        {  画像をロード  }
        Src.LoadFromFile(ImgPath);

        // 常にフルパスで読み出すバージョン
        // Src.LoadFromFile(ExtractFilePath(ParamStr(0)+ImgPath));

        Item := TPictureCollectionItem.Create(ImgList.Items);
        Item.Name := ImgPath;
        Item.Picture.Graphic:= Src;
        Item.Transparent:=false;
        Item.Restore;
      end else
      begin
        {  画像は既にある  }
        Item := ImgList.Items[ImgIndex];
      end;
    finally
      Src.free;
    end;
    with TImageSprite.Create(SpriteEngine.Engine) do begin
	Image:= Item;
       	X:= 100;
    	Y:= 100;
       	Z:= 7;
       	Visible:= True;
      	Width:= 320;
        Height:= 240;
    end;
end;


できる人とできない人 投稿者:fluit  投稿日:06月01日(木)00時13分57秒

私の作ったゲームで、うまく起動できない人がいるようです。
320*240の画面モードでフルスクリーン起動のゲームですが、
何か注意すべき点はあるのでしょうか?
それとも相手のパソコンがDirectX6以降に対応していないという可能性が高いのでしょうか。
正常に起動できている人も多いのですので・・・

http://nx.sakura.ne.jp/~fluit/


RE:スプライトの消しかた? 投稿者:とし  投稿日:05月31日(水)17時57分07秒

削除は問題なしということなのですが、以下のソースでもリソースがじわじわと減っていき
ます。ソフトを終了するとどかっと帰ってきます。
スプライトの作成は過去ログを参考にして。
procedure TMForm.MakeSprite2(ImgPath: String);
var
   Src: TDIB;
   Item: TPictureCollectionItem;
begin
   Src:= TDIB.Create;
   try
      Src.LoadFromFile(ImgPath);
      Item := TPictureCollectionItem.Create(ImgList.Items);
      Item.Picture.Graphic:= Src;
      Item.Transparent:=false;
      Item.Restore;
    finally
      Src.free;
    end;
    with TImageSprite.Create(SpriteEngine.Engine) do begin
	Image:= Item;
       	X:= 100;
    	Y:= 100;
       	Z:= 7;
       	Visible:= True;
      	Width:= 320;
        	Height:= 240;
    end;
end;
という手続きを作って
ボタンを2つ置いて
procedure TMForm.Button1Click(Sender: TObject);
begin
  SpriteEngine.Engine.Clear;
    MakeSprite2('title_2.bmp');
end;
と
procedure TMForm.Button2Click(Sender: TObject);
begin
  SpriteEngine.Engine.Clear;
  MakeSprite2('title_3.bmp');
end;
を交互にクリックして呼び出しています。
(ひょっとしてボタンとか乗っけたらまずいのでしょうか?)

タイマーイベントは
procedure TMForm.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  if not DXDraw1.CanDraw then exit;
    DXDraw1.Surface.Fill(0);
    SpriteEngine.Draw;
   DXDraw1.Flip;
end;
として見ました。

環境は、Win98、Delphi4Up3、DirectX7
DelphiX はInsideDelphiXに付いていたバージョンです。

一晩考えたんですが、ぜんぜん判りませんでした。
よろしくお願いします。




RE:スプライトの消しかた? 投稿者:  投稿日:05月31日(水)16時12分11秒

スプライトの全削除はそれで問題ないと思います。

としさんの作成されたスプライトクラスにはリソースを解放し忘れているなど
問題はないでしょうか?

問題がないのであればスプライト以外のところに原因があると思います。


スプライトの消しかた? 投稿者:とし  投稿日:05月31日(水)15時15分54秒

はじめまして、
スプライトのあつかいで困っています。

50個くらいのスプライトを作って

全部削除 DXSpriteEngine.Engine.Clear;

また50個くらいのスプライトを作って

また全部削除 DXSpriteEngine.Engine.Clear;

要するに場面を切り替えてるんですけど。
これを繰り返すと、リソースがなくなって固まってしまいます。
スプライトの正しい消し方が分かりません、それとも、もともとスプライトの使い方が
間違っているのでしょうか?


RE:バグ? 投稿者:  投稿日:05月31日(水)07時10分26秒

よく考えると Direct3DInitializing 手続きの中でDirectX7モードを
使う必要がなかったので

  Direct3D7.EnumDevices(@EnumDeviceCallBack, rec)
と
  (DDraw.IDraw7 as IDirect3D7).EnumDevices(@EnumDeviceCallBack, @rec)

は削除することにしました。

しかし良く今まで無事に動いていたなと思います(^^;
どうもありがとうございました。


バグ? 投稿者:RIKIMARU  投稿日:05月31日(水)04時27分04秒

おはようございます いつもお世話になります。
ベータ版なのでまだ修正されてないだけかもしれませんが一応報告しておきます。
Direct3DInitializing手続きの中で
      if Direct3D7<>nil then
        Direct3D7.EnumDevices(@EnumDeviceCallBack, rec)
      else
        Direct3D.EnumDevices(@EnumDeviceCallBack, rec);
と
      if DDraw.IDDraw7<>nil then
        (DDraw.IDraw7 as IDirect3D7).EnumDevices(@EnumDeviceCallBack, @rec)
      else 
        (DDraw.IDraw as IDirect3D).EnumDevices(@EnumDeviceCallBack, @rec);
と同じEnumDeviceCallBackはまずいと思われます。
すでに
InitializeDirect3D
Direct3DInitializingと
Direct3DInitializing7など作られるてるか他に上手な仕組みを作られてる
ような気はしますが 一応報告しておきます。

http://www.ifnet.or.jp/~rikimaru/


ありがとぅ 投稿者:激侍  投稿日:05月28日(日)23時37分13秒

堀さんありがとうございました。
これでなんとかゲームが完成?できそうです。
まぁ、もうほとんど出来かけてるからにゃあ。
出来上がったらお教えします故。
んだらまたいつか。


DirectX7版DelphiX再アップ 投稿者:  投稿日:05月27日(土)23時46分41秒

以前アップしていたDirectX7版DelphiXを再アップしました。

http://www.yks.ne.jp/~hori/data/DelphiXforDX7-beta1.zip
http://www.yks.ne.jp/~hori/data/DelphiXforDX7-beta1-English.zip


RE:すんません 投稿者:  投稿日:05月27日(土)23時45分16秒

半透明処理なら最後にAlphaと付くメソッドで行うことが出来ます。
他にAdd(加算合成)系やSub(減算合成)系の描写関数もあります。

例:DrawAlpha, DrawRotateAlpha, DrawWaveXAlpha
例:DrawAdd, DrawRotateAdd, DrawWaveXAdd
例:DrawSub, DrawRotateSub, DrawWaveXSub

Graphic\AlphaBlendingサンプルでも半透明が使われていますので
それも参考になると思います。


すんません 投稿者:激侍  投稿日:05月27日(土)18時19分54秒

すんません。書き方間違えました。
スプライトの透過処理って言うか半透明処理のことでした。
んで、できるのですか?スプライトの半透明処理


マルチレス 投稿者:  投稿日:05月27日(土)12時47分58秒

◆ to たけさん

>移転されたのですね。
>余計なことですが、その意図は?

トップにも書いてあるとおり、前使っていたサーバーは
夜間アクセスしにくくなるため移転しました。また容量が
足りなくなったせいでもあります(^^;

>DirectX7対応のDelphiX再度アップお願いします。

あっそうでした(^^; アップしますね。

◆ to 雑音

>移転したんですね^^
>これからもがむばってください。

どうもありがとうございます(^^

◆ to 激侍さん

>あのDelphiXでのスプライト表示って透過処理できないのですか?
>透過処理はDrawRotateADD だけですか?みんな

透過処理が透明色抜き転送と言う意味であれば、Drawメソッドなどで
出来ます。

スプライト(TImageSprite)の場合は、TDXImageListコンポーネントの
中の該当する画像アイテムの Transparent プロパティを True にすることで
透過処理できるようになります。また TransparentColor プロパティで
透明色を設定することもできます。


移転しちゃった 投稿者:たけ  投稿日:05月27日(土)08時46分35秒

移転されたのですね。
余計なことですが、その意図は?
DirectX7対応のDelphiX再度アップお願いします。


おお(@@; 投稿者:雑音  投稿日:05月27日(土)02時42分01秒

移転したんですね^^
これからもがむばってください。


スプライトについて 投稿者:激侍  投稿日:05月27日(土)02時10分07秒

聞きたいのですが?
あのDelphiXでのスプライト表示って透過処理できないのですか?
透過処理はDrawRotateADD だけですか?みんな


RE:DXInputとDXDrawについて  投稿者:  投稿日:05月26日(金)02時39分01秒

>DXInputでキーボードの入力を取得していますが複数キーを
>同時に押していた場合にキーバッファに入力したキー情報が
>残ったままになることがあります。

キーボードの複数のキー押しは、マシンの機種(PC/AT or PC98)によっては
数個までのキーしか認識できなかったと思いますので、それに関連する問題
ではないでしょうか。

>  またDXDrawでディスプレイのリフレッシュ・レートを
>設定する方法はあるでしょうか?

リフレッシュレートの設定はDirectXの機能としては用意されていますが、
その機能が使える環境は滅多にない(皆無?)なので設定する方法は無いと
思っていいと思います。


DXInputとDXDrawについて 投稿者:Masaki(jp)  投稿日:05月25日(木)16時26分12秒

はじめまして堀さん、そして皆さん。
DXInputとDXDrawについてお聞きしたいことがあります。

DXInputでキーボードの入力を取得していますが複数キーを
同時に押していた場合にキーバッファに入力したキー情報が
残ったままになることがあります。
  ジョイパッドだともちろん問題ないのですが、どうにか
バッファの内容をクリアする方法はないでしょうか?

while PeekMessage(msg,0,WM_KEYDOWN,WM_KEYUP,PM_REMOVE) do
  ;

とやってもダメのようです。

  またDXDrawでディスプレイのリフレッシュ・レートを
設定する方法はあるでしょうか?

  動作環境は以下の通りです。

*Win2K
*Delphi4 Pro Update3
*Creative GeForce

  Win2Kで起こるDXInput.pasの問題は修正してあります。



  


質問ばっかで、申し訳ないですが。。。 投稿者:雑音  投稿日:05月18日(木)17時41分51秒

ども、雑音です。
プロバイダの設定について、堀さんが示して下さった方法は、
利用可能なプロバイダの一覧を作成して、その中からTCP/IPと
一致するものをプロバイダに代入してるのかな?
ありがたく利用させていただきます^^

自分のIPについては、いろんなページを検索かけて方法を発見
しました。やはり、堀さんの言ってるような方法でした。

チャットは完成しましたので、今度はゲーム部分を作成します。
これが一番問題なんですけどね(^ー^;


RE:More bugs... 投稿者:  投稿日:05月16日(火)03時38分03秒

DirectX7版のDelphiXはHPの容量が足りなくなった為削除しました。

>- D3DDevice*.CreateLight ni ha "TD3DLight" ga arimasu ga, TD3DLight2 de ha nai no desu ka...?
>(TD3DLight2 ha motto ii desu ne ;))

D3DDevice* にはCreateLightメソッドがありませんのでご確認をお願いします。
"TD3DLight"で検索してみたのですがそれらしきものはありませんでした。

>- Anata no DelphiX7 Version (7.0a) no Direct3D Software mode ha DelphiX6.1 (6.1) Version yori
>motto osoku desu. Onaji Source Code desukedo...!

普通、リファレンスラスタライザーは通常OFFにして置くものだとは思いますが
次期バージョンでは使用しないように変更します。

>- Voodoo2 wo tsukau to. Tatoeba, Original Resolution = 1024x768. FullScreen = 640x480. Watashi no
>G400 wo tsukau to, DX.Width ha 640 ni narimasu, DX.Height ha 480 ni narimasu. Voodoo2 wo tsukau

TDXInputコンポーネントのMouseプロパティを使ってマウスの座標を
自分で管理する方法はどうでしょうか?

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
  DXInput1.Update;
  FMousePos.X := FMousePos.X + DXInput1.Mouse.X;
  FMousePos.Y := FMousePos.Y + DXInput1.Mouse.Y;
end;

#改行を入れていただけるとうれしいです(^^;


More bugs... 投稿者:Naoki Haga  投稿日:05月13日(土)23時08分31秒

Hori-san,
- D3DDevice*.CreateLight ni ha "TD3DLight" ga arimasu ga, TD3DLight2 de ha nai no desu ka...? (TD3DLight2 ha motto ii desu ne ;))
- Anata no DelphiX7 Version (7.0a) no Direct3D Software mode ha DelphiX6.1 (6.1) Version yori motto osoku desu. Onaji Source Code desukedo...!
- Software Mode wo tsukattara, DelphiX ha Reference Rasterizer wo tsukatte imasu. (RGB Device wo tsukatte kudasai !)... Fix : "EnumDeviceCallback" no Source Code ni ha, kore wo : if CompareGUID(@lpGUID,@IID_IDirect3DRefDevice) then Exit;
- Voodoo2 wo tsukau to. Tatoeba, Original Resolution = 1024x768. FullScreen = 640x480. Watashi no G400 wo tsukau to, DX.Width ha 640 ni narimasu, DX.Height ha 480 ni narimasu. Voodoo2 wo tsukau to, DX.Width ha 1024 ni narimasu, DX.Height ha 768 ni narimasu ! Shikashi, Voodoo2 wo tsukatte mo, DX.SurfaceWidth to DX.SurfaceHeight ha kekkou desu (640x480). Ima, SurfaceWidth to SurfaceHeight wo tsukatte imasu ga, Mouse Cursor ha 1024x768 Resolution wo tsukatte iru kara, hidari ni ugoite to mou gamen ni ha arawaremasen.
Mou ichido, heta na nihongo ha gomen nasai.


マルチレス〜 投稿者:  投稿日:05月13日(土)14時45分56秒

◆ 雑音さん

>TCPIPSetting.Enabledはもちろんtrueにしてました。
>でも、IPを聞いてくるのでいろいろイヂってみたところ、
>ダミーのIPをTCPIPSetting.HostNameに入れておくこと
>で、聞いてこなくなりました<不思議な現象ですね

Samples\Network\Chat2 サンプルはご覧になられたでしょうか?
このサンプルならIPアドレスを入力すれば聞いてこないと思うのですが
どうでしょうか?

>ところで、DXPlayで自分や参加者のIPを取得することが
>できるとうれしいんですが、できますでしょか?

自分のマシンのIPアドレスはWinSockを使うことで取得出来ると思います。
参加者のIPアドレスは…メッセージで参加者から送ってもらうぐらいしか
思いつかないです(^^;

自IPアドレスを取得するサンプルはこの掲示板の過去ログをWinSock
で検索すれば見つかると思います。

>win2000でコンパイルするとき、win98では問題ないのに、unit
>の名前を変更しないととおらないので。。。

どのようなコンパイルエラーが出ているのか分からないですが
ユニット名が衝突していたりパスが通っていないことは無いでしょうか?

>win2000でのプログラミングはいまいちわからないことだらけ
>です。プロバイダの設定も、'DirectPlay に対する インターネット TCP/IP 接続'
>で通らないし。。。

プロバイダの設定を文字列定数で直接指定すると環境に依存してしまいます。
同じTCP/IPでもプロバイダ名がDirectX のバージョンなどによって異なったり
することがあります。

以下のサンプルのようにProvidersプロパティの値を使われた方が良いと思います。

uses DirectX;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  DXPlay1.ProviderName := '';
  for i:=0 to DXPlay1.Providers.Count-1 do
    if CompareMem(PGUID(DXPlay1.Providers.Objects[i]), @DPSPGUID_TCPIP, SizeOf(TGUID)) then
    begin
      {  これは TCP/IP プロトコル  }
      DXPlay1.ProviderName := DXPlay1.Providers[i];
      Break;
    end;

  DXPlay1.TCPIPSetting.Enabled := True;
  DXPlay1.TCPIPSetting.HostName := HostNameEdit.Text; { 192.168.1.2 などが入る }
  DXPlay1.Open2(...
end;

◆ Naoki Hagaさん、RIKIMARU さん

次期バージョンで修正されると思います。
どうもありがとうございます(^^

◆ Reinaldo Quaresma さん

>Boku wa, burajiru jin desu kedo nihon go (gengogaku) o benkyosuru kara, 
>moshi Hori san wa eigo no honyaku iru, boku wa tetsudaimasu yo.

とてもうれしいのですが、お気持ちだけ受け取りたいと思います(^^;


TCPIPSsettingについて 投稿者:雑音  投稿日:05月12日(金)00時40分51秒

TCPIPSetting.Enabledはもちろんtrueにしてました。
でも、IPを聞いてくるのでいろいろイヂってみたところ、
ダミーのIPをTCPIPSetting.HostNameに入れておくこと
で、聞いてこなくなりました<不思議な現象ですね

ところで、DXPlayで自分や参加者のIPを取得することが
できるとうれしいんですが、できますでしょか?

さらに、ふと疑問に思ったことなんですが、unitの名前は
(win98では)unit1、unit2とかしかできないんでしょうか?
win2000でコンパイルするとき、win98では問題ないのに、unit
の名前を変更しないととおらないので。。。
根本的に、ソースがおかしいのかも(w;
win2000でのプログラミングはいまいちわからないことだらけ
です。プロバイダの設定も、'DirectPlay に対する インターネット TCP/IP 接続'
で通らないし。。。

以上、報告&質問でした。


Bug ^^; Sou desu ne. 投稿者:Naoki Haga  投稿日:05月10日(水)20時43分24秒

RIKIMARU-san, ano Bug ha arimasu ne. Watashi no Game no naka ni DrawIndexedPrimitiveVB wo tsukatte imasu kara, mou shuuesei shimashita.
Demo wasuremashita ^^;
Sore ni, mou hitotsu no Bug ga arimasu :
IDirectDrawSurface4 (DelphiX 6.1) no interface ni ha
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc;
              dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
ha hontou ni
function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc2;
              dwFlags: DWORD; hEvent: THandle): HResult; stdcall;
desu.
IDirectDrawSurface7 ni mo arimasu.

Watashi no nihongo ha mada heta desu ne. Gomen nasai.

(Reinaldo-san, now I don't feel alone anymore in this page... ;-))

http://kyodai.com


バグ? 投稿者:RIKIMARU  投稿日:05月10日(水)13時54分10秒

こんにちは いつもお世話になっております。
function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
    dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices: Word; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;

は
function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7;
    dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall;

ではないでしょうか。

http://www.ifnet.or.jp/~rikimaru/


Azevedo 投稿者:Reinaldo Quaresma  投稿日:05月10日(水)08時22分50秒

Hello Hori,

Boku wa, burajiru jin desu kedo nihon go (gengogaku) o benkyosuru kara, moshi Hori san wa eigo no honyaku iru, boku wa tetsudaimasu yo.


Voodoo 投稿者:Naoki Haga  投稿日:05月10日(水)06時05分44秒


It works !! ^___^
Arigatou, Hori-san :) Mou kekkou desu :)
FlipToGDISurface no sei datta no desu ne ^_^;;

DelphiX7 no eigoban mo arigatou :)


こんばんわ 投稿者:  投稿日:05月10日(水)01時42分02秒

昨日公開したDelphiXの英語版です。

http://www.ingjapan.ne.jp/hori/data/DelphiXforDX7-beta1-English.zip

◆ RIKIMARU さん

>どうもTD3DRenderStateTypeの
>D3DRENDERSTATE_VERTEXBLEND,
>D3DRENDERSTATE_CLIPPLANEENABLEが間違ってるようです。
>勘違いだったらすいません。

確かに間違っておりました。DirectX.pas にある

---------------------------------------
    D3DRENDERSTATE_EMISSIVEMATERIALSOURCE,
    D3DRENDERSTATE_VERTEXBLEND,
---------------------------------------
の行を
---------------------------------------
    D3DRENDERSTATE_EMISSIVEMATERIALSOURCE,
    D3DRENDERSTATE_INVALID_149,
    D3DRENDERSTATE_INVALID_150,
    D3DRENDERSTATE_VERTEXBLEND,
---------------------------------------
に置き換えて下さい(^^;

◆ Naoki Haga さん

>SelectDriver wo kokoromite kudasai. Hardware wo shite mo, Software
>de arawaremasu. Kaihou ga arimasu ka ?

TDXDraw コンポーネントの Options プロパティの doFlip を True に設定すると
どうでしょうか?


TD3DRenderStateTypeのバグ? 投稿者:RIKIMARU  投稿日:05月09日(火)23時21分51秒

DirectX7版早速DLして有りがたく使わせてもらっております。
早速DX7ならではの機能のVertexBlendの実力を見てみようと 
いろいろやってみましたが うまくいきませんでした。
どうもTD3DRenderStateTypeの
D3DRENDERSTATE_VERTEXBLEND,
D3DRENDERSTATE_CLIPPLANEENABLEが間違ってるようです。
勘違いだったらすいません。
インターフェースが一新されたので古いインターフェイスはどうなる
かなと思ってましたがDX7モードという形でで対応させたんですね。
DX7はインターフェイスがすっきりしていい感じです。
正式版楽しみにしてます。

http://www.ifnet.or.jp/~rikimaru/


DelphiX for DirectX7 (retry) 投稿者:Naoki Haga  投稿日:05月08日(月)22時16分50秒

Hori-san, arigatou gozaimasu. Ano beta-ban ha kekkou desu ga,
3Dfx no Voodoo1/Voodoo2 wo tsukaeba mada bagu ga arimasu.
SelectDriver wo kokoromite kudasai. Hardware wo shite mo, Software
de arawaremasu. Kaihou ga arimasu ka ?

–x‚³‚ñA‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·B
‚ ‚̃x[ƒ^”ł͌‹\‚Å‚·‚ªA3Dfx‚ÌVoodoo1/Voodoo2‚ðŽg‚¦‚΂܂¾ƒoƒO‚ª‚Ü‚½‚¢‚Ü‚·B
SelectDriver‚ðŽŽ‚Ý‚Ä‰º‚³‚¢AHardware‚ðƒZƒŒƒNƒg‚µ‚Ä‚àASoftware‚ÅŒ»‚ê‚Ü‚·B‰ð•ú‚ª‚ ‚è‚Ü‚·‚©H


RE:DELPHIデフォルトフォルダ 投稿者:長崎  投稿日:05月08日(月)13時37分04秒

DELPHIのソース関連はデータドライブに保存していますので、ショート
カットの作業フォルダは D:\PROJECT\DELPHIにしていますが、それでも
デフォルトが DelphiX のインストールフォルダになってしまいます。
レジストリやDelphi/binの環境設定ファイルなどに、書き込まれている
のではないかと、いろいろ検索しているのですが、該当するような項目
も見当たりませんし、とりあえず、DELPHI5 Patch を当ててみて、だめ
なようなら Delphi を再インストールしようと思います。

NTでは使えないわけだし、2000の開発環境を構築したらまた使ってみる
つもりです。

DirectX7 への対応期待しています。(大変でしょうが)


DelphiX for DirectX 7 ベータ版 投稿者:  投稿日:05月08日(月)06時54分45秒

みなさん、こんにちは。

まだまだヘルプファイルなどが未完成ですが、DelphiX for DirectX7の
ベータ版をアップしました。W2KにおけるTDXInputのバグなども修正されて
います。

http://www.ingjapan.ne.jp/hori/data/DelphiXforDX7-beta1.zip

◆ fluit さん

>Delphi+DelphiXで作った新作ゲームができました。
>タイピングのゲームです。
>単純な(プログラム&内容)ですが、割と楽しめるのではないかと思います。
>お暇でしたら挑戦してみて下さい。

早速楽しませていただきました(^^;

上級コースにも挑戦してみたのですがローマ字の入力方法が私の習慣と違っていて
間違いだらけでした。例えば jyo と zyo、fu と hu です(^^;

◆ 長崎さん

>コンポーネントをアンインストールしても、Delphiのオプション
>で、デスクトップ環境の保存を行わないようにしても直らないの
>ですが何が原因なのでしょう。

おそらく Delphi が起動されたときのカレントディレクトリが
なぜかDelphiXのフォルダになってしまっているみたいですね。

デフォルトフォルダは Delphi32.exe へのショートカットの作業フォルダ設定で
指定できるようなので、ショートカットがおかしくなっているとかありませんでしょうか?

◆ 雑音さん

>ところで、dxplayのhostnameをちゃんと設定してopen2
>しても、接続先IPをきいてくるんですが、なぜでしょうか?

TCPIPSetting.Enabled プロパティを True に設定されているでしょうか?
Enabled プロパティを True に設定しないと TCPIPSetting プロパティは
使われません。


omercan@home.nl 投稿者:Omer Y. Can  投稿日:05月06日(土)21時31分28秒

I want Delphi-X...


Re:windows NT4.0でdirect xを使うには?  投稿者:ある  投稿日:05月06日(土)20時49分22秒

たしか、NTではINSTALLできないのでは?Windows2000を使えば
初めから、DirectX7が組み込まれているはずですが・・・
NT4.0ではDirectX3相当しか動かなかったと思います。

ある


新作ゲーム「ガマ打」できました。 投稿者:fluit  投稿日:05月06日(土)00時12分34秒

Delphi+DelphiXで作った新作ゲームができました。
タイピングのゲームです。
単純な(プログラム&内容)ですが、割と楽しめるのではないかと思います。
お暇でしたら挑戦してみて下さい。

プログラムは、クラスとか関数を使ってません・・・
だらだらと作ってあります・・

http://nx.sakura.ne.jp/~fluit/


Delphiのデフォルトフォルダ 投稿者:長崎  投稿日:05月05日(金)21時22分00秒

Inside DelhiX の付属CDからコンポーネントをインストールした
のですが、Delphiからファイルをオープンしようとすると、デフ
ォルトのフォルダが、DelphiXをインストールしたフォルダに固定
されてしまいます。
コンポーネントをアンインストールしても、Delphiのオプション
で、デスクトップ環境の保存を行わないようにしても直らないの
ですが何が原因なのでしょう。
Delphi自体に、デフォルトフォルダを指定するような項目がある
のでしょうか。

使用環境は Delphi5 Ent + WinNT4 Server です。
DirextXが使用できない NT に入れるなって?。だって入れたか
ったんだもんね。


windows NT4.0でdirect xを使うには? 投稿者:こがき  投稿日:05月05日(金)21時15分47秒

こんにちは、はじめまして!
僕は、Windows NT 4.0 sp3を使っていて最近delphi 5を購入したものです。
本屋を物色していたところInside Delphi Xなる本を見付け
「そうかーゲーム作りたいなー」の理由で購入、いざ、インストールしてみると
DIRECT X7きちんとインストールできませんでした。Delphi Xはインストールできました。
うまく行ったかなと思ったのですが、この本についてあるサンプルはすべて
アプリケーション開始時にDIRECT X6が必要のメッセージが出るばかりです。
どうやったら Windows NT4.0にDIRECT X6以降をインストールすれば良いのでしょうか?
どうしたら良いか教えてください。


その後 投稿者:雑音  投稿日:05月05日(金)09時34分40秒

ども、雑音です。
下のカキコですが、どうもwin2000固有のエラー(?)
だったみたいです。win98では、問題なくいきました。
ところで、dxplayのhostnameをちゃんと設定してopen2
しても、接続先IPをきいてくるんですが、なぜでしょうか?
同じような症状が出た人orわかる方、教えていただけないで
しょうか?
ちなみに、
 main.dxplay.ProviderName:='DirectPlay に対する インターネット TCP/IP 接続';
  main.dxplay.TCPIPSetting.hostname:=ip_edit.text;
  main.dxplay.Open2(false, 'host', name_edit.text);
と記述しました。


はじめまして&質問 投稿者:雑音  投稿日:05月05日(金)07時17分58秒

はじめまして、雑音です。
DelphiXを使わせてもらおうと思うのですが、DirectXを
7.0にした後でした。
コンポのインストールはできましたが、一部のsampleが
動かないようです。
7.0でDelphiXを使っても、この程度のエラーで済むので
しょうか?それとももっと致命的なエラーがひそんでい
るんでしょうか?
現在はNETゲーの基本であるチャットを作ろうと思っ
ているんですが、サンプルのチャットを終了すると、エ
ラーが出るんですが(^ー^;


TO柴宮両兵衛さん 投稿者:zero  投稿日:05月03日(水)17時08分53秒

SourceフォルダにDelphiのパッケージファイルがあるので
それをコンポネートのインストールから手動でやってみてはいかがでしょうか?
DelphiX_for4.dpk
のファイルですね。起動してからファイル>全て閉じる
をやってからインストールした方が良いと思います。
それでわ失礼しました〜


困っています(;;) 投稿者:柴宮両兵衛  投稿日:05月03日(水)01時24分23秒

噂のDelphiXを私も…とダウンロードさせていただいたのですが,インストーラが動きません。
起動はするのですが,ヘルプの組み込むかのオプションを選択した後ボタンを押して決定すると
カーソルが砂時計に変わるのは良いのですが,そのまま静かになるので結局強制終了させる羽目になります。
(応答なしになっています)

Delphi4Standardを使用していまして,圧縮ファイルの中身はC:\DelphiXフォルダに解凍
(勿論ディレクトリ付きです)した後インストーラをその中のBinフォルダから起動しました。

以上でもし「これがまずい」と気付かれる方がおられましたら,何卒対策を御教授願います。
またパッケージのインストールやコンパイルを使って手作業で導入する方法がありましたら
同様にお願いいたします。


Surfaceの待避方法について 投稿者:Yamaken  投稿日:05月01日(月)11時13分25秒

どうも、はじめまして。
本屋でDelphiXを知って、自作のゲームを作るのにさっそく使わせてもらってます。
そこで、質問があります。
画面を実行中にフルスクリーンにするなどで、DXDrawを初期化する際にそのDXDrawを親とする
DirectDrawSurfaceの内容が吹っ飛んでしまいます。
DXDrawのFainalize(スペルあってるかなぁ・・・)だかでDirectDrawSurfaceの内容を
システムメモリに待避し、Intialize(これも自信ない)で復帰させるという方法を考えたの
ですが、上手い待避方法が思いつきません。
初歩的な質問で恐縮ですが、どうか救いの手をお願いします。
TPictureCollectionItemを使わない方法が自分としてはありがたいです。


はじめまして。 投稿者:Zero  投稿日:04月30日(日)23時31分06秒

はじめまして!某所でDelphiXを知り使わせて貰いました。
とても素晴らしいコンポネートに感動させてもらいました。有り難うございます。
一つ気になったのですがTDXTimer.Intervalのヘルプで
「TDXTimer が1秒間に OnTimer イベントを発生させる回数を指定します。」
と有るのですが、実際Intervalプロパティは回数ではなくOnTimerイベントまでにミリ秒ではないのでしょうか?
ひょっとして私の勘違いでしょうか?
それでは失礼しました。


Re:DXRender.pas 投稿者:RIKIMARU  投稿日:04月25日(火)05時36分51秒

>テクスチャ付きなどのポリゴンを描写するdxrDrawPrimitive関数がありますが
>あまり速くないしDirect3D全盛の時代ではあまり使い道が無いなぁと思います
D3Dは互換性の問題があるので確実に描写したいときに役立つと思います。
リアルタイムでないときも役立つと思いますし。私にはソースコードを読むことが
勉強になります。腕がある人ならソースコードが提供されてるので拡張可能です。
DX7版、私には、バグ報告くらいしかできませんが、改めてがんばってください。

http://www.ifnet.or.jp/~rikimaru/


どうもお久しぶりです。 投稿者:  投稿日:04月20日(木)04時29分13秒

DXRenderユニットはTDirectDrawSurface.DrawAlphaメソッドなどの特殊描写を
行うユニットです。非公開・非サポートな扱いなのでヘルプには載っていません。

テクスチャ付きなどのポリゴンを描写するdxrDrawPrimitive関数がありますが
あまり速くないしDirect3D全盛の時代ではあまり使い道が無いなぁと思います。

◆ Naoki Haga さん

http://www.ingjapan.ne.jp/hori/data/980515.zip

これはおっしゃるとおりDXRender.pasのdxrDrawPrimitive関数を使っています。
近いうちにソースコードをアップしてみますね(^^;

◆ RIKIMARU さん

>InsideDelphiXという名前ですがPASCALユーザーだけでなく、ゲームの作りかたの入門書としてもお勧めの本だと思いました。

どうもありがとうございました〜。ふむふむ。そういう見方もあるんですね(^^;

>あとDelphiXのDirectX7版をもし作られてるならばがんばってください。

はい、頑張りたいと思います。


Hi-mi-tsu ! 投稿者:Naoki Haga  投稿日:04月19日(水)08時33分12秒

Nanda kono file ? ^^;
DXRender Software Engine no tsukau Torus de ha nai no desu ka ? @_@;
Hori-san, Source Code wo okutte kudasai !! ^^;

http://www.ingjapan.ne.jp/hori/data/980515.zip


InsideDelphiX 投稿者:RIKIMARU  投稿日:04月16日(日)17時53分40秒

InsideDelphiX遂に買いました。
ゲームをどうやって作ったら良いのかの入門的な内容はDelphiXを今から使い
はじめる人や私を含め初心者の方には、最適だと思いました。
またDelphiXのリファレンスも載ってるいるのでDelphiXを使いこなしてる人で
helpとソースだけでなく印刷されたものがほしい人にもお勧めです。
あとHelpより詳しく載ってるので買って損はないと思います。
残念だったのはDXrender.pasについて解説されているとうれしかったんですが
それは欲張りすぎですね。実はこのユニット面白そうだったので読んでみたんですが
挫折していたもので。

InsideDelphiXという名前ですがPASCALユーザーだけでなく、ゲームの作りかたの入門書としてもお勧めの本だと思いました。
素晴らしい本をありがとうございます。

あとDelphiXのDirectX7版をもし作られてるならばがんばってください。
出たらGeforce買ってしまいそうで怖いですがDirectrX7版期待しています。

http://www.ifnet.or.jp/~rikimaru/


Hori-saaaan !! 投稿者:Naoki Haga  投稿日:04月14日(金)07時08分46秒

Hori-san ! Minna ga DirectX 7.0 no DelphiX wo matte imasu yoo !! ^^;

Sono ue, "DXRender" no source code ni ha, "dxrDrawPrimitive" to iu method ga
arimasu. Nan no you desu ka ? Software Engine da to omoimasu. Dou iu tsukawaremasu
ka ? Kono Code de ha arimasen... ^^;

var TextureSurface, DestSurface: TDXR_Surface; RenderStates: TDXR_RenderStates;

dxrDefRenderStates(RenderStates);
if dxrDDSurfaceLock(Surf.ISurface, DestSurface then begin
  dxrDDSurfaceLock(TextureSurface as IDirectDrawSurface, TextureSurface);
  RenderStates.TextureList<0>.Surface:=@TextureSurface;
  dxrDrawPrimitive(DestSurface, RenderStates, DXR_PRIMITIVETYPE_TRIANGLELIST, @VertexList, 36);
  dxrDDSurfaceUnlock(SurfaceTexture as IDirectDrawSurface, TextureSurface);
  dxrDDSurfaceUnlock(Surf.ISurface, DestSurface);
end;

http://kyodai.com


シングルパス解説ありがとうございます 投稿者:take  投稿日:04月11日(火)10時20分02秒

RIKIMARU様、いつもいつもありがとうございます。
基本的なことをいろいろ教えていただき恐縮です。
いまいち、言葉の言い回しがわかりづらくて、いつも悩んでしまいます。
SDKを見ても同じような、似たような言葉が多く、悩んでいます。
今回の内容でかなり理解できました。
ありがとうございました。
もう少し頭をやわらかくして、SDK等を見たいと思います(^^;


Re:シングルパス 投稿者:RIKIMARU  投稿日:04月10日(月)23時34分15秒

テクスチャを2枚重ねたりするとき
SetTextureStage(0,Tex1);
SettextureStage(1,Tex2);
として二つのUV座標をもつ頂点を使ってDrawprimitiveをよびだせば
一度の呼び出しでTex1とTex2を重ねることができます。
一度(シングル)で描画できるのでシングルパスと言います。
SetRenderState(ALPHABLENDENABLE,1)で2度以上描画して重ねる方法を
2度以上呼び出すのでマルチパスと言います。
シングルパスをするときのブレンド方法はSettextureStageStateの
D3DTSS_COLOROPやD3DTSS_ALPHAOP,D3DTSS_COLORARG1..などで設定できます。

あと用語的に
シングルパス-マルチテクスチャと
マルチパス-シングルテクスチャ
でなく
マルチテクスチャ-シングルパスと
マルチテクスチャ-マルチパスだと思います
速度はハードの支援があれば圧倒的にシングルパスで描画したほうが速いです。
DXSDKのライトマップ当たり参考になると思います。
SDKのサンプルの方が私の解説よりはるかに分かりやすいと思います。
自信が無い解説ですが、お役に立てれば幸いです。

http://www.ifnet.or.jp/~rikimaru/


シングルパスの確認 投稿者:take  投稿日:04月10日(月)08時57分24秒

RIKIMARU様、いつもありがとうございます。
パスの設定って、
SetTextureStageState( 0,・・・・・・
等の「0」のところでしょうか?
ここで、Stage番号というか数字を変えればこれはマルチパスになるんでしょうか?
マルチパスを使用すると遅くなるのでしょうか?
シングルパス-マルチテクスチャ
と
マルチパス-シングルテクスチャ
では、どちらが速いのでしょうか?
無知で申し訳ありません。よろしくお願いいたします。


Re:シングルパス 投稿者:RIKIMARU  投稿日:04月07日(金)23時17分14秒

説明不足でした。
シングルパスはマルチテクスチャにおけるシングルパスという意味で言いました。
Geforceは確か4枚までシングルパスで描画できるんですよね。
私が使ってるビデオカードはTNTです。シングルパスで2枚まで重ねられます。
takeさんが言われてるのは恐らくダブルバッファですよね。フルスクリーンモー
ドならばFLIPは内部的には描画メモリのポインタ入れ替えみたいなものだけだと
思うので付加全くないと思います。WindowモードだとBltで転送してると思うの
でそれだけ負荷はあると思います。ダブルバッファをしなければ早くなるかもし
れませんがちらつきがでるのであまりつかえませんね。

勘違いしてる部分がありましたらご指摘お願いします。

http://www.ifnet.or.jp/~rikimaru/


フリーDelphi MPEG-4 codecはどこにありますか? 投稿者:3KJI  投稿日:04月07日(金)15時59分26秒

はじめまして,JIと申します。
フリーのDelphi MPEG-4 codecのソースコードまたは実行
ファイルを載っているWebページをご存知の方は教えて
ください。お願いいたします。


シングルパスでの描画 投稿者:take  投稿日:04月07日(金)15時23分08秒

RIKIMARU様、レスありがとうございます。
ちょっとシングルパスで気になったので...。
現在画面を切替えるとき、切替えられる古い画面と新しく表示する画面を別々でDrawPrimitive
しています。これはシングルパスではないんですよね?
この方法はやはり遅いのでしょうか?
また、これをシングルパスで表現するとしたらどのような方法があるのでしょうか?

ところで、RIKIMARU様はどのようなビデオボードをお使いでしょうか?


Re:大きいテクスチャ 投稿者:RIKIMARU  投稿日:04月07日(金)14時18分01秒

シングルパスでできるならばシングルパスで描画するといいと思います。
カクカクってのがもし早過ぎる場合WAITをいれるという方法で管理
してておこってるならば経過時間に応じて描画内容を反映させる方法を
とれば少しは、改善されるかもしれません。

余談ですが
大きいテクスチャでそんなに遅くなるってのは本当かなと思ってテスト
してみました。
いいかげんなテストですが256*256と1024*1024を 852*480にレンダリ
ングしてみました。だいたい256は1024の1.1から1.5倍ほど(いいかげん)
でした。ビデオチップにもキャッシュのようなものがあったりするんでしょうね。
でも大きいからそこまで遅くなってるかというとそうでもないような気もしますが
どうなんでしょうか?

http://www.ifnet.or.jp/~rikimaru/


大きいテクスチャ...苦しいですね 投稿者:take  投稿日:04月07日(金)09時01分39秒

RIKIMARU様、いつもレスありがとうございます。
現在大きい画面をスライドみたいな感じで切替えるものを作っているのですが、
SetTextureでテクスチャをセットしてDrawPrimitiveで描画してます。
エフェクトといってもフェードイン・アウト、ブレンドみたいな感じでアルファプレンディングしてます。
以前のi740(8MB)ではシステムメモリを使用した場合の方が表示は早く、GeForceではハードウェアを使用
した方が早かったです(まぁ当然のようですけど)。
しかしこれはテクスチャサイズが512×512程度までで、それ以上になるとi740みたいな「かくかく」
表示になってしまいます。nVIDIAのサイトなどにあるGeForceのデモなどは一見複雑ですが、
非常に滑らかに動きます(テクスチャサイズは512×512)。某MSのフライトシュミレーターなどは
ノートパソコンでもさくさく動いちゃいます。
やはりこれはテクスチャ管理の違いなんでしょうか。サイズがでかいと遅くなってしまうんでしょうね。
今後、上記の作成中のソフトには画面を飛び散らしたり、うねうねさせたりといろいろな変形を考えているのですが、
これほど絵が悪く、遅いとなると考え物のような気がします。
中途半端な画像サイズを単純計算で64×64くらいのものに分割すればほぼ近いサイズで再現できそうです。
でもこの方法って、あまり好ましくないんでしょうね。
フライトシュミレーターみたいな、背景が大きい(っていうか広い感じの)ものってどのように描写しているんでしょうね。

またまた余談ですが、現在CreativeのGeForceProを使ってますが、なんか思ったより良く無かったです。
私の知り合いなんか「G400のほうがいい」と言うくらいです。
カノープスのボードの方がいいのかなぁ(買うときはカノープスを勧められました←かなり強く)。
相変わらずの長文をお許しください。


Re:大きいテクスチャの貼り付け 投稿者:RIKIMARU  投稿日:04月07日(金)03時13分53秒

拡大縮小が伴うかぎり必ずなんらかのボケは出るのでエフェクトを工夫してなんとかするの
でしょうがエフェクトの内容が分からないのでレスができないと思います。
恐らくこれだけの情報だとtakeさんもおっしゃられてるように分割して貼りつけるとい
うレスしかできないと思います。でも それが最適かもしれません。
エフェクトの内容分かかっても私には答えられないような気はしますが、もう少し情報ある
と、どなたか優れたプログラマのレスがつくかもしれません。

予断ですがGeforceいいですね。
ただDrawAlphaはGeforceというより恐らくCPUパワーなのでシステムメモリに確保
したほうがはやくなるかもしれませがどちらにしても852*480だといくらCPU早くてもリ
アルタイムで加算合成は無理ですね。それに他の部分が遅くなって意味なくなりそうですし。
Geforceが悲鳴を上げるってのはどういう状況なんでしょうか?

レスになってなくて申し訳ありません。がんばってください。

http://www.ifnet.or.jp/~rikimaru/


大きいテクスチャの貼り付け 投稿者:take  投稿日:04月04日(火)22時47分10秒

またまた、はまりました。というか、無理難題ですが...(^^;
Direct3Dを使用してテクスチャを貼り付けてエフェクトをかけようとしているのですが、
そのテクスチャ用の画像が大きいんです。しかも半端なサイズ(852×480)なんです。
これを512×512のDIBにとりあえず貼り付け、フルスクリーンで出すと当然のことながら
画像がぼやけます。さらにこの画像の中に文字がかかれているんです。
もう字なんて読めません。
このような場合、どうしたらよろしいでしょうか?
適当なサイズに分割して貼り付ければいいのでしょうか?
テクスチャサイズを1024×1024なんかにしたときには、さすがのGeForce256も悲鳴をあげました。
また、他にいい方法はありますでしょうか?

余談ですが、Direct3Dを使わないでDrawAlpha等を使用してAlpha表示したとき、さすがのGeForceでも表示がギクシャクになりました...(^^;;むちゃですよね。


お騒がせ致しましたm(__)m 投稿者:みつまつ  投稿日:03月24日(金)19時27分46秒

自己レスです。
試しにチェックを入れていたoptionの「doFullScreen」をはずさずにコンパイルしていました。
この状態だと、パソコン環境によってはclipperが生成されないことがある・・
ということみたいでした。お騒がせ致しましたm(__)m


ふう、そうですか(^_^;) 投稿者:みつまつ  投稿日:03月24日(金)00時22分34秒

>ええ。ちゃんとでてますよ〜。kame上では何の問題もありませんでした。

ああ、ありがとうございます。スミマセン環境テストみたいなことをさせてしまって・・m(__)m
そうか、そうすると何が原因なんだろう?ちょっとゆっくり考えてみます。


RE:返答  投稿者:のぼのぼ  投稿日:03月23日(木)22時33分51秒

>のぼのぼさんの環境では、ロードされたデータが「表示」されている・・

ええ。ちゃんとでてますよ〜。
kame上では何の問題もありませんでした。


返答ありがとうございます(^.^) 投稿者:みつまつ  投稿日:03月23日(木)21時47分59秒

>長文失礼!
いつもありがとうございます、のぼのぼさんm(__)m
早速、ファイルの書き出し方変えます(^_^;)
助かります。

・・・ところで、下の僕の質問の仕方が、変なのですが、
そうすると、のぼのぼさんの環境では、ロードされたデータが「表示」されている・・
ということですよね。DXDrawのウインドウが真っ黒のままではない、ということですよね?


RE:原因は? 投稿者:のぼのぼ  投稿日:03月23日(木)21時15分54秒

ためして、セーブしたファイルをDirect3DRMViewer(DirectX7SDK付属)で
見てみたところ、ちゃんと動くフレームとは別に、
メッシュがそれぞれ存在してしまっています。

これは、僕も経験があって回避策としては、
---次のようにするのでなく-----------------------------------
Mesh Mesh1 {
 ..
}
Mesh Mesh2 {
 ..
}
Frame Parent {
 FrameTransformMatrix {..}
 {Mesh1}
 Frame Child {
  FrameTransformMatrix {..}
  {Mesh2}
 }
}
---次のようにしたら直りました-----------------------------------
Frame Parent {
 FrameTransformMatrix {..}
 Mesh Mesh1 {
  ..
 }
 Frame Child {
  FrameTransformMatrix {..}
  Mesh Mesh2 {
   ..
  }
 }
}

長文失礼!


原因は? 投稿者:みつまつ  投稿日:03月23日(木)16時32分46秒

お世話になっております。みつまつです。
のぼのぼさんやRIKIMARUさんに、当掲示板で助けていただき
不安定ながらなんとか、自分の思ったような形にしてきたのですが、

他の人の環境だと、「起動」「ロード」まではするものの、
読み込んだXファイルがDXDrawに反映されないらしい・・・という現象が出るらしいのです。
うー・・質問が抽象的ですね、スミマセンm(__)m

「初期化」のチェック項目なのか・・と考えましたが、再現出来ないので
(自分の環境だと問題が発生しないので)
差し出がましい質問ですが、思い当たるふしがおありの方、
お答え願えると幸いですm(__)m

http://member.nifty.ne.jp/Mitsumatsu/animex.htm


できましたぁーー感激です 投稿者:熊野直之  投稿日:03月16日(木)20時23分22秒

できましたぁーー!!

まじ嬉しいです!!どう表現してよいやら。
のぼのぼさんほんとにありがとうございます!

そしてこれからも勝手ながらよろしくお願いします!


Re:どうしても子フレームが...  投稿者:のぼのぼ  投稿日:03月16日(木)19時39分15秒

あ、書き方がややこしかったようです。
単にオブジェクトインスペクタで、
DXDraw1のOptionsプロパティを設定するだけです。


返答ありがとうございます。がしかし・・ 投稿者:熊野直之  投稿日:03月16日(木)19時30分11秒

早速の返答ありがとうございます。

でもうまくプログラムをかけませんでした。
よくわからなくてすいません。具体的にどのように書くのでしょうか?

いちよ 子フレームのXファイルを読み込んだあとに、

  MeshFrameMoon.AddVisual(MeshBuilderMoon);

  TDXDraw1.Options ・・・・

とつけ加え、doZBuffer を書き足したかったんですが書き方がわからなかったです。
よろしくお願いします。

http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html


Re:どうしても子フレームが... 投稿者:のぼのぼ  投稿日:03月16日(木)19時03分35秒

同様のファイルをテストしたところ、
確かに子フレームが手前にきますね。

うちでは、TDXDraw.Optionsに
「doZBuffer」を追加すると、
うまく表示されました。


はじめまして 投稿者:熊野直之  投稿日:03月16日(木)15時56分40秒

はじめまして、熊野と申します。
初心者なのですが、なにとぞよろしくお願いいたします。

基本のところなんでしょうが、はまって抜け出せません。

親フレームのまわりを子フレームがまわるプログラムなのですが、どうしても子フレームが親フレームの前に描写されてしまいます。

何が原因なのでしょうか?

実行画面とソースをHomepageにまとめてみました。

http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html

なにとぞアドバイスをよろしくお願いします。

http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html


DirectX 7 DelphiX...? 投稿者:羽賀直樹  投稿日:03月13日(月)23時50分55秒

堀さん...何時DX7.0のDelphiXがくるのですか… It's too long ;)


TAudioStream.AutoUpdate 投稿者:leesen  投稿日:03月13日(月)14時21分07秒

TAudioStream.AutoUpdate set False, Then how to fill the buffer with Update routine?


お礼 投稿者:中尾君  投稿日:03月13日(月)01時17分15秒

遅くなりましたが…、
dxinputの不具合への対応、ありがとうございました。


ありがとうございますぅぅぅ(T_T) 投稿者:みつまつ  投稿日:03月11日(土)11時10分05秒

>こんなかんじでできそうです。

ありがとうございますRIKIMARUさん!成功です(^O^)
あらためて症状の説明不足をお詫びいたします、頭の中が煮崩れていたので・・
でもバッチリでした。

そうか、やはり最初にnilを渡さなければいけないんですね。
また、よろしくお願いいたしますm(__)m


Re:SelectMeshBuilder::GetName  投稿者:RIKIMARU  投稿日:03月10日(金)23時22分44秒

どこが失敗してるのかいまいちよくわからないので
題名からGetnameで失敗してると仮定してレスをつけます。

var name:string;
    NameSize:DWORD;

SelectMeshBuilder.GetName(NameSize,nil);
SetLength(name,NameSize);
SelectMeshBuilder.GetName(NameSize,PCHAR(name));
SetLength(name,NameSize-1);

こんなかんじでできそうです。
未確認なので失敗してたらすいません。

http://www.ifnet.or.jp/~rikimaru/


SelectMeshBuilder::GetName 投稿者:みつまつ  投稿日:03月10日(金)15時55分31秒

DelphiXFAQを応用して、マウスでクリックしたメッシュの名前をラベルに表示しようと
したのですが、どうも思ったようにいきません(>_<)
何か良い方法はないでしょうか?
御教授くだされば幸いです。
よろしくお願いします。


AVIのテクスチャへの書き込み 投稿者:take  投稿日:03月04日(土)18時23分30秒

RIKIMARU様、VFWのインポートに対してご指摘いただきありがとうございました。
おかげでうまくいっているようです。
ところで、実際にAVIStreamGetFrameで取得した1画面をTextureに貼り付けるところで
つまづきました。戻り値がパックされたDIBのポインタですが、これをどのように取り込めば
いいのでしょうか?一度にばっと書き込めないものでしょうか。
藁をもつかむ思いです。
よろしくお願いします。


新作ゲームできました。 投稿者:fluit  投稿日:03月04日(土)02時13分50秒

Delphi+DelphiXを使った初めてのゲームが完成しました!
慣れないものでかなり苦労しましたけども、なんとか完成しました。
「和尚とパネル」という、アクションパズルパネルゲームです。
DelphiXのおかげで、完成することができました。
なんという、便利なコンポーネント集なのでしょう。
どうも、ありがとうございました。
よろしければ、ダウンロードして遊んでみて下さい。

http://nx.sakura.ne.jp/~fluit/


Re:VFW 投稿者:RIKIMARU  投稿日:03月04日(土)00時18分15秒

varかoutがぬけてるんじゃないでしょうか?
こんな感じで使えないでしょうか?
  procedure AVIFileInit; stdcall external 'AVIFIL32.DLL' name 'AVIFileInit';
  function AVIStreamOpenFromFile(var pavi: Pointer; szFile: PChar; fccType: DWORD; lParam: LONGINT; mode: UINT; pclsidheader: Pointer): UINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamOpenFromFile';
  function AVIStreamGetFrameOpen(pavi: Pointer; lpbiWanted: PBitmapInfoHeader): Pointer; stdcall external 'AVIFIL32.DLL' name 'AVIStreamGetFrameOpen';
  function AVIStreamInfo(pavi: Pointer; var psi: TAviStreamInfo; lSize: LONGINT): UINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamInfo';
  function AVIStreamRelease(pavi: Pointer): LONGINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamRelease';
  procedure AVIFileExit; stdcall external 'AVIFIL32.DLL' name 'AVIFileExit';
  function AVIStreamGetFrame(pget: Pointer; lPos: LONGINT): Pointer; stdcall external 'AVIFIL32.DLL' name 'AVIStreamGetFrame';

http://www.ifnet.or.jp/~rikimaru/


DirectShowの方がいいのかな... 投稿者:take  投稿日:03月03日(金)23時51分48秒

下の件で、やはりこれからはDirectShowのほうがいいのでしょうか。
MediaSDK(6.1)にはDirectDrawにDirectShowでAVI等のファイルを表示するサンプルが
ありました。DirectShowの方がいろいろつかえていいですよね...。
どなたかご存知ないでしょうか?


AVI関係のAPIインポート 投稿者:take  投稿日:03月03日(金)22時54分44秒

VFWのインポートをはじめましたが、うまくDLLとリンクできないようです。
使うDLLは「AVIFIL32.DLL」でよろしいのでしょうか?
とりあえず
IAVIStreamとIGetFrameのインターフェースを取り込み、
AVISTREAMINFO、AVIFILEINFOの構造体もいれて、

procedure AVIFileInit ; stdcall;
procedure AVIFileExit ; stdcall;
function AVIStreamOpenFromFile(ppavi:IAVIStream; szFile:LPCWSTR;
	 	         fccType:DWORD; lParam:Longint; mode:Cardinal; 
                 pclsidHandler:TCLSID):HRESULT; stdcall;
function AVIStreamGetFrameOpen(pavi:IAVIStream;
                lpbiWanted:PBitmapInfoHeader):IGETFRAME; stdcall;
function AVIStreamGetFrame(pg:IGetFrame ; lPos:Longint):Pointer; stdcall;
function AVIStreamGetFrameClose(pg:IGetFrame):HRESULT; stdcall;
function AVIStreamInfo(pavi:IAVIStream ; psi:VAVIStreamInfo;
             lSize:Longint):HRESULT; stdcall;
function AVIStreamRelease(pavi:IAVISTREAM):Longint; stdcall;
の関数を取り入れました。
AVIStreamOpenFromFileではIAviStreamはnilが帰ってきてしまい、
AVIStreamGetFrameOpenでエラーになります。
どこがいけないのでしょうか?
よろしくお願いします。


こんばんわ 投稿者:  投稿日:03月03日(金)01時16分28秒

◆ 中尾君さん

>上の現象はDelphiXのサンプルでも起こるらしいです。
>普通のdirectinputアプリは動くそうなので、DelphiXのバグだと思います。
>なお、ジョイスティックを抜いておくと起きないようです。

DXInput.pas の TCustomInput.SetDataFormat メソッドが原因でした。
TCustomInput.SetDataFormat メソッドを以下のソースへ置き換えてください。

function TCustomInput.SetDataFormat: Boolean;

  function DIEnumDeviceObjectsProc(const peff: TDIDeviceObjectInstanceA;
    pvRef: Pointer): HRESULT; stdcall;
  begin
    Result := DIENUM_CONTINUE;

    // 新しく追加化した箇所
    if CompareMem(@peff.guidType, @GUID_Unknown, SizeOf(TGUID)) then Exit;

    with TCustomInput(pvRef) do
    begin
      if peff.dwOfs<FDataFormat.dwDataSize then
      begin
        FDataFormatGUIDs[FDataFormat.dwNumObjs] := peff.guidType;

        with FDataFormatObjects[FDataFormat.dwNumObjs] do
        begin
          pguid := @FDataFormatGUIDs[FDataFormat.dwNumObjs];
          dwOfs := peff.dwOfs;
          dwType := peff.dwType;
          dwFlags := 0;
        end;
        Inc(FDataFormat.dwNumObjs);
      end;
    end;
  end;

begin
  Result := False;
  if FDevice<>nil then
  begin
    with FDataFormat do
    begin
      dwSize := SizeOf(FDataFormat);
      dwObjSize := SizeOf(TDIObjectDataFormat);
      dwNumObjs := 0;
      rgodf := @FDataFormatObjects;
    end;

    FDevice.EnumObjects(@DIEnumDeviceObjectsProc, Self, DIDFT_ALL);
    if FDevice.SetDataFormat(FDataFormat)<>DI_OK then Exit;
  end;
  Result := True;
end;

◆ aihatena さん

>dwPriority: DWORD;
>
>が抜けているようでした。以下が1つ上にずれて hrに MessageIDが。

どうもありがとうございます。次期バージョンで修正されると思います。


VFW 投稿者:RIKIMARU  投稿日:03月02日(木)23時27分05秒

VC++4.0の場合はVFW.hがついてました。
最新の6.0ではかわってるかもしれませんが
私はこれを参考にしました。
インポート方法は普通のWindowsAPIと同じです。
windows.pasをみればわかると思います。
方法のどのあたりがわからないかを書いてくれれば、もっと詳しい
方のレスが得られるかもしれません。





http://www.ifnet.or.jp/~rikimaru/


VFW 投稿者:take  投稿日:03月02日(木)19時10分42秒

AVI関係のAPIはどのライブラリからになるのでしょうか。
インポートの方法等教えていただければ幸いです。


Re:VFW 投稿者:RIKIMARU  投稿日:03月02日(木)00時13分12秒

忠実にVFWをコンバートするとなると相当大変だと思いまが
SDKについてるサンプル程度ならそんなに苦しくないと思いま
す7個程度だとおもいます。
DirectShowはまったくしりません。

http://www.ifnet.or.jp/~rikimaru/


↓で別の方法 投稿者:take  投稿日:03月01日(水)19時50分20秒

連続してずみません。
VFWを使わないでDirectShowを使う場合、DXDrawにAVIファイル内容を表示させるには
どのような方法が考えられるでしょうか。
無知で申し訳ありませんが、よろしくお願いします。


VFWについて 投稿者:take  投稿日:03月01日(水)15時21分09秒

お久しぶりです。
いよいよ動画を表示させるためVideoTextureなどを使って作ろうと思ったのですが、
DelphiにはVFWのユニットって無いですよね。
RIKIMARU様がいわれるように自分でしこしこ作るしかないんでしょうか?
ヘッダをコンバートするのに注意などありますか?


Win2000 + DirectX7 追加 投稿者:中尾君  投稿日:02月27日(日)00時27分03秒

>私が直接確認したわけではありませんが、
>Win2000でDXInput使うとdinput.dllがエラーを起こすそうです。
>Win2000RC2+DirectX7.0aでも同じ症状だそうです。
>何か対処法はありますか?
上の現象はDelphiXのサンプルでも起こるらしいです。
普通のdirectinputアプリは動くそうなので、DelphiXのバグだと思います。
なお、ジョイスティックを抜いておくと起きないようです。


追記 投稿者:aihatena  投稿日:02月26日(土)21時54分58秒

DirectXの helpとにらめっこした結果、
DirectX.pasの 9253行付近、TDPMsg_SendComplete型の宣言にて

dwPriority: DWORD;

が抜けているようでした。以下が1つ上にずれて hrに MessageIDが。


TDXPlay.OnSendCompleteについて 投稿者:aihatena  投稿日:02月26日(土)21時27分31秒

非同期送信の再送を OnSendCompleteイベントで行おうとしています。

Resultが crOK以外で、SendMessageEx()の返値を保存している listに 
MessageIDが存在すれば再送を行おうとしているのですが、ここで
必ず MessageID = 0 で Result = crGeneric になってしまいます。

DXPlay.pasの 537行付近でトラップすると Msg_SendComplete.hrの値が
直前に行った SendMessageEx()の返値と等しくなっているので
ここに本来 MessageIDである値が返っているのではないでしょうか?

とりあえず DoSendComplete(Msg_SendComplete^.dwMsgID, ... の代わりに
無理矢理 Msg_SendComplete.hrを入れて動かしています ^^;


Windows2000とDirectX7 投稿者:Haler  投稿日:02月25日(金)09時30分41秒

こんにちは。

DelphiXと直接関係無いのですが、なぜかうちの環境だと、DirectXアプリがコマ落ち
します。マシンスペックは十分だと思う(Pen3-550)し、なによりFPSが40/60になったり、
30/40になったりします。こういった現象は皆さん起きていませんか?

ちなみに、RIVA TNTです>V/B

http://www.againlab.com/


Re:Win2000 投稿者:のぼのぼ  投稿日:02月25日(金)00時14分27秒

Horiさんのサンプル、自作のソフトともに良好に動いています。
Windows2000Pro.RC2+DirectX7.0aSDK
Windows2000Pro.+DirectX7.0aSDK
キーボードでテストしました。
フォースフィードバックはデバイスがないため未確認です。

各プロパティ値は以下のとおりです。
object DXInput1: TDXInput
  Joystick.BindInputStates = True
  Joystick.Enabled = True
  Joystick.ForceFeedback = False
  Joystick.AutoCenter = True
  Joystick.ID = 0
  Keyboard.BindInputStates = True
  Keyboard.Enabled = True
  Keyboard.ForceFeedback = False
  Mouse.BindInputStates = False
  Mouse.Enabled = False
  Mouse.ForceFeedback = False
  UseDirectInput = True
end

バージョンは「DelphiX991024j」です。


Win2000 投稿者:中尾君  投稿日:02月24日(木)21時56分46秒

私が直接確認したわけではありませんが、
Win2000でDXInput使うとdinput.dllがエラーを起こすそうです。
Win2000RC2+DirectX7.0aでも同じ症状だそうです。
何か対処法はありますか?


ありがとうございますヽ(^。^)ノ 投稿者:みつまつ  投稿日:02月19日(土)01時26分28秒

ありがとうございます、のぼのぼさん!
 
>ChildWrite(txt,Frm);という関数を呼んでtxtをクローズ。

'Frm'というのは、クリエイトしたフレームのポインタということですよね。
原因が解って、晴れ晴れとした気分です(笑)
早速試して、がんばってみます。
また、質問などを書き込ませていただくと思いますが、皆さんよろしくお願いいたしますm(__)m


Re:IDirect3DRMFrame2について質問です。  投稿者:のぼのぼ  投稿日:02月18日(金)22時09分20秒

はじめまして。のぼのぼといいます。
DelphiXありがたく使わせてもらっています。

私も、フレームのセーブをしようとがんばったんですが、
どうしてもできませんでした。

エラーコードを参照して、そのエラーの意味を調べてみたら、
 D3DRMERR_NOTDONEYET 実装されていない。
でした。

長文になるので全部はひかえますが、強引な手法でフレームセーブしてます。
 Write(txt,'xof 0302txt 0064'#13#10);
 Write(txt,'Header { 1; 0; 1;}'#13#10);
というヘッダをテキストファイルの最初に出力して、
 ChildWrite(txt,Frm);
という関数を呼んでtxtをクローズ。
これで、テキスト形式のxファイルが保存できます。

ChildWriteでは、Frmの子フレームそれぞれについて、
・フレームのトランスフォーム情報。
・メッシュをテキストでセーブしたもの。
・ChildWriteを再起呼び出し。
を行った結果をテキストファイルに出力します。

http://www.kcat.zaq.ne.jp/nobonobo


IDirect3DRMFrame2について質問です。 投稿者:みつまつ  投稿日:02月18日(金)11時52分17秒

はじめて書き込みいたします、みつまつです。
DelphiXの恩恵を受けて、Directプログラミングを楽しませて頂いています。

質問なのですが、
DxdrawのD3DRMのフレームで、セーブがどうしても出来ません。

TestFrame:IDirect3DRMFrame2;
TestFrame.Save(pchar(savedialog1.filename),D3DRMXOF_TEXT,D3DRMXOFSAVE_ALL);

コンパイル、Loadして表示は出来るのですが、書き出してくれません。
Xファイルが悪いのか、設定が悪いのかと考えましたが、
MeshBuilderはセーブできますし、原因がわからず悩み果てました・・・

環境はDelphi3.1、DirectXは5と7です。よろしくお願いしますm(__)m


DirectXの有無の確認 投稿者:たけ  投稿日:02月16日(水)16時08分47秒

アプリケーション実行の際にDirectXがインストールされているかどうかを確認するには
どうしたらいいでしょうか。
通常ですとエラーが出てとまってしまいます。
基礎的な内容で申し訳ありませんがご教授ください。


Bug wa mou imasen :) 投稿者:Naoki Haga  投稿日:02月16日(水)04時56分55秒

Jibun de taoshita ze ;)
Sumimasen :)

http://kyodai.com


Re:Re: 他の音が聞こえなくなる? 投稿者:  投稿日:02月16日(水)02時22分46秒

>soExclusive := Falseでも排他レベルを設定になってしまうことは
>あるのでしょうか?

たぶん、該当するアプリが DirectSound を使用していないのだと思います。
soGlobalFoucs などのオプションは DirectSound アプリ同士でしか有効になりません。


Re: 他の音が聞こえなくなる? 投稿者:aihatena  投稿日:02月16日(水)01時19分40秒

optionのところは読んでましたです。しかし現在
「カタソを実行中」に「カタソ以外の音」が鳴らないらしいのです。
# たとえば winampで BGMを流したいのに聞こえない、など

つまり DXSound側で排他レベルを設定している? 状況でしょうか。
特定の人のみしか起こらないのでその他の要因かもしれませんし。
soExclusive := Falseでも排他レベルを設定になってしまうことは
あるのでしょうか?


DXTexture is buggy ^.^ 投稿者:Naoki Haga  投稿日:02月15日(火)03時02分01秒

Yatto Z-Buffer no bug wa DXTexture ni utsusu koto ga dekimashita !
Hajime ni, DXDraw.Options := DXDraw.Options + [doZBuffer];
Soshite, "tlv[j].sz := 0" wo "tlv[j].sz := 0.1" ni henjite kudasai.
Texture wa mou arawaremasen !! Mondai wa "sz" ni arimasu. Zero de wa nai to,
nanimo ga hyouji saremasen.
(Mochiron, G400 no 5.25.* drivers ya i740 no drivers o tsukawanakereba narimasen)
Mou hitotsu, watashi no nihongo sumimasen !! ^^;;;

http://kyodai.com


Z-Buffer (addition) 投稿者:Naoki Haga  投稿日:02月15日(火)00時00分19秒

Wasurete shimaimashita ^^;
Ano G400 no mondai wa, saikin no drivers ni okotte imasen. Original drivers o tsukatte kudasai (5.25.* no drivers to ieba mondai ga arimasu)
i740 ni tsuite wa, subete no driver versions ni okotte imasu.

http://kyodai.com


Z-Buffer 投稿者:Naoki Haga  投稿日:02月14日(月)22時20分58秒

Hori-san,
Watashi ni henji o okutte arigatou. :)
Program ni tsuite wa, ano tokoro ni arimasu.
http://perso.club-internet.fr/naoki/kyodai.exe
(3,5mb, sumimasen ^^;)
Source Code wa totemo taisetsu/himitsu (^^;) no de kono File ni fukumaremasen desukedo.
Anata no DXTexture Sample wa kekkou desu ga, TLVERTEX o tsukatte imasu. Tada no VERTEX o tsukau toki ni, Z-Buffer no mondai ga arawaremasu.
D3DFVF_VERTEX o tsukau gutairei ga mitsukatte imasu ka ? Areba, anata ga watashi ni okuru koto wa dekimasu ka ?

Watashi no nihongo o mou hitotsu gomen nasai ^^; (anata no eigo wa motto ii da to omoimasu ! @_@;)

PS : kanji de kaku no wa daijoubu desu. Kanji ga yomeru Software ga motte imasu ^^;

http://kyodai.com


ViewoTexture 投稿者:take  投稿日:02月14日(月)09時43分24秒

RIKIMARUさん、堀さんありがとうございます。
DelphiXでも手法があるわけですから、試してみる価値はあるわけですよね。
しかし、知識が乏しいのでやはりこれもいろいろ学習してからトライしたいと思います。
IMについてはあーるさんのHPなどを見て勉強していますが、それより先に進めません。
RIKIMARUさんが以前より推奨している参考書などをバリット読まないとだめでしょうか。
最近脳を使っていないため、厳しいです。活性化しないと...(^^;


RE: Direct3D IM 投稿者:  投稿日:02月13日(日)23時23分38秒

Naoki Haga san he

Watashi mo G400 wo tukatte imasu ga Z-Buffer wo tukatte mo Full Scene ga
hyouji saremasu.

Haga san no program wo watasi he mail de okutte kurenaidesyouka? Mosikasitara
nanika wakaru kamo siremasen.


レス〜 投稿者:  投稿日:02月13日(日)23時22分08秒

◆ RIKIMARU さん

>あと私はなくしてしまって調べられないのですがTdirect3DTexture2にViewoTextureというか
>そんな感じのメソッドがあったような気がしますがあれはどうなんでしょうか?未実装かまったく
>用途が違いますでしょうか?

これは仰るとおり、テクスチャの内容を自分で書き込みたいときに使うテクスチャを
作成するためのメソッドです。 

◆ aihatena さん

>ゲーム起動中に他のアプリケーションで音が鳴らなくなることがあるようです。
>(自分の開発環境、2,3人以外では正しく鳴っている)

soGlobalFocus は常に音を鳴らせるわけでもなく制約があります。DelphiX の
ヘルプの TDXSound→Options の説明を参照して下さい。これではないでしょうか?

◆ fluit さん

>Delphi+DelphiXを使っての初めてのソフトが完成しました。
>「我慢デモ」です。デモなんですけども。

早速拝見させて頂きました。これは見続けると目がおかしくなっちゃいそうですね(^^;


Re動画 投稿者:RIKIMARU  投稿日:02月11日(金)00時38分06秒

試してないのではっきりしたことはいえませんが不可能でないとおもいます。
SDKのサンプルを少し見てみましたが、ロックしてテクスチャに書きこんでるだけだと
思います。ただAVIのピクセル情報をVFWで取得してるので これらのヘッダの必要な
部分を、自分で定義しないといけないと思います。インターネットなどで探せばありそうで
すが私はさがしてないのでわかりません。まぁ一部分だしそんなに手間かからないと思います。
あと私はなくしてしまって調べられないのですがTdirect3DTexture2にViewoTextureというか
そんな感じのメソッドがあったような気がしますがあれはどうなんでしょうか?未実装かまったく
用途が違いますでしょうか?
以上推測で書いた上に質問で終わってすいません。

http://www.ifnet.or.jp/^rikimaru/


他の音が聞こえなくなる? 投稿者:aihatena  投稿日:02月10日(木)15時16分40秒

ゲームの効果音として TDXSoundと TDXWaveListを使っています。

window表示のゲームなので、Focusが無くても音が聞こえるように
optionsを  soGlobalFocus := True
           soStickyFocus := False
           soExclusive   := False にしているのですが
ゲーム起動中に他のアプリケーションで音が鳴らなくなることがあるようです。
(自分の開発環境、2,3人以外では正しく鳴っている)

まだ鳴らなくなる人の動作環境をまとめてないので原因が特定できないのですが
同じような状況になったことがある方はいらっしゃいませんか?


# カタンの開拓をネットワーク対戦できるようにした「カタソ」
# DelphiX のおかげでなんとか公開することができました :D

http://www.page.sannet.ne.jp/aihatena/


続・動画の描画 投稿者:take  投稿日:02月10日(木)14時47分02秒

RIKIMARU様、いつもありがとうございます。
DirectX7SDKのDirect3D_IMにAVIをテクスチャにしてCubeに表示しているものがありますが、
この要領でやればうまくできそうですが、さっぱりわかりません。
現状のDelphiXでは不可能なのでしょうか?


Direct3D IM 投稿者:Naoki Haga  投稿日:02月10日(木)03時10分12秒

Hajimemashite. Sumimasen ga, watashi no nihongo wa totemo heta desu ne ^^; (Furansujin desu kara ^^;) Shikashi, yomeru no wa kekkou desu.Nihongo de no henji o shite kudasai. DXTexture example ni yotte, DelphiX de Direct3D IM app o tsukutte mimasu ga, mondai ga arimasu. Z-Buffer ga nakattara, Full Scene ga miemasu kedo, Z-Buffer o juritsu shitara, Screen de wa nanimo ga mienakute shimaimasu (tada DirectDraw de egaita Background ga miemasu). Ano mondai wa Matrox G400 ya Intel i740 dake de okottemasu. TNT2 de wa daijoubu desu ne. Zenzen wakarimasen ^^; Tasukete kudasai ^^;


Re動画の描画 投稿者:RIKIMARU  投稿日:02月10日(木)02時00分49秒

DelphiXでキャプチャーボードにアクセスしてキャプチャーしてそれを表示
させる方法は、私にはさっぱりわかりません。
キャプチャーカードのメーカーが提供してるSDKとかDirectX MediaSDkとかを調べれば
わかるかもしれません。
既にAVIファイルがあってただそれを表示したいだけならTDXDrawはTWinControlを継承
してるのでTMediaPlayerとリンクさせてやれば表示できます。
以上ごみレスでした。

http://www.ifnet.or.jp/~rikimaru/


動画の描画 投稿者:take  投稿日:02月09日(水)13時25分24秒

めちゃくちゃ野暮な質問ですが、DelphiXでキャプチャーボードなどからキャプチャー下した動画またはAVIファイルを表示することってできますか?できたらうれしいんですけど...。


Re:参考書 投稿者:RIKIMARU  投稿日:02月07日(月)23時39分12秒

PASCLAでDirectXをはじめるにあたって参考になるものとして
ここに来てる人なら知ってる人が多いと思いますが
SANDMAN氏(http://www.din.or.jp/~hayase/)が作
られたDirectXコンポーネントのHELPも役に立つと思います。
DelphiXと関係なくて申し訳ありません。

http://www.ifnet.or.jp/~rikimaru/


立方体の表示 投稿者:宇治 節  投稿日:02月07日(月)14時56分41秒

RIKIMARU様、レス有り難うございます。
>プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるようになると
宇治です。
>思います。内容的にも非常にわかりやすく書かれててあると思います。
>RMがそのほとんどを占めますが IMの基本も書かれています。

了解しました。一度参考にさせていただきます。
有り難うございます。

http://member.nifty.ne.jp/jishukan


立方体の表示 投稿者:宇治 節  投稿日:02月07日(月)14時55分32秒

RIKIMARU様、レス有り難うございます。
>プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるようになると
>思います。内容的にも非常にわかりやすく書かれててあると思います。
>RMがそのほとんどを占めますが IMの基本も書かれています。

了解しました。一度参考にさせていただきます。
有り難うございます。

http://member.nifty.ne.jp/jishukan


はじめてのソフト 投稿者:fluit  投稿日:02月07日(月)00時55分09秒

Delphi+DelphiXを使っての初めてのソフトが完成しました。
「我慢デモ」です。デモなんですけども。
DelphiX、なんとか画面表示の仕方は少しわかりました。
次は、ゲーム作りに挑戦したいと思います。

http://nx.sakura.ne.jp/~fluit/


立方体の選択 投稿者:RIKIMARU  投稿日:02月04日(金)15時35分31秒

プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるように
なると思います。内容的にも非常にわかりやすく書かれててあると思います。
RMがそのほとんどを占めますが IMの基本も書かれています。
立方体の選択はRMを使っておられるようなので堀氏が書かれたFAQを参考にされてはいか
がでしょうか?
http://www.ingjapan.ne.jp/hori/DelphiXFAQ.html

http://www.ifnet.or.jp/~rikimaru/


Re:立方体の描画  投稿者:宇治 節  投稿日:02月04日(金)13時28分34秒

RIKIMARU様、レス有り難うございます。宇治です。
>清水亮著 のDirect3Dプログラミングガイドブックがお勧めです
これはひょっとしてC言語用ではありませんか。初心者にも分かるでしょうか

>これを読めば立方体を表示するなんてことは、あっというまにできてしまいます。
一応、立方体の表示と、回転は、堀さんのsampleソースを参考にして、出来るように
なりました。有り難うございます。

但し、以前のupで書いた2番の「画面をクリックしたときに、どの立方体が
選ばれたかを知る方法」が全く分かりません。そのあたり分かりましたら
お教え下さい。

http://member.nifty.ne.jp/jishukan


Alpha表示について 投稿者:take  投稿日:02月03日(木)12時00分40秒

RIKIMARUさま、いろいろありがとうございます。
Canvas文字については、Surfaceに描画後Flipしています。これが最適ですね。
Direct3Dの使用ですが、いままでDirectDrawのSurfaceしか使っていなかったので、
結構異なるので苦しんでいます。とりあえずもう少し学習しようと思います。
いづれにしても、Direct3Dのサンプルをフルスクリーンで動かしてみましたが、
現在のビデオボードではカクカク表示です。
ボードの性能の低さもあるようです。


Re:Tdirect3Dtexture2 投稿者:RIKIMARU  投稿日:02月03日(木)05時48分30秒

Tdirect3DTexture2を紛失してしまったので もし可能ならもう一度配布してもらえないでしょうか?
無理なお願いかもしれませんが御ひまが取れましたらよろしくお願いします。

http://www.ifnet.or.jp/~rikimaru/


Re:立方体の描画 投稿者:RIKIMARU  投稿日:02月02日(水)23時45分35秒

立方体の描画ですが 3Dを今からはじめられるようなので
まずはDirect3DのRMから はじめられてはいかがでしょうか
清水亮著 のDirect3Dプログラミングガイドブックがお勧めです
これを読めば立方体を表示するなんてことは、あっというまにできてしまいます。
RMでクリックした物体をしらべるRayPickという便利な関数もあります。
マウスに合わせては どうあわせるかがわからないとなんともいえないと思います。
右に移動させると右に回転とか。


Canvasに文字をかいてスクロールさせるならば毎回Canvasを使って描かずに一度サーフェイスに
描いてそれをDrawしたほうが早いと思います。すでにされてたり用途が違ってたらごめんなさい。
Intel740はよくわかりませんがやはりAlphaはDirect3Dを使うべきだと思います。
3Dといっても2Dが用途だから、テクスチャもDelphiXが面倒みてくれますし、
DrawAlpha がDrawPrimitiveにかわるだけなので簡単ですよ。



http://www.ifnet.or.jp/~rikimaru/


Re:DirectPlay お礼 投稿者:take  投稿日:02月02日(水)09時59分40秒

RIKIMARU様、お礼の返事が遅くなり申し訳ありませんでした。
基本的にDirectPlayについて勉強不足なので、今一度勉強しアドバイスを元にいろいろ試して
見たいと思います。
ありがとうございました。

ちょっと質問ですが、DirectDrawでいろいろDrawAlphaなどでエフェクトをかけて
大き目の画像(800x600x16以上)を描画し、そこにCanvasに文字をスクロールしながら
表示をすると今にもとまりそうになります。
やはりこれはグラフィックボードの性能にもよるのでしょうか?
ちなみに現在Intel740の8MBです(うう、非力)。
これでFullScreenにしたら...(ToT)


ありがとうございました 投稿者:芭蕉  投稿日:02月01日(火)23時46分17秒

RIKIMARU様、堀様。
お礼の言葉が遅れて申し訳ありません。
RIKIMARU様のアドバイスも役に立ち、
3Dも頑張ろうかと考えている次第であります。
本当にありがとうございました。

堀様のおかげで、問題も解決できました。

私もまだまだ精進が至りませんので、
よろしければ皆々様。
此れからもよろしくお願いします。


立方体の描画 投稿者:宇治 節  投稿日:02月01日(火)14時16分05秒

いつもDelphiXに感動しています。宇治と言います。
 
始めてUPさせていただきます。
立方体を使ったゲームを考えています。
初歩的な質問で済みませんが、お教えいただきますでしょうか。

1.一つの立方体を、x(縦)、y(横)、z(高さ)の三次元に積んで
  表示する方法を教えて下さい。
2.上記のものの一番上(z方面)から任意に一つ取り出す
  方法。つまり画面をクリックしたときに、どの立方体が
  選ばれたかを知る方法
3.上記で選んだ立方体を、マウスの移動に合わせて
  移動させる方法
4.それを、(x,yの2次元平面)に置いていく方法を教えて下さい。
 
すべてでなくても、上記のいずれかでも教えていただけますでしょうか。

http://member.nifty.ne.jp/jishukan


レス 投稿者:  投稿日:01月30日(日)15時34分23秒

◆ あかねファンさん

>3.TDXImageList では、 TDXDrawSurface以外のサーフェスに
>(たとえば TBitmap.Canvasなど)に描画することはできないの
>ですか? あと、TDXImageList.DXDraw は『サーフェスの管理も
>します』とありますが、サーフェスの設定をしなかった場合、
>具体的にどんな問題が起こりますか?(たとえば、表示速度が落ちるなど)

TBitmap.Canvas などに描写したい場合、TDXImageList.Items[x].Picture プロパティを
使って描写してみてはどうでしょうか?

あとサーフェィスの設定をしなかった場合は、Draw メソッドなどの TDirectDrawSurface を
対象にして描写するメソッドなどが全て使えなくなります。

◆ 芭蕉さん

>その後でDXDraw.Initialize;を致しますとやっとの事で初期化出来るのですが、
>先ほど記しましたように、画面がバチンと音を立て、切り替わるのでございます。

Initialize メソッドではなく、Restore メソッドではどうでしょうか?
パレットを変更したときに色化けしないようにするには Restore メソッドを
呼び出すことで解決出来ると思います。


DirectPlayにおける複数セッション 投稿者:HIRO  投稿日:01月30日(日)00時11分53秒

えるさん、早いレスポンスありがとうございます。

TCXPlayでは複数セッションを作成することができないんですね。
えるさんの言うように、DirectPlayコンポーネント自作、もしくは
直接IDirectPlayを利用してみようと思います。


DirectPlayにおける複数セッション 投稿者:える  投稿日:01月29日(土)22時24分03秒

TDXPlay では複数のセッションやプレイヤーはサポートされていないのでダメです。

手元に、セッション/ロビーセッション/プレイヤーの制御を加えたものがあるんで
すが、現在 DirectPlay を使わず TCP/IP を普通に利用するようになったので、ま
ともに公開できる以前の形で止まっていたりします (^^;

本人に需要がないのでこれは当面完成しないでしょう (^^;
TDXPlay の構造的に TDXPlay を利用してロビー/セッション/プレイヤーを制御す
るのはかなり無理がありますので、DelphiX の DirectX Unit を利用した Direct
Play コンポーネントを自作するか、直接 IDirectPlay を利用することになると
思います。

コンポーネントを開発するに当たっては DXPlay Unit のコードが充分参考になる
でしょうから、かなり楽なんではないでしょうか。


DirectPlayにおける複数セッション 投稿者:HIRO  投稿日:01月29日(土)11時36分46秒

はじめまして、HIROといいます。
DelphiXをありがたく使わせてもらっています。
Inside DelphiXも買いました。(^^)

質問なのですが、DelphiXのDXPlayではひとつのアプリで複数のセッションは作れるのでしょうか?
例えば、プレイヤーが自由にセッションを作れるディアブロのチャットのようにしたいです。
DelphiX付属の「Chat」、「Chat2」のサンプルを見た限りでは、セッションをひとつしか作成することができないようでが・・・。
教えてください、お願いします。m(__)m


Re:DirectPlay 投稿者:RIKIMARU  投稿日:01月29日(土)00時11分02秒

IdirectPlay4なのでDirect6以降だと思います。
サンプルを見る限り任意のデータが送れるように見れます。
構造体の最初のメンバをDWORDのメッセージのタイプを表すものにして
あとのメンバは自由に取れると思います。

画像のような大きいデータを送るなら圧縮したりデータを分割したり
リアルタイムなら 非同期でデータの保証なしで受けて側でデータを補間したり。
差分データだけ送るとか。動画の圧縮など私には手が出せない分野です。
堀氏のTMPEGEncすごいですよね。
このように私には、難しい問題がたくさん有りまたもや レスになっていないのですが
何から手をつければいいのかもし分かってなかったら少しは手がかりになるかもしれないと
思い書きこみました。

http://www.ifnet.or.jp/~rikimaru/


DirectPlay 投稿者:take  投稿日:01月27日(木)14時36分31秒

素朴な質問ですが、DelphiXのDirectPlayはDirectX6(7)に対応しているのでしょうか?
現在リモートマシンにメインマシンの画像をフルスクリーンで表示しようと思っているのですが、SampleにあるChatを見る限り、テキストしかだめなような感じですが...。
よい方法があったら教えてください。


Re+:マッピングについて 投稿者:Magami  投稿日:01月26日(水)15時55分37秒

 ビデオはSPECTRA7400なのですが、ドライバを入れなおしてもやはり、ダメです。
 3DMARK2000などの、3Dプログラムは正常に動いています。

 Delphi5またはDelphiXのインストールミスでしょうか。
 Delphi5のインストーラ変でしたし。

 もう少し調べてみます。


(無題) 投稿者:RIKIMARU  投稿日:01月25日(火)23時56分37秒

芭蕉さん 
すでに試されてたんですね。お役にたてなくて申し訳ありません。

TbitmapのCanvasにはTDXImageListのTPictureで描画できるとおもいます。
色混ぜ描画は,恐らく256色の方法を質問されてると思うのですがもし256色以外なら DrawAdd、DrawSub,DrawAlphaなどで実現できないでしょうか?
方法は変わりますが色混ぜ描画は Direct3Dを使うと高速です。

解決がないレスですがなにかのお役に立てれば幸いです

http://www.ifnet.or.jp/~rikimaru/


質問その2です。 投稿者:あかねファン  投稿日:01月25日(火)20時22分15秒

前回は質問にお答えいただきありがとうございました。
今度は質問その2です。

3.TDXImageList では、 TDXDrawSurface以外のサーフェスに
(たとえば TBitmap.Canvasなど)に描画することはできないの
ですか? あと、TDXImageList.DXDraw は『サーフェスの管理も
します』とありますが、サーフェスの設定をしなかった場合、
具体的にどんな問題が起こりますか?(たとえば、表示速度が落ちるなど)

4.TDXImageList では、TImageListのような色混ぜ描画
(DrawingStyle と BlendColor を使う)はできないのですか?

そういえば、Surface.Canvas に描画した後は、アンロック
(Release)するまでは DXImageListなどで Surface
に描画することができないようです。バグかと思いました(^^;;;)

結局、TDXImageList.Items.Picture を直接いじくるようにして
問題2は回避しました。

http://member.nifty.ne.jp/AKANEfan/


Re:ヘルプも試したのですが 投稿者:芭蕉  投稿日:01月25日(火)11時42分19秒

ヘルプも拝見させていただきました。
しかし、駄目なのでございます。
メイクパレットでパレットを作成し、
アップデートしましても変わらないのでございます。
その後でDXDraw.Initialize;を致しますとやっとの事で初期化出来るのですが、
先ほど記しましたように、画面がバチンと音を立て、切り替わるのでございます。
Inside DelphiXも購入し、何かないかと手探りで探したのですが、
いかんせん小生の技術不足で、解決策が見つけられないのでございます。
そこで、迷惑とは思いますが、どなたかの御知恵を拝借しようと参ったわけでございます。
最後に本当に拙い文章で申し訳ありません。
どうぞ宜しくお願いいたします。


Re:パレット 投稿者:RIKIMARU  投稿日:01月25日(火)02時07分56秒

ヘルプに書いてある方法は試されましたでしょうか?

http://www.ifnet.or.jp/~rikimaru/


教えてくださいませ 投稿者:芭蕉  投稿日:01月24日(月)23時15分53秒

はじめまして
小生は芭蕉と申します。
さて、急に筆を取りましたのは、
大兄達に教えて戴きたいことがあってでございます。
まず始めに小生は、TDXImageListを一つだけ貼り付けて、
そこにプログラムを起動してから、 X.DXGを読み込み、
その X.DXGを使い終わったあとにY.DXGを読み込もうと考えたのですが、
パレットが上手く初期化できません。
 DXDraw.Initialize;と書きこめばパレットも初期化できるのですが、
画面がバチンと音を立て、切り替わるのが何とも嫌なのです。
どうかどなたか知恵を御貸し戴けないでしょうか。
重ね重ね不躾ではありますが、
最後に長々と駄文を書いたことをお許しくださいまし。


RE:マッピングについて 投稿者:  投稿日:01月24日(月)16時01分30秒

> Inside DelphiXに添付されているサンプル Wrap が、正常にレダリングされません。
>というか、D3Dはすべて正常にレダリングされません。

 症状を見る限り、ビデオドライバのバグのように思えます。特にZバッファ無しで
レンダリング出来ないというのは妖しいです。


マッピングについて 投稿者:Magami  投稿日:01月20日(木)02時41分35秒

 先日から、DelphiXを導入させていただいたのですが、
ポリゴンにCreateWrapメソッドでマッピング出来ないのです。

 Inside DelphiXに添付されているサンプル Wrap が、正常にレダリングされません。
というか、D3Dはすべて正常にレダリングされません。

 どうやら、プロパティエディータでDXDrawのZBUFFREをTrueに設定すると、レダリング
され、SystemMemoryをTrueに設定すると、ソフトウエアでマッピングされます。

 開発環境にはDirectX7がインストールされビデオドライバは最新版を入れています。


RE:Canvas 投稿者:  投稿日:01月19日(水)13時51分39秒

あかねファンさん、こんにちは。堀です。

>1.DirectDrawサーフェスのCanvasでは、65536色モードでも
> アンチエリアシングのかかった綺麗な文字は表示できないのですか?

アンチエリシングがかかるというのは、画面のプロパティの効果タブの
「スクリーンフォントの縁を滑らかにする」を有効にすることで得られる物ですよね。

DirectDrawのCanvasではアンチエリシング効果は有効にならないようです。
元々テキスト描写でアンチエリシングされないのが普通なので仕方ないのかもしれません。

>2.TDXImageListでは通常、全コマいっぺんに取り込みますが、
> TImageListのように Add,AddMaskedを使ってひとコマずつ
> 取り込むことはできないのですか?

これは出来ません。

>3.表示にDirectDrawを使う場合、作業用画像バッファには TBitmap より
> TDirectDrawSurface(もしくはTDIB)を使ったほうが良いでしょうか?

これは場合によると思います。私は速度が出るかどうかで TBitmap, TDIB または
TDirectDrawSurface と使い分けています。

>Inside DelphiX のCDのセットアッププログラムでもコンパイル中に
>応答無しになります(笑)。例によって手動でインストールしました
>が、今回はヘルプが統合されて非常に使いやすいです。

DelphiXの付属のツールでコンパイル&登録しようとした場合、
フリーズしてしまうことがあるみたいです。原因が分かれば
修正したいのですが…


Canvas 投稿者:あかねファン  投稿日:01月15日(土)13時08分29秒

私の作ったプログラムの中で一番重かったRPGプログラム(製作中)に、
DelphiXを使うように手を入れているのですが、VCL,GDIでできてDirectX,
DelphiXにできない? ことがあるのです。

1.DirectDrawサーフェスのCanvasでは、65536色モードでも
 アンチエリアシングのかかった綺麗な文字は表示できないのですか?
2.TDXImageListでは通常、全コマいっぺんに取り込みますが、
 TImageListのように Add,AddMaskedを使ってひとコマずつ
 取り込むことはできないのですか?
3.表示にDirectDrawを使う場合、作業用画像バッファには TBitmap より
 TDirectDrawSurface(もしくはTDIB)を使ったほうが良いでしょうか?

Inside DelphiX のCDのセットアッププログラムでもコンパイル中に
応答無しになります(笑)。例によって手動でインストールしました
が、今回はヘルプが統合されて非常に使いやすいです。

http://member.nifty.ne.jp/AKANEfan/


RE:DirectX5には対応しない? 投稿者:  投稿日:01月13日(木)09時41分57秒

毘政さん、こんにちは。堀です。

>いまさら無理かもしれませんが、DirectX5には対応するつもりはありませんか?

いまとなっては DirectX5 対応はちょっと無理ですので、お使いのマシンに
DirectX6(今はDirectX7) を入れていただくのは無理でしょうか?

>また、そういう要望はありませんか?

DirectX7対応の要望はかなり来ていますが、旧バージョンの DirectX 対応の要望は
あまり来ていません。


DirectX5には対応しない? 投稿者:毘政  投稿日:01月10日(月)16時37分32秒

初めまして、毘政と申します。

DirectXが使えると思って、喜んで勝ったのですが、使えるDirectXが
バージョン6からとのことで、ちょっとがっくりの毘政です。

いまさら無理かもしれませんが、DirectX5には対応するつもりはありませんか?
また、そういう要望はありませんか?
(Win98のをデフォルトで入れると、DirectX5ですよね。)

以上


Re^2:GlobalFree 投稿者:  投稿日:01月07日(金)01時42分03秒

>APIのヘルプに下記のようにあるのでnilチエックは、
>自前でやらないといけないのではないでしょうか?

ヘルプファイルにちゃんと書かれていたのですね。次期バージョンで
修正します。どうもありがとうございます。


Re:GlobalFree 投稿者:RIKIMARU  投稿日:01月06日(木)01時53分55秒

早速のレスありがとうございます。
遅れましたが、明けましておめでとうございます。
LoadRLE4 LoadRLE8を修正してみましたが
やはりnilが渡されたときアクセス違反がおこります。
APIのヘルプに下記のようにあるのでnilチエックは、
自前でやらないといけないのではないでしょうか?
If the hgblMem parameter is NULL, GlobalFree
fails and the system generates an access v-
iolation exception.
APIをほとんどつかうことがなくメモリハンドルなど
の知識が乏しいので勘違いしてたらご指摘お願いします。 

http://www.ifnet.or.jp/~rikimaru/


(無題) 投稿者:SHIN  投稿日:01月04日(火)03時01分56秒

Motion Jpegで圧縮されたAVIファイルの変換を行うと映像飛びが起こってしまいます。
どうすればいいでしょうか・・・


謹賀新年 投稿者:  投稿日:01月02日(日)01時25分03秒

明けましておめでとうございます。
今年もよろしくお願いいたします。

◆ RIKIMARU さん

>にしないとGrobalFreeにnilを渡すとシステムアクセス違反を起こすので
>FEmptyDIBImage.Freeの時例外がおこります。
>ただ今まで起こってなかったので他のところに原因があったり何かの勘違いだったら
>すいません.

GlobalFree 自体は nil チェックを行っていると思いますのでそれが原因ではないと思います。
DIB ユニットの TDIBSharedImage.ReadData 関数内の LoadRLE4, LoadRLE8 関数で
GlobalAlloc せずに GetMem しているバグがありますのでそれが原因かも知れません。

お手数をお掛けしますが、以下のソースへ置き換えて下さい。>みなさん

  procedure LoadRLE4;
  begin
    FSize := BI.biSizeImage;
    FPBits := GlobalAllocPtr(GMEM_FIXED, FSize);
    FBitmapInfo.bmiHeader.biSizeImage := FSize;
    Stream.ReadBuffer(FPBits^, FSize);
  end;

  procedure LoadRLE8;
  begin
    FSize := BI.biSizeImage;
    FPBits := GlobalAllocPtr(GMEM_FIXED, FSize);
    FBitmapInfo.bmiHeader.biSizeImage := FSize;
    Stream.ReadBuffer(FPBits^, FSize);
  end;

◆ えるさん

>今年は TOP PAGE で「あけまして」してないんですね (^^;
>変更履歴にコソっと書いてあるだけだった。

今年もやろうかと思ったのですが、時間がなくてなくて(^^;

◆ 木村功さん

>(キャンバスに描画)−>(画面に転送)
>の手順を、単純に DirectX に置き換えると、場合によっては遅くなるというのは驚きでした。

そうなんです。DirectX でキャンバスを使用する場合、普通にキャンバスを使う場合にくらべて
ロック-アンロックの作業が必要になってしまいその分遅くなってしまいます。

もし、キャンバスに TBitmap を描写しているのであればそこの部分をTDXImageList 
コンポーネントを使って描写するように変更してみてはどうでしょうか?

ビデオカードが高速ならば大幅な速度アップが見込めると思います。

>あと、ぼくのゲームでは、MIDI音楽とWaveサウンドが鳴っているのですが、
>DelphiX を使うと、Waveサウンドが、こもったような音になるんです。
>これは、どうしてでしょうか。
>ヘルプに、「TDXSound の再生品質を設定する」という項目がありますが、
>これが関係してるのでしょうか。

TDXSound はデフォルトで音質が低くなっていますのでそのせいかもしれませんね。
ヘルプに書かれている通りに再生品質を設定してみてはどうでしょうか。


絵飛び音飛び 投稿者:ozwing  投稿日:01月01日(土)23時19分14秒

 PCのパワー不足とか?
 元のAVIと作ったMPEG2を見て貰うのが一番では?

 リンクが切れてるというか、現状だとmoemoe.gr.jpのサーバが死んでるような気がします。
 昨夜から昼に掛けて、www.moemoe.gr.jp自体にはアクセス出来ましたが、cgi処理は死んでいました。
 現在では、サーバ自体にもアクセス出来なくなってます。


つけたし 投稿者:junn  投稿日:01月01日(土)05時48分53秒

TMPGEncの掲示板のリンクが切れているみたいだったのでこちらに書かせて
もらいました。


教えてほしいのですが 投稿者:junn  投稿日:01月01日(土)05時46分25秒

TMPGEncを使ってAVIからMPEG2に変換したのですが映像も音も激しく飛んでしまうのですが...
いろいろ試したつもりなんですが直ってくれません。
この解決法を教えていただきたいと思っています。
教えてください。お願いします。


GlobalFreeでアクセス違反? 投稿者:RIKIMARU  投稿日:01月01日(土)02時03分33秒

久しぶりにTDXImageListを使うと終了時に例外が発生するので
たどってみると
destructor TDIBSharedImage.Destroy;で
GlobalFree(THandle(FPBits))の所を
if Assigned(FPBits) then  
    GlobalFree(THandle(FPBits))
にしないとGrobalFreeにnilを渡すとシステムアクセス違反を起こすので
FEmptyDIBImage.Freeの時例外がおこります。
ただ今まで起こってなかったので他のところに原因があったり何かの勘違いだったら
すいません.

http://www.ifnet.or.jp/~rikimaru/


あけまして(GOMI) 投稿者:える  投稿日:01月01日(土)01時54分06秒

今年は TOP PAGE で「あけまして」してないんですね (^^;
変更履歴にコソっと書いてあるだけだった。


使用感等 投稿者:木村功  投稿日:12月30日(木)17時31分45秒

はじめまして。木村と申します。
最近、書籍の "Inside DelphiX" を購入しまして、第2章しか読んでいないのですが、
大変便利に使わせて頂いてます。
DelphiX の書籍が出たことで、初めてDirectX を使いました。

使用感の報告等したいと思います。

ぼくの作っているソフトウェアは2D系のゲームなんですが、
DirectX さえ使えば、描画が速くなるというような印象があったのですが、
場合によっては、DirectX を使った方が遅くなる時もあり、認識を改めました。

DXDraw1.Flip;
(画面に転送)は、速くて、

with DXDraw1.Surface.Canvas do
begin
.......
end;
(キャンバスに描画)が遅いということに気付いて、
キャンバスへの描画を、工夫してなるべく少なくすることで満足な速度を得られました。
その「速度」は、CPU200MHz + メモリー48M のぼくのマシンでは、
「1秒間に30回画面書き換え」程度です。最近のゲーム機の半分程度の速度は出ている
計算になります。

(キャンバスに描画)−>(画面に転送)
の手順を、単純に DirectX に置き換えると、場合によっては遅くなるというのは驚きでした。

あと、ぼくのゲームでは、MIDI音楽とWaveサウンドが鳴っているのですが、
DelphiX を使うと、Waveサウンドが、こもったような音になるんです。
これは、どうしてでしょうか。
ヘルプに、「TDXSound の再生品質を設定する」という項目がありますが、
これが関係してるのでしょうか。

それでは、この辺で。
乱文失礼しました。


できました 投稿者:Haler  投稿日:12月19日(日)09時18分08秒

無事IPの取得ができました。
ありがとうございます。


マルチレス 投稿者:  投稿日:12月17日(金)06時58分43秒

◆ Haler さん

>TDXPlayで通信対応ソフトを作ろうと思っています。相手にIPを教えるため、自分のIPを
>ソフトで表示できるようにしたいのですが、どうやって得ればよいのでしょうか?

WinSock の GetHostName 関数でマシンの名前を取得し、それから GetHostbyName 関数で
取得した名前をIPアドレスに変換することで出来ます。

私が使用している自作のユニットを以下にアップしました。

http://www.ingjapan.ne.jp/hori/data/SockUtl.zip

サンプルは以下の通りです。

uses SockUtl;
procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := IPToString(HostNameToIP(GetLocalHostName));
end;

◆ ぽくむらさん

>「Inside DelphiX」って、具体的にどのようなことが
>かかれているんでしょうか?知ってる方は教えてください。

とりあえず目次は以下のようになっています。

http://www.shuwasystem.co.jp/books/wwwsrch/cgi-bin/content/952/952_c.htm

◆ あーるさん

>この一行を追加しないとうちの環境では正常に動作しませんでした。

どうもありがとうございます。修正しました。

>あと、テクスチャ元の画像を パレットインデックスな DIB で指定したときに
>パレットのコピーが行われてないようです。(SetDIB を見る限り)

こちらもあわせて修正しました。SetDIB 関数内で

      FImage2.idx_index := dxtMakeChannel((1 shl DIB.BitCount)-1, True);

としているところの次の行に

      for i:=0 to 255 do
        FImage2.idx_palette[i] := RGBQuadToPaletteEntry(DIB.ColorTable[i]);

を追加して下さい。

◆ ながたさん

>TAudioFileStreamのサンプルプログラムで大きいWAVを演奏させると、稀に途中で
>同じところを演奏したりします。

極端に重たい負荷がかかると再生バッファの管理が破綻し、そういう症状が発生します。

回避策としては TAudioStream(TAudioFileStream) の BufferLength プロパティに
大きい値を指定することなどがあります。


自分自身のIPを得るには? 投稿者:Haler  投稿日:12月16日(木)18時38分04秒

こんにちは。Halerと申します。

TDXPlayで通信対応ソフトを作ろうと思っています。相手にIPを教えるため、自分のIPを
ソフトで表示できるようにしたいのですが、どうやって得ればよいのでしょうか?

http://again.system.to/


idx 投稿者:ぽくむら  投稿日:12月15日(水)13時54分07秒

「Inside DelphiX」って、具体的にどのようなことが
かかれているんでしょうか?知ってる方は教えてください。

http://ueno.cool.ne.jp/pokumura/


Texture2 について 投稿者:あーる  投稿日:12月15日(水)11時47分14秒

TDirect3DTexture2 について、いくつかバグではと思うことがありましたので報告します。
それにしても超高機能なライブラリなのでソースを読むだけで勉強になりますね (^-^)

499 行 からの
  FD3DDevDesc.dwSize := SizeOf(FD3DDevDesc);  
  FDXDraw.D3DDevice3.GetCaps(FD3DDevDesc, TempD3DDevDesc);
ですが
  FD3DDevDesc.dwSize := SizeOf(FD3DDevDesc);  
  tempD3DDevDesc.dwSize := SizeOf(tempD3DDevDesc); // ←これ
  FDXDraw.D3DDevice3.GetCaps(FD3DDevDesc, TempD3DDevDesc);
この一行を追加しないとうちの環境では正常に動作しませんでした。

あと、テクスチャ元の画像を パレットインデックスな DIB で指定したときに
パレットのコピーが行われてないようです。(SetDIB を見る限り)


DirectX7版DirectMusicヘッダ 投稿者:さぐあろ  投稿日:12月12日(日)23時26分08秒

皆さん、こんにちは。Delphi4用ですが、DirectX7版DirectMusicヘッダを公開しました。よろし
かったら使ってみてください。但し、かなりのバグが潜んでいると思われますので、ご使用には十
分に気をつけてください(^^;。バグ等ありましたらメールにてお願いいたします。

http://www.infosakyu.ne.jp/~kazuya-y/index.html


大きいWAVファイルの演奏 投稿者:ながた  投稿日:12月11日(土)12時25分15秒

皆さん、こんにちは。
TAudioFileStreamのサンプルプログラムで大きいWAVを演奏させると、稀に途中で
同じところを演奏したりします。

プログラムを組んでいて同様の問題が発生した方、なにか解決する方法をご存知の方は
いらっしゃいませんでしょうか。


Inside DelphiX 投稿者:トムキャット  投稿日:12月04日(土)19時51分00秒

>あーるさん
間違いなくあのKo-Taさんです。グラフィックデザインを見てみると
一発で分かります。それにしてもInside DelphiX、表紙はシブいですし
大量のソースコードに圧巻です。書店でこれを発見した時、思わず手が伸びました。


これから書店へ直行! 投稿者:GON  投稿日:12月04日(土)14時37分00秒

Impressのコンピューター関連雑誌&書籍新刊一覧のリンクから来ました。
DelphiXの書籍版ですか。う〜ん、期待しちゃうなぁ。(^^)

DelphiXに付いてるサンプルだけいじくったことがある程度なんで
書籍の内容にも興味があります。これから書店に行って見ようと思います。

では。


Get! Inside DelphiX!! 投稿者:あーる  投稿日:12月03日(金)05時56分25秒

Inside DelphiX ゲットしました!!  ■\(゜O ゜)ゞ
これからじっくりと読んでいきたいと思います。
ところでグラフィックデザインの Ko-Ta さんて、CJ の Ko-Ta さん?


マルチレス 投稿者:  投稿日:12月01日(水)16時38分15秒

◆ えるさん

あーるさんの仰る通り、DrawAddメソッドなどはすべて16ビットカラー以上でしか
使うことが出来ません。

>過去に Alpha はハードウェアの機能を使っているけど Add は
>DelphiX が足しているからとか言う記述があったような気も...

AlphaもDelphiXがソフトウェア描写しています。

◆ あーるさん、BACさん

無事 InsideDelphiXの発売日を過ぎたみたいです(^^; 
でも私は実物をまだ見ていないのでどのような本になっているのか分かりません(^^;


Re: Window/FullScreen で挙動が...? 投稿者:あーる  投稿日:12月01日(水)10時06分09秒

えるさん こんにちは、あーるといいます。

Add や Alpha はパレット使用(=256色)時には使えないので、Window/Full どちらかの
画面の色数が 256 色になっているのではないのでしょうか。
DXDraw.Display の BitCount を 16 にしてみればうまくいくかもしれません。


Window/FullScreen で挙動が...? 投稿者:える  投稿日:12月01日(水)02時53分40秒

if not DXDraw1.CanDraw then exit;
with DXDraw1.Surface do
begin
  Fill(0);
  case 1 of
    0: FillRect(Bounds(0, 0, 16, 16), ColorMatch(clRed));
    1: FillRectAdd(Bounds(0, 0, 16, 16), clRed);
    2: FillRectAlpha(Bounds(0, 0, 16, 16), clRed, 128);
  end;
end;
DXDraw1.Flip;

というようなものをタイマーのイベントに書いてあるんですが、
doFullscreen の true/false で挙動が違います。

FillRect は正常なんですが、他は描画してくれません。
何が原因なんでしょう ? 見当がつきません。それとも不具合 ?

過去に Alpha はハードウェアの機能を使っているけど Add は
DelphiX が足しているからとか言う記述があったような気も...


Re:LoadTextuteCallBack 投稿者:BAC  投稿日:12月01日(水)00時23分35秒

NAZOさん、どうもありがとうございます。
AddSearchPathの追加でうまくいきました。

Inside DelphiXですか、もう今日なんですね。


Re: finit について 投稿者:あーる  投稿日:11月30日(火)07時32分43秒

堀さん、こんにちは。いよいよ明日発売ですね。>Inside DelphiX

finit について漠然とした質問にも答えてくださってありがとうございました。
おそらくそれほどのオーバーヘッドもないようだし、残しておいた方がいいみたいですね。

余談ですが、"Inside" = SOFTBANK と勝手に思いこんでしまってソフトバンクの書籍情報ばかり
チェックしてました。ふむ、秀和システムとわ・・・(^_^;;


Re:LoadTextuteCallBack 投稿者:NAZO  投稿日:11月29日(月)23時22分36秒

AddSearchPathを追加するとうまくいくかもしれません
あと場合によっては、
テクスチャコールバックで同じ内容のテクスチャを作らないようにしたほうが
効率的になるとおもいます


マルチレス 投稿者:  投稿日:11月19日(金)03時38分29秒

◆ あーるさん

>うーん TNT いいですねー。うちの G200 はマルチテクスチャ非対応なんです。
>DirectXCapsViewer で調べてみたところ
>  HAL の MaxTextureBlendStages は 1 --- G200 は非対応
>  HEL の MaxTextureBlendStages は 8 --- 最大8段階
>ということで HEL でもマルチテクスチャは使えるみたいです。

G400DH では MaxTextureBlendStages は 3 となっていました。
最大3段階使えるようです。

◆ コンビナートHさん

> 質問なんですが、StretchDrawをクリッピング付きで行いたいのですが、高速化のため
>クリッパーを使わないで行いたいんです。
> で、DirectDrawSurface.DrawAlpha などが拡大縮小を行うのに目を付け、Alphaを255に
>すればいけると考えたのですが、速度的には疑問が残ってしまいます。

一応 Alpha に255を指定すればブレンド処理は行わないようになります。

でもソフトウェア処理の DrawAlpha メソッドよりはハードウェア転送が行える
StretchDraw メソッドの方が高速だと思います。

◆ TIX さん

>DirectSoundですが、非roop再生時に周波数やパン、ボリュームを変更できないものでしょうか。
>もしくはループ時にループ回数を設定できないものでしょうか。

TDXWaveList コンポーネントは簡易化の為、そういうことは出来なくなっています。
TDirectSoundBuffer オブジェクトを自分で作成するしかないと思います。

・TDXSound の OnIntiailize イベントで
  FSoundBuf := TDirectSoundBuffer.Create(DXSound1.DSound);

・TDXSound の OnFinalize イベントで
  FSoundBuf.Free;
  FSoundBuf := nil;

・TDXSound.OnRestore イベントで
  FSoundBuf.LoadFromFile(Waveファイル名);

として初期化すればいいと思います。

◆ あーるさん

>ただ Delphi3 でのインストールで一つ問題がありました。
>569行 の CreateSurface の引数 ddsd は TDDSurfaceDesc2 ですが、Delphi3 だと
>
>  function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean;
>
>となっていてコンパイルエラーとなります。

あら(^^; どうもありがとうございます。

◆ かっつさん

>DelphiXとても素晴らしいです!! 俺をDirectXプログラマにしたんですから・・・。
>応援していますので、今後とも頑張ってください。

どうもありがとうございます (^o^ /


Re;マルチテクスチャ 投稿者:NAZO  投稿日:11月18日(木)23時52分06秒

あーるさんこんにちは
CapsViewwerでみればいいものを調べてもらってありがとうございます
実はSDKがはいってなかったりする。
ということはやはり私がおかしいということになりますね
見直してみます


http://www.ifnet.or.jp/~rikimaru/


Re: マルチテクスチャ 投稿者:あーる  投稿日:11月18日(木)02時05分46秒

NAZO さんこんにちは。

うーん TNT いいですねー。うちの G200 はマルチテクスチャ非対応なんです。
DirectXCapsViewer で調べてみたところ
  HAL の MaxTextureBlendStages は 1 --- G200 は非対応
  HEL の MaxTextureBlendStages は 8 --- 最大8段階
ということで HEL でもマルチテクスチャは使えるみたいです。


クリッピング付きStretchDraw 投稿者:コンビナートH  投稿日:11月18日(木)01時23分39秒

 はじめまして、コンビナートHと申します。
 いつも、DelphiXをありがたく利用させてもらってます。

 質問なんですが、StretchDrawをクリッピング付きで行いたいのですが、高速化のため
クリッパーを使わないで行いたいんです。
 で、DirectDrawSurface.DrawAlpha などが拡大縮小を行うのに目を付け、Alphaを255に
すればいけると考えたのですが、速度的には疑問が残ってしまいます。

 ソースを読んだところ、DrawAlpha内でカスタム描画ルーチンのをバイナリで再構築している
らしいところまでは掴んだのですが、それ以上はちと僕のレベルでは読み解けなくて参って
しまいました(^^;

 バイナリを再構築しているということは、アルファ値が255の場合、アルファ合成部を
飛ばして速度を稼いでいるということがあり得ると思うのですが、どうなのでしょうか?


 しかし、ソース読んでたら、DelphiXは、ホント凄いなと、あらためて感動して
しまいました(^^;


DirectX7サンプル 投稿者:さぐあろ  投稿日:11月18日(木)00時48分05秒

DirectX7の簡単なサンプルを公開しました。また、DirectX7の簡易クラスも公開しました(ホン
トに簡単なものですが)。ダウンロードは私のHPからできます。

http://www.infosakyu.ne.jp/~kazuya-y/index.html


Re:TDirect3DTexture2感想 投稿者:NAZO  投稿日:11月16日(火)02時09分00秒

TDirect3DTexture2使ってみました
といってもマルチテクスチャで2枚貼りつけてみただけで
新機能であるアルファチャンネルやMIPマップは、まだためしておりません
がIDEにも統合されるそうで楽しみにしてます。
DelphiXとは、関係ないですが,マルチテクスチャってHELでも表示されますか?
ずっとHALで使ってたので気づきませんでしたがHELにすると真っ白
恐らくどこか間違ってるようなきがしますがなにか情報ありましたら
お願いします。ビデオカードは、TNTを使っております。

http://www.ifnet.or.jp/~rikimaru/


DirectSound再生時の変調 投稿者:TIX  投稿日:11月15日(月)04時51分35秒

おひさしぶりです。

DirectSoundですが、非roop再生時に周波数やパン、ボリュームを変更できないものでしょうか。
もしくはループ時にループ回数を設定できないものでしょうか。


DirectX7ヘッダ 投稿者:さぐあろ  投稿日:11月15日(月)03時20分40秒

堀さんのDirectXヘッダでサポートするまでの暫定版として私的に作成していたDirectX7ヘッダを
公開します。現在のところDirectDraw7とDirect3D7のみのサポートですが、使用の際は堀さんの
DirectXヘッダが必要になります。このとき、uses節においてDirectXより後にDirectX7を宣言してください。簡単なサンプルは近日中にアップします。早くDirectX7を使ってみたいという方は
使用してみてください。ダウンロードは下のアドレスから可能です。

http://www.infosakyu.ne.jp/~kazuya-y/program/download/directx7.zip

バグや不具合等ございましたらご一報下さい(ていうか既に本人のにでてますが(^^;)。よろしく
お願いします。

http://www.infosakyu.ne.jp/~kazuya-y/index.html


DirectPlayでの timeout ? 投稿者:aihatena  投稿日:11月15日(月)02時41分54秒

お世話になってます。DirectPlay6のAsync対応で通常なら問題なく通信できています。

現在 DirectPlayでは一定時間通信できなかった相手を自動的に deleteするように
なっているようですが (break pointを設定して止めたりすると切れますよね)
帯域の細いプロバイダの playerとの通信が一時的に途切れた場合に、timeout待ち時間を
今より長く設定するということはできるのでしょうか?
短いときは 1分待たずに OnDeletePlayer が発生してしまいます。

DirectX6.1の documentで「timeout」を見ても SendExのパラメータ説明しか見つからず
DelphiXではサポートしないデバイスのために 0 にしていますので、DirectPlay内部で
決めてしまっている値かもしれませんが..
もし設定方法がありましたらご教授願えませんでしょうか _o_


Re: TDirect3DTexture2 試作版  投稿者:あーる  投稿日:11月14日(日)03時58分43秒

堀さん、こんにちは。いつもお世話になっておりますあーるです。
Inside DelphiX」(でしたよね?)楽しみにしてます。

>アルファチャンネルを持ったテクスチャがくるくる回るサンプルが付いてきます。
おーぐるぐるまわるー (^o^)(@o@)(◎.◎)(Θ_Θ)・・・ばたっ ρ
うちの環境(Win98+DX7+G200)では問題なく回ってくれました。

ただ Delphi3 でのインストールで一つ問題がありました。
569行 の CreateSurface の引数 ddsd は TDDSurfaceDesc2 ですが、Delphi3 だと

  function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean;

となっていてコンパイルエラーとなります。
Delphi4 ではきちんとオーバーロードされるので問題無しです。

追伸
  D3DLIGHT_RANGE_MAX が定義されていないみたいです。
  自分で定義すればいいだけの話ですがいちおーご報告いたします。  


↓の件、解決しました。 投稿者:かっつ  投稿日:11月14日(日)01時28分28秒

CollisionMapの件ですが、Collisioned := Trueになってませんでした。(^_^;;
超マヌケなお騒がせで誠にすみませんでした。m(__)m
DelphiXとても素晴らしいです!! 俺をDirectXプログラマにしたんですから・・・。
応援していますので、今後とも頑張ってください。
では、また来ます。 


CollisionMapの使い方 投稿者:かっつ  投稿日:11月14日(日)00時53分56秒

迷路的なゲームを作ろうと思っています。
CollisionMapを使ってマップ(TBackgroundSprite)と自キャラ(TImageSprite)の衝突判定を
させたいのですが、このような用途にCollisionMapは使えますか?
色々やってみたのですが、どうにも衝突せず、ただの背景にしかなりません。
TImageSprite同士の衝突はできました。
マップもTImageSpriteで書かなければいけないのでしょうか?
それじゃ、CollisionMapって一体?


TDirect3DTexture2 試作版 投稿者:  投稿日:11月13日(土)22時23分38秒

TDirect3DTexture2 の試作版をアップしました。

アルファチャンネルを持ったテクスチャがくるくる回るサンプルが付いてきます。
最新のビデオカードで無いとうまく動かないと思います(^^;

また簡単な説明を書いた Readme.txt も同梱しました。

http://www.ingjapan.ne.jp/hori/data/DXTexture.zip

758KB もありますのでご注意ください(^^;

この試作版を見てどこをどうしたらいいなどのアドバイスを頂けるととても嬉しいです(^^

■ ぽくむらさん

>通信対戦対応を目指してDXPlayを使っていたんですが、
>「相手の受信が完了した」ときを知ることはできるのでしょうか?

私は DirectPlay に精通していませんのでよく分かりませんが、
ちゃんと受信したよというメッセージを送る方法はどうでしょうか(^^;

DirectPlay にもしかしたらそういう機能があるのかもしれません。


sendtime 投稿者:ぽくむら  投稿日:11月13日(土)10時05分12秒

どうも、堀さん。

通信対戦対応を目指してDXPlayを使っていたんですが、
「相手の受信が完了した」ときを知ることはできるのでしょうか?
「送信が完了したとき」に発生するイベント「OnCompleteSned(?)」は
ヘルプに載っていないみたいだし、そのイベントに「SnedTime」という
パラメータが含まれていて、「送るのにかかった時間」だと
思うのですが、常に「0」となっています。

間違ってるところがあるかもしれませんが、
このことについて詳しいかたは、何かアドバイスをお願いします。

http://ueno.cool.ne.jp/pokumura/


Fogとテクスチャ 投稿者:Koji  投稿日:11月11日(木)03時42分00秒

どうも、みなさん解答ありがとうございます。
テクスチャに関しては、僕の予想、全然外れてましたね。へへ。
でも、バグということで諦めが付きました。
堀さん、新しいヴァージョンとDelphiX公式本を期待しています。

Fogに関してですが、D3DTLVertexを使用した場合は
アールさんの方法でうまく行きました。流石です。(^^
rhwに従ってきちんとフォグが現れました。

ただ、D3DVertexを使用した場合は相変わらず真っ白です。
なんか、これは単に僕のフォグに対する認識が間違っている
可能性が高いです。もうちょっとSDKヘルプ読みながら、勉強してみます。

みなさん、本当にありがとうございました。
短期間にどばっと書きこみをして、気分を害した人も
いらっしゃるかも・・・すいませんでした。


レス 投稿者:  投稿日:11月11日(木)02時28分26秒

◆ NAZO さん

>でもアルファチャンネルもサポートする新しいクラスは期待してます

さらにミップマップもサポートしていますが、これはあまり使わないかもしれませんね。

アルファチャンネルやミップマップを使用するには独自形式のテクスチャファイル形式(*.dxt)で
画像を保存する必要があります。

従来の TDIB オブジェクトや TBitmap オブジェクトを使用した場合、アルファチャンネルなどは
一切使用できなくなります。

>IDirect3dRMFrame3のGetTransForm引数が間違ってるようです

どうもありがとうございます。

◆ あーるさん

>TDirect3DTexture のバグってどんなものなんでしょうか。
>私の環境だととりあえず問題なしなんですが・・・
>TextureHandle を使わなければ大丈夫とかそういう類のバグでしょうか。

テクスチャサーフェースに画像データを書き込むのに、キャンバスを利用しているため
ビデオカードによっては正常に書き込まれないことがあります。

TDirect3DTexture2 では Lock して書き込んでいるため、そういう不具合は発生しません。


Re:バグ 投稿者:NAZO  投稿日:11月11日(木)01時27分34秒

私もテクスチャは特に問題なくつかえております
でもアルファチャンネルもサポートする新しいクラスは期待してます
DirectX7になってRMとIMの相性がますます悪くなっていまさらのようですが
使い方によってはまだ使えると思います。
それにRMを先ににやっておくと オブジェクトはこうやって管理すればいいのか
などと勉強になりますしね。 しかし同じ機能でRM並みの速さは私にはむりなようです
RMのソースコードが公開されたらすごいと思います アセンブラとかでゴリゴリかいてある
部分多そうで私には、読める部分少ないかもしれないですけど......
話はそれましたが
IDirect3dRMFrame3のGetTransForm引数が間違ってるようです
それでは新しいバージョン楽しみにしてます


Re: TDirect3DTexture のバグ 投稿者:あーる  投稿日:11月10日(水)19時35分04秒

堀さん、こんにちは。

TDirect3DTexture のバグってどんなものなんでしょうか。
私の環境だととりあえず問題なしなんですが・・・
TextureHandle を使わなければ大丈夫とかそういう類のバグでしょうか。


Re: Fog について 投稿者:あーる  投稿日:11月10日(水)19時09分16秒

Koji さんこんにちは。
ちょっとやってみたところ、

SetRenderState(D3DRENDERSTATE_FOGENABLE,Integer(True));
SetRenderState(D3DRENDERSTATE_FOGColor,$FFFFFFFF);
SetRenderState(D3DRENDERSTATE_FOGTableMode,integer(D3DFog_Linear));
l:=0.1;
SetRenderState(D3DRENDERSTATE_FOGTableStart,DWORD((@l)^));
l:=0.9;
SetRenderState(D3DRENDERSTATE_FOGTableEnd,DWORD((@l)^));

こちらではこんな感じでフォグがかかるようになりました。


TDirect3DTexture のバグ 投稿者:  投稿日:11月10日(水)16時49分27秒

実は TDirect3DTexture オブジェクトは、DirectX 3 向けに作られています。
DirectX5 以降の環境で実行するとテクスチャイメージがおかしくなってしまいます。

現在、新しいテクスチャクラスとなる TDirect3DTexture2 オブジェクトを作っています。
これは DirectX6 でも正常に使えることと、アルファチャンネルもサポートします。


Fogについて 投稿者:Koji  投稿日:11月10日(水)05時39分59秒

えと、コードをコピーしますと、

var l:single;
    p:^DWORD;

 l:=0.3;
  p:=@l;
  DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGENABLE,Integer(True));
  DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGColor,$FFFFFFFF);
  DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableMode,integer(D3DFog_Linear));
  DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,700);
//DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,p^);か?
  l:=0.8;
  DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableEnd,1000);
//DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,p^);か?
と、これだけしか設定していないのですが、どうでしょうか?
FogStartとFogEndには視点からの距離を入れれば良いのですよね?


Textureについて 投稿者:Koji  投稿日:11月10日(水)05時29分01秒

あーるさん、お返事ありがとうございます。
UV座標の方は、一応0から1の間に設定しておきました。
しかし、やっぱり暗号化されてしまいました(^^;

ただ、今日も格闘していて、
原因がわかったような気がします。(素人なので、いい加減ですが)
TextureのGraphicのPixelFormat(8Bitとか16Bitとか)とDisplay
のBitCountが異なっていると、正しく表示されない気がします。

DelphiXかDirectXの内部でうまく対処してくれているんだろうな、
と勝手に思っていましたが、違うみたいですね。(常識かも・・)
読み飛ばしていた参考書のTextureのページを見ながら、対策を練ってみます。

何か、いい対処方法があったら、教えてくださいね。


補足 投稿者:あーる  投稿日:11月10日(水)04時43分28秒

テクスチャのUV座標は (0,0) - (1.0,1.0) で指定します。
つまり右下が tu:= 1.0; tv:= 1.0; となります。

vertex.tu:= 128 とやってしまうと、マジで暗号化されたみたいになりますね(今やってみた)。


Re: またTextureについて。 投稿者:あーる  投稿日:11月10日(水)04時35分14秒

Koji さん、こんにちは。自信ないですがいちおー

テクスチャのUV座標はちゃんと設定されてますでしょうか
それと、テクスチャ関連のレンダリングステートは一通り初期化しておいた方がいいと思います。

フォグについてはすいません全然わからないです。
一度該当部分のコードをアップしていただければ少しはわかるかもしれません。


またTextureについて。 投稿者:Koji  投稿日:11月09日(火)01時47分59秒

えと、おかげさまで、TDirect3DTextureが作成出来たのですが、
Textureがめちゃくちゃに表示されてしまいます。
なんか暗号化したみたいになってしまいました。

原因がわかる方、どーか教えてください。
InitialSurfaceでTextureを作成後、いきなり
DxDraw.D3DDevice2.SetRenderState(D3DRENDERSTATE_TEXTUREHANDLE,Tex.Handle);
と設定して、描いて見たのですが、駄目なんでしょうか?

あと、Fog効果を付けようとしたのですが、うまく行きません。
IMモードでSetRenderStateを用いて、FogEnableをTrue、
FogColorを$FFFFFFFF、FogModeをLinear,
FogStartを700、FogEndを1000に設定し描画してみました。

視点(0、-500、500)から(0,0,0)を中心とする
一辺が200の立方体を見たところ、真っ白けになってしまいました。

FogStart,Endをいろいろ変えてみましたが、
結果は変わらず、真っ白け。
僕の頭も真っ白け。

どなたか、お教え願います。


ありがとうございました。 投稿者:Koji  投稿日:11月08日(月)22時07分54秒

あーるさん。解答ありがとうございます。

GraphicをDxDrawのFinalizeで解放したら、うまく行きました。
また、ViewPortなどの変数もFinalizeでnilを代入したら、
エラーが出ませんでした。

なんか、あっさり行きすぎて拍子抜けです。
4時間も悩んだのに・・・
流石です。ありがとうございました。(^^


Re: Texture について他 投稿者:あーる  投稿日:11月08日(月)20時12分54秒

Koji さん、はじめまして。あーるといいます。

TDirect3DTexture でテクスチャ元に指定する画像は解放しちゃだめです。
フォームのメンバ等に保存しておいてテクスチャの解放時まで保持し続けなくてはいけません。
あと、Viewport とかはインターフェイス型ですので、自動的に解放処理が呼ばれてこまるという
ときには TDXDraw.FinalizeSurface イベントあたりで Viewport:= nil としてあげればエラー
が出なくなると思います。


あと一つ質問です。 投稿者:Koji  投稿日:11月08日(月)03時39分02秒

連続投稿失礼します。
ViewPortやLight,Materialを作成するときに、変数を
グローバルにすることは出来ないのでしょうか?

ViewPort:IDirect3DViewPort3;などの宣言を
フォームのPublic部や、インプリメンテーション以下に
置くなどすると、アプリケーション終了時に
エラーが発生します。

こちらも、とんでもなく馬鹿な質問だったら、勘弁してください。


はじめまして&Textureについて 投稿者:Koji  投稿日:11月08日(月)03時30分06秒

はじめまして。
DelphiMLでDelphiXの文字を見つけ、早速インストールしてみました。
取り合えずDirectXは全然分からないので、
参考書に従ってDirect3Dの勉強をしていったのですが、
Textureで壁にぶつかりました・・・

過去ログを見てみると、TDirect3DTextureというクラスがあるらしいので、
「取り合えず、Createしてみるかな?」と思って、Createしてみたのですが、
必ず読みこみ違反を起こします。

なにかとんちんかんなことを言っているのかもしれませんが、
Textureの使い方をどなたか教えてもらえませんか?
ソースは以下の通りです。

procedure TForm1.DXDraw1InitializeSurface(Sender: TObject);
var
  Tex:TDirect3DTexture;
  Temp:TBitMap;
begin
  Temp:=TBitMap.Create;
  Temp.LoadFromFile('test.bmp');
  Tex:=TDirect3DTexture.Create(Temp,DXDraw1);
 Temp.Free;
end;

この手続きを抜けた後に、エラーが発生します。
ちなみに、FormはTDXFormに変換しており、DXDrawコンポーネントのみ
貼りつけて、イベントはOnInitializeSurfaceのみ使用しています。


Sprite 投稿者:maya  投稿日:11月07日(日)18時10分46秒

DXSpriteで、半透明処理というのは出来るのでしょうか?

すべて同じ値ではなく一個一個別々に透明度を指定できるとうれしいのですけど。


公開 投稿者:ぽくむら  投稿日:11月05日(金)18時19分03秒

DXInputを使った
格闘アクションゲームのβ版を
ページにアップしました。

例の、スタッフロールに堀さんの
名前が出てくるやつのネット公開版です。

http://ueno.cool.ne.jp/pokumura/


(無題) 投稿者:toshi  投稿日:10月29日(金)11時55分04秒

堀さん、ありがとうございました。
11月下旬〜12月上旬ですね。楽しみにしています。


Re: RM + IM コールバック関数 投稿者:BAC  投稿日:10月29日(金)01時25分59秒

堀さん、お早いお返事どうもありがとうございます。
おかげさまでうまくいきましたし、
ソースもだいぶすっきりしました。

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


お礼: 衝突判定について 投稿者:zAzo  投稿日:10月28日(木)16時22分37秒

堀さん、あーるさん、ご丁寧なレスありがとうございました。
ピクセル判定はちょっとあきらめ、あーるさんのサンプルソースを参考に、矩形判定を改造して
利用させていただくことと致しました。

今更言うのもなんなんですが、いやぁDelphiXはよく出来てますね。
今後の更なる拡張を期待しております。(^o^ )DX7も〜!
では、これにて。


マルチレス 投稿者:  投稿日:10月28日(木)16時15分33秒

◆ BAC さん

>「Direct3D プログラミングガイドブック」のサンプルを追いながら勉強しているのですが、
>RMとIMの統合である、P342〜のサンプルがうまくいきません。
>CreateUserVisualで登録したDestroyMyVisual関数がプログラム終了時に何回も
>呼ばれてしまうようで、
>DestroyMyVisualで FreeMem(arg) した場合は2回目以降で「無効なポインタ操作」、
>   〃    で何もしていないときでも何度も関数が呼ばれ、そのうち
>「スタックオーバーフロー」となってしまいます。

説明書には書かれていませんが、DelphiX には TDirect3DRMUserVisual クラスなるものが
あります。

TDirect3DRMUserVisual クラスは継承して DoRender メソッドをオーバーライドして
ここにコールバックの処理を記述するという形を取ります。

TDirect3DRMUserVisual のソースコードが参考になると思います。

>#私もDelphiX本楽しみにしています。

どうもありがとうございます (^^ /

◆ toshi さん

>以前この掲示板で、Inside DelphiXの話が出ていましたが
>いつ頃の発売になるのでしょうか?(8月初旬頃に本屋さんに聞いたら10月頃といわれました)

11月下旬〜12月上旬に発売予定です。大幅に遅れてしまいすみません。

◆ zAzo さん

>次に、ピクセル単位で衝突判定をさせた場合、キャラクターが次から次へとめまぐるしくアニ
>メーションしていると、かなりの確率で衝突判定抜けを起こしてしまうのですが、これはどう
>してなのでしょうか?

あまりにもアニメーションが速すぎるため、非透明色同士の重なりが発生しにくいなどが
考えられますね。

◆ ぽくむらさん

>ちなみに、現在作成中の
>「二代目 NaGu-Ru」のスタッフロールで
>「DelphiX(by 堀 浩行)」と
>出させてもらってます。よろしいですよね?

全然オッケーです〜 (^^ /


RE: 衝突判定について  投稿者:あーる  投稿日:10月27日(水)22時51分37秒

zAzo さんこんにちは、あーると言います。

判定用矩形のサイズを設定する機能は、生の TSprite にはなかったと思います。
もっともスプライトの衝突判定機能を使うには TSprite の派生クラスを定義する
のが普通なので、その際に自分でそういう機能を組み込んでしまうのが良いのでは
ないでしょうか。例えば、

TMySprite = class (TSprite)
private
  fCollisionRect: TRect;//衝突判定用矩形。原点はスプライトの左上座標
protected
  function TestCollision(Sprite: TSprite): Boolean; override;//詳しい衝突判定をおこなう
public
  property CollisionRect: TRect read fCollisionRect write fCollisionRect;
end;

のようにして、実際のチェックは

function TMySprite.TestCollision(Sprite: TSprite): Boolean;
var rc: TRect;
begin
  rc.Left:= Trunc(WorldX) + fCollisionRect.Left;
  rc.Top:= Trunc(WorldY) + fCollisionRect.Top;
  rc.Right:= Trunc(WorldX) + fCollisionRect.Right;
  rc.Bottom:= Trunc(WorldY) + fCollisionRect.Bottom;
  Result:= OverlapRect( rc, Sprite.BoundsRect);
end;

テストしていませんが、こんな感じで大丈夫かと思います。


RM + IM コールバック関数 (環境) 投稿者:BAC  投稿日:10月27日(水)20時19分06秒

かさねてすみません。
一応環境を書いておきます。

ハード: Windows98 + ViperV770
ソフト: Delphi 5.0 Pro + DirectX 7.0 + DelphiX 1999/09/23


RM + IM コールバック関数 投稿者:BAC  投稿日:10月27日(水)20時15分32秒

初めまして、最近DelphiXでDirect3Dプログラミングを始めた者です。

「Direct3D プログラミングガイドブック」のサンプルを追いながら勉強しているのですが、
RMとIMの統合である、P342〜のサンプルがうまくいきません。
CreateUserVisualで登録したDestroyMyVisual関数がプログラム終了時に何回も
呼ばれてしまうようで、
DestroyMyVisualで FreeMem(arg) した場合は2回目以降で「無効なポインタ操作」、
   〃    で何もしていないときでも何度も関数が呼ばれ、そのうち
「スタックオーバーフロー」となってしまいます。

ここで聞くべき質問ではないかとも思いましたが、
Delphi + Direct3Dの書籍として活用されている方が多いかと思い、投稿させていただきました。

#私もDelphiX本楽しみにしています。


Inside DelphiX 投稿者:toshi  投稿日:10月27日(水)15時01分30秒

こんにちは、堀さん
はじめまして 、いつも楽しくDelphiXで遊ばせていただいております。
以前この掲示板で、Inside DelphiXの話が出ていましたが
いつ頃の発売になるのでしょうか?(8月初旬頃に本屋さんに聞いたら10月頃といわれました)
差し支えなければ教えてください。ソッコーでGETしたいです。
それでは


衝突判定について 投稿者:zAzo  投稿日:10月26日(火)18時52分01秒

DelphiX いつも愛用させて頂いてます。
お久しぶり(始めまして)です。zAzo@おやじプログラマーです。

さて、私事ではありますが、最近ようやく暇になってきたので、そろそろDelphiXで2Dゲーム
でも作るかな!? と思って勉強を始めたところ、衝突判定について気になったことがあった
ので是非とも教えてください。

まず初めに、矩形による衝突判定を行わせる場合、矩形のサイズを自由に設定することは出来
るのでしょうか? ほとんどのキャラクターは、イメージサイズより数ドット小さめに作られ
るので、矩形サイズ=イメージサイズ だと、あたり判定がシビアになりすぎるのです。

次に、ピクセル単位で衝突判定をさせた場合、キャラクターが次から次へとめまぐるしくアニ
メーションしていると、かなりの確率で衝突判定抜けを起こしてしまうのですが、これはどう
してなのでしょうか?

以上2点です。では、よろしくお願いいたします。


RE: 宣伝いいですか? 投稿者:あーる  投稿日:10月23日(土)01時51分11秒

あらら、早くも間違った事書いてしまいました。
早速修正しました。堀さん、ご指摘大感謝です (._.)ペコッ


宣伝とか 投稿者:ぽくむら  投稿日:10月22日(金)16時38分17秒

ちなみに、現在作成中の
「二代目 NaGu-Ru」のスタッフロールで
「DelphiX(by 堀 浩行)」と
出させてもらってます。よろしいですよね?

http://ueno.cool.ne.jp/pokumura/


RE:宣伝いいですか? 投稿者:  投稿日:10月22日(金)08時56分25秒

DelphiX に関係することならどんどん宣伝しちゃってください〜

>DelphiX で Direct3DIM を利用するための簡単なサンプルと解説を下の URL にて公開しています。
>まだまだ未完成ですが、IM の使い方がわからないと言う方には役に立つのではと思っています。

おおそれは楽しみです(^^ /

>ご意見ご感想お待ちしてます。

TDXDraw コンポーネントの OnInitialize イベントで CreateViewport しているようですが、
D3DDevice は DDraw ではなく、Surface と結びついていますのでサーフェースをリサイズしたときに
問題が発生してしまいます。

OnInitialize イベントではなく、OnInitializeSurface イベントを用いて下さい。
これならサーフェースが作成される度に、つまり D3DDevice が初期化される度に
呼び出されますので。


宣伝いいですか? 投稿者:あーる  投稿日:10月21日(木)03時05分54秒

ども、堀さんと密かに相互リンクさせてもらっている、あーるです。

DelphiX で Direct3DIM を利用するための簡単なサンプルと解説を下の URL にて公開しています。
まだまだ未完成ですが、IM の使い方がわからないと言う方には役に立つのではと思っています。
ご意見ご感想お待ちしてます。

http://www2s.biglobe.ne.jp/~t_harada/delphi/delphix/tech1.html


DelphiX インストーラ新版その2  投稿者:  投稿日:10月19日(火)08時09分49秒

DelphiX 付属のインストーラを修正したものをアップします。

この発言の最後にあるファイルを DelphiX\Bin フォルダに解凍して下さい。

◆ えるさん

>最初の「ヘルプを登録する」をチェックしていたのですが、何がどう
>登録されたのやら ?

ヘルプはコンパイルに成功しないと登録されません。今回アップしたインストーラは
コンパイルに失敗しても登録されるようにしました。

http://www.ingjapan.ne.jp/hori/data/DelphiXInstall2.zip


インストーラ新版 投稿者:える  投稿日:10月18日(月)22時28分06秒

Delphi5 は無事認識したようです。

コンパイルに失敗しました、自分でコンパイルしてください。

とは言われてしまいましたが(^^;
自動的に起動した Delphi5 で、自動的に Delphi5_for5.dpk が開か
れた状態から、「インストール」ボタンを押すだけでインストールは
成功したようです。

最初の「ヘルプを登録する」をチェックしていたのですが、何がどう
登録されたのやら ?


DelphiX インストーラ新版 投稿者:  投稿日:10月18日(月)08時00分04秒

DelphiX 付属のインストーラを修正したものをアップします。

以下のファイルを DelphiX\Bin フォルダに解凍して下さい。

http://www.ingjapan.ne.jp/hori/data/DelphiXInstall.zip


RE:Delphi5 Undetected 投稿者:  投稿日:10月18日(月)00時32分31秒

ひょっとして Windows NT 上で管理者権限がないユーザーでインストールしていますか?

>存在します。想像するに TRegistry.Openkey を使われている ?
>TRegistry.OpenKeyReadOnly で開かないと raise Exception しちゃいますが(^^;

こちらでは IniFile := TRegIniFile.Create('') したあと

  IniFile.RootKey := HKEY_LOCAL_MACHINE;
  IniFile.OpenKey('Software\Borland\Delphi', False);

していました。OpenKeyReadOnly を使うように変更してみます。

># こんな基本的なことぢゃなければなんだろう (^^;
>## パンピー(死語) に LOCAL_MACHINE の write 権限はないです...

死語のためかパンピーの意味が私には分かりません(^^;


Delphi5 Undetected 投稿者:える  投稿日:10月17日(日)23時09分28秒

>>というわけで、さっそくダウンロードして、Install_for5.exe を実行すると
>>「Borland Delphi5 がインストールされていません」
>>とか出てしまいました (^^;
> おや? おかしいですねぇ。
> インストーラはインストールされているかいないかをレジストリの
> [HKEY_LOCAL_MACHINE\Software\Borland\Delphi\5.0]キーが存在するかで判定しているのですが、
> レジストリエディタで見ても存在していますでしょうか?

存在します。想像するに TRegistry.Openkey を使われている ?
TRegistry.OpenKeyReadOnly で開かないと raise Exception しちゃいますが(^^;
# こんな基本的なことぢゃなければなんだろう (^^;
## パンピー(死語) に LOCAL_MACHINE の write 権限はないです...


マルチレス 投稿者:  投稿日:10月17日(日)20時57分21秒

◆えるさん

>最新版のアップデートを見落としていたようです。
>というわけで、さっそくダウンロードして、Install_for5.exe を実行すると
>「Borland Delphi5 がインストールされていません」
>とか出てしまいました (^^;

おや? おかしいですねぇ。

インストーラはインストールされているかいないかをレジストリの
[HKEY_LOCAL_MACHINE\Software\Borland\Delphi\5.0]キーが存在するかで判定しているのですが、
レジストリエディタで見ても存在していますでしょうか?

もし存在していなかった場合は以下のキーをレジストリエディタでファイルに書き出して
私に送ってもらえないでしょうか?

  HKEY_CURRENT_USER\Software\Borland
  HKEY_LOCAL_MACHINE\Software\Borland

#私の環境は一回 Delphi 5 ベータ版をインストールしたことがありますのでレジストリに
#変な残骸が残っているのかもしれません。

>readmej.txt ですが、

どうもです。修正しました。

◆ あかねファンさん

>長いディレクトリは作ってないつもりなんですが

DelphiX のディレクトリだけではなく、Delphi がインストールされている
ディレクトリも長いと失敗することがあります。


手動ヘルプ統合について 投稿者:あーる  投稿日:10月17日(日)18時04分42秒

インストーラーと同じ状態になるかどうかはわかりませんが、手動でヘルプを統合することもできるはずです。

手順としては、
($Delphi)\Help\delphi4.cnt をテキストエディタで開き、末尾に下の二行を追加
( ($DelphiX) は DelphiX をインストールしたディレクトリ)

------------------
:Index DelphiX=($DelphiX)\Help\DelphiXj.hlp
:Include ($DelphiX)\Help\DelphiXj.cnt
------------------

こんな感じでOKだと思います。
Delphi4 以降なら OpenHelp を使うのが一番良いかもしれないです。


おや、見落としてましたか(^^; 投稿者:える  投稿日:10月16日(土)22時44分56秒

最新版のアップデートを見落としていたようです。
というわけで、さっそくダウンロードして、Install_for5.exe を実行すると
「Borland Delphi5 がインストールされていません」
とか出てしまいました (^^;

readmej.txt ですが、

>2.DelphiX を利用するにあたって
> 利用するには下の3つが必要になります
> ・Borland Delphi 3 あるいは 4
> ・DirectX 6 ランタイム

3 つ...2つですよね and Delphi5 がない (^^;

とりあえず、手動で delphiX_for5.dpk を開いて、DelphiX.dpk で名前を付けて
保存し、コンパイル・インストールできました。

あかねファンさんも言われていますが、私もインストーラが Help をどうしてい
るのはか興味あります。一度もインストーラでインストールできてないので (^^;

ツールに登録するには、プログラムには winhlp32 を指定し、実行時引数に、
D:\Projects\libDelphi\DelphiX\DelphiXj.HLP などと指定すれば OK です。


長いディレクトリは作ってないつもりなんですが 投稿者:あかねファン  投稿日:10月16日(土)12時24分32秒

B:\DelphiX\Bin>dir

 ドライブ B: のボリュームラベルは  DATA
 ボリュームシリアル番号は 3C16-19F7
 ディレクトリは B:\DelphiX\Bin

.              <DIR>        99-09-30  20:30 .
..             <DIR>        99-09-30  20:30 ..
INSTAL~1 EXE        22,016  99-09-12   6:42 Install_for4.exe
INSTAL~2 EXE        17,920  99-09-12   6:42 Install_for3.exe
         2 個             39,936 バイトのファイルがあります.
         2 ディレクトリ 1,556,996,096 バイトの空きがあります.

B:\DelphiX\Bin>

>堀 さん

>インストーラはレジストリ操作も行っていますので、
では、インストーラを使わずに.dpkを開いてコンパイル・インストール
して問題ないんでしょうか?

インストーラが正常に動いた場合、ヘルプはDelphiヘルプに統合される
んでしょうか? 今のところ、DelphiX.hlpをダブルクリックして起動
しています(ちょっと不便)。[ツール(T)]に登録しようと思いましたが、
無理でした。……あ、これはDelphiじゃなくて、ランチャーとか
「クイック起動」に組み込めばいいのか(笑)


Delphi5対応に感謝! 投稿者:kana  投稿日:10月16日(土)04時45分27秒

堀さん、さっそくのDelphi5対応に感謝します。
インストール時に「自分でコンパイルしなさい」旨のメッセージがでましたが、
別に苦労することなくインストールできました。
サンプルもちゃんと動いています。
報告とお礼まで・・・


過去ログ 投稿者:lofl  投稿日:10月16日(土)01時39分29秒

掲示板と過去ログのページにある分との
間のログをお持ちの方はいらっしゃいませんでしょうか。

とっておいたファイルをなくしてしまったようで・・・
どなたか、いただけませんでしょうか。
お願いします。


マルチレス(引用符に間違いがありましたので修正しました) 投稿者:  投稿日:10月14日(木)23時48分40秒

◆ えるさん

>こっそり delphi5 への正式な対応を待ってたり...
># 言わないと伝わらないし、書いておこう。

DelphiX 99.09.23 で Delphi 5 に正式に対応しましたが、正常に動かないなどの
不具合があるのでしょうか?

◆ ぽくむらさん
>DelphiXのインストールは、
>Delphiが入っているディレクトリのパスが
>短いと割とうまくいくようです。

その通りですね。インストーラは内部で dcc32.exe を呼び出しているのですが、
パスが長いとコマンドラインの255文字制限を越えてしまいうまくいかなくなってしまいます。

>送れましたが、30KHit突破おめでとうございます。
>これからもますますのご発展を...。
>DirectX7が出たみたいですし。

どうもありがとうございます(^^

◆ 黒鳩さん

>早速ですが、DelphiXでは、ワイプは使えないのですか?
>わかる人がいたら教えていただけると幸いです。
>ワイプのアルゴリズムも解らないのでお願いします

ワイプとはどういうものなのでしょうか?

◆ あかねさん

>できれば、インストール用のexeプログラムの他に
>「実行するとソースをコンパイルしてくれるバッチファイル」
>も提供して頂けるとありがたいのですが。

それはちょっと無理だと思います。インストーラはレジストリ操作も行っていますので、
バッチファイルではちょっと力不足だと思います。

◆ えるさん

>あまり TDXPlay が複雑になるのも「とりあえず簡単に使える」という現状に対して良
>く方向だと思うので、別コンポーネントとして今からまとめてみます(^^;

私もその方がいいと思います(^^;

◆ kana さん

>というわけでDelphi5への対応を期待したいのですが、
>堀さんはDelphi5使う予定ありますか?

DelphiX 99.09.23 で Delphi 5 に対応しました。

◆ あーるさん

>やっぱり TMPGEnc に魅せられた方がほとんどなんでしょうか。
>30万 Hit おめでとうございます。

どうもありがとうございます〜


DXF->x 投稿者:GASHIX  投稿日:10月14日(木)22時15分07秒

DXFファイルをXファイルに変換したいのですが、良いツールを
知りませんか?たしかSDKに入っていたような気が・・・
よろしければメールで送って頂けませんか?


Re:D5 投稿者:NAZO  投稿日:10月14日(木)00時56分46秒

D5に対応してるようですが
ひょっとして正式じゃなかったのかな


D5 投稿者:える  投稿日:10月13日(水)22時07分10秒

こっそり delphi5 への正式な対応を待ってたり...
# 言わないと伝わらないし、書いておこう。

Win2K RC1 で DirectInput がまともに動かないので難儀してます(T-T



インストール 投稿者:ぽくむら  投稿日:10月13日(水)12時14分58秒

DelphiXのインストールは、
Delphiが入っているディレクトリのパスが
短いと割とうまくいくようです。
...手動インストールができたみたいなので、
必要ないかな(^^;)

http://ueno.cool.ne.jp/pokumura/


はじめまして 投稿者:黒鳩  投稿日:10月08日(金)12時31分11秒

DelphiXはすごいですねぇ
自分は16歳の高校生です。
早速ですが、DelphiXでは、ワイプは使えないのですか?
わかる人がいたら教えていただけると幸いです。
ワイプのアルゴリズムも解らないのでお願いします


できました。m(_ _)m 投稿者:あかねファン  投稿日:10月02日(土)11時59分03秒

.dpkを開いて「コンパイル」→「インストール」としたらできました。
ありがとうございます>あーる さん

でも、ヘルプが統合化されないのが残念ですね。

私もDelphiでゲームを作っているので、早いとこ
DirectXに対応させたいです。

#おおっポリゴンがぐるぐる回る〜〜


RE: インストールできません? 投稿者:あーる  投稿日:10月02日(土)02時05分15秒

こんにちは、あーるといいます。

手動インストールですが $(DelphiX)\Source フォルダに有る DelphiX_for3.dpk という
ファイルを Delphi で開くとパッケージエディタというウィンドウが出てくるはずです。
それのインストールボタンを押せば、あとは自動的にコンパイル、インストールされると思います。
うちは Delphi4 なんで間違えていたらすみません。


インストールできません? 投稿者:あかねファン  投稿日:10月01日(金)15時12分06秒

DelphiX のインストールにはどれくらい時間が
かかるのでしょうか?
私が使っているのは Delphi3 なので 3用の
インストーラを実行したのですが、[実行]ボタンを
押しても反応がありません。正確に言えば、
カーソルが砂時計に変わったまま、何の反応も
しなくなります。30分待っても変化が無かったので
(おまけに 強制終了ダイアログを開くと「応答なし」
になっている)あきらめたんですが、もっと時間が
かかるものなんでしょうか。

……と思いながら過去ログを見ると、結構発生してる
じゃありませんか(涙)。インストーラを使わない場合、
どうすれば DelphiX が使用可能になるのでしょうか。
(できれば readme に書いて欲しいです)

できれば、インストール用のexeプログラムの他に
「実行するとソースをコンパイルしてくれるバッチファイル」
も提供して頂けるとありがたいのですが。

長文で失礼しました。


Re:TDXPlay 改造 再び 投稿者:える  投稿日:09月26日(日)19時56分15秒

プレイヤーの削除は IDirectPlay4.DestroyPlayer(ID: TDPID); です(^^;
自爆および、ホストからの強制削除ができます.

TDPlaySession は TCollectionItem 派生だったのを TPersistent に変更したので
ちょっと困ったことになってます(^^;
「ちょっと触った」で済まない状態になりつつあるので TDXPlay をほとんどコピーし
た違うものを作成してしまうほうが TDXPlay に変に依存しなくていいかもしれないで
すね (^^;

あまり TDXPlay が複雑になるのも「とりあえず簡単に使える」という現状に対して良
く方向だと思うので、別コンポーネントとして今からまとめてみます(^^;


Re:TDXPlay 改造 再び 投稿者:TIX  投稿日:09月26日(日)18時54分15秒

愛用させて下さい(^^;

そういえば以前に使ったときに欲しいな〜と思った機能がユーザーのkickなのですが、
これってできないんでしょうか?DirectPlayにはそんな機能ないのかな。

#3Dサウンド、がんばって勉強してみます(^^;


Delphi5 投稿者:kana  投稿日:09月25日(土)22時37分33秒

Delphi5手に入れました。
残念ながら、DelphiXのインストールには失敗。
DirectX.pasでコンパイルエラーになってしまいました。
(あまり中身を見ずにその場しのぎの修正をかけたところ、インストールは出来たのですが、やはりちゃんと動いてくれませんでした。)
というわけでDelphi5への対応を期待したいのですが、
堀さんはDelphi5使う予定ありますか?


TDXPlay 改造 再び(^^; 投稿者:える  投稿日:09月25日(土)17時57分18秒

1 つ実現できると, また別の機能を求めてしまうもので(^^;

DirectPlay を利用した 3 人以上のゲームの場合には

・ブリーフィングルームで待機、面子の確認や Chat による打ち合わせ
・ゲームの開始

という過程をたどることが多いと思いますが、これを DelphiX でやろ
うとすると、ゲーム開始後にも接続してくる人が居てちょっと面倒が発
生します.

そこで、「新規参加禁止」や「MaxPlayers の動的な変更」などの機能
を TDXPlay につけたくなりました.

適当に変更したものを URL に入れておきます。こんな感じはいかがで
しょう ?

http://www.din.or.jp/~saepro/delphi/dx/


re: 3D サウンド 投稿者:える  投稿日:09月25日(土)17時49分47秒

DirectX6 のヘルプから「DirectSound」->「DirectSound の要点」とひくと

・DirectSoundの3Dへの応用

という項目があります、そのリンクをたどると

:: DirectSoundにより、アプリケーションは音源やリスナーの見かけの位置 (定位)
:: や方向を変更できる。さらに、ドップラーシフトを使って音源とリスナーの相対
:: 速度も示唆できる。

と、あります. さらに子項目として「Direct3D への統合」「モノラル音源とステ
レオ音源」「音源位置の認識」があり、参考項目に「DirectSound 3D バッファ」
「DirectSound 3D リスナー」とありますので、DirectX6 で可能だと思います。
# いや、DirectX5 でもコレはあったような気がする.

具体的な使い方や DelphiX でどうするかってところまではわからないですが(^^;
使えることは確かなのでリファレンスを読みながらがんばってみると良いのでは.



3Dサウンド 投稿者:TIX  投稿日:09月25日(土)15時34分23秒

よくわからないで書いています、すみません。
DirectSoundか何かの機能で音の位置を設定できるらしいとの話をちらりと聞きました。
なんだか音の移動によるドップラー効果もあるとか。これってできるんでしょうか・・。

これってDirectX7の話ですかね?(^^;


ちょっとだけ 投稿者:える  投稿日:09月25日(土)02時18分46秒

サーフェスをシステムメモリに確保すると遅くなるとは限らないようです.
DirectX 関連で検索すると, ものすごい量のビデオカード(100近い)の計測結果がありました.
日本語のページでも 10 種類くらいの計測をやっている人のページがあったはずです.


300KHIT 投稿者:あーる  投稿日:09月24日(金)23時34分14秒

DirectX7SDK をダウンロードしてみました。VBでも使えるなんて便利な世の中になったもんです。

あと、ぽくむらさんの書きこみをみて「へぇ3万アクセスかー、すごいなー。」とか思ってたら
良く見ると 300K=30万!! とは…
やっぱり TMPGEnc に魅せられた方がほとんどなんでしょうか。
30万 Hit おめでとうございます。


30KHIT 投稿者:ぽくむら  投稿日:09月24日(金)11時34分43秒

送れましたが、30KHit突破おめでとうございます。
これからもますますのご発展を...。
DirectX7が出たみたいですし。

http://ueno.cool.ne.jp/pokumura/


re: DxDrawのスピード 投稿者:KAZU  投稿日:09月24日(金)09時35分47秒

全画面書き換えですと、やはりスピード的に難しいところがあるようですね
現状では、BitBltの方が倍近く早いですから、無理にDirectXにする必要も
ないので、BitBltでいってみます
DirectXは速いと思いこんでいましたが、考えを改めるキッカケになりました


RE:DXDrawのスピード 透過転送 投稿者:NAZO  投稿日:09月24日(金)01時03分37秒

G200も遅くなくて
ある意味認識が正しかったのかな
透過する領域が多いと透過転送の方がハードだとはやくて
透過する領域がなくても影響を受けないような思い込みが
ありますが正しいものでしょうか
特にこれが分かってもあまり関係ないんですけど
背景と同じ色ならなるべく透過転送したほうがいいとか
あるのかもしれないと思いまして
なんかDelphiXに関係なかったですね すいません


RE: DXDrawのスピード 投稿者:あーる  投稿日:09月23日(木)04時45分00秒

うちも G200 ですが、透過転送が遅いなんて事は無いですよ。
昔、カラーキーを指定し忘れたまま透過転送しようとしたときはかなり遅かったので
それだったのかもしれません。


re:DXDRAwのスピード 投稿者:NAZO  投稿日:09月23日(木)00時14分30秒

DelphiXを落として確認したのですが
LoadFromStreamを使った場合は
TDIBにコピーして
それからTDirectDrawSurfaceのCanvasにコピーしてる
ので直にかくより確実におそくなりますね


Re:DXDrawのスピード 投稿者:NAZO  投稿日:09月22日(水)23時56分30秒

関係ないですけど
透過転送ってMatrox G200でもおもいんですねぇ
認識不足かもしれないけど確か透過転送って最近
のビデオカードじゃ ほとんど関係ないですよね



Re:DXDrawのスピード 投稿者:NAZO  投稿日:09月22日(水)23時43分09秒

毎回読み直してたんですね
毎回読み直すとなると 描画の重さより読み直すことの
重さの方が重要になってきますね

私にはレスつけれないような気がしてきましたが
MemoryStreamに確保してLoadFromStreamより直接
サーフェイスをロックして書きこむと速くなるかも
しれません


re: DxDrawのスピード  投稿者:KAZU  投稿日:09月22日(水)10時17分06秒

レスありがとうございます
動作環境を書いていませんでした、すいません

 GATEWAY GP-300(Pentium300,memory 128M)
 WindowsNT4 SP5
 Matrox G200(8MB)
 1600x1024(256色)

SurfaceをSystemMemoryに確保はしていません、メモリー不足にもなっていないと
思いますし、ビデオメモリーにとられてるか、システムメモリーにとられたか
と言う区別はどこでつくのでしょうか?

それで、あーるさんの指摘の件、修正しましたら一気に早くなりました!
Drawがマイクロ秒の世界、Flipが2.6msでした
それでもトータル的にBitBlt使ったモノより遅いです、TImage使って読み込んだ場合と
同等くらいです

それで、今回は疑似動画みたいな感じの表示をさせており、キャプチャーした画像を
TMemoryStreamに入れてるため、毎回、FSurface.LoadFromStreamを読み出して
画像を読み込んでいます
このFSurface.LoadFromStreamが結構遅いです、ここで5.8ms
ちなみにTBitmap を使った場合のLoadFromStreamメソッドは1.7msほどで
終わります

毎回、全画像を更新しなくてはならない場合、FSurface.LoadFromStreamを使わない
方法などあるのでしょうか?


RE:DXDrawのスピード 投稿者:NAZO  投稿日:09月22日(水)00時22分21秒

あとTDXDrawのオプションでSurfaceをSystemMemoryに確保
するようにしてないか
もしくは元々ハードのビデオメモリ不足でシステムメモリに
確保されてるなどで速度が落ちるとおもいます


RE: DXDrawのスピード  投稿者:あーる  投稿日:09月22日(水)00時11分42秒

KAZU さんこんにちは。気になったのですが、

>DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, True);
                                                          ~~~~ ← ここ
Draw メソッドの最後の引数は透過転送を行うかどうかを指定するものです。
もし透過転送する必要が無いのなら

DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, False);
                                                        ~~~~~
としてみてはいかがでしょうか。


:re DXDrawのスピード 投稿者:NAZO  投稿日:09月21日(火)23時21分21秒

ありえないとは思うのですが
Drawするたびに以下のコードをよびだしてるとか 
FSurface.LoadFromStream(FBeta);
そんなことないか.....

あとビデオカードによってはGDIのほうが早いとか
あるかもしれない
あるとしたら 相当古いビデオカードだろうけど あるのかな

すいません レスになってないですね


re: DxDrawのスピード  投稿者:KAZU  投稿日:09月21日(火)11時19分27秒

最初はDrawでやっていたのですが、見て遅いのがわかるほどで、下の処理で40msほど
かかっています、とくにDrawが28msと、Canvas.Draw使うより5,6倍遅いのです

  FSurface.LoadFromStream(FBeta);
 DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, True);
  DXDraw1.Flip;

なにか、使い方を間違っているのでしょうか?


DxDrawのスピード 投稿者:NAZO  投稿日:09月20日(月)23時21分04秒

DirectXで早く描写したいのなら
Surface.Canvasでなく
Surface.Drawだと思います


DxDrawのスピード 投稿者:KAZU  投稿日:09月20日(月)15時36分46秒

DelphiXを使ってDXDrawを使っているのですが、320x240x8の画像を
すみません、改行いれ忘れたため、もう一度アップします

DXDraw(ウィンドウモード)とBitBlt使った場合の表示スピードを
比べているのですが、DXDrawは次のようなソースで描画しており、
この処理だけで10msほどかかっています、
BitBltを使った場合は3.5msで描画でき、
DirectXは早いと言う先入観があったのですが、
なぜBitBltより遅くなってしまうのでしょうか?、
ご教授ください


 with DXDraw1.Surface.Canvas do
   begin
     Draw(0, 0, DrawBitmap);
     Release;
   end;
 DXDraw1.Flip;


DxDraw 投稿者:KAZU  投稿日:09月20日(月)15時33分33秒

DelphiXを使ってDXDrawを使っているのですが、320x240x8の画像をDXDraw(ウィンドウモード)とBitBlt使った場合の表示スピードを比べているのですが、DXDrawは次のようなソースで描画しており、この処理だけで10msほどかかっています、BitBltを使った場合は3.5msで描画でき、DirectXは早いと言う先入観があったのですが、なぜBitBltより遅くなってしまうのでしょうか?、ご教授ください


 with DXDraw1.Surface.Canvas do
   begin
     Draw(0, 0, DrawBitmap);
     Release;
   end;
 DXDraw1.Flip;


(無題) 投稿者:  投稿日:09月17日(金)19時21分54秒

>DXInputでは、Mouseは相対座標しか取ることが出来ず、マウスカーソルの現在位置
>を調べようとすると結局DXInputとは別にVCLのONMouseMoveイベントで毎回記録して
>いる、という状況なんです。現在位置が分からないとやっぱり、画面上でクリック
>された時などの処理に困りますよね。このあたりの実装を、DirectXではどういう風
>にやっているのか、是非知りたいのです。

相対座標とは前回のマウスの位置との差分なので TDXInput.Update メソッドを
呼び出すたびに相対座標を加算していけば絶対座標が得られると思います。 

ただマウスの位置を完全に自分で管理することになるため、手間が増えると思います。

beign
  {  FMousePos は TPoint 型変数  }
  FMousePos.X := FMousePos.X + DXInput1.Mouse.X;
  FMousePos.Y := FMousePos.Y + DXInput1.Mouse.Y;

  {  カーソルが画面外に出ていかないようにする  }
  if FMousePos.X<0 then FMousePos.X := 0;
  if FMousePos.Y<0 then FMousePos.Y := 0;
  if FMousePos.X>=DXDraw1.SurfaceWidth then FMousePos.X := DXDraw1.SurfaceWidth-1;
  if FMousePos.Y>=DXDraw1.SurfaceHeight then FMousePos.Y := DXDraw1.SurfaceHeight-1;
end;


(無題) 投稿者:Mr.y  投稿日:09月17日(金)13時24分50秒

どうも、こんにちわ。yです。

>堀さんへ。
9/12バージョンのDelphiXにて、DXInputのMouseの入力動作を確認しました。
素早い対応、ありがとうございます(^^)。

<DirectXとMouse?>
DirectXを使っている方は、僕から見るとだいたいシューティングか、もしくは
3Dの開発に長けている方が多いようですが、どうでしょうか。
僕は、2Dにもっとアニメーションを加えるためにこの環境を選んだのですが、
何が言いたいかというと、Mouseをデバイスとして使っているサンプルが少くて
困っているわけです。
DXInputでは、Mouseは相対座標しか取ることが出来ず、マウスカーソルの現在位置
を調べようとすると結局DXInputとは別にVCLのONMouseMoveイベントで毎回記録して
いる、という状況なんです。現在位置が分からないとやっぱり、画面上でクリック
された時などの処理に困りますよね。このあたりの実装を、DirectXではどういう風
にやっているのか、是非知りたいのです。

マウスをデバイスとしてゲームを作っている方などいましたら、ぜひ教えて下さい。

from Mr.y



RE:DXInput 投稿者:  投稿日:09月13日(月)23時35分26秒

>しかし、直接アクセスはできないのでしょうか?

TDXInput コンポーネントは意図的に DirectInput に直接さわれないようにしています。

>ところで、コンポーネントってことはVCLの子孫なわけですが、
>スレッドに対して安全でしょうか?
>スレッド対応というのは、TThreadを使ったスレッド対応ということですか?

TDXInput.Update メソッドを呼び出すだけなら、たぶん大丈夫です。
ただ排他処理をしていないので、メインスレッドから TDXInput をいじらないように
する必要があると思います。

>スレッド対応というのは、TThreadを使ったスレッド対応ということですか?

はいそうです。


DXInput 投稿者:ぽくむら  投稿日:09月13日(月)16時36分05秒

>>堀さん

>別スレッドで回して自前のバッファに...
うーむ、やはりそうなりますか....。
やったことはあるのですが、不安定になるためやめてしまったのです。

しかし、直接アクセスはできないのでしょうか?

ところで、コンポーネントってことはVCLの子孫なわけですが、
スレッドに対して安全でしょうか?
スレッド対応というのは、TThreadを使ったスレッド対応ということですか?

http://ueno.cool.ne.jp/pokumura/


マルチレス 投稿者:  投稿日:09月12日(日)06時46分27秒

◆ aihatena さん

>ゲームを FireWall越しにやりたいという意見がありまして
>DirectPlay6 から、特定portのみ使用するよう指定できるようですので
>DirectPlay Addressの DPAID_INetPortを指定するようにできませんでしょうか?

とのことなので TCPIPSetting プロパティに Port プロパティを追加しました。
Samples\Network\Chat2 サンプルで確認できると思います。

Open2 メソッドで接続しないとTCPIPSetting プロパティの値が使われませんので注意して下さい。

>#はうぁっ、何時の間に DelphiX_for5.dpkがっ(笑)

DelphiX 自体は Delphi 5 に対応して出来ているんですが、Delphi 5 日本語版が
発売されるまでは使えないようにしてあります。

◆ y さん

>DXInputのMouse対応についてどうなっているのかおたずねしに来ました。
>実装しかけ? なのでしょうか。プロパティのENABLEをTrueにするとエラーが
>でてしまって。ヘルプの方にもマウスには対応していないように書かれて
>おりますが、どうなんでしょうか。

マウスには正式に対応していますが、どうやらバグで使えなかったようです。
バグ報告どうもありがとうございます。

DelphiX 99.09.12 ではちゃんと使えると思います。


DPAID_INetPort 対応希望 投稿者:aihatena  投稿日:09月12日(日)02時42分24秒

お世話になっています _o_

ゲームを FireWall越しにやりたいという意見がありまして
DirectPlay6 から、特定portのみ使用するよう指定できるようですので
DirectPlay Addressの DPAID_INetPortを指定するようにできませんでしょうか?
(DirectX6 helpの "DirectPlay Address Data Types" および
                 "Firewall Support in DirectPlay 6.0" より)

DXPlay.pas 692行からの TCustomDXPlay.CreateDPlayWithoutDialogで
指定できそうな気はするのですが..

以上、簡単にできそうでしたらよろしくお願いします。

#はうぁっ、何時の間に DelphiX_for5.dpkがっ(笑)


Re: IPX 投稿者:aihatena  投稿日:09月11日(土)14時09分53秒

自己レスです

IPX云々の原因は、SendMessageExをそのまま使っていたことでした ^^;;;
しかも (DPSEND_ASYNC, DPSEND_GUARANTEED)付き..
元に戻すと IPXでもそのまま実行できましたとさ。

お騒がせしました _o_


IPX 他〜 投稿者:aihatena  投稿日:09月11日(土)01時28分51秒

なるほど、確かに「現在 TCP/IPのみサポート」みたいに書いてありますね。

しかし何度再構築しても IPXが使えなくなってしまったのは謎 ^^;
(まあ TCP/IPで問題なく動作するのでなくても平気ですが(笑))

いっしょうけんめい英語hlp読んだおかげで、async付き送信が
だいたい理解できました。今までユーザ側で行っていたキューイングを
DirectPlay側で行ってくれてるんですね。

問題はパケット落ちだけでなく、順番も保証してくれるのかどうか..
「Any additional send will not be sent concurrently.」なので
多分大丈夫だとは思いますが。


日本語ヘルプ / IPX 投稿者:える  投稿日:09月11日(土)00時35分39秒

投稿ボタンを押したら IE が転んだので書きなおしなんです。
文章をまとめて書きなおすのが面倒なので適当に書き散らしです、ごめんなさい

MSDN Library で 98/10 以降 DirectX の日本語ヘルプは提供されています。
現在は DirectX6 まで日本語のヘルプになっています。
MSDN Library Subscription は 3000円/月 程度なので学生の時から契約し
ています。DirectX のヘルプもですが、他の Windows API のリファレンス
や、KB や QaA の内容を全部あわせて 3000円/月ですし、高いというほどで
はないと思います.

前回の投稿の IPX うんぬんは

IPX はハードウェアが伝達保証している範囲のプロトコルだから
ハードウェアが正常なら伝達は保証されているので、プロトコル
に保証通信を行う機能は必要ないし、利用できないでしょう。

ってことだったんですが、わかりにくかったですかね(^^;


マウス対応? 投稿者:Mr.y  投稿日:09月10日(金)23時26分13秒

どうもこんばんは、yといいます。
DXInputのMouse対応についてどうなっているのかおたずねしに来ました。
実装しかけ? なのでしょうか。プロパティのENABLEをTrueにするとエラーが
でてしまって。ヘルプの方にもマウスには対応していないように書かれて
おりますが、どうなんでしょうか。

from Mr.y


マルチレス 投稿者:  投稿日:09月10日(金)19時02分08秒

◆ ぽくむらさん

>直接アクセスか、GetDeviceDataメソッドが
>サポートされるとありがたいのですが....。

GetDeviceData メソッドを呼び出せても1フレームごとに Pool メソッドを
呼び出さないと意味がないと思います。

TDXInput コンポーネントを別スレッドで回して自前のバッファに
コピーしていくしか無いと思います。TDXInput はソースコードを見る限りでは
スレッド対応になっているので大丈夫だと思います。

◆ aihatena さん

>今までは 2人でも結構ぽろぽろ Message落ちていたのが嘘のように
>なくなり、3人で1時間程度のテストプレイを完遂できました。

結構効果があるんですねぇ。

>あとこのプログラムで Asyncが True/Falseにかかわらず
>IPXでの通信ができなくなってしまいました ^^;

これはおかしいですね。一度プロジェクトを再構築(ビルド)してみてはどうでしょうか?

◆ NAZO さん

>オフィシャルマニュアルみたいなのがあったと思うのでそれを買うといいかもしれません
>かなりの値段だったので私には入手不可でした

かなり高いですよね。6K円 ぐらいでしたっけ。


DXInputへの要望 投稿者:ぽくむら  投稿日:09月10日(金)16時25分36秒

こんにちは、ぽくむらです。

初歩的な質問かもしれませんが、
DXInputにはDirectInputオブジェクトへ直接アクセス
できないみたいなので、できるようにしてほしいです。

というのも、入力状況を得る関数にGetDeviceStateが
使われているため、ゲームで入力状況を得るとき、
特に格闘ゲームなどでは、こま落ちしたとき正常に
入力できないからです。

直接アクセスか、GetDeviceDataメソッドが
サポートされるとありがたいのですが....。

よろしくお願いします。

http://ueno.cool.ne.jp/pokumura/



非同期送信〜 投稿者:aihatena  投稿日:09月10日(金)02時22分03秒

さっそく 990909ので Async付き SendMessageを試してみました。
(自作ゲーム。4人まで。TCP/IP越し)

今までは 2人でも結構ぽろぽろ Message落ちていたのが嘘のように
なくなり、3人で1時間程度のテストプレイを完遂できました。
ただ若干 Messageの順番の前後があるので (再送等?)
ソフト側で対応しなければなりませんでしたが。

あとこのプログラムで Asyncが True/Falseにかかわらず
IPXでの通信ができなくなってしまいました ^^;
TCP/IPにすると正常ですし、サンプルの Chat.exeでは
Asyncによらず IPXで通信できているので謎ですが..

なにはともあれ、非同期送信対応ありがとうございます〜


Re:日本語ヘルプ 投稿者:NAZO  投稿日:09月09日(木)23時18分28秒

DirectX6の日本語ヘルプは、どこかで見た情報なので記憶違いかもしれませんが
MSDN Junuaryについてたそうです
個人では、私の知ってる限り入手不可能だと思います
個人でMSDNはいれるようなひとは別だけどそんなひともいないでしょう
オフィシャルマニュアルみたいなのがあったと思うのでそれを買うといいかもしれません
かなりの値段だったので私には入手不可でした


マルチレス 投稿者:  投稿日:09月09日(木)14時43分58秒

◆ Shinji さん

>プログラム実行中、時間が経つにつれてどんどんFPSが少なくなっていきます。
>そしてウィンドウモードからフルスクリーンモードに変更したとき(この逆も)には
>FPSは元の値に戻るのですが、また時間が経つにつれてどんどん少なくなってしまいます。

NAZO さんがレスを付けられているように私もメッシュの追加とかが原因だと思います。

◆ えるさん

>保証付き通信はセッションを開く時に DPSESSION_DIRECTPLAYPROTOCOLを
>オプションとして必要とするようです。

とのことなので修正してみましたが、直りませんでした。というより保証無しで送信しても
うまくいきませんでした。

DPSEND_ASYNC を使用するには、プロトコルがサポートしていないといけないみたいです。
DirectX Viewer で見てみたら TCP/IP しかサポートしていませんでした。

TDXPlay コンポーネントに現在のプロトコルは非同期送信をサポートしているかを返す
AsyncSupported プロパティを追加しました。

また Async プロパティを追加し Send メソッドでプロトコルがサポートさえしていれば
自動的に非同期送信出来るようにしました。

># DirectX5 以降は日本語ですよね>DirectX SDK のヘルプ

DirectX6 SDK に DirectX5 の日本語ヘルプが付いてきます。DirectX6 の
日本語ヘルプは無いです。

◆ aihatena さん

>サンプルの Network\Chat などで試してみましたが、
>Protocolが IPXのときうまく送れません。

非同期送信は TCP/IP しかサポートしていないようです。

◆ あーるさん

>DelphiX 最新版さっそくダウンロードさせて頂きました。
>えー、ヘッダの間違いを見つけましたので報告いたします。
>4365行目の GetTextureStageStage、4366行目の SetTextureStageStage はそれぞれ
>GetTextureStageState, SetTextureStageState だと思います。

どうもありがとうございます。早速修正しました。

◆ H.Matsuda さん

>DelphiX では既に MMX コードを使っているようですので、中途半端なMMXを使っても
>これ以上の高速処理を望むことは出来ないのでしょうか?

DelphiX の MMX コードはかなり遅いと思いますので専用のルーチンをガリガリ作った方が
速いと思います。


Re:パレットについての疑問 投稿者:Masaaki Ohnaka  投稿日:09月09日(木)09時20分07秒

自己レスです。

サーフェスのRestoreでうまくいきました。
色々もがいているうちに出来ました。
お騒がせしてすみません。


Re:FPSがどんどん少なくなっていくのですが 投稿者:NAZO  投稿日:09月09日(木)05時21分04秒

レスでないレスです
ずばり指摘できる人もいるかもしれませんが
Direct3DRMでなにをやってるかを書かないと
レスのつけようがないと思います
あと時間がたつとはどれくらいの時間とか、
ビデオカードとか、非常に単純なプログラム
やサンプルでもおこってるのかなどがあると
問題が絞れるかもしれません。
と 偉そうなことを言いましたが 私には難し
い問題でレスをつけられない可能性は、高い
のですが、ここには、HORI様を筆頭に優
れた方がたくさん御覧になられてるのでもう
少し情報をかくといいと思います
こんなことはないと思いますが スクリーンを
変更したときオブジェクトを開放してフレーム
が回る時どこかで メッシュをひたすら追加し
てしまってたとかそういう可能性とかは.....
ないか(私はうっかりテストで挿入したのを忘れてやってしまいました なさけない.....)


FPSがどんどん少なくなっていくのですが… 投稿者:Shinji  投稿日:09月08日(水)23時42分04秒

 初めまして。DelphiXでお世話になっているShinjiです。
現在DelphiXでDirect3DRMをやっていて今回どうしても分からないところがあるので質問させてください。

プログラム実行中、時間が経つにつれてどんどんFPSが少なくなっていきます。
そしてウィンドウモードからフルスクリーンモードに変更したとき(この逆も)には
FPSは元の値に戻るのですが、また時間が経つにつれてどんどん少なくなってしまいます。
これは何が原因でこうなるのでしょうか?本当に私にはわかりません。
何か解決策や参考になること、良きアドバイスがあれば教えてください。
お願いします。


非同期通信 投稿者:える  投稿日:09月08日(水)22時38分00秒

えっと、非同期通信リクエストしたものです(^^;
# でも、まだ試してません(^^;

保証付き通信はセッションを開く時に DPSESSION_DIRECTPLAYPROTOCOLを
オプションとして必要とするようです。

dxplay.pas line.962
    dpDesc.dwFlags := DPSESSION_MIGRATEHOST or DPSESSION_KEEPALIVE;

に、足してあげてみてはいかがでしょう ?

TCP/IP の場合は Winsock v2.0 以降が扱える必要もあります。

IPX はセグメント内通信なのでプロトコルレベルでの着信確認は行わなくても
ハードウェアが正常に稼動していれば必ず着信するはずですし、そのような前
提で使われているのではないのでしょうか ?

# DirectX5 以降は日本語ですよね>DirectX SDK のヘルプ


パレットについての疑問 投稿者:Masaaki Ohnaka  投稿日:09月07日(火)15時23分49秒

初めまして。
先日DelphiXをダウンロードさせていただき、
色々動作を試している段階です。(かなり使い易いですね)。

その中でパレットの動作でどうしても分からないことがあります。

以下のコードは、DXGファイルを読み込みパレットを設定するものです。
これを表示すると、色が化けてしまいます。
画面は640×480×8、DXGファイルの絵は1枚だけ。
フルカラーの画像を256色に減色。その際システムパレット番号を
空けて減色するようにしています。

何か他に注意する点があるのでしょうか。

    with FrmMain.DXITitle do
    begin
        Items.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + 'Title.dxg');
        for i := 0 to Items.Count - 1 do
        begin
            Items[ i ].Transparent := true;
            Items[ i ].TransparentColor := RGB( 0 , 0 , 255 );
        end;
        Items.MakeColorTable;
        FrmMain.DXDMain.DefColorTable := Items.ColorTable;
        FrmMain.DXDMain.ColorTable := Items.ColorTable;

        FrmMain.DXDMain.UpdatePalette;

    end;


IPXで SendMessageEx 投稿者:aihatena  投稿日:09月01日(水)00時11分22秒

TDXPlay.SendMessageExで保証付き非同期送信! ということで
サンプルの Network\Chat などで試してみましたが、
Protocolが IPXのときうまく送れません。

Main.pasの TMainForm.Button1Clickで
  DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize);
のところを
  DXPlay1.SendMessageEx(DPID_ALLPLAYERS, Msg, MsgSize, 
                        (DPSEND_ASYNC or DPSEND_GUARANTEED));
にしています。送信ボタンを押しても相手窓に表示されません。

DirectX6ヘルプのSendExを見ると、意訳で
  DirectPlay protocolフラグがセットされてると guaranteedをサポートしてなくても
  保証付きで送ることができる。セットしてないときは guaranteedをサポートしてないと
 保証付きで送ることができない
ここの辺りが関係してるのでしょうか..?
こうすれば IPXでも SendMessageEx使えるよなどの例がありましたら
ぜひ教えて下さい _o_

# ゲームの開発時は IPXでテストしていたので、できないとなると少々不便に(汗


ヘッダの間違い(含8/29版) 投稿者:あーる  投稿日:08月31日(火)20時38分27秒

堀さん、お世話になっております。あーるです。

DelphiX 最新版さっそくダウンロードさせて頂きました。
えー、ヘッダの間違いを見つけましたので報告いたします。
4365行目の GetTextureStageStage、4366行目の SetTextureStageStage はそれぞれ
GetTextureStageState, SetTextureStageState だと思います。

http://www2s.biglobe.ne.jp/~t_harada/



Re: D3Dでの描画  投稿者:あーる  投稿日:08月31日(火)01時03分52秒

>さてそのサンプルですが、Tform1.appidle内のAddSprite内でエラーになってしまいます。
うーん、「Canvasに対する描画ができません」というのは、テクスチャの作成に失敗してるって事だと思います。
DXDraw の Option の doHardware を False にして、HELで描画させてもだめでしょうか。
あと、空きVRAMが足りないのかもしれませんのでフルスクリーンなら動く可能性もあります。


Re[2]:D3Dでの描画 投稿者:TIX  投稿日:08月30日(月)08時13分58秒

あーるさん、こんにちは。サンプルコード、どうもありがとうございます。

さてそのサンプルですが、Tform1.appidle内のAddSprite内でエラーになってしまいます。
「Canvasに対する描画ができません」との事です。
何かハードに依存する部分でもあるのでしょうか。

1600x1200 ハイカラーのウインドウモードってのに問題があるんでしょうか(^^;


Re: D3Dでの描画 投稿者:あーる  投稿日:08月28日(土)15時19分11秒

TIX さん、こんにちは。あーるといいます。

僕も丁度 Direct3D で DrawAlpha 出来ないかなぁと思っていたところでして、
取り合えず DrawPrimitive でがんばってみました。
簡単なサンプルをアップしてみましたので少しは参考になるかもしれません。

http://www2s.biglobe.ne.jp/~t_harada/archive/sample.lzh


できましたが・・・・・ 投稿者:Chi-Chan  投稿日:08月28日(土)00時28分45秒

こんばんは
>DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, FrLight);
>でいかがだいじょうぶだと思います   
できました!!ありがとうございます。


D3Dでの描画 投稿者:TIX  投稿日:08月27日(金)14時55分47秒

お世話になってます。TIXです。

DirectDrawのDrawalphaに比べてDirect3Dでの処理の方が速いらしいと言うことに最近気が
つきました。そこで、DrawAlphaをDirect3Dのメソッドでできないかと考えたのですが、
どうもやりかたが掴めません。サンプルコードを見たのですが、Xファイルを扱うばかりで
直接ポリゴンを計算するような部分は見つけられなかったのですが、困難なのでしょうか。


mailto:matthi@ranet.de 投稿者:Matthias  投稿日:08月23日(月)20時59分28秒

Hello
I've download DelphiX but I haven't many samples and tutorials. 
Can someone mail me addresses were I can find english sites for
DelphiX
Thanx CU


Re:Texture について 投稿者:H.Matsuda  投稿日:08月22日(日)21時12分18秒

こんばんわ、松田です。
本当だ・・・全然気がつきませんでした。
中途半端に DirectX SDK を読んでいたので通常の TDirectDrawSurface に指定を
するのかと思っていました。
お手数をおかけしてすいませんでした、ありがとうございます(^^)


Re: Texture について 投稿者:あーる  投稿日:08月22日(日)06時17分29秒

すでにお気づきかもしれませんが、TDirect3DTexture という恐らくそのものずばりのクラスがあります。


Re互換性 投稿者:NAZO  投稿日:08月20日(金)23時38分25秒

DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, FrLight);
でいかがだいじょうぶだと思います   


互換性について 投稿者:Chi-Chan  投稿日:08月20日(金)04時26分38秒

FrLight  :IDirect3DRMFrame2;    //ライトフレーム
をグローバル変数として宣言して

DXDraw.D3DRM2.CreateFrame(DXDraw.Scene , FrLight);   //フレームの作成
を含めソースを作成してコンバイルすると、
が書かれている行で

 'IDirect3DRMFrame' と 'IDirect3DRMFrame2' には互換性がありません
上のエラーメッセージが出て引っかかります。
多分
DXDraw.SceneはIDirect3DRMFrame型だからそれで引っかかっていると思うんですが
IDIRECT3DRMFrameとIDirect3DRMFrame2の互換性があるはずではないのですか??

Delphi用のDirectXのヘッダのreadmeに
IDirect3DRMFrame2 を IDirect3DRMFrame を継承するようにしたとも書かれていたし

僕にはまったくわかりません
どうすればいいのか対策をおねがいします m(__)m。


ログを取らなかったため欠けました。
DrawADD について(御礼) 投稿者:H.Matsuda  投稿日:08月08日(日)01時21分37秒

あーるさん、はじめまして。
ご返答ありがとうございます。
DirectX でサポートされていないのですね、私の方のPCの環境が悪いとばかり思いこんで
いました。
さっそく言われていますように、アルファテクスチャによる代用の方法にチャレンジしたい
と思います、ありがとうございました。


InsideDelphiX 投稿者:える  投稿日:08月07日(土)20時34分48秒

東京近郊でどこか詰んであった本屋をご存知の方おられませんか?
とりあえず帰宅中に寄れるところには無いんで、ちょっと遠出でもしないと
いけないかと思ってます...

# 出てるんですよね ?


Re: DrawAdd について 投稿者:あーる  投稿日:08月07日(土)20時24分48秒

松田さん、はじめまして。あーるといいます。

加算合成は DirectX ではまだサポートされていないと思います(少なくともHELでは)。
DelphiX では DrawAdd, DrawSub, DrawRotate系は自力で行っているようです。

ということなので、スピードに満足できないという場合には Direct3Dのアルファテクスチャによる
代用を考えてみてはいかがでしょうか(こちらはほとんどのハードでサポートされていると思う)。
$DelphiX\Samples\d3drm\AlphaBlending フォルダのサンプルが参考になるのではと思います。


DrawAdd について 投稿者:H.Matsuda  投稿日:08月07日(土)05時31分20秒

はじめまして、松田と申します。
Delphi で DirectX を使おうと思って資料を買い集めCのコードに死にそうに
なっていた所、DelphiX を見つけて!早速使わせて頂いています。
作成した堀様には感謝感謝です(^^)

さっそく質問をさせて頂きたいのですが、DrawAdd を使用して2個の静止画を合成
しようとしているのですが、これがかなり遅いのです。
ハードウェアアクセラレーションが効いていないのかと思って、Options の SetDriver を
False にして、Driver に GUID を設定しても結果は同じでした。
背景画像に1枚、上に重ねる絵を10枚用意して(全て 320x240x24bit)を単純ループで
行ったのですが、3fpsくらいでした。

行ったのは下記のような感じです(Delphi4 Pro)

DrawDibDraw(DDH,DXDraw1.Surface.Canvas.Handle,0,0,320,240,@T1,@BB,0,0,-1,-1,0);
DxDraw1.Surface.Canvas.Release;
DrawDibDraw(DDH,Surface2.Canvas.Handle,0,0,320,240,@T2,@BB,0,0,-1,-1,0);
Surface2.Canvas.Release;
VRC.Top:=0;
VRC.Left:=0;
VRC.Right:=320;
VRC.Bottom:=240;
DXDraw1.Surface.DrawAdd(VRC,VRC,Surface2,False,255);
DxDraw1.Surface.Canvas.Release;
DXDraw1.Flip;

Surface2 は予め作成して、SetSize してあります。
何か根本的な使い方を勘違いしているのでしょうか?
なにかヒントでもありましたらご教授して頂ければと思います。

Ps.
PCにはSTB RIVA128 AGP + Monster3D が刺さっています。


RE:人工知能ゲーム作りました。 投稿者:lofl  投稿日:08月04日(水)00時12分41秒

>安田明生さん
スクリーンセーバーや省電力設定が10分に設定されてはいないでしょうか。
DelphiXでのアプリは、これらと折り合いが悪いようで、止まってしまうみたいです。
とりあえず、アプリ実行中はスクリーンセーバーを実行させないようにしておけば良いかと。
具体的な方法は・・・すみません、しりません。
あまりお役に立てずすみません。

lofl


人工知能ゲーム作りました。 投稿者:安田明生  投稿日:08月01日(日)21時44分50秒

DelphiXを使って人工知能ゲームを作りました。遊んでみてください。
(下のHPでダウンロードしてください。)
ところで、このゲームをフルスクリーンで10分以上キーやマウスに触
らないでいるとフリーズしてしまいます。どうしてなのかわかりません。
だれか教えてください。
またHoriさんのDelphiXのサンプルでも同様にフリーズしてしまいます。
samples\graphic\Basic\Sample.dpr
このプログラムをフルスクリーンで10分以上、マウスやキーに触らな
いで置くと、いったん画面が消えます。そこで、マウスをクリックする
と、元に戻らなくなります。スクリーンセーバーなどは設定していませ
ん。なんとかこの現象を解決したいと思っているのですが、よくわかり
ません。誰か教えてください。

http://www.oyako.com/plus/


ゲーム完成しました。 投稿者:JOE  投稿日:07月31日(土)12時04分22秒

DelphiXを使ってアクティブRPGを作ってみました。
タイトルは『殿方の野望「迷宮は男のロマン!』です。
良かったら遊んでみてください。
(ダウンロードは下のHPからどうぞ。)
まだまだ、稚拙な作品ですが...(^^; 

「Inside DelphiX 7月発売予定」...という事は、もう発売になっているのかな?
これから本屋に行って探してみまーす。

http://member.nifty.ne.jp/workshop/


ふむふむ 投稿者:しろ  投稿日:07月26日(月)15時30分25秒

 ども、しろでございます。
 現在DelphiX、ネット上に落ちていた98/10版で制作しております。
>えるさま―ふむふむ、確認したら、2/10版ですね。
 以前のときは98/10版から上書きしたからでしょうか。
 警告は無視でOkなんですね。ふむふむ。
 現在は、描画方法をキャンバスからサーフェスに移行するためにちょこっと調べてます。
 キャンバスからの書き込みをDirectx上で動かすと、、、ウィンドウ上だと
秒間75コマ保っていた描画速度が、全画面表示にすると、4コマまでに落ちます(T_T)。

 いや、プログラムの用語に詳しくなくてすみません。(^^;
ではでは。
P.S ついにDelphi本出版、おめでとうございます。買わねば。

http://plaza.harmonix.ne.jp/~s-okawa/aterier/


re: 前は動いたのに... 投稿者:える  投稿日:07月26日(月)02時17分15秒

> 今年の二月の頃のファイルではうまくいったのですが

あれ? 現在ダウンロードできる最新版は 99/02/10 版ですよね ?
2 月頃のファイルというと同じバージョンかもしれませんね。

> Dxtimer,Max.lagの読み込み中のエラー:プロパティが存在しません。

たぶん、DXTimer.MaxLag のタイプミスだと思うのですが、確かに警告が
出ますけど、無視して構わないと思います。
無視して DXTimer.MaxLag が消えたら、保存しなおせば大丈夫です。

# 昔の DelphiX ではこういうプロパティがあったのでしょうか ?


前は動いたのに。。 投稿者:しろ  投稿日:07月25日(日)16時32分21秒

 はじめまして、しろと申します初心者です。
 最近、パソコンの再セットアップに伴い、DelphiXをDelphi4に再インストール
したのですが、以下のような症状が出まして、使えません。

Dxtimer,Max.lagの読み込み中のエラー:プロパティが存在しません。
エラーを無視して続けますか?
注意:エラーを無視するとコンポーネントまたはプロパティを失う場合があります。

 このようなメッセージが、sample中のDxImagelist内サンプルプログラムの読み込み、
あるいは、自作のDelphixプログラムにもこのような表示が出まして、
しっかりした使用ができません。
 ・・・今年の二月の頃のファイルではうまくいったのですが、できれば、以前のバージョン
のものか何か手に入りませんでしょうか?
 よろしくお願いします。
ではでは。

http://plaza.harmonix.ne.jp/~s-okawa/aterier/frame.htm


本書かれたのですね 投稿者:安岡 直樹  投稿日:07月22日(木)00時45分07秒

大変お久しぶりです。
覚えておられますか?DelphiX初期の頃は大変お世話になりました。
今も、お世話になりたいけど時間がないので、
あ、C マガジンの新刊コーナーにのってましたよ
DelphiXの本 7月発売日にちは不明ですが
おめでとうございます。

バージョンがかなり変わっていて復帰時についていけるか心配ですが
これからもがんばってください。
本は買いに行きます。

http://www2.osk.3web.ne.jp/~yasuoka/


画像が遅れます 投稿者:CAT  投稿日:07月20日(火)02時18分36秒

β10m3、使わせていただいてます。
さっそくですが、MPGファイルとMPGファイルを
つなげるとつなげたほうの後のほうが(合計22分)15分くらいたつと
音が早くなって画像が送れ、かなりズレます。
どうしたもんでしょう、
それでは
β11を楽しみにまってます
がんばってください。


re: [D3]インストーラーが止まる(T_T 投稿者:える  投稿日:07月10日(土)22時38分29秒

私も D4 でこの症状になってここで質問したのですが、.dpk から自分でパッケージを
ビルド・インストールして問題ないとのことで、問題なく使えています。

WAVE を変更しようとすると例外が出るとのことですが、PropertyEditor が正しく
登録されていないなどが原因でしょうか ?
どんな例外が出るかをハッキリされると助け船が出るかもしれないです。
# 私から出てくることはないでしょうけど (^^;


DXInput 投稿者:Hige  投稿日:07月10日(土)10時42分04秒

どうも、はじめまして。
ただいまDelphiXを勉強中の者です。

で、DXInputを使ってJoystickを2つ使おうと思っているのですが
どうしても2つ目のJoystickを認識してくれません(T_T)

  DXInput1.Update;
    if isButton1 in DXInput1.States then x:=1;
  DXInput2.Update;
    if isButton1 in DXInput2.States then y:=1;

こんな感じでプログラムしてます。
IDの設定も間違っていないと思うのですが...

解決方法を御存知の方がいらっしゃいましたら教えてくださいm(_ _)m

こちらの環境は
Delphi4 + DirectX6 + DelphiX(最新版) + MS SideWinder x 3
です。


[D3]インストーラーが止まる(T_T 投稿者:はしやあきひろ  投稿日:07月07日(水)03時44分13秒

はじめまして,
まずはじめにDelphiXというすばらしいものを公開してくださっていることに
感謝いたします.

DelphiXは過日にダウンロードして大感激したものの,
DirectXを使う予定がなくなってしまったために
それっきりになっていたのですが,
先日,訳あって,久しぶりに最新版をダウンロードさせていただきました.

しかし(ここからが本題です)
Delphi3用のインストーラーを起動しても途中で止まってしまうのです.
仕方がないのでパッケージのソース(dpk)ファイルを読み込み,
無理矢理コンパイルしてみましたが,
TDXWaveListのWAVEを変更しようとしたら例外が出るなどうまくいきません.
過去ログを見ても同じ症例が見あたらないところを見ると
なにかとんでもない単純ミスでも犯しているのでしょうか.

※DelphiXも1〜2年も見ないうちに随分進化していますね.
 なんだか浦島太郎状態です(^^;.
 


続AnimationKey 投稿者:たるくす  投稿日:07月05日(月)23時37分05秒

Animationの件、やっぱり不具合かなと思います。

DirectX.pasの下記を修正したところ、うまくいったと思いますのでご報告します。

{ TD3DRMAnimationKey }

  PD3DRMAnimationKey = ^TD3DRMAnimationKey;
  TD3DRMAnimationKey = record
    dwSize: DWORD;
    dwKeyType: DWORD;
    dvTime: TD3DValue;
    dwID: DWORD;

    case Integer of
      0: (dqRotateKey: TD3DRMQuaternion);
      1: (dvScaleKey: TD3DVector);          ← TD3DSingleより変更
      2: (dvPositionKey: TD3DVector);       ← TD3DSingleより変更
      3: (dvK: array[0..3] of TD3DValue);
    end;

http://member.nifty.ne.jp/tarucus/index.htm


AnimationKeyの内容取得自力解決しました 投稿者:たるくす  投稿日:07月05日(月)01時42分16秒

上記の件、自力解決しました。考えてくださった方、ありがとうございます。

var i,j:integr;
Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]);
for i := 0 to lpdwNumKeys - 1 do
begin             
  j := lpKey[i].dwKeyType;
略
end;

でjの値がキーのタイプでした。

たるくす


TestCollisionについて 投稿者:lofl  投稿日:06月30日(水)04時58分30秒

バグかなと思いましたのでご報告します。

TestCollisionを使っていて、ImageSpriteのPixelCheckがFalseの時、
うまく判定してくれないようでした。
ソースを見てみたのですが、

function TSprite.TestCollision(Sprite: TSprite): Boolean;
begin
  Result := True;
end;

となっていましたけど、これは、

function TSprite.TestCollision(Sprite: TSprite): Boolean;
begin
  if Collisioned then
  begin
    if (Self<>Sprite) and OverlapRect(BoundsRect, Sprite.BoundsRect) then
      Result := True
    else
      Result := False;
  end;
end;

ではないでしょうか?間違っていたらすみません。


Inside DelphiXの執筆がんばってください。楽しみにしています。


alexm@inversion.ru 投稿者:ivv  投稿日:06月28日(月)21時01分32秒

How it is possibel to create the file for volumetric object with the extension *.x. It is necessary for work with library DELPHIX. 


Delphi3.1での使用について 投稿者:デンカ  投稿日:06月27日(日)16時28分10秒

DXWaveList1をFormに貼り付けて、
DXWaveList1.Items[0]にwaveファイルを追加しようとすると、
DelphiXWaveEditForm.OleCreateOrderの読み込みエラー「プロパティが存在しません」
となります。
Delphi4ソースをDelphi3で読むとよくこのエラーが出ますが、
Install_for3.exeでインストールしただけですが、他に必要な事がありますでしょうか?

あと、DirectMusicはサポート予定はないでしょうか?
よろしくお願いします。


AnimationKeyの内容取得について 投稿者:たるくす  投稿日:06月27日(日)14時46分51秒

堀さん 素早い回答ありがとうございます。
おかげさまで、IDirect3DAnimation2.GetKeysでのキー取得ができました。
キー用のメモリを自前で用意する必要があったんですね。

ところが、さっそく次のステップでつまずいてしまいました。

今度は取得したキーの内容が知りたいのですが、

 var KeyPosition: TD3DVector; ←追加コード

  try
    Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]);
    KeyPosion := lpKey[0].dvPositionKey;  ←追加コード
  finally

としたら失敗しました。

SDKヘルプでのAnimatioKeyの構造体宣言の該当部分はunionでくくられていたので、
アクセス方法が変わるのかな なんて思っています。

質問ばっかりですいませんが、どなたか教えて頂けないでしょうか。

http://member.nifty.ne.jp/tarucus/index.htm


DirectPlay4 の件 投稿者:える  投稿日:06月27日(日)14時15分39秒

掘さん、お世話になってます。

>TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、
>データ送信終了を待ってしまいます。
えっ? そうなんですか? それはまずいですね〜

packetlost がる時とか、つらそうです。(到達信頼性ありなのでリトライ激しい)

> 私も IDirectPlay4 を使うように変更してみましたが、正常に動作しました。
> さらに SendMessageEx メソッドも呼び出し、ちゃんと非同期で動作することも
> 確認できました。
>> また、DelphiX が IDirectPlay4 へ対応する予定はないですか ?
> 次期バージョンから IDirectPlay4 を使用するようにします。

ということですので、次のリリースを待っています。

> 手元にある DelphiX は、公開しているバージョンからかなり変更されているので
> そのせいかもしれませんね。

結構修正がこの掲示板でちらほら出ていますね。
バージョンは前回書き忘れましたが、日付なし.zip と 990210aj.zip があるのです
が「今回から DirectX6 専用に...」って頃の日付なしを使っています。
# 自分が行った変更を新しいリリースに再度行うのが面倒とかいう理由で...

>> 7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあ
>> たりで転ぶようになってしまった...

これも書き忘れましたが自作アプリおよび DelphiX の chat, chat2 で転びました。
# やっぱ適当で手をだすべきでわないかぁ

InsideDelphiX 楽しみにしてます。
# ヘッダの変換については教えていただいた h2p もダメでした。(CALLBACK などに対応してない)
# それぞれ得意とする内容と対応していない内容があり、全部あわせたのがあったら解決しそーなんですが(笑


マルチレス 投稿者:  投稿日:06月27日(日)10時38分13秒

◆ たるくすさん

>私は現在、Direct3Dのアニメーションセットを作るツールを製作中ですが、
>IDirect3DAnimation2のGetKeysを使ってキーを取得しようとすると、
>アクセス違反が起きてしまい困っています。
>対策を教えてはいただけないでしょうか?
>http://member.nifty.ne.jp/tarucus/index.htm

type
  PArrayD3DRMAnimationKey = ^TArrayD3DRMAnimationKey;
  TArrayD3DRMAnimationKey = array[0..0] of TD3DRMAnimationKey;
var
  Animation2: IDirect3DRMAnimation2;
  dvTimeMin, dvTimeMax: TD3DValue;
  lpdwNumKeys: DWORD;
  lpKey: PArrayD3DRMAnimationKey;
begin
  Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, PD3DRMAnimationKey(nil)^);

  GetMem(lpKey, lpdwNumKeys*SizeOf(TD3DRMAnimationKey));
  try
    Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]);
  finally
    FreeMem(lpKey);
  end;
end;

のようなコードで出来ると思いますが、試していません。

◆ TIX さん

>早速ですが、TWaveCollectionItemクラスを使って音を鳴らしてたところ、不具合がありました。
>Pan,frequency,volumeプロパティについてです。変更してもplay時に反映されません。

バグがありました。TWaveCollectionItem.Play メソッドの

    NewBuffer.Stop
    NewBuffer.Position := 0;
    NewBuffer.Play(False);

となっている箇所を

    NewBuffer.Stop;
    NewBuffer.Position := 0;
    NewBuffer.Frequency := FFrequency;
    NewBuffer.Pan := FPan;
    NewBuffer.Volume := FVolume;
    NewBuffer.Play(False);

と変更すればいいと思います。

◆ えるさん

>TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、
>データ送信終了を待ってしまいます。

えっ? そうなんですか? それはまずいですね〜

>7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあたり
>   で転ぶようになってしまった...

私も IDirectPlay4 を使うように変更してみましたが、正常に動作しました。
さらに SendMessageEx メソッドも呼び出し、ちゃんと非同期で動作することも確認できました。

手元にある DelphiX は、公開しているバージョンからかなり変更されているので
そのせいかもしれませんね。

>また、DelphiX が IDirectPlay4 へ対応する予定はないですか ?

次期バージョンから IDirectPlay4 を使用するようにします。

◆ imahiro さん

>DelphiXをインストールし、サンプルを実行しようとしたら、以下のようなエラーがでます。
>「EInfCastErrorクラスの例外を生成しました。Interfaceはサポートされていません。」
>これは、どうすればいいのでしょうか?

さらに継続して実行してみると「DirectX6 が必要です」と出ると思います。

◆ Bakajin さん

>Inside DelphiX マジで楽しみにしています。

どうもありがとうございます(^^

◆ ぽくむらさん

>Inside DelphiXですか。
>チェックしとかなければなりませんね。
>それにしても、本が出るなんてすごいですよ。
>これからも、頑張ってください。

どうもありがとうございます〜。頑張らなくちゃ〜


IDirect3DAnimation2 投稿者:たるくす  投稿日:06月26日(土)21時29分29秒

こんにちは! たるくすと申します。

堀さんのDelphiX、便利に使わせてもらっています。

私は現在、Direct3Dのアニメーションセットを作るツールを製作中ですが、
IDirect3DAnimation2のGetKeysを使ってキーを取得しようとすると、
アクセス違反が起きてしまい困っています。
対策を教えてはいただけないでしょうか?

http://member.nifty.ne.jp/tarucus/index.htm


TWaveCollectionItem 投稿者:TIX  投稿日:06月26日(土)12時07分27秒

久々にやってきました。TIXと申します。

早速ですが、TWaveCollectionItemクラスを使って音を鳴らしてたところ、不具合がありました。
Pan,frequency,volumeプロパティについてです。変更してもplay時に反映されません。

何度もテストしてみたところ、次のようになっている事がわかりました。
変更が反映されるなるケース
・looped=Trueの場合
・looped=falseで、初めて演奏した場合
・looped=falseで、前回鳴らした音が再生中の場合
変更が反映されないケース
・looped=falseで、前回鳴らした音の再生が終わった2回目以降の再生の場合

こんな感じでしょうか。あと連続で重ねて再生しているときにたまに反映された音が出るようです。

どうぞよろしくお願いします。


DirecyPlay4 投稿者:える  投稿日:06月26日(土)00時53分15秒

TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、
データ送信終了を待ってしまいます。
リアルタイムなアクション/シミュレーションゲームでは、ある程度の補完をク
ライアントが行ってデータは流しまくるのが良いかと思って、DirectPlay4 用
に TDXPlay を改造してみようかと思いました。

1. DirectX.pas には IDirectPlay4, IDirectPlay4A がすでに宣言済みを確認
2. TDXplay.pas, TDXPlayFm.pas の IDirectPlay3 を IDirectPlay4 に
   置換(not word なので IDirectPlay3A も同時に置換された)
3. SendMessageEx を SendMessageImpl に名称変更(private procedure だし)
4. function SendMessageEx を作成、内容は、とりあえず単純に IDirectPlay4 の
   SendEx を実行し、MsgID を返すのみ。

function TCustomDXPlay.SendMessageEx(ToID: TDPID; Data: Pointer;
  DataSize: Integer; dwFlags: DWORD): DWORD;
begin
  if not Opened then Exit;

  if DataSize<SizeOf(DPMSG_GENERIC) then
    raise EDXPlayError.Create(SDXPlayMessageIllegal);

  if ToID=FLocalPlayer.ID then
  begin
    {  自分宛のメッセージ  }
    DoMessage(FLocalPlayer, Data, DataSize);
  end else
    FDPlay.SendEx(FLocalPlayer.ID, ToID, dwFlags, Data^, DataSize,
      0, 0, nil, @Result); // 0 以外はサポートしないデバイスあるので使わない
end;

5. システムメッセージの受信時の case に DPMSG_SENDCOMPLETE 用の項目を追加、
   OnSendComplete イベントを追加し呼び出すようにした。

   DPSYS_SENDCOMPLETE:
   begin
     { 非同期メッセージ送信完了 }
     Msg_SendComplete := lpvMsgBuffer;
     if Msg_SendComplete.idFrom=FLocalPlayer.FID then
     with Msg_SendComplete^ do
       DoSendComplete(dwMsgID, hr, dwSendTime);
   end;

** DoSendComplete **
var
  result: TDXPlaySendCompleteResult;
begin
  case hr of
    DP_OK:           result := crOk;
    DPERR_ABORTED:   result := crAbort;
      : // 略
    else             result := crGeneric;
  end;

  if Assigned(FOnSendComplete) then
    FOnSendComplete(Self, dwMsgID, result, dwSendTime);
end;

6. 動作中のプログラムを上のソースでリコンパイル
   (とりあえず SendMessageEx は使わないまま)
7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあたり
   で転ぶようになってしまった...

エラーメッセージもコードも出してないのでなんとも言えないとは思いますが、
手順的な間違いはありますか ?
どっかに IDirectPlay3 に依存した部分があって、エラーになっているんでしょうか...

また、DelphiX が IDirectPlay4 へ対応する予定はないですか ?

ちょっと長くなってしまいましたが、以上よろしくおねがいします。


re: はじめからつまずいています... 投稿者:える  投稿日:06月26日(土)00時36分53秒

DirectX6 をインストールしていないのではないですか?


はじめからつまずいています。。 投稿者:imahiro  投稿日:06月26日(土)00時26分12秒

はじめまして。

DelphiXをインストールし、サンプルを実行しようとしたら、以下のようなエラーがでます。
「EInfCastErrorクラスの例外を生成しました。Interfaceはサポートされていません。」
これは、どうすればいいのでしょうか?
Delphiのバージョンは3を使用しています。
どうか宜しくお願いします。


ありがとうございました。 投稿者:Bakajin  投稿日:06月21日(月)23時53分01秒

エッジに関してのご回答、ありがとうございました。


>昔 RIVA128 のビデオカードを買ったとき、
>拡大の際に補間されてしまうバグがありました。

 実は現在のビデオカードはRIVA TNTなんです。
 ということは・・・直していない・・・!?
 ついでに最新ドライバです。
 こいつはもうCreativeMediaに怒りの投書ですな。
 なんなんだこのしまりのない画像は・・・

 Inside DelphiX マジで楽しみにしています。
 現在格闘ゲームなんかを作っています。もちろんDXです。
 いつになったら完成するのやら・・・


inside.... 投稿者:ぽくむら  投稿日:06月16日(水)15時06分35秒

こんにちは、ぽうむらです。

Inside DelphiXですか。
チェックしとかなければなりませんね。
それにしても、本が出るなんてすごいですよ。
これからも、頑張ってください。

http://ueno.cool.ne.jp/pokumura/


マルチレス 投稿者:  投稿日:06月12日(土)17時03分45秒

to しぇぞさん

>近場の本屋をまわってみたのですがどこにも置いてませんでした.
>C MAGAZINE には 5 月末に発売予定って書いてあったけど….

ただいま原稿の執筆が遅れています。出版日が決まれば、この掲示板でお知らせします。

to Bakajin さん

>プロパティをStretch = Trueにし、上記をPaintにて表示すると
>アンチエイリアシングというか、エッジがボケたような感じで
>表示されます。

これはビデオカードのドライバのバグなので、プログラムからオフにすることはできません。
ドライバをアップデートしてみてはどうでしょうか?

昔 RIVA128 のビデオカードを買ったとき、拡大の際に補間されてしまうバグがありました。

>CマガジンでみかけたのですがInside DelphiXという書籍がでるんですね
>著者は堀浩之さんです
>御暇がありましたら内容を簡単に説明してもらえないでしょうか

内容は DelphiX のチュートリアル・リファレンス・実例(ゲーム)となっています。

>あと関係ないですがInsideWindowsがなくなるのはDelphiユーザー
>としては悲しい限りです

私も悲しいですね。毎月購読していましたし・・・

to 岩松 さん

>IDirect3DRMMeshBuilder3のメソッド宣言の中で、
>    function GenerateNormals: HResult; stdcall;
>は
>    function GenerateNormals(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall;
>では?

どうもありがとうございます。早速修正します。

to えるさん

>堀さんは、DelphiX というか、DirectX のヘッダの変換にはなにかソフトを
>使われているのでしょうか?

100%手書きです(^^;;;

>やっぱり、自分で perl script でも書いたほうがいいんでしょうかね。
># Dr.Dob HeaderConverter や、Ara..なんとかさんの Header Transrator では
># 無理でした、hdtrans は COM/OLE モードとかあるわりに、ダメらしい…。

黒田 Dycoon さんの所で公開されている、H to Pas Converter を使ってみてはどうでしょうか?
下の URL のプログラムの技の中にあります。

http://www.ceres.dti.ne.jp/~dycoon/

to J.Itoh さん
to netsoft さん
to J.Itoh さん

>ただ、まだコンパイルできないサンプルがあったり(プロパティが読み込めないらしい)
>します。

Delphi でフォームを表示すると、プロパティが存在しない〜のエラーが出ると思います。
そこで「全てを無視」を選ぶとプロパティが削除されますので、正常にコンパイル出来るようになります。

お手数ですが、Source フォルダの中でフォームを持ったユニットに対し、上記の処理をして下さい。

to BEAT さん

>これがあるからVBやめてDelphi買いました。

それはうれしいですね(^^

>フルスクリーン表示のアプリケーション動作時に、MS-IMEのツールバー上にカーソルが
>来ると(この時IMEのツールバーは見えていない)、処理をIMEツールバーに奪われてしま
>うのか、カーソルの移動が飛び飛びになってしまいます。

フォームの OnCreate イベントで

  ImeMode := imDisable;

としてみてはどうでしょうか? うまくいくと MS-IME が自動的にオフになるはずです。


Inside DelphiX 見た人います? 投稿者:しぇぞ  投稿日:06月11日(金)00時56分20秒

近場の本屋をまわってみたのですがどこにも置いてませんでした.
C MAGAZINE には 5 月末に発売予定って書いてあったけど….
誰か,もう入手した人はおられますか?


はじめまして 投稿者:Bakajin  投稿日:06月06日(日)23時08分37秒

堀さんはじめまして。DelphiXにお世話になっています。

質問なんですが、DxPaintBoxのDIBに直接アクセスし、
画像を描画している状況での現象についてです。

プロパティをStretch = Trueにし、上記をPaintにて表示すると
アンチエイリアシングというか、エッジがボケたような感じで
表示されます。
これを停止させることが出来るでしょうか。
遅いパソコンにて実行した折、上記はかかっていませんでした。
ということは、処理に余裕があった場合にかけられるのではないか、
と勝手に推測しています。
実際どうなんでしょうか。また100%停止できる方法も
あれば知りたいところです。
長文失礼しました。


Inside DelphiX 投稿者:NAZO  投稿日:05月20日(木)23時31分12秒

CマガジンでみかけたのですがInside DelphiXという書籍がでるんですね
著者は堀浩之さんです
御暇がありましたら内容を簡単に説明してもらえないでしょうか
注文してみようかとおもっております
Delphiは情報不足ともいわれますが
Delphi用のAPIの本まででているようですし
だんだん充実してきてると思います
DelphiXのような書籍は、趣味で使ってるような私には
うれしい限りです
あと関係ないですがInsideWindowsがなくなるのはDelphiユーザー
としては悲しい限りです
Inside DelphiX楽しみにまってます


DelphiXリポート 投稿者:岩松  投稿日:05月20日(木)09時55分51秒

DelphiX重宝させていただいております。手始めに、
ポリゴン作成に便利なGepolyLT(*1)というソフトがあったので、
その出力ファイルを.xファイルに変換するプログラムを作成して
います。その時に気づいたのですが、DirectX.pasユニットの
IDirect3DRMMeshBuilder3のメソッド宣言の中で、
    function GenerateNormals: HResult; stdcall;
は
    function GenerateNormals(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall;
では?
あと、以前の掲示板に載っていた
    function GetGeometry(var vcount: DWORD; var vertices; var ncount: DWORD; var normals;
      var face_data_size: DWORD; var face_data): HResult; stdcall;
の追加でMeshBuilder3のメソッドが正常に動作するようになりました。
(使用していないメソッドもまだありますが)

*1ASCIIさんからでている山川総司さんの「3Dスクリーンセーバー作成キット」という
  本についています。

http://www.threeweb.ad.jp/~ads


直接 DelphiX に関係ないことですが 投稿者:える  投稿日:05月10日(月)02時40分10秒

堀さんは、DelphiX というか、DirectX のヘッダの変換にはなにかソフトを
使われているのでしょうか?
単純に VC++ の STDMETHOD コールが Delphi の interface にならないので、
(他のヘッダで)苦労してます。

やっぱり、自分で perl script でも書いたほうがいいんでしょうかね。
# Dr.Dob HeaderConverter や、Ara..なんとかさんの Header Transrator では
# 無理でした、hdtrans は COM/OLE モードとかあるわりに、ダメらしい…。


その後の経過報告 投稿者:J.Itoh  投稿日:05月07日(金)17時54分14秒

libフォルダとSourceフォルダに重なった名称のファイルがあったので
削除すると最新版がなんとか動作するようになりました。
ただ、まだコンパイルできないサンプルがあったり(プロパティが読み込めないらしい)
します。
詳しくは後程お知らせします。


インストールが 投稿者:netsoft  投稿日:04月29日(木)22時54分16秒

下と同じくインストールがうまいこといきません。NECのPCなんですけど・・
dpkファイルを開いて、手動でインストールしましたが、これでもよいのでしょうか?


インストールが・・・ 投稿者:J.Itoh  投稿日:04月26日(月)19時43分10秒

最近、DirectX6.1のランタイムを入れたので、最新のDelphiXにしようと思ったのですが
インストーラーが途中で止ってしまい、なかなかインストールされません。

とりあえず私の環境の構成を書いておきます。

NX以前のNECの9821なのでHDDドライブがA,B,Cドライブ、FDDがDドライブです。
WIN95(まだ98にはしてませんが、Win98に相当する機能拡張は実行済み)と
Delphi3(純正パッチを当てて3.1相当になってます(Standerd版))はAドライブに
あり、DelphiXはCドライブに解凍しました。

ソース内のDelphi3用のパッケージを使ってインストールしても、
サンプルプログラム等が正常にコンパイルできないと言う症状がありました。

とりあえずDX6対応以前のDelphiXに戻しました。(旧バージョンは問題無くインストール
出来て、実行も可能です。)


MS-IMEツールバーとの戦い 投稿者:BEAT  投稿日:04月12日(月)13時23分48秒

DelphiX有り難く使わせて頂いてます。
これがあるからVBやめてDelphi買いました。

さて、質問なのですが...
フルスクリーン表示のアプリケーション動作時に、MS-IMEのツールバー上にカーソルが
来ると(この時IMEのツールバーは見えていない)、処理をIMEツールバーに奪われてしま
うのか、カーソルの移動が飛び飛びになってしまいます。
どうにかして、この現象を回避することはできないものでしょうか?


すみませんでした 投稿者:YUTAKA.  投稿日:04月11日(日)19時15分15秒

申し訳ありません。あの後調査したら、
まっさらのフェームに先程のコードを書いても
Delphiが落ちることが解りました(^^;
どうやら今まで上手く動いていたのを、
勝手に勘違いしてしまっていた様です。

つまりDelphiX は悪くありません(^^;;;;;;
いやもう大変失礼しました m(_ _;)m


失礼しました 投稿者:YUTAKA.  投稿日:04月10日(土)22時48分06秒

先程の投稿、改行入れ失敗してしまいました(^^;
失礼しました(^^;;;;;


オーディオストリームで質問です 投稿者:YUTAKA.  投稿日:04月10日(土)22時46分31秒

堀さん、こんにちは。
DelphiX 便利に使用させて頂いています。

さて、今回 DelphiX を使ったゲームをつくっていたのですが、ちょっと困った事態に遭遇してしまいました。
具体的には以下のとおりにすると再現できます。[総合環境から作成します]

1.Samples\Sound\AStream のサンプルを読み込む。
2.uses に shellapi を追加。
3.フォームの適当な場所にボタンを追加。ボタンの click イベントに次のコードを書く。
ShellExecute(Application.Handle, PChar('open'), PChar('http://www02.so-net.ne.jp/~flagyx'), #0, nil, SW_NORMAL);
(要するにボタンを押したら、関連つながりでブラウザを起動させて、ホームページを表示させたいのです)
4.コンパイル
5.適当な WAV ファイルをLOOP演奏させた状態で、先程イベントを書いたボタンを押す。

すると、プログラム事態は正常に実行できるのですが、それを一度終了して、もう一度プログラムをコンパイルして実行しようとすると、エラーダイアログに「リストのインデックスが範囲を越えています」「無効なポインタ操作」と出て、DELPHI自体が固まってしまいます。
困ったことに出たり出なかったりするときがあるのですが、演奏するWAVが大きめの方が再現率は高いみたいです。
メモリを破壊しているっぽいのですが…。

これは何かやってはいけない処理をやっているのでしょうか?
もしくは ShellExecute を実行する前に何か前処理をしなくてはならないのでしょうか?

ちょっと行き詰まってしまいました。
よろしくお教えいただけると嬉しいですm(_ _)m

なお、使っている Delphi は 3.1 で、ブラウザは IE 5 です。


IDirect3DRMMeshBuilder3 AddMeshBuilderの引数 投稿者:NAZO  投稿日:04月03日(土)23時18分54秒

細かいことですが
IDirect3DRMMeshBuilder3 AddMeshBuilderの引数が間違ってるようです


ありがとうございました 投稿者:lofl  投稿日:03月31日(水)06時27分18秒

レスをいただき、ありがとうございました。

自分のソースでは最後にItem.Freeをしていました。

これで、やっと先にすすめそうです。

お手数をおかけしました。


TDXWaveListのお礼 投稿者:NAZO  投稿日:03月28日(日)00時26分17秒

TDXWaveListのPlayの件の
問題は、無事解決しました。
ありがとうございました


WaveEditForm 投稿者:おりいる  投稿日:03月27日(土)18時16分55秒

始めまして。
ちょっと質問です。

DelphiX をインストールしてみたのですが、
DXWave の Wave プロパティを設定しようとするとエラーが出ます。

「DelphiXWaveEditForm.OldCreateOrder の読み込み中のエラー:プロパティが存在しません」

DXWaveList でも同じです。
環境は Win98 + (Delphi 3.0 + パッチ)です。
Delphi のインストールをしなおしてみてもだめでした。
解決方法はあるでしょうか?
よろしくお願いします。


レス 投稿者:  投稿日:03月26日(金)10時27分15秒

to lofl さん

Samples\Sprite\Basic サンプルの OnClick イベントを以下のようにして、
試してみましたが正常に動作していました。ただし、ちょっと修正している個所があります。

・bmp を解放していなかったので解放するようにした。
・TBitmap から TDIB に変えた。TBitmap だと正常に動作しないことあり。
・TImageSprite.Image プロパティに Item を直接指定するようにした。

uses DIB;

procedure TMainForm.DXDrawClick(Sender: TObject);
var
  Item: TPictureCollectionItem;
  bmp: TDIB;
  Sprite: TImageSprite;
begin
  bmp := TDIB.Create;
  try
    Item := TPictureCollectionItem.Create(ImageList.Items);
    bmp.LoadFromFile('c:\mydisk\Girl80.bmp');
    Item.Picture.Graphic := bmp;
    Item.Restore;
  finally
    bmp.Free;
  end;

  Sprite := TImageSprite.Create(DXSpriteEngine.Engine);
  with Sprite do
  begin
    Image := Item;
    Width := Image.Width;
    Height := Image.Height;
  end;
end;

to さぐあろさん

>堀さん、こんにちは。お久しぶりです。今日、やっとDelphi4にアップデートしました(^^;。ひき
>続き、DelphiXを使わせてもらいます。はー、D3DIM関係のプログラム(自分のです)をまた直さね
>ば...。

おお、ついに Delphi 4 にしましたか。Delphi4 だとちょっと重くなってしまうのが難点ですね〜。
私は、Delphi4 で追加された機能(コードエクスプローラー etc.)を片っ端からOFFにしています。

to NAZO さん

>TDXWaveListのitemsのPlayをwaitをTrueに設定してその後にClearを呼び出すとそこで
>とまってしまいます こういう書き方は悪いのでしょうか?
>waitがfalseだと正常に実行されます
>まぁ waitをfalseにして適当なsleepをいれればいいのですが みなさんのところではどうでしょうか?

すいません。バグがありました。DXSounds ユニットの TWaveCollectionItem.Play メソッドの最後にある

    if Wait then
    begin
      try
        while NewBuffer.Playing do
          Sleep(10);
      finally
        NewBuffer.Free;
      end;
    end;

を

    if Wait then
    begin
      while NewBuffer.Playing do
        Sleep(10);
    end;           

に置き換えて下さい。


動的に読み込んだイメージでスプライト 投稿者:lofl  投稿日:03月25日(木)05時56分44秒

GetSpriteAt関数の時はたいへんありがとうございました。

また、質問させてください。

ImageListに動的にイメージを読み込んでこれをスプライトにしようとしているのですが、
なぜかうまく行きません。

ImageListにはちゃんと登録できているように見えるのですが・・・
(Items[].Drawではちゃんと表示できるので)

いまは次のようにしていますが、どこか変でしょうか。

bmp := TBitmap.Create;
bmp.LoadFromFile('Sample.bmp');
Item := TPictureCollectionItem.Create(DXImageList.Items);
Item.Picture.Graphic := bmp;
Item.Restore;

Sprite := TImageSprite.Create(SpriteEngine.Engine);
with Sprite do
  begin
  Image := DXImageList.Items[DXImageList.Items.Count-1];
  Width := Image.Width;
  Height := Image.Height;
  end;

.dxgにしてItemsに読み込ませるとうまくいくんですが。
質問ばかりで、申し訳ないです。


ログを取らなかったため欠けました。


マルチレス 投稿者:  投稿日:01月23日(土)02時56分39秒

to you さん

>下のCのソースから純粋に書き換えればこうでしょうか?

カウンタに Byte 変数を使うのは元がそうなっているとはいえ、
なんか不安ですね(^^;;;

これで気が付いたのですが、Delphi 4 で以下のコードを実行すると
for ループ内に入ってしまいます。気を付けなくっちゃ・・・

var
  d, c: DWORD;
begin
  c := 0;
  for d:=0 to c-1 do
    raise Exception.Create('おかしいな?');
end;

to 時田さん

既に you さんが書かれていますが、これでも出来ると思います。

procedure FrameNaming(frame: IDirect3dRMFrame);
const
  id: Integer = 0;
var
  frameArray: IDirect3DRMFrameArray;
  c, i: DWORD;
  child: IDirect3DRMFrame;
begin
  frame.GetChildren(frameArray);
  c := frameArray.GetSize;
  if c>0 then
    for i:=0 to c-1 do
    begin
      frameArray.GetElement(i, child);
      FrameNaming(child);
    end;
  frame.SetName(PChar('__'+IntToStr(id)+'__'));
  Inc(id);                                  
end;

to Yuuki! さん

>早速ですが、TAudioStreamでMS-ADPCM圧縮したWaveファイルを
>再生したいのですが、どうしたらいいのでしょうか?

今のところ、圧縮 Wave には対応していません。


追加 投稿者:you  投稿日:01月23日(土)01時59分28秒

Idの宣言忘れてた。


これなら多分OK。スマートでない気がするけど。 投稿者:you  投稿日:01月23日(土)01時54分50秒

>時田さん
下のCのソースから純粋に書き換えればこうでしょうか?

procedure FrameNaming(frame: IDIRECT3DRMFRAME2);
var
  frameArray: IDIRECT3DRMFRAMEARRAY;
  child: IDIRECT3DRMFRAME;
  child2: IDIRECT3DRMFRAME2;
  Str: String;
  i: Byte;
begin
  frame.GetChildren(frameArray);
  i := 0;
  while i < frameArray.GetSize() do
  begin
    frameArray.GetElement(i, child);
    child.QueryInterface(IID_IDirect3DRMFrame2, child2);
    FrameNaming(child2);
    Inc(i);
  end;
  Str := 'AnimationFrame' + IntToStr(Id);
  frame.SetName(PChar(str));
  Inc(id);
end;


TAudioStreamでADPCM 投稿者:Yuuki!  投稿日:01月22日(金)00時21分34秒

はじめまして。Yuuki!といいます。
DelphiXはとても使いやすくて、愛用させてもらっています。

早速ですが、TAudioStreamでMS-ADPCM圧縮したWaveファイルを
再生したいのですが、どうしたらいいのでしょうか?


うーむ。エラーです。 投稿者:時田  投稿日:01月21日(木)18時37分56秒

たびたびすいません。(-_-);;
時田です。
堀さん教えてくださってありがとうございます。(^^)
早速やってみたのですが、なぜか
数回、
for i:=0 to frameArray.GetSize-1 do
が回ると、整数のオーバーフローエラーが
出てしまいます。いったいどうすればいいのでしょうか。すいませんが教えてください。(^^;;
お願いします。


あやややや 投稿者:  投稿日:01月21日(木)10時32分49秒

to 中尾君さん

>僕としては IDirectSoundNotify を使ってやりたいんですけど…。

IDirectSoundNotify の使い方は、まず CreateEvent API で
イベントオブジェクトを何個か作ります。その後

IDirectSoundNotify.SetNotificationPositions(イベント数, TDSBPositionNotify の配列);

TDSBPositionNotify.dwOffset := 通知してもらいたい位置(バイト単位)
TDSBPositionNotify.hEventNotify := イベントオブジェクト

とし、イベントオブジェクトを設定します。イベントを設定し終わったら
専用のスレッドを作成し、WaitForMultipleObjects API(誤字の可能性あり)
でループを回します。ここで専用のスレッドを作成しますが、
ほとんど Sleep 状態なので負荷はあまりかからないと思います。

IDirectSoundNotify の取得方法:

バッファを作成するときに、TDirectSoundBuffer の CreateBuffer メソッドを
使って、引数の中の dwFlags メンバに DSBCAPS_CTRLPOSITIONNOTIFY
を or します。そうすると IDirectSoundNotify が使えるようになります。

その後 Notify := Buffer.IBuffer as IDirectSoundNotify; とすれは
取得できます。

CreateBuffer メソッドの使い方は SetSize メソッドの
中をみて下さい。

to 時田さん

テストしていないのでエラーがでるかもしれませんが、
これでどうでしょうか?

procedure FrameNaming(frame: IDirect3dRMFrame);
const
  id: Integer = 0;
var
  frameArray: IDirect3DRMFrameArray;
  i: Integer;
  child: IDirect3DRMFrame; { IUnknown かも }
begin
  frame.GetChildren(frameArray);
  for i:=0 to frameArray.GetSize-1 do
  begin
     frameArray.GetElement(i, child);
     FrameNaming(child as IDirect3DRMFrame2);
  end;

  frame.SetName(PChar(IntToStr(id));
  Inc(id);
end;


質問++ 投稿者:中尾君  投稿日:01月20日(水)15時30分27秒

レスありがとうございます。>堀さん

TAudioStream ってスレッドでバッファを監視してますよね?
それって重くなりませんか?
僕としては IDirectSoundNotify を使ってやりたいんですけど…。

-------------------------------

DelphiX って DirectX6 専用って書いてありますが、
DelphiX を使って作ったアプリケーションは、
DirectX5 では動かないんですか?


さらなるしつもん 投稿者:時田  投稿日:01月20日(水)00時55分42秒

こんにちは。時田です。NAZOさんのおっしゃるソフトで、
アニメーションファイルを作成することができました。
ありがとうございます。(^_^)
またですが、質問があります。
同一アニメーションファイルを読み込むと、うまくいかないと本に書いてあり、
実際そうだったので、本に書いてある方法でその問題を回避したいのですが、
ほとんどC++が読めません。だれか助けてください。

procedure FrameNameing(Frame: IDirect3DRMFRAME);
var
  id: integer;
  frameArray: IDirect3DRMFRAMEARRAY;
  Child, Child2: IDirect3DRMFRAME;
begin
  id := 0;
  Frame.GetChildren(frameArray);
  これ以下がわからないのです。ってほとんどですが。(^^;;
end;

以下本の内容そのまま
// FrameNaming
// 競合を避けるため、フレームの名前を再設定する
void FrameNaming(LPDIRECT3DRMFRAME2	frame){

	static int	id = 0; // 通し番号

	LPDIRECT3DRMFRAMEARRAY	frameArray;

	frame->GetChildren(&frameArray);

	for(unsigned int i=0;i< frameArray->GetSize() ;i++){
		LPDIRECT3DRMFRAME	child;
		frameArray->GetElement(i,&child);

		LPDIRECT3DRMFRAME2	child2;
		child->QueryInterface(IID_IDirect3DRMFrame2,(LPVOID*)&child2);

		FrameNaming(child2);
	}

	char str[255];
	sprintf(str,"AnimationFrame%d",id);
	frame->SetName(str);
	id++;
}
ちなみに、清3ZさんのかかれたProgramming Guide Bookからの引用です。


マルチレス 投稿者:  投稿日:01月18日(月)17時28分05秒

to えるさん

>○ TSprite などの名称 を TDXSprite にしないか?

これをやっちゃうと互換性がとれなくなってしまうので、
すみませんが、無理です。

>○ TSprite などを RegisterNoIcon() で IDE に登録しないか?
>→ コンポーネントリストに出てこないのは気持悪いですから
>   ウィザードでコンポーネントの派生もできませんしね。

TSprite は TObject クラスから直接派生しています。
ですので、コンポーネントとして使用できません。

TSprite はお手軽スプライトという位置づけなので
強力なスプライト機能を使いたいときは、一から
自作するというのがいいのかもしれませんね。

to 時田さん

NAZO さんが書かれている通り Delphi 3 以降は 自分で Release しなくても
良くなっています。

Delphi 3 以降はインターフェースの AddRef, Release が
全自動になっているのでとても便利ですね。

to ORAさん

おおっ、ORAさんではないですかぁ〜。

to 中尾君さん

>DirectSound でバッファのストリーミングをやりたいのですが、
>どうやら、DelphiX はそのへんは全然サポートしてないみたいで、
>再生位置の通知とかどうすればいいか全然わかりません。

ずばり TAudioStream があります。Sound\AStream サンプルを見てみて下さい。
自分で生成した音を再生したい場合、TCustomWaveStream2 を継承すればいいと思います。


要望 投稿者:える  投稿日:01月18日(月)16時07分27秒

高岡です。

っと、ごそごそいぢっていて思った点についてですが、

○ TSprite などの名称 を TDXSprite にしないか?
→ 名称空間の衝突の都合です、すでに私は TDXSprite に書き換えています。
   TDX**** に統一されてはいかがでしょうか?
   TSprite が DirectX に強く依存しているかどうかは読みきれてませんが
   DXConst など uses に含んでいますし、DelphiX のコンポーネントの名称
   統一という意味でも行ってもよいのではないかと思います。

○ TSprite などを RegisterNoIcon() で IDE に登録しないか?
→ コンポーネントリストに出てこないのは気持悪いですから
   ウィザードでコンポーネントの派生もできませんしね。
   もしかすると、インストーラでインストールしていないのが原因?


座標点のスプライト 投稿者:える  投稿日:01月18日(月)14時42分50秒

どうも、高岡です。

堀さん、サンプルをどうもありがとうございます。
似たような内容のものは自作しており、スプライトが非短形なことなども含めて
いろいろとやっていたところでした。
TDXSprite はそのままではスプライト内の点の有効性を返せないので、いろいろ
派生してます。
ゲームに使う場合、スプライトの機能としては内部点の有効性(見えるか、存在す
るか)は必須に近いものだと思うので、そこらへんの実装は、やっぱ使うほうがや
るもんなんでしょうね。(見えるけど存在しない、見えないのに存在する…などなど)
ソースが公開されているのはとても助かります。

とりあえず、サンプルソースは問題なく期待通りの動作を致します。


解放 投稿者:NAZO  投稿日:01月17日(日)23時47分07秒

Delphi3以降では COMオブジェクトは
スコープ外にでると自動解放されるそうです
アニメーションの件ですが
私はつかってないので詳しくはしらないのですが 
http://www.edit.ne.jp/~ino4/
にあるツールは便利そうです


あにめーしょん 投稿者:時田  投稿日:01月17日(日)19時05分29秒

なるほどDeleteVisualとAddVisualを使えばよさげですね。(^^)
教えてくれてありがとうございます。そこで、やってみようと思うのですが、
そこでひとつ、前前からの疑問があります。
IDirect3DFrameと、IDirect3DRMMeshBuilderは自分で
Releaseしなくてもいいのでしょうか。
Direct3Dプログラミングガイドブックを見ると、Releaseしているのですが
それはDelphiXが自動でやってくれているのでしょうか。
教えてください。


はじめまして 投稿者:ORA  投稿日:01月17日(日)07時20分06秒

はじめまして。ORAと申します。
昨日、DelphiXの新版をダウンロードし、色々と試してみました。
(だいぶ昔にも試したことがありましたが、Delphiに慣れていな
かったので、途中で挫折してしまいました・・)
素晴らしいコンポーネントですね。楽々DirectXプログラミングが
できてしまいます。(^^)
今までの苦労は何だったのだろう・・・と、遠い目になってしまいます・・。
今後のDelphiXの進展を楽しみにしています。頑張って下さい。

http://home4.highway.ne.jp/ora_soft/main/ora.htm


ストリーミングバッファ 投稿者:中尾君  投稿日:01月16日(土)17時14分56秒

DirectSound でバッファのストリーミングをやりたいのですが、
どうやら、DelphiX はそのへんは全然サポートしてないみたいで、
再生位置の通知とかどうすればいいか全然わかりません。
DirectX に詳しい方、だれか教えてください。

ここの掲示板に迷惑になるといけないので、
レスが長文になるならメールでお願いします。


アニメーション 投稿者:NAZO  投稿日:01月15日(金)23時51分14秒

やりたいことがよく わからないのですが
ただ 切り替えるだけなら Frameの
AddVisualと DeleteVisual
をつかえばいいようなきもしますが
どうなんでしょう
そういう ことじゃなかったら申し訳ないです


マルチレス 投稿者:  投稿日:01月15日(金)18時05分46秒

to さぐあろさん

>堀さん、お久しぶりです。以前からTDXDrawコンポーネントを使ってて一つの素朴な疑問がありま
>した。Direct3Dは1から3(D3D, D3D2, D3D3)があるのに、Direct3DRMのほうは、何故D3DRM3だけ
>がないのでしょうか?しょうもない質問ですみませんが、やはり何らかの事情があったのでしょう
>か(^^;。

次期バージョンで D3DRM3 と D3DRMDevice3 を追加しました。

to きくおさん

>しかしRGB構造体がR、G、Bの順ですから、
>  Result := (B shl 16) or (G shl 8) or R;
>ではないでしょうか? じゃないと24ビットだけバイトオーダーが逆なような気がするのです。

いわれてみればそうでしたね。ここを変更することによる
影響はあまりなさそうなので次期バージョンで修正します。

to 時田さん

>アニメーションさせたいのですが、どのようにすればいいのかわかりません。

私もよく分からない(汗)ので他のところで聞かれては?


素朴な疑問 投稿者:さぐあろ  投稿日:01月15日(金)00時23分32秒

堀さん、お久しぶりです。以前からTDXDrawコンポーネントを使ってて一つの素朴な疑問がありま
した。Direct3Dは1から3(D3D, D3D2, D3D3)があるのに、Direct3DRMのほうは、何故D3DRM3だけ
がないのでしょうか?しょうもない質問ですみませんが、やはり何らかの事情があったのでしょう
か(^^;。

http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html


pixelsその2 投稿者:きくお  投稿日:01月11日(月)02時30分07秒

堀さん、回答ありがとうございました。
えっと、ちょっと説明が足りませんでした。
TDirectDrawSurface.GetPixelの中で色ビット数によって
値を返していますよね。ここで、16ビットの場合はpWord^、
で32ビットの場合はpInteger^となっています。
しかし、24ビットの時は

with PRGB(Integer(ddsd.lpSurface)+Y*ddsd.lPitch+X*3)^ do
  Result := (R shl 16) or (G shl 8) or B;

となっています。しかしRGB構造体がR、G、Bの順ですから、

  Result := (B shl 16) or (G shl 8) or R;

ではないでしょうか? じゃないと24ビットだけバイトオーダーが
逆なような気がするのです。
ちなみにFillRectは直値ではなく、ヘルプにあったように
with Surface do FillRect( ARect,ColorMatch(ACol) );
とやっています。


アニメーションさせるには 投稿者:時田  投稿日:01月10日(日)12時41分35秒

こんにちは。時田です。
アニメーションを含むXファイルを
出力できるソフトをもっていないので、
自前で複数の姿勢のXファイルを
読み込んで、それを切り替えることにより
アニメーションさせたいのですが、
どのようにすればいいのかわかりません。
いい方法はないでしょうか。


タイトルを考えるのは苦労します 投稿者:  投稿日:01月08日(金)10時44分40秒

to きくおさん

>本題に。TDirectDrawSurfaceのGetPixelとSetPixelについてです。
>24ビットモードの時だけ赤と青を入れ替えていますが、
>このプロパティの動作としては、そのままの値を返す
>(またはストアする)のが正しいのではないでしょうか?
一応、加工せずにそのまま返すようになっています。

>というのも、青くFillRectすると赤くなってしまったので。
サーフェース関連で色を決めうちで RGB(0, 255, 0) とかすると
色化けしたりして危険です。こういう場合、ちゃんと ConvertColor メソッドを
使って色を変換した方がいいと思います。

to TIX さん

>プログラムを配布し、サポートする大変さはよくわかります。どうか無理せず、
>お体に気を付けて下さいね。陰ながら応援しています。
ううっ・・うれしいです。

>さてさて、ちょっとした質問なのですが(おお、初質問だ)、TDXDrawをフルスクリーン
>で表示した場合に、マウスカーソルの位置だけフリップしないような表示になってしまう
>のですが、マウス表示をオフにすることは出来ないものでしょうか?いろいろプロパティ
>等調べてみたのですが、どうもそれらしいものが見あたらなくて困っちゃってます。

TDXDraw コンポーネントの Cursor プロパティを crNone に設定するとか
ShowCursor 関数で切り替えるなどがあります。

to Zin さん

>遅いのですが,DelphiXがDirectX6に対応したとの事なので,早速インストールしました.
>が,TDXDrawをフォーム(TDXForm)に貼り付けて,実行した所,下記のような例外が表示されました.
>『EIntfCastErrorクラスの例外を発生しました.'Interfaceはサポートされていません'』
>意味(エラーの内容)は理解できるのですが,回避策が分かりません.
DirectX6 に対応ではなく、DirectX6 専用になりました。
ですので、Windows9x でしか動かないと思います。

DirectX5, 6 両方に対応するには骨が折れますので・・・・


pixelsについて 投稿者:きくお  投稿日:01月06日(水)23時28分28秒

こんにちは。きくおです。
今年もよろしくお願いします。

本題に。
TDirectDrawSurfaceのGetPixelとSetPixelについてです。
24ビットモードの時だけ赤と青を入れ替えていますが、
このプロパティの動作としては、そのままの値を返す
(またはストアする)のが正しいのではないでしょうか?
というのも、青くFillRectすると赤くなってしまったので。


re: TDXImageList について 投稿者:TIX  投稿日:01月06日(水)07時36分44秒

> ただ描画は多少遅くなってしまいました。Delphi-ML[31569]程ではありませんが
> やはり毎回 TDXDraw.Surface.Canvas.Release しているのが原因かもしれません。

参考にならないかもしれませんが、私は速度を重視するので、こんな風にしています。

1.データモジュールを作成してTImageListを配置し、自動生成しないように設定
2.TSurfaceの配列をグローバル変数として宣言
3.初期化時にデータモジュールを生成し、全てTSurface配列にコピー
4.生成したデータモジュールを解放
5.描写するときはTSurface配列からbltfastでコピー

こうすると手順は面倒ですが、Canvasを使わなくて済むので処理はだいぶ速くなるかと
思いますです。ちなみにTSurfaceを配列で256個宣言し、全てに256x256の16〜256色の
画像をぶち込みましたが、あまりリソースは喰っていないようです。いかがでしょうか?

# あ、この場合は初期化時に画像は1枚1枚ファイルからTSurfaceに直接入れています。
# TImageListにあまり画像を入れすぎると生成時にリソースが足りなくなるかも・・。


迎春 投稿者:TIX  投稿日:01月06日(水)07時18分23秒

明けましておめでとうございます。昨年はいろいろ無茶な要望ばかりふっかけてしまい
本当に申し訳ありませんでした。今年もまた無茶な要望を出してしまいそうですが(汗)
あんまし無茶ならさらりと流してやって下さい。無理なら無理でなんとか別の方法を
考えますので(^^

プログラムを配布し、サポートする大変さはよくわかります。どうか無理せず、お体に
気を付けて下さいね。陰ながら応援しています。

さてさて、ちょっとした質問なのですが(おお、初質問だ)、TDXDrawをフルスクリーン
で表示した場合に、マウスカーソルの位置だけフリップしないような表示になってしまう
のですが、マウス表示をオフにすることは出来ないものでしょうか?いろいろプロパティ
等調べてみたのですが、どうもそれらしいものが見あたらなくて困っちゃってます。
なんかここで聞くにはかなり筋違いな感じもしますが、余裕がありましたら是非教えて
頂けないでしょうか。

ではでは。


初歩的な事なのですが. 投稿者:Zin  投稿日:01月05日(火)03時03分14秒

はじめまして.Zinと申します.
遅いのですが,DelphiXがDirectX6に対応したとの事なので,早速インストールしました.
が,TDXDrawをフォーム(TDXForm)に貼り付けて,実行した所,下記のような例外が表示されました.
『EIntfCastErrorクラスの例外を発生しました.'Interfaceはサポートされていません'』
意味(エラーの内容)は理解できるのですが,回避策が分かりません.
これは,どのような場合に発生するのでしょうか?どなたか分かりやすくご説明をお願いします.
別件ですが,私のPCはWindows98とWindowsNT4.0が共存しています.
DirectX6のインストール時,インストールするドライブが選択できないのですが,選択できる方法が存在するのでしょうか?現在,DirectX6はWindows98上でしか使用できません.
以上,2点 宜しくお願いいたします.


謹賀新年 投稿者:  投稿日:01月01日(金)03時26分52秒

みなさん、あけましておめでとうございます。
今年もよろしく(^^/

>とりあえず、DXSprite (だっけ?)から DXWindowSprite とかいうのを作り
>これを基本ウィンドウクラスとして Form Button などを派生してみたのですが
>クリックあたりでピタリと…手が…コードが…。

とりあえず、指定した座標にあるスプライトを取得する関数を作ってみました。
以下の URL にあるので使ってみて下さい。

http://www.ingjapan.ne.jp/hori/DelphiXFAQ.html


おろ… 投稿者:える  投稿日:12月29日(火)03時30分02秒

える%高岡です。

あ、そういえばそんなのも…記憶のどっかに…(汗
とりあえず、スプライト関係遊びまくってます(笑

目標は DirectX な MDI アプリなのですが…む〜ん む〜ん 苦しい。
なんか、DirectX で MDI アプリ(っぽく作る)のに良い方針ってあります?

とりあえず、DXSprite (だっけ?)から DXWindowSprite とかいうのを作り
これを基本ウィンドウクラスとして Form Button などを派生してみたのですが
クリックあたりでピタリと…手が…コードが…。


Re: TDXImageList について 投稿者:i?  投稿日:12月24日(木)05時21分10秒

堀さん返答ありがとうございます。DelphiXのおかげでゲームが
実現できるようにすることができました (^^

TPictureCollectionItemの件ですが、なるほど。これなら枚数が
少なくて済みそうです。しかも今になってサンプルプログラムを
見返すと、ちゃんとそう使ってますね..

ともあれ、これで高速&低消費量を実現することができそうです
ありがとうございました _o_


RE^2:TDXImageList について 投稿者:  投稿日:12月22日(火)21時32分47秒

i?, えるさん、こんにちは。TDXImageList は複数の画像を持つ代わりに、
一つの画像に入っている複数のパターンを描写することも可能です。

例えば、一つのパターンが 64x32 ピクセルだとすると

TPictureCollectionItem の PatternWidth, PatternHeight プロパティを
それぞれ 64, 32 に設定し、

DXImageList1.Items[画像番号].Draw(DXDraw1.Surface, X, Y, パターン番号);

とすれば任意のパターンを描写することが出来ます。これなら一つの画像しか利用しないので
いいと思います。


re: TDXImageList について 投稿者:i?  投稿日:12月22日(火)13時02分24秒

えるさんアドバイスありがとうございます _o_

ご指摘のように TImageListをサイズごとに用意し、 TDXDraw.Surface.Canvasに描き込む
ようにすると GDIリソース使用率が 20% -> 3% まで激減しました ! 

ただ描画は多少遅くなってしまいました。Delphi-ML[31569]程ではありませんが
やはり毎回 TDXDraw.Surface.Canvas.Release しているのが原因かもしれません。
# でも Flip直前に Releaseとかはできないし..

特に時間に厳密ではないゲームなのでこのまま利用したいと思います。

http://www.page.sannet.ne.jp/aihatena/


re: TDXImageList について 投稿者:える  投稿日:12月22日(火)04時40分54秒

える%高岡です。

私もスプライト用にイメージを300枚ほど入れてますけど、TDXImageList は
TImageList とは違って、1枚づつ個別にイメージを持つのでそういう仕様だと
思ってます。
それらの個々のイメージを1枚の画像にして、必要な時に必要なものを取り出す
ようなコンポーネントを派生させてみてはいかがでしょうか?
それらの画像が固定サイズならそんなに難しくはないです、私は固定サイズの等
倍なのでちょっと面倒なことしてますけど(汗

TImageList が基本的に管理機能を持っているので TImageList を利用すれば
簡単かと思います。
# 自分で管理してもそんなに難しくないです。ハイ


TDXImageListについて 投稿者:i?  投稿日:12月21日(月)19時18分35秒

初めまして、ボードゲームのねとわく化に DelphiXを使わせていただいています。

ネットワークゲームなため、動作確認のために1台のマシンで複数立ち上げてみているのですが
一つ起動するたびにGDIリソースを20%程食ってしまい、Delphi起動時で2つ、非起動時で
4つが限界となっています。
#以前 32bit bmpで50個程入れていたときは、再起動直後のマシンで1つも起動できない人も..

現在 TDXImageListに 64x64未満のBitmap(256色)を100個程読み込んでいるのが原因かと
思いますが、DelphiXを使いつつ、この100個を常に読み込んだ状態で、
なるべく GDIを消費しないようにする方法はありますでしょうか?


Re:TDXTimerについて 投稿者:TIX  投稿日:12月20日(日)01時29分49秒

nazoさん>
確認したのですが、Intervalを1か0にして、イベントでEXITですぐ抜けるように
しても、CPU占有率が100%になってしまうんです(^^;
といって、インターバルを下げると、余裕があっても処理が遅くなったりするのが
なんとも・・。


RE:DXドライバ 投稿者:きくお  投稿日:12月19日(土)07時07分01秒

NAZOさん、どうもです。
確認してくるなら問題無いですね。


DiorectX5 用 DelphiX 投稿者:まーきー  投稿日:12月19日(土)02時06分51秒

確かに、X5に退行したことで、せっかくX6で対処したバグが再現
されるのも困りものですね。
わたしのアプリも、いっその事X6専用にしてしまおうかとも考え
たんですが、わたしのアプリは、X5どころかX4くらいで事足りる
程度のものなので、それに対してわざわざX6強要するのももったい
ないなーと思って要望を出した訳です。
まあ、軽い気持ちで書いた要望なんで、軽く受け流してください。(^^;

堀さん:
> 実は DirectX5 用 DelphiX の最新版は DelphiX 98.6.03 です・・・・

御回答ありがとうございます。では、これを使わせていただく事に
します。


DXドライバ 投稿者:NAZO  投稿日:12月18日(金)23時46分21秒

ドライバは 復元できたとおもいます
また インストール時に確認してきました


RE:DirectX5 用 DelphiX について 投稿者:きくお  投稿日:12月18日(金)07時56分36秒

こんにちは。
確かにTIXさんの言うとおり、DirectXのバージョンのせいでバグが出たら
それはそれで困りますね。
確認したいのですが、以前はインストール時にビデオカードのドライバが
書きかえられて不具合が出るとか、そういった問題があったと思うのですが、
6は大丈夫でしたっけ?
強制的に書きかえたりはしない、とかいった内容の記事を見たような気も
するのですが。インストール時にそういうことをされないなら6オンリーで
良いのですが。


DirectX5 用 DelphiX について 投稿者:  投稿日:12月18日(金)04時41分22秒

to きくおさん

>DirectX6を必要とする機能ってどんな所なんでしょうか?
>私はDirectDrawとDirectSoundが動いてくれれば良いのですが、
>そこも関係してきますか?
主に Direct3D ですね。シングルパスマルチテクスチャなどを
バリバリ使いたかったので・・・・

to まーきーさん

>もし、最新版での5以下のサポートは無理だということであれば、
>5をサポートしている版で、最新のものを頂けないでしょうか。
>ちなみに、当方が所持しているのはDelphiX.6.03です。
実は DirectX5 用 DelphiX の最新版は DelphiX 98.6.03 です・・・・


Re:TDXTimerについて  投稿者:NAZO  投稿日:12月18日(金)04時35分10秒

初心者な意見ですが

CPU占有率がもし 取得できるなら 占有率が高いときは
イベントが発生しても 処理をしないで すぐに EXIT
したら だめでしょうか?


TDXTimerについて 投稿者:TIX  投稿日:12月17日(木)19時21分05秒

どうも、TIXです。お久しぶりです。

TDXTimerを使用しています。
Intervalに0を指定して可能な限り速さで動くようにしているのですが、
どうもCPU占有率が100%に達してしまい、他のアプリに支障をきたして
いるようです。
かなり無茶かと思うのですが、例えばCPU占有率70%を維持しつつ、可能な
限りのスピードでイベントを発生させたりできないでしょうか・・(汗)
いつも変な質問ばかり申し訳ありません m(_ _;)m

# 個人的にはDirectXに関しては6専用でいいと思うのですが・・。
# おいらはDirectX6をインストするようユーザに通知していて
# それで全く問題ありません。
# それに・・DirectX5に退行するとX6で対処済みのバグとかが
# 再現しそうでイヤだなぁ(^^;
# 個人的な意見です。気分を害されたら申し訳ありません m(_ _;)m


私も 投稿者:きくお  投稿日:12月17日(木)02時06分06秒

堀さん、こんにちは。
私もまーきーさんと同じくDirectX5以下でも動いてくれたら
なぁと思います。
DirectX6を必要とする機能ってどんな所なんでしょうか?
私はDirectDrawとDirectSoundが動いてくれれば良いのですが、
そこも関係してきますか?


DelphiXについて要望 投稿者:まーきー  投稿日:12月14日(月)04時47分46秒

#すみません。文字化けが起きたので再投稿します。文字化けが
#起きた投稿は、できれば削除して下さい。

堀さん、初めまして。まーきーという者です。
Delphiを利用して、DirectXの機能を使ったフリーウェアを制作して
おり、DelphiXは大変重宝しています。

さて、DelphiXに関して、要望があります。
DelphiXの最新版はDirectX6専用になっていて、これを利用して
作ったプログラムは5以下が入っているシステムでは動作しない
ようですが、これを、6特有の機能を使ってない場合は5以下が
入っているシステム上でも動くようにして頂きたいのです。
不具合など色んな事情で6を入れてない人が結構いるようなので、
できるだけ多くの環境で動かせるように、5以下でも動くように
したいのです。

もし、最新版での5以下のサポートは無理だということであれば、
5をサポートしている版で、最新のものを頂けないでしょうか。
ちなみに、当方が所持しているのはDelphiX.6.03です。

よろしくお願いします。


お久しぶりです 投稿者:サイロス誠  投稿日:12月12日(土)01時13分49秒

お久しぶりです。ごきげんいかが(^^;?

さて、このたびWindows98を導入しまして、
そのついでにUSBスピーカーなんていうものを
購入しちゃってコノヤロウ(買ったのはローランドの
MA−150Uです)。
さて、このスピーカーはデジタルという側面(なんか日本語が
変だにゃー)があるので、DelphiXで動くかどうか
が心配(Win98をインストールするときにDelphiごと
消した)。NXに付属のサウンドで動かず、泣く泣くSoundBlaster
を購入した僕としては興味津々。
実行したら報告します。


お礼と質問 投稿者:時田  投稿日:12月11日(金)20時49分31秒

なるほど、ZBufferをTrueにしたら、きちんと表示されました。(^_^)
ありがとうございます。
でも、なぜか張ったテクスチャの色がおかしい、、
24色ビットマップだからかなぁ。
それから、なぜか背景が点滅してしまいます。
原因おわかりの方お教えください。


パレット 投稿者:ぽくむら  投稿日:12月10日(木)16時58分30秒

堀さんこんにちは、ぽくむらです。

DelphiXでパレットを設定すると、使ってない色とか重複している
いろは勝手に削除されているようですけど、
こうならないようにするにはどうすればいいんでしょうか?

それと、一応DelphiXを使ったゲームが有りますので、
よろしければ見てください。

http://ueno.cool.ne.jp/poku/


Re:(無題) 投稿者: kana  投稿日:12月09日(水)01時05分02秒

時田さんへ
> DelphiXのサンプルプログラムや、DelphiXで作った自作ソフトで
> 読み込むと、表示が変になってしまうXファイルがあるのですが、・・・
これって、もしかして隠れていなければならないはずのものが表示されるというものではありませんか?
(私はDelphiXに慣れていないころに悩んでしまったので・・)
もしそうであれば、DXDrawのOptionプロパティのZBufferの設定が無効になっているせいです。Trueに替えればなおります。
ぜんぜん違う件でしたらごめんなさい。。

http://www.surfline.ne.jp/kanasaki/


コールバック関数の使い方 投稿者:さぐあろ  投稿日:12月08日(火)00時44分41秒

堀さん、こんにちは。ちょっとお聞きしたいのですが、IDirect3DRMMeshBuilder.Loadメソッド
で、パラメータの中にTD3DRMLoadTextureCallBackがあります。これはどのように使えばいいの
でしょうか?すみませんが、よろしくお願いします。

時田さんへ
表示が変になる、というのはもしかしてテクスチャのことでしょうか?テクスチャの向きがおかし
くなるのでしたら、私も経験しています。ちなみにそのサンプル画像は私のHPにのせてますが
(^^;。

http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html


一番上のスプライトは? 投稿者:える  投稿日:12月05日(土)03時11分13秒

お久しぶりです。ここは毎週、ちらちら覗いています。

さて、DelphiX でいろいろやりだしたのですが、マウスでクリックした位置に
あるスプライト(複数が重なっている)の、一番上(Z座標の大きいもの)って
簡単に手に入るものでしょうか?

DXSprite.pas と Help に目を通した限りでは…ちょっとわかんない…ってところです。
TSpriteEngine を継承して自作して管理できるようなのを作らないと駄目かな?
と思ってますが…どうでしょう。

現状でスプライトたちは結構ツリー状になっていますが、クリックした位置のスプライト
が取れたら、その親の親の…っと目的のスプライトまでたぐるのは難しくないので。

感覚的には、DXDraw.OnMouseClick で、

var
  here: TSprite;
begin
  here := DXSpriteEngine.Engine.GetSpriteAtPos(X, Y); // 座標系調整もいるかな…
  if here <> nil then
  begin
    (* スプライトクリックした時の処理 *


(無題) 投稿者:時田  投稿日:12月03日(木)17時40分21秒

堀さんご返事ありがとうございました。
またちょっと教えていただきたいことがあります。
一般のxファイルビューワで表示させるときちんと表示されるのに、
DelphiXのサンプルプログラムや、DelphiXで作った自作ソフトで
読み込むと、表示が変になってしまうXファイルがあるのですが、
これはどうすればきちんと表示されるのでしょうか。
なにか処理が足りないのでしょうか。


ImageList について 投稿者:lofl  投稿日:12月03日(木)03時20分29秒

初めて書込みます。loflと申します。

DelphiXという便利なコンポをありがたく使わせていただいております。

まだ使い始めたばかりなのですが、ちょっと詰まったので質問させてください。

試しに実行中にBMPファイルを読み込むようなプログラムを作っています。
そこで、ImageListに動的に読み込ませているのですが、
一度ImageList.Items.Clear をしてしまうと同じように動的に読み込ませようとしてもうまく行きませんでした。
Clear後には何か特別なやり方があるのでしょうか。

読み込んで表示するだけなので、ImageListなど使わないほうがよいのかもしれませんが、
もっと簡単な方法があるというときには教えていただきますと幸いです。


RE:cloneの使い方 投稿者:  投稿日:12月01日(火)23時42分56秒

時田さん、こんにちは。

>同じオブジェクトをたくさん作りたいので、Cloneを使用したいと思うのですが、
>使い方がわかりません。少し教えていただけないでしょうか。

試していませんが、

var Mesh, DupMesh: IDirect3DRMMeshBuilder;
Mesh.Clone(nil, IID_IDirect3DRMMesh, DupMesh);

var MeshBuilder, DupMeshBuilder: IDirect3DRMMeshBuilder;
MeshBuilder.Clone(nil, IID_IDirect3DRMMeshBuilder, DupMeshBuilder);

の様に使えばいいと思います。


RE:MeshBuildeのGetVertices 投稿者:  投稿日:12月01日(火)23時38分51秒

kana さん、こんにちは。

>TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、
>頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで)
>GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^;
>TD3DVectorの配列が戻ってくるのだと思います。??

とりあえず

var
  vertices, normals: array[0..100] of TD3DVector;
  face_data: array[0..100] of DWORD;

GetVertices(vcount, vertices[0], ncount, normals[0],  face_data_size, face_data[0]);

とすればコンパイルが通ると思います。


cloneの使い方 投稿者:時田  投稿日:12月01日(火)21時02分46秒

こんにちは。時田です。
同じオブジェクトをたくさん作りたいので、Cloneを使用したいと思うのですが、
使い方がわかりません。少し教えていただけないでしょうか。
(ヘルプをみてもC++なので、、、(^^;;


MeshBuildeのGetVertices 投稿者: kana  投稿日:11月28日(土)07時17分49秒

TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、
頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで)
GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^;
TD3DVectorの配列が戻ってくるのだと思います。??
ご報告まで・・

http://www.surfline.ne.jp/kanasaki/


RE:高速なAVIプレーヤないかな 投稿者:  投稿日:11月25日(水)17時14分40秒

軍荼利さん、こんにちは。

>AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも
>明らかに速度が落ちるようです。
>堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、
>とても有り難いんですが、そういうのは無理ですか!?

いま、ActiveMovie(DirectShow) をやる気力がありません・・・・
ですので、無理です。ごめんなさい。


RE:TDXDrawのフルスクリーン、ウインドウ切替 投稿者:  投稿日:11月25日(水)17時01分47秒

TIX さん、こんにちは。堀です。

>ええと、TDXDrawを使って画面表示をしているのですが、Window表示と
>フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。

Initialize メソッドを実行する必要があります。Graphic\DXImageList サンプルの中の
OnKeyDown イベントハンドラに切り替えるコードが入っています。

>>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。
>これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい!

そうです。


TDXDrawのフルスクリーン、ウインドウ切替 投稿者:TIX  投稿日:11月24日(火)18時35分46秒

度々すみません。TIXです。

ええと、TDXDrawを使って画面表示をしているのですが、Window表示と
フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。
ソースはこんな感じです。

procedure TBMS.ChageView;
var
    a:TDXDrawOptions;
begin
    a:=DXD.Options;
    if doFullScreen in a then exclude(a,dofullscreen)
                         else include(a,dofullscreen);
    DXD.Options:=a;
end;

なにか手順が足りないのでしょうか?宜しくお願いします。


RE^2:TWaveCollectionItemについて 投稿者:TIX  投稿日:11月24日(火)10時07分52秒

どうも、TIXです。早い対応、非常に感謝です。

>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。

これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい!

>また Stop メソッドで現在再生している音をすべて停止するようにしました。

おおお・・ありがとうございます。現在のソースはplay直前にstopをかけているので、
VerUpしたら効果がすぐ現れそうですね。

次Ver楽しみにしてます!本当にありがとうございました! m(_ _)m


高速なAVIプレーヤないかな 投稿者:軍荼利  投稿日:11月22日(日)07時52分48秒

AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも
明らかに速度が落ちるようです。
堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、
とても有り難いんですが、そういうのは無理ですか!?
勝手なお願いで申し訳ありませんが…  m(__)m


RE^6:ガンマで? 投稿者:きくお  投稿日:11月21日(土)07時47分12秒

お世話になっております。
私もRIVAユーザーなのでご報告を。
ASUSのAGP-V3000ですが、サンプルは正常に動いてます。


MeshBuildeのGetVertices 投稿者: kana  投稿日:11月28日(土)07時17分49秒

TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、
頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで)
GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^;
TD3DVectorの配列が戻ってくるのだと思います。??
ご報告まで・・

http://www.surfline.ne.jp/kanasaki/


RE:高速なAVIプレーヤないかな 投稿者:  投稿日:11月25日(水)17時14分40秒

軍荼利さん、こんにちは。

>AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも
>明らかに速度が落ちるようです。
>堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、
>とても有り難いんですが、そういうのは無理ですか!?

いま、ActiveMovie(DirectShow) をやる気力がありません・・・・
ですので、無理です。ごめんなさい。


RE:TDXDrawのフルスクリーン、ウインドウ切替 投稿者:  投稿日:11月25日(水)17時01分47秒

TIX さん、こんにちは。堀です。

>ええと、TDXDrawを使って画面表示をしているのですが、Window表示と
>フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。

Initialize メソッドを実行する必要があります。Graphic\DXImageList サンプルの中の
OnKeyDown イベントハンドラに切り替えるコードが入っています。

>>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。
>これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい!

そうです。


TDXDrawのフルスクリーン、ウインドウ切替 投稿者:TIX  投稿日:11月24日(火)18時35分46秒

度々すみません。TIXです。

ええと、TDXDrawを使って画面表示をしているのですが、Window表示と
フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。
ソースはこんな感じです。

procedure TBMS.ChageView;
var
    a:TDXDrawOptions;
begin
    a:=DXD.Options;
    if doFullScreen in a then exclude(a,dofullscreen)
                         else include(a,dofullscreen);
    DXD.Options:=a;
end;

なにか手順が足りないのでしょうか?宜しくお願いします。


RE^2:TWaveCollectionItemについて 投稿者:TIX  投稿日:11月24日(火)10時07分52秒

どうも、TIXです。早い対応、非常に感謝です。

>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。

これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい!

>また Stop メソッドで現在再生している音をすべて停止するようにしました。

おおお・・ありがとうございます。現在のソースはplay直前にstopをかけているので、
VerUpしたら効果がすぐ現れそうですね。

次Ver楽しみにしてます!本当にありがとうございました! m(_ _)m


高速なAVIプレーヤないかな 投稿者:軍荼利  投稿日:11月22日(日)07時52分48秒

AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも
明らかに速度が落ちるようです。
堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、
とても有り難いんですが、そういうのは無理ですか!?
勝手なお願いで申し訳ありませんが…  m(__)m


RE^6:ガンマで? 投稿者:きくお  投稿日:11月21日(土)07時47分12秒

お世話になっております。
私もRIVAユーザーなのでご報告を。
ASUSのAGP-V3000ですが、サンプルは正常に動いてます。


RE^5:ガンマで? 投稿者:  投稿日:11月20日(金)18時25分09秒

>Riva128(Viper V330)なマシンで試したけど、結果は同じでした。

私のはカノープスの PWR128P ですが、ちゃんと機能しています。おそらく
ドライバの方がサポートしていないのだと思います。

>ひとつ気になるのは、最初にサンプルのソースをコンパイルしようとした時に
>DirectX ユニットが二重定義だといわれたので、実現部のuses節を
>コメントアウトしたことです。

これは関係ありませんです。


RE^4:ガンマで? 投稿者:軍荼利  投稿日:11月19日(木)23時21分42秒

Riva128(Viper V330)なマシンで試したけど、結果は同じでした。
ひとつ気になるのは、最初にサンプルのソースをコンパイルしようとした時に
DirectX ユニットが二重定義だといわれたので、実現部のuses節を
コメントアウトしたことです。
これで何か影響が出たのでしょうか?


RE:TWaveCollectionItemについて 投稿者:  投稿日:11月19日(木)15時19分45秒

TIX さん、こんにちは。堀です。

>えとですね、DirectSoundを使って音を鳴らしているのですが、
>この音を止める方法はないでしょうか?
>
>具体的にはTDXWaveListを使っているのですが、同時に何音も
>鳴らすので、同じTWaveCollectionItemを鳴らす場合に一旦
>以前に再生したのを停止させたいのです。
>STOPなるメソッドがあったので使ってみたのですが、ループ再生
>を止める為のモノらしく、止まってくれません。

TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。
また Stop メソッドで現在再生している音をすべて停止するようにしました。

>P.S.
>同時発音数ってどのくらいが限界なのでしょう?

DirectX 6 SDK 付属の DirectX Info Viewer で見たら、うちのサウンドカード
SoundBlaster AWE32 では最大同時発音数は 25 でした。


TWaveCollectionItemについて 投稿者:TIX  投稿日:11月19日(木)04時06分12秒

どうも、TIXです。あれから少々勉強してやってまいりました。

えとですね、DirectSoundを使って音を鳴らしているのですが、
この音を止める方法はないでしょうか?

具体的にはTDXWaveListを使っているのですが、同時に何音も
鳴らすので、同じTWaveCollectionItemを鳴らす場合に一旦
以前に再生したのを停止させたいのです。
STOPなるメソッドがあったので使ってみたのですが、ループ再生
を止める為のモノらしく、止まってくれません。

どうぞよろしくお願いします。

P.S.
同時発音数ってどのくらいが限界なのでしょう?
なんだか重ねすぎたのか、音が鳴りきらない状態
に陥るようになりました。
では!


うまくいきました 投稿者:時田  投稿日:11月18日(水)16時19分56秒

直接インストールしたら成功しました。
ありがとうございました。


RE^3:ガンマで? 投稿者:  投稿日:11月18日(水)12時12分15秒

軍荼利さん、こんにちは。堀です。

>ウチのビデオカードは比較的新しい i740 搭載の ASUSTeK AGP-V2740 ですが、
>ガンマ調整って、この辺の結構有名なビデオチップの製品でも対応していない物なのでしょうか!?

こういうのは情報が無いのでよく分からないですが、RIVA128 では対応していました。


RE^2ガンマで? 投稿者:軍荼利  投稿日:11月17日(火)23時08分05秒

>すいません。今 DelphiX のソースコードを見たらガンマ調整が使用可能か判定する
>部分にバグが見つかりました。実際はガンマ調整が出来ないのに使用可能になっていました。

バグでしたか。確認ありがとうございます。

>ですので、それはたぶん軍荼利さんのビデオカードはガンマ調整に対応していないんだと思います。

ウチのビデオカードは比較的新しい i740 搭載の ASUSTeK AGP-V2740 ですが、
ガンマ調整って、この辺の結構有名なビデオチップの製品でも対応していない物なのでしょうか!?


RE:またまたインストールできません。 投稿者:  投稿日:11月17日(火)19時09分11秒

時田さん、こんにちは。堀です。

>おっしゃるとおり、A:\DelphiX  (98なのでAはHDDです。)
>というところに移したのですが、何も変わりませんでした。
>いったいどうすればいいのでしょう。

DelphiX_for4.dpk を直接 Delphi で開いてコンパイルしてもうまくいきませんか?
コンパイルできなかった場合、出たエラーメッセージを教えてください。


またまたインストールできません。 投稿者:時田  投稿日:11月17日(火)17時54分24秒

堀さんご返事ありがとうございます。
おっしゃるとおり、
A:\DelphiX  (98なのでAはHDDです。)
というところに移したのですが、何も変わりませんでした。
いったいどうすればいいのでしょう。


RE:インストールできません 投稿者:  投稿日:11月17日(火)08時38分36秒

時田さん、こんにちは。堀です。

>Delphi3から4に変えたのですが、Delphi4用DelphiXが
>インストールできません。
>Install_ for4.exe を実行すると、「ヘ
プを組み込みますか。」
>のダイアログを閉じた後、「コンパイルできませんでした。」
>と表示されてしまいました。どうすればインストールできるのか
>教えて下さい。

DelphiX をインストールしているフォルダの名前が
"c:\Program Files\Borland\Delphi4\VCL\DelphiX" のように長いと
そうなることがあります。"c:\DelphiX" のように短い名前のフォルダに
DelphiX をインストールし直してください。


RE:ガンマで? 投稿者:  投稿日:11月17日(火)08時36分13秒

軍荼利さん、こんにちは。堀です。

>DellphiX で、TDirectDrawSurface.GammaControl の使い方がハテナです。
>何をどう試してみても画面に変化がありません。
>DelphiX のサンプルを実行してみても、画面に変化が見られません。
>どうなっているのでしょう?

すいません。今 DelphiX のソースコードを見たらガンマ調整が使用可能か判定する
部分にバグが見つかりました。実際はガンマ調整が出来ないのに使用可能になっていました。

ですので、それはたぶん軍荼利さんのビデオカードはガンマ調整に対応していないんだと思います。


ガンマで? 投稿者:軍荼利  投稿日:11月17日(火)07時36分30秒

こんにちは、初めまして。軍荼利です。

DellphiX で、TDirectDrawSurface.GammaControl の使い方がハテナです。
何をどう試してみても画面に変化がありません。
DelphiX のサンプルを実行してみても、画面に変化が見られません。
どうなっているのでしょう?

環境は、DelphiX6 + Delphi4Pro + Win98 です。


インストールできません 投稿者:時田  投稿日:11月17日(火)00時47分42秒

こんにちは。時田です。
Delphi3から4に変えたのですが、Delphi4用DelphiXが
インストールできません。
Install_ for4.exe を実行すると、「ヘルプを組み込みますか。」
のダイアログを閉じた後、「コンパイルできませんでした。」
と表示されてしまいました。どうすればインストールできるのか
教えて下さい。
(Delph3の時は、前のバージョンのDelphiXが
 きちんとインストールできていました。)
使用機種はNECの98で、OSは95です。


ひさしぶりです 投稿者:ぽくむら  投稿日:11月16日(月)18時54分17秒

どうもひさしぶりです。ぽくむらです。

ホームページ開設したので、みにきてください。
相互リンクも大歓迎ですので、
もししてくれる人がいれば、僕のところの掲示板か
メールにてお知らせください。

それでは〜。

http://ueno.cool.ne.jp/poku/


ありがとうございます 投稿者:Haler  投稿日:11月13日(金)21時15分31秒

自分で質問しておきながら、忙しくて質問したのさえ忘れていた(^-^; 失礼極まりないHalerです。

Horiさん、質問に答えていただいて、ありがとうございました。

# 指定ドットからオブジェクトをっていう
# 質問でした

http://www.vector.co.jp/authors/VA005806/


RE2:TDIBからsurfaceにコピー 投稿者:TIX  投稿日:11月13日(金)16時33分11秒

こんにちは。返答ありがとうございます。

BMP画像の一部をbltfastでコピーして使う場合どうすれば
いいのかな・・と考え、DXDIBに予め読み込ませておけばい
いのかなと考えていました。でもやはりそれは無理なので
すね・・。
本来このような質問はDelphiXコンポーネントと直接関係
ないので、不適切では・・と後で気付きました。大変失礼
しました。ちゃんとDirextDrawを勉強してから出直します。

それでは!またちょくちょく見に来ますね。


RE:TDIBからsurfaceにコピー 投稿者:  投稿日:11月13日(金)11時41分10秒

TIX さん、こんにちは。

>DXDrawのsurfaseにDXDIBに読み込ませた画像を
>bltfastでコピーできないかな・・と言う
>話なのですが、可能なのでしょうか。

DXDIB はサーフェースではないので BltFast メソッドでコピーすることは出来ません。
サーフェースの Canvas を使ってください。


RE:大きなサーフェス 投稿者:きくお  投稿日:11月13日(金)05時17分26秒

堀さん、ありがとうございました。


TDIBからsurfaceにコピー 投稿者:TIX  投稿日:11月12日(木)14時29分09秒

すみません。説明が足りませんでした。
DXDrawのsurfaseにDXDIBに読み込ませた画像を
bltfastでコピーできないかな・・と言う
話なのですが、可能なのでしょうか。
初歩的すぎる質問申し訳ありません。


RE:大きなサーフェス 投稿者:  投稿日:11月12日(木)13時28分44秒

きくおさん、こんにちは。

>TPictureCollectionItemについて教えてください。
>
>DDrawはたしか画面サイズより大きなサーフェスは作れない仕様だと
>思うのですが、TPictureCollectionItemにはそのような大きなビット
>マップは設定できますか?
>ちなみにTPictureCollectionItem.SystemMemoryはTRUEです。

TPictureCollectionItem は PatternWidth, PatternHeight プロパティに
0 以外が指定されている場合、自動的に複数のサーフェースに分割します。なので 

・PatternWidth, PatternHeight プロパティが 0 の場合

SystemMemory プロパティが True だと大丈夫だと思います。

・PatternWidth, PatternHeight プロパティが 0 以上かつ、
 画面のサイズ以下の場合

SystemMemory プロパティに関係なく大丈夫だと思います。


大きなサーフェス 投稿者:きくお  投稿日:11月11日(水)23時32分31秒

こんにちは。
TPictureCollectionItemについて教えてください。

DDrawはたしか画面サイズより大きなサーフェスは作れない仕様だと
思うのですが、TPictureCollectionItemにはそのような大きなビット
マップは設定できますか?
ちなみにTPictureCollectionItem.SystemMemoryはTRUEです。


RE:Surface の キャンバスについて 投稿者:牧山  投稿日:11月11日(水)22時47分51秒

こんにちは。

>ここは順番が違ってもバグにはならなかったと思います・・・・・

そ、そうですか。
なにが原因だったのだろう・・
とにかく直ったので、ありがとうございましたって、おおざっぱな(^^;   jun


RE:memcheckについて 投稿者:  投稿日:11月11日(水)16時25分48秒

中村さん、こんにちは。

>どんどんプログラムを簡略化していくうちに原因と思われる部分が分かった
>のですが、どうやら「TControlBarを使うと発生する」らしいのです。
>(新規プロジェクトに  TControlBar をフォームに貼り付けただけで発生)

こちらで試してみましたが、なにも異常ありませんでした。
ただし、Delphi 4 Professional ですが。


RE:Surface の キャンバスについて 投稿者:  投稿日:11月11日(水)16時22分58秒

牧山さん、こんにちは。

>  DeleteDC(DC);
>  DeleteObject(BitmapHandle);
>
>の順番が違っているのが原因でした。わからなかった〜・・・。
>勉強になりました、ありがとうございました。

ここは順番が違ってもバグにはならなかったと思います・・・・・


memcheckについて 投稿者:中村  投稿日:11月11日(水)14時29分10秒

堀さん、はじめまして。
Delphi4CSで作成したプログラムのメモリリークチェック用に memcheck を
使用させて頂いたのですが、いきなり「14回メモリーを解放し忘れています」
の文字が・・・

どんどんプログラムを簡略化していくうちに原因と思われる部分が分かった
のですが、どうやら「TControlBarを使うと発生する」らしいのです。
(新規プロジェクトに  TControlBar をフォームに貼り付けただけで発生)

実際のところ、原因はなんなのでしょうか。
・Delphi,VCLのバグ
・memcheck が Delphi4 に対応してない
・こちらの環境の問題(他では発生せず)
・その他


Surface の キャンバスについて 投稿者:牧山  投稿日:11月11日(水)14時05分21秒

堀さん、こんにちは。

さっそくのレス、ありがとうございます。

よくよく調べてみた結果、

  DeleteDC(DC);
  DeleteObject(BitmapHandle);

の順番が違っているのが原因でした。
わからなかった〜・・・。
勉強になりました、ありがとうございました。

あと、題名がありませんでした、すみません。     

                         netcom@alles.or.jp jun


RE:DLしました!凄いですね、これ! 投稿者:  投稿日:11月11日(水)07時58分27秒

TIX さん、こんにちは。

>ただ、少し疑問に感じた事があったのでちょっと・・
>TDxDraw.Surface.bltfastのflugなのですが、
>何を指定しても「未定義の識別子」と出てしまうんです。
>これってインストに失敗してるのでしょうか?
>稚拙な問題ですみません(^^;

これは、BltFast メソッドの Flag は DirectX ユニットで宣言されています。
ですので、DirectX ユニットを Use すればいいと思います。

>それと、DIBからSurfaceにコピーする術はないのでしょうか・・

DIB とは何の事を指しているのでしょうか? TDIB、あるいは HBitmap?


DLしました!凄いですね、これ! 投稿者:TIX  投稿日:11月10日(火)23時19分24秒

どうも!delphi3を使っています。delphiXを使わせて頂いてますが、
凄いですね、これは。

ただ、少し疑問に感じた事があったのでちょっと・・
TDxDraw.Surface.bltfastのflugなのですが、
何を指定しても「未定義の識別子」と出てしまうんです。
これってインストに失敗してるのでしょうか?
稚拙な問題ですみません(^^;

それと、DIBからSurfaceにコピーする術はないのでしょうか・・


RE:(無題) 投稿者:  投稿日:11月10日(火)19時11分12秒

牧山さん、こんにちは。

自分で LoadBitmap したり、CreateCompatibleDC した場合、以下のようにしないと
解放したつもりでも実は解放されていなかったということが起こり得ます。

var
  DLLHandle: THandle;
  BitmapHandle, OldBitmap: HBitmap;
  DC: hDC;
begin
  DLLHandle := LoadLibrary(pchar(DLLName));

  BitmapHandle := LoadBitmap(DLLHandle, PCHar(BitmapName));
  DC := CreateCompatibleDC(0);
  OldBitmap := SelectObject(DC, BitmapHandle);

  StretchBlt(Surface.Canvas.Handle, 0, 0, 50, 50, DC, 0,0, 25,25, SRCCOPY);
  Surface.Canvas.Release;

  SelectObject(DC, OldBitmap);
  DeleteDC(DC);
  DeleteObject(BitmapHandle);

  FreeLibrary(DLLHandle);
end;


(無題) 投稿者:牧山  投稿日:11月10日(火)17時27分29秒

以前に書いた下のソースですが、
アプリ内で繰り返すと、メモリが消費されてウィンドウズがハング
してしまいます。
BitBlt でも同じです。
サーフェスのcanvas を使うのに何か、制約がありますか?
もちろんDeleteObjectで余計なものは消しています。

対策がありましたら、教えてください。
よろしくお願いします。

	ddh := createcompatibleDC(0);
	Selectobject(ddh,hDIB);

	StretchBlt( Surf2.canvas.handle,	//	o-Handle,
		   0,0,				//	o-x, o-y
		   208*2,	168*2,	//	o-w, o-h
		   ddh,				//	s-handle
		   0,0,				//	s-x, s-y
		   208,168,			//	s-w, s-h
		   SRCCOPY);			// op-code

	Surf2.Canvas.Release;

                           netcom@alles.or.jp MAKIYAMA

メッシュの反転プログラム 投稿者:さぐあろ  投稿日:11月10日(火)01時45分14秒

堀さん、こんにちは。DelphiXを使ったアプリを作ってみました。私の個人仕様なので何ですが、
よろしかったら使ってみてください。これは、xファイルから読み込んだオブジェクトの向きを反
転させるだけのものです。すなわち、メッシュを180度回転させるプログラムです。反転させた
オブジェクトはそのままセーブできます。
また、よろしかったらご意見、ご感想をお聞かせください。

http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html


RE:D3Dでドット取得 投稿者:  投稿日:11月08日(日)09時23分26秒

FAQ 集にそのサンプルを追加しましたので見てみてください。
Direct3D RM の「画面の指定した座標にあるオブジェクトを知りたい。」です。

http://www.ingjapan.ne.jp/hori/DelphiXFAQ.html


D3Dでドット取得 投稿者:Haler  投稿日:11月07日(土)17時22分28秒

D3Dでマウスでクリックするタイプのマップを作りたいと考えています。

で、困ったのは、マウスでクリックしたとき、そのマウスカーソルの指すメッシュがどれかをどうやって取得するかなんですが、何かいい方法はないでしょうか?

http://www.vector.co.jp/authors/VA005806/


OHD 投稿者:OHD  投稿日:11月05日(木)23時25分07秒

Delphi-BCBに移行した者さん 早速参考にさせてもらいます
ありがとうございました

RE : IMのサンプル 投稿者:Delphi-BCBに移行した者  投稿日:11月05日(木)15時05分21秒

DelphiXは使っていなかったと思いますが
DelphiのIMサンプルがあったような気がします。

http://www.ceres.dti.ne.jp/~dycoon/index.html


RE:DirectXはぢめるにあたって 投稿者:  投稿日:10月29日(木)17時41分49秒

えるさん、こんにちは。

>DelphiX で Direct3D つかって遊んでみたいんですが、Direct3D どころか、DirectX 関連を
>全然扱ったことないんで、四苦八苦してる状態です。
>どなたか、よい本やホームページとかあればご紹介くださいませんか?

Direct3D は C++ で書かれていますが、清水亮氏の「Direct3D プログラミングガイドブック」
などがいいと思います。DirectX についてはよくわかりません。

>自分でいろいろ探ってみたりもするんですが、C/C++の記事が多く、それらを解読できない
>こともないんですが、DelphiX がどこまでカプセル化してるとかもよくわかってない
>状態です。DelphiX のソースを読んだほうがいいでしょうか?

私はカプセル化とかあまり意識していないのですが、基本的な部分では
DirectX と同じような構成にしています。一度 DelphiX のソースコードを
解読することをおすすめします。

IMのサンプル 投稿者:OHD  投稿日:10月27日(火)01時42分33秒

DelphiXでのIMのサンプルなど どこかにないでしょうか?
内容は何でもOKです
お願いします

↓解決しました 投稿者:牧山  投稿日:10月26日(月)23時37分47秒

下の件、解決しました。

	lh := LoadLibrary(pchar(Dllname));
	BH := loadbitmap(lh,pchar(filename));
	ddh := createcompatibleDC(0);
	Selectobject(ddh,BH);

 StretchBlt(Surf3.canvas.handle,	
	  0,0,		
	  50,	50,	
	  ddh,	
	  0,0,
	  25,25,
	  SRCCOPY);

って感じですね。

Release

ってやったら、アプリが終了してしまいました。
正しくは

Surf3.release

でした。

これで、Direct-Xへ移行できそうです(^^)

DLLからBITMAPを読む方法は? 投稿者:牧山  投稿日:10月26日(月)18時16分42秒

始めまして、牧山と申します。
DElphiXは、すばらしいですね、まさに求めていたものです。
これで、DIRECT-Xに乗り換えられるかも。

DXDRAWに関してですが、どうしてもDLLからサーフェスにBITMAPを読み込む
方法が分かりません。
いろいろ試してみたのですが・・・。

もし、方法がありましたら教えてください。

サンプルはどこに 投稿者:時田  投稿日:10月25日(日)01時17分04秒

こんばんは。時田です。
DelphiXを使ったサンプルはどこかにありませんでしょうか。
コンポについてくるもの以外でということです。

β版公開!! 投稿者:ぽくむら  投稿日:10月23日(金)12時15分28秒

こんにちは、ぽくむらです。

前からいっていたゲームにめどがたってきましたので、
友達のページにアップします。
アドレスはこちら
http://www.cool.ne.jp/h10i15/fpage.htm
ご意見とかあれば、メールでお知らせください。
それでは。

DirectXはぢめるにあたって 投稿者:える  投稿日:10月21日(水)05時15分05秒

こんちわ、ここにこんなこと書くのはハズレてるかな?とも思いつつ

DelphiX で Direct3D つかって遊んでみたいんですが、Direct3D どころか、DirectX 関連を
全然扱ったことないんで、四苦八苦してる状態です。
どなたか、よい本やホームページとかあればご紹介くださいませんか?

自分でいろいろ探ってみたりもするんですが、C/C++の記事が多く、それらを解読できない
こともないんですが、DelphiX がどこまでカプセル化してるとかもよくわかってない
状態です。DelphiX のソースを読んだほうがいいでしょうか?

インストーラー 投稿者:ぽくむら  投稿日:10月19日(月)16時29分30秒

こんにちは堀さん、ぽくむらです。

インストーラー送ってもらったんですが、ぼくのDelphiの
ばーじょんは3です。こっちがいい忘れたおかげで、
どうもすみませんでした。

>さぐあろさん 投稿者:時田  投稿日:10月16日(金)20時39分23秒

はじめまして。ご返事ありがとうございます。
そのWinGraphicsを早速見てみようと思います。

時田さんへ 投稿者:さぐあろ  投稿日:10月16日(金)01時27分54秒

時田さん、はじめまして。Xファイルの作成についてですが、「3D Atelier」というソフトなら製品自体にXファイルへの変換がサポートされてますよ。これだと、定価で29800円ですから、手ごろな値段でしょう。WinGraphicsという雑誌に体験版が載っていますから、一度お試しになってはいかがでしょうか。

http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html


RE:Installerのバグっぽいも 投稿者:  投稿日:10月14日(水)22時56分10秒

ぽくむらさん、こんにちは。堀です。

とりあえず、インストール経過をログにとれるインストーラを作ってみました。
オリジナルの Install_for4.exe に上書きしてください。
ログを私に送ってくれたら原因がつかめると思います。

http://www.ingjapan.ne.jp/hori/data/d981014.zip


Installerのバグっぽいも 投稿者:ぽくむら  投稿日:10月13日(火)16時23分13秒

インストールを始めると、インストールがやけに長いと思って、
強制終了でちゃんと起動しているか見てみましたが、
「応答なし」となっていました。他のマシンでも試しましたが、
だめでした。もう一度ダウンロードしてやってみてもだめでした。
あと、コンパイル(パッケージを)してやってみたら、旧バージョンのDelphiX
のファイルを読み込むと、TDXDraw.Optionsプロパティーがちゃんと読み込めませんでした。あとで、Optionsをいじればなおりましたが。

バグはそんなところです。

RE:Installerのバグっぽいもの 投稿者:  投稿日:10月13日(火)13時49分40秒

ぼくむらさん、こんにちは。

インストーラでエラーが出るとのことですが、どのようなエラーが出るのでしょうか?

Installerのバグっぽいもの 投稿者:ぽくむら  投稿日:10月13日(火)12時05分53秒

こんにちは、Horiさん。ぽくむらです。

DelphiXの最新バージョンをダウンロードしてインストールしてみましたが、
エラーが出ます。自分でコンパイルしてやっとできましたが。
面倒くさいので、インストーラーをかいぜんしておいてください。
(次のバージョンでは)。

>YOUさん 投稿者:時田  投稿日:10月12日(月)21時23分34秒

 教えてくださってありがとうございます。早速ヘルプをダウンロード
 してみました。どうやら、手に入れたかったもののようです。
 LightWave3Dについて調べてみましたが、高いです。(^_^;;;
 それだけすばらしいソフトだとは思うんですが。
 しばらくは、ヘルプを頼りにDelphiXの勉強をしようと思います。
 ありがとうございましたーー。(^_^)

DirectX Help 投稿者:YOU  投稿日:10月12日(月)03時40分11秒

MSのサイトからヘルプファイルのみをDLすることも可能です。

http://www.microsoft.com/msdownload/directx/dxf/sdk5.2doc/default.htm


DirectX Help 投稿者:YOU  投稿日:10月12日(月)01時13分11秒

こんにちは、YOUです。
SetOrientation等のDirectXの関数等の内容はMSのDirectX SDKに入っている
ヘルプに載っていたと思います。SDKは雑誌の付録CD等に収録されています。
あと、Xファイルの作成方法ですが、私はLightWave3Dで作ったデータを
恋塚氏のLW2XでXファイルに変換して作っています。ほかにもTrueSpace等から
作ることもできるようです(変換ソフトを介して)。

早速 投稿者:サイロス誠  投稿日:10月11日(日)22時36分01秒

Delphi4のDelphiX、早速落とさせていただきました。
いつもながらご苦労様です。
それでは。

http://www.twin.ne.jp/~cyross/


はじめまして 投稿者:時田  投稿日:10月11日(日)19時03分08秒

はじめまして。時田です。
Delphiで3D表示できるコンポをちょうど探していたら、DelphiXを見つけた
ので、早速ダウンロードさせていただきました。サンプルを見たら、思って
いなかったほどいいものでした。(^_^) すばらしいものをありがとうござ
います。

すいませんが、質問があります。
ヘルプに載ってない情報はコードを解析して調べるしかないんでしょうか。
例えば、SetOrientationの引数の意味が分からないので調べてみたのですが
書いてありませんでした。
それから、*.xとか*.dxgファイルはどうやって作成するのでしょうか。

RERE:DelphiXでAVI再生  投稿者:JOE幕の内  投稿日:10月10日(土)20時22分11秒

Horiさん、ありがとうございました。
DirectShowですか...
いろいろ、研究してみます。
わからない事があったら、またお願いします!

RE:DelphiXでAVI再生 投稿者:  投稿日:10月10日(土)07時53分13秒

JOE幕の内さん、こんにちは。

>ところで。今日MSDNのライブラリCDを眺めていたら、
>[DirectX]DirectDrawサーフェスでAVIを再生する方法
>なるものを見つけました。

いまは VFW ではなく、DirectShow(ActiveMovie) の方がいいですね。こちらだと
MPEG ファイルも再生することが可能になりますし。

DirectShow を DirectDraw とともに使うためには、自分でフィルターを
作らないといけないのですが、うまくいっていません。

RE:はじめまして 投稿者:  投稿日:10月10日(土)07時34分28秒

きくおさん、こんにちは。

バグ報告どうもありがとうございます。次回リリースで反映させるようにします。

はじめまして 投稿者:きくお  投稿日:10月09日(金)11時44分20秒

こんにちは。
DelphiXはとても便利で助かってます。
もうVC++には戻れない体になってしまいました(^^;。

さてさて、どうもバグらしきものを発見しました。
StretchDrawが失敗するので調べてみた所、

TDirectDrawClipper.SetClipRects
の中で

  for i:=Low(Rects) to High(Rects) do
  begin
    with BoundsRect do
    begin
>     Left := Min(Rects[i].Left, Left);
>     Right := Max(Rects[i].Left, Right);
>     Top := Min(Rects[i].Left, Top);
>     Bottom := Max(Rects[i].Left, Bottom);
    end;
  end;

は、もしかして

      Left := Min(Rects[i].Left, Left);
      Right := Max(Rects[i].Right, Right);
      Top := Min(Rects[i].Top, Top);
      Bottom := Max(Rects[i].Bottom, Bottom);

ですか?

以上、ご報告まで。

RE:AlphaBlending 投稿者:  投稿日:10月09日(金)06時51分03秒

ぼくむらさん、こんにちは。堀です。

>そういえば、アルファブレンディングをしたとき、透明色を指定しても、
>透明抜きがされません。多分、アルファブレンドされてから、
>透明抜きをしようとしているからだと思います。つまり、
>白を透明色としても、アルファブレンドした後は白じゃないってことです。

DelphiX ではアルファブレンディングする前の色を使って、
透明色判定をしています。Graphic\AlpgaBlending サンプルを使って
透明色をいろいろ変えてみましたが、すべてうまくいきました。

DelphiXでAVI再生 投稿者:JOE幕の内  投稿日:10月08日(木)19時47分34秒

はじめまして、Horiさん。
DelphiX、とても素晴らしいです。
これが無くなったら、プログラマ廃業するでしょうね、多分。

ところで。
今日MSDNのライブラリCDを眺めていたら、
[DirectX]DirectDrawサーフェスでAVIを再生する方法
なるものを見つけました。

タイトル通りの内容だったのですが、DelphiXを使ったときに
同じ処理を実現するには、どうすれば良いのでしょうか?

今はMediaPlayerを使って逃げているのですが...
もっとよい方法があれば教えてください。

AlphaBlending 投稿者:ぽくむら  投稿日:10月08日(木)17時31分38秒

こんにちは、Horiさん。ぽくむらです。

そういえば、アルファブレンディングをしたとき、透明色を指定しても、
透明抜きがされません。多分、アルファブレンドされてから、
透明抜きをしようとしているからだと思います。つまり、
白を透明色としても、アルファブレンドした後は白じゃないってことです。
どうすれば、透明抜きができるんですか?
あと、間違ってたらごめんなさい。

RunTimeの入手 投稿者:ぽくむら  投稿日:10月08日(木)17時09分59秒

Horiさん、どうもありがとうございました。
DirectX6のランタイムが手に入りました。
これで、左右反転とかもばしばし使えます。
ゲーム完成したら送ります(送れたら)。
しばらく、来ないことになると思いますので、それでは。

低電力スタンバイ 投稿者:Hira  投稿日:10月07日(水)23時37分28秒

Horiさん、どうもありがとうございました。
低電力スタンバイを検出する方法ですが、

procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
で、
var
  FLowPower: Boolean;
のように宣言しといて、

  if SystemParametersInfo(SPI_GETLOWPOWERACTIVE,0,@FLowPower,0) then
  begin
       if FLowPower then Close;
  end;

を適当な場所に入れることでエラーを回避(プログラム終了)
することができました。
どうもありがとうございました。

http://www2a.meshnet.or.jp/~junya/


RE:追加事項 投稿者:Hori  投稿日:10月06日(火)17時57分09秒

ぽくむらさん、こんにちは。

>そういえば、Horiさん、新しいDelphiXは、
>Delphi3 & DirectX5でもコンパイルまたは動作しますか?
>DirectX6専用なら、ランタイムがないので....。

Delphi3 でも動作しますが、DirectX6 必須です。
エンドユーザー用の DirectX6 ランタイムは

http://www.microsoft.com/japan/directx/resources/dx6end.htm

から手に入れられます。

追加事項 投稿者:ぽくむら  投稿日:10月06日(火)16時22分58秒

そういえば、Horiさん、新しいDelphiXは、
Delphi3 & DirectX5でもコンパイルまたは動作しますか?
DirectX6専用なら、ランタイムがないので....。

左右反転 投稿者:ぽくむら  投稿日:10月06日(火)16時11分54秒

こんにちは、Horiさん。ぽくむらです。

DelphiXついにバージョンアップしたということで、
上下左右反転が実装されたみたいですね。
早速ダウンロードしてインストールします。
昨日もここに来たんですが、更新を押すのを忘れてて、
バージョンアップしているなんてわかりませんでした。
これで、今作っているゲームのデータ量が半減します。
いやーうれしいです。
まぁ、Blt関数でできなかったことはべつとして。

それでは。

レス 投稿者:Hori  投稿日:10月06日(火)12時44分42秒

えるさん、こんにちは。

>さて、このようなインストール方法でも問題なく利用することはできるでしょうか?

問題在りません。インストーラーを改良した DelphiX 98.10.05a を
リリースしましたのでインストールし直してみてください。

>また、パッケージのコンパイルして作成された DelphiX.bpl を配布してもよいものでしょうか?
># もし、ヘルプなどに明記されていたらすみません。

DelphiX.bpl の配布は DelphiX がバージョンアップした場合、
ご自分で責任を持っていただけるなら可です。


まえださん、こんにちは。

>var 
>  CharaFrame: IDirect3DRMFrame2;
>begin
>  DXDraw.D3DRM2.CreateFrame(DXDraw.Scene, CharaFrame);
>ここで↑
>「'IDirect3DRMFrame'と'IDirect3DRMFrame2'には互換性がありません」とでてしまいます。
>解決方法を教えてください。

すいません!!! DirectX 6 ヘッダーで IDirect3DRM2.CreateFrame の引数を
オリジナルの通りに修正してしまいました。

対策としては

var
  CharaFrame: IDirect3DRMFrame2;begin
  DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, CharaFrame);

とします。それでは。

Frame2の生成 投稿者:まえだ  投稿日:10月06日(火)02時55分33秒

はじめまして。
DelphiXをバージョンアップして以前組んだプログラムをコンパイルしようとしたら、
エラーが出てしまいました。

var 
  CharaFrame: IDirect3DRMFrame2;
begin
  DXDraw.D3DRM2.CreateFrame(DXDraw.Scene, CharaFrame);
ここで↑
「'IDirect3DRMFrame'と'IDirect3DRMFrame2'には互換性がありません」とでてしまいます。
解決方法を教えてください。

新しいDelphiX 投稿者:える  投稿日:10月05日(月)20時20分58秒

Delphi2→Delphi4に乗り換え、前々から使いたかった DelphiX を先日、
日記に「Delphi4対応に…」とかあったので、ダウンロードしたら対応し
てる風なくて、今日みたらDelphi4用アップって書いてあって喜びダウン
ロードしました。

ダウンロードし、Install_for_4.exe を実行すると、新しい Delphi が起動して
パッケージを開いた状態で停止していました…。しばらくまってもなにもおこらず
そんままインストールボタンを押して手動で入れましたが、ディレクトリが c:\temp\...
なんてなっていたので、とりあえず消し、自分のいれたいところへもっていって、
DelphiX_for4.* を DelphiX.* にリネームし、そのまま開いてコンパイル・インストールしました。

この状態で、サンプルをコンパイルしようとすると DX* を uses してるところで DX* がみつからな
いというエラーで止まってしまいます。確に、「コンポーネントのインストール」で出てくるパスに
DelphiX の *.pas のある場所は含まれていません。
手作業で検索パスをいじればよいことなので、これは解決しました。

さて、このようなインストール方法でも問題なく利用することはできるでしょうか?
また、パッケージのコンパイルして作成された DelphiX.bpl を配布してもよいものでしょうか?
# もし、ヘルプなどに明記されていたらすみません。

・DelphiX.bpl を単体配付してもいい
・DelphiX.bpl を含んだアプリケーションパッケージを配付してもいい
・DelphiX はパッケージ使用で利用せず実行ファイルとリンクしないといけない

などなど、、、です。