3

viewport3d 内に表示できるTModel3Dがありますが、テクスチャを作成する方法がわかりません...

procedure TForm2.createMap(r:integer;c:integer);
var
    player : tmodel3d;

begin
    player := TModel3d.Create(self);
    player.Visible := true;
    Player.Position.X := 0;
    player.Position.Y := 0;
    player.position.Z := 2;
    player.LoadFromFile(gamedir + '\pics\player.dae');
    player.Parent := viewport3d1;

考えられる限りのことは試しましたが、"texture.jpg" テクスチャをモデルにする方法を教えてください。

これを実行すると、テクスチャのないモデルが表示されます。

4

2 に答える 2

2

ここでは、私自身の DAE モデルとテクスチャ ファイルを使用して XE2 で状況に応じてテストし、うまく機能しているようです。

procedure TForm2.createMap(r:integer;c:integer);
var
 player :  tmodel3d;

begin
 // NEVER create a 3D object as a sub-component of anything other than a 3D viewport!
 player := TModel3d.Create(viewport3d1);
 {
   Ensure that the Parent is always set before operating on the control.
   Some operations (such as texturing) will force the object to be re-rendered
   so if your parent isn't specified (or isn't ready for rendering) it will cause
   some nasty bugs.
 }
 player.Parent := viewport3d1;
 player.Visible := true;
 Player.Position.X := 0;
 player.Position.Y := 0;
 player.position.Z := 2;
 player.LoadFromFile(gamedir+'\pics\player.dae');
 player.MeshCollection[0].Material.texture.loadfromfile(gamedir+'\pics\playertex‌​ture.bmp');

ゲーム アーキテクチャの観点からは、実際には に似たカスタム クラスを作成しTPlayer、モデルをそのオブジェクトのメンバーとして持つ必要があります。このようにして、すべてのプレーヤー コントロールを に関連付けることができTPlayer、ゲーム ロジックの上位から手動で操作しなければならない単なるモデルではなく、記述されたエンティティになります。

また、モデルの位置とカメラの位置が、カメラの透視フレーム内にあることを確認する必要があります。

于 2013-08-07T17:25:49.287 に答える
1

デルフィ 10

   For I := 0 to Length(Model3d1.MeshCollection) - 1 do
      Model3d1.MeshCollection[I].MaterialSource := TextureMaterialSource1;
于 2016-05-11T18:30:58.043 に答える