Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Добавила модель с расширением .x, на форму, теперь мне нужно наложить на эту модель текстуру.
Вот как выглядит модель при запуске проекта в Delphi7: Прикреплённый файлimg1.jpg (31,74 Кбайт, скачиваний: 118) А вот текстура. Прикреплённый файлcyborg.jpg (30,3 Кбайт, скачиваний: 123) Как наложить текстуру на 3d модель, если модель с расширением .x (Mesh)? Прикладываю исходники https://disk.yandex.ru/d/jv1qBIR9hg5uDg "на disk.yandex потому, что установленный лимит не позволяет загрузить архив" Текстура находится в папке image и является bitmap (bmp). Также вот код: unit primer; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Direct3D9, D3DX9, ExtCtrls, ComCtrls, StdCtrls, dxfunc, AppEvnts; type sVertex=record x,y,z:Single; color:DWORD; end; TForm1 = class(TForm) StatusBar1: TStatusBar; ApplicationEvents1: TApplicationEvents; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); private { Private declarations } // procedure Cleanup; public { Public declarations } end; type Mesh = class public Rotate: single; x,y,z: Single; pMesh: ID3DXMesh; pMeshTextures:PAIDirect3DTexture9; pMeshMaterials:PAD3DMATERIAL9; dwNumMaterials: dword; procedure OpenMesh(NameMesh, TexturePath: String); procedure DrawMesh; end; var Form1: TForm1; pD3DDevice:IDirect3DDevice9=nil; pD3D: IDirect3D9=nil; Mesh1: Mesh; implementation {$R *.dfm} //http://gamesmaker.ru/programming/directx/direct3d-urok-02-otobrazhenie-obektov/ const D3DFVF_CustomVertex = D3DFVF_XYZ or D3DFVF_Diffuse or D3DFVF_TEX1; procedure Mesh.OpenMesh(NameMesh, TexturePath: String); begin x:=15; y:=10; z:=-50; Rotate:=0; dwNumMaterials:=LoadMesh(NameMesh, // TexturePath TexturePath, pD3DDevice, pMesh, pMeshTextures, pMeshMaterials ); end; procedure Mesh.DrawMesh; var World:D3DMATRIX; WorldX:D3DMATRIX; WorldY:D3DMATRIX; i:Integer; begin D3DXMatrixIdentity(World); D3DXMatrixIdentity(WorldX); D3DXMatrixIdentity(WorldY); Rotate:=Rotate+0.009 ; //Поворот модели // D3DXMatrixRotationx(worldx,Rotate); // D3DXMatrixRotationy(worldy,Rotate); D3DXMatrixMultiply(world,worldx,worldy); world._41:=x; world._42:=y; world._43:=z; pD3DDevice.SetTransform(D3DTS_WORLD, World); pD3DDevice.SetRenderState(D3DRS_LIGHTING, DWORD(0)); for i:=0 to dwNumMaterials-1 do begin pD3DDevice.SetTransform(D3DTS_WORLD, world); pD3DDevice.SetMaterial(pMeshMaterials[i]); if (pMeshTextures[i]<>nil) then pD3DDevice.SetTexture(0, pMeshTextures[i]); pMesh.DrawSubset(i); end; end; procedure SetupCamera; //onoaiiaea eaia?u var ViewMatrix: TD3DMatrix; Eye: TD3DVector; At: TD3DVector; Up: TD3DVector; begin Eye.x := 10; Eye.y := 10; Eye.z := -60; At.x := 20; At.y := 20; At.z := 0; Up.x := 0; Up.y := 1; Up.z := 0; D3DXMatrixLookAtLH(ViewMatrix, Eye, At, Up); pD3DDevice.SetTransform(D3DTS_VIEW, ViewMatrix); end; procedure TForm1.Timer1Timer(Sender: TObject); begin pD3DDevice.Clear(1, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0, 0); pD3DDevice.BeginScene; Mesh1.DrawMesh; pD3DDevice.EndScene; pD3DDevice.Present(nil,nil,0,nil); end; procedure TForm1.FormActivate(Sender: TObject); begin DX3DInit(pD3D,pD3DDevice,form1.Handle,800,600,D3DFMT_A8R8G8B8,false); SetupCamera; Mesh1:=Mesh.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin pD3D:=nil; pD3DDevice:=nil; end; procedure TForm1.FormPaint(Sender: TObject); begin Mesh1.OpenMesh('robot1.x','mesh\'); Timer1.Enabled:=True; //D3DXLoadMeshFromXA() //Cleanup; end; end. |
Сообщ.
#2
,
|
|
|
Если никто не знает может есть какая-то альтернатива, где можно добавить модель и наложить текстуру, желательно с примером, на статью?
|
Сообщ.
#3
,
|
|
|
Просмотрев несколько учебников по С++ (так как на Delphi подходящих книг как загрузить x-mesh я не нашла), обнаружила что в коде нет явного указание пути к текстурам. И тут появилась мысль, может быть, они находятся внутри файла формата “.x” и точно, я нашла примерно такой фрагмент кода:
Цитата Material { 1.000000;1.000000;1.000000;1.000000;; 34.560001; 0.315000;0.315000;0.315000;; 0.000000;0.000000;0.000000;; TextureFilename { "texture/SSR06_Born2_dif.png"; } BumpMapFilename { "texture/SSR06_Born2_bp_base.png"; } } И тут мне стала все понятно, оказывается у меня уже в коде Delphi прописана процедура загрузки текстуры. Просто в файле который я пыталась загрузить отсутствовали пути к текстурам. Занялась поисками подходящих моделей, но уже с текстурами. Результат на картинках Модель Меха(Робота) с текстурами. Комната с текстурами. Стена и асфальт Также вот исходники кода: https://disk.yandex.ru/d/uq3eLh22MYS-sg |