Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 12:11   #1
drcoxer
 
Регистрация: 31.03.2010
Сообщений: 7
По умолчанию загрузка .x файла

в модуле функция loadmesh загружает файл формата .x раннее переконвертированного из .3ds вместе с текстурой
вопрос как можно сделать отдельно загрузку модели и только потом выбрать текстуру из файла

Код:
 
function LoadMesh(
              FileName: string;
              TexturePath: string;
              ppiD3DDevice9:IDirect3DDevice9;
              var ppMesh:ID3DXMesh;
              var pMeshTextures: PAIDirect3DTexture9;
              var pMeshMaterials: PAD3DMATERIAL9): DWORD;
type
  PD3DXMaterialArray = ^TD3DXMaterialArray;
  TD3DXMaterialArray = array[0..0] of TD3DXMaterial;
var
  strPrefix: pChar;
  lenPrefix: Integer;
 
  pD3DXMtrlBuffer: ID3DXBuffer;
  d3dxMaterials: PD3DXMaterialArray;
  i: DWORD; dwNumMaterials: DWORD;
  strTexture: array[0..MAX_PATH-1] of Char;
begin
  Result:=0;
  strPrefix:=pChar(TexturePath);
  lenPrefix:=Length(strPrefix);
  if FAILED(D3DXLoadMeshFromX(pChar(FileName), D3DXMESH_SYSTEMMEM,
                              ppiD3DDevice9, nil,
                              @pD3DXMtrlBuffer, nil, @dwNumMaterials,
                              ppMesh)) then
  begin
    if FAILED(D3DXLoadMeshFromX(pChar('..\'+FileName), D3DXMESH_SYSTEMMEM,
                                ppiD3DDevice9, nil,
                                @pD3DXMtrlBuffer, nil, @dwNumMaterials,
                                ppMesh)) then
    begin
      MessageBox(0, pChar('НЕ ВЕРНЫЙ ФОРМАТ ФАЙЛА '+FileName), '', MB_OK);
      Exit;
    end;
  end;
  d3dxMaterials := pD3DXMtrlBuffer.GetBufferPointer;
  GetMem(pMeshMaterials, SizeOf(TD3DMaterial9)*dwNumMaterials);
  GetMem(pMeshTextures, SizeOf(IDirect3DTexture9)*dwNumMaterials);
  ZeroMemory(pMeshTextures, SizeOf(IDirect3DTexture9)*dwNumMaterials);
  i:= 0;
  while (i < dwNumMaterials) do
  begin
    pMeshMaterials[i] := d3dxMaterials[i].MatD3D;
    pMeshMaterials[i].Ambient := pMeshMaterials[i].Diffuse;
    pMeshTextures[i] := nil;
    if (d3dxMaterials[i].pTextureFilename <> nil) and
       (StrLen(d3dxMaterials[i].pTextureFilename) > 0) then
    begin
      if FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,
                                          d3dxMaterials[i].pTextureFilename,
                                          pMeshTextures[i])) then
      begin
        StrLCopy(strTexture, strPrefix, MAX_PATH);
        StrLCopy(strTexture + lenPrefix, d3dxMaterials[i].pTextureFilename, MAX_PATH - lenPrefix);
        if FAILED(D3DXCreateTextureFromFile(ppiD3DDevice9,
                                            strTexture,
                                            pMeshTextures[i])) then
        begin
            MessageBox(0, pchar('ТЕКСТУРА НЕ ОБНАРУЖЕНА  '+strTexture), '', MB_OK);
        end;
      end;
    end;
    Inc(i);
  end;
  pD3DXMtrlBuffer:= nil;
  Result:= dwNumMaterials;
end;
 
end.
вот сам исходник

http://zalil.ru/32426063
drcoxer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файла dacorp Работа с сетью в Delphi 1 30.06.2011 09:03
Загрузка из файла Даsha Помощь студентам 0 22.06.2011 13:08
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
загрузка из файла RAVAL)) Общие вопросы Delphi 2 04.03.2009 12:48
Загрузка из файла. (*_*) Общие вопросы C/C++ 2 28.02.2009 22:16