
Опытный
 
Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган
Репутация: нет Всего: 10
|
Доброго времени суток!!! Пытаюсь конвертить BSP для открытия в 3DS Max'е Перевожу в MaxScript (проще некуда) Вот Код: | Код | program bsp2mp;
{$APPTYPE CONSOLE}
uses Windows, SysUtils, BSPUnit in 'BSPUnit.pas';
var fnbsp: PChar = 'de_dust.bsp'; fnmp: String;
hbspf, hms: THandle;
pdh: pdheader_t = nil; pvertexlump: pvectora= nil; nvertex: Integer; pfacelump: pdface_ta = nil; nface: Integer; pedgelump: pdedge_ta = nil; nedge: Integer; psurfedgelump: PIntegerArray = nil; nsurfedge: Integer;
t: DWord;
procedure WriteData; var i, j, fse, e, v1, v2: Integer; s: String; begin s := 'bspo = editable_mesh name:(uniquename "BSP Object")'#13#10'convertTo bspo (Editable_Poly)'#13#10; WriteFile(hms, s[1], Length(s), t, nil); for i := 0 to nvertex - 1 do begin s := 'polyOp.createVert bspo [' + FloatToStr(pvertexlump^[i].x) + ', ' + FloatToStr(pvertexlump^[i].y) + ', ' + FloatToStr(pvertexlump^[i].z) + ']'#13#10; WriteFile(hms, s[1], Length(s), t, nil); end; for i := 0 to nface - 1 do begin s := 'polyOp.createPolygon bspo #('; fse := pfacelump^[i].firstedge; for j := 0 to pfacelump^[i].numedges - 1 do begin e := psurfedgelump^[j]; if e < 0 then begin v1 := pedgelump^[Abs(e)].v[1]; v2 := pedgelump^[Abs(e)].v[0] end else begin v1 := pedgelump^[Abs(e)].v[0]; v2 := pedgelump^[Abs(e)].v[1] end; if j = pfacelump^[i].numedges - 1 then s := s + IntToStr(v1 + 1) + ', '; s := s + IntToStr(v2 + 1); if j <> pfacelump^[i].numedges - 1 then s := s + ', ' end; s := s + ')'#13#10; WriteFile(hms, s[1], Length(s), t, nil); end; end;
begin DecimalSeparator := '.'; hbspf := CreateFile(fnbsp, GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hbspf = INVALID_HANDLE_VALUE then begin WriteLn('Error Open "' + fnbsp + '"'); ReadLn; Exit end; WriteLn('Open "' + fnbsp + '"'#13#10); GetMem(pdh, SizeOf(dheader_t)); ReadFile(hbspf, pdh^, SizeOf(dheader_t), t, nil); WriteLn('ident: ' + String(pdh^.ident)); WriteLn('version: ' + IntToStr(pdh^.version)); WriteLn('mapRevision: ' + IntToStr(pdh^.mapRevision)); WriteLn; GetMem(pvertexlump, pdh^.lumps[3].filelen); nvertex := pdh^.lumps[3].filelen div 12; SetFilePointer(hbspf, pdh^.lumps[3].fileofs, nil, FILE_BEGIN); ReadFile(hbspf, pvertexlump^, pdh^.lumps[3].filelen, t, nil); WriteLn('Readed Vertex Lump'); GetMem(pfacelump, pdh^.lumps[7].filelen); nface := pdh^.lumps[7].filelen div 56; SetFilePointer(hbspf, pdh^.lumps[7].fileofs, nil, FILE_BEGIN); ReadFile(hbspf, pfacelump^, pdh^.lumps[7].filelen, t, nil); WriteLn('Readed Face Lump'); GetMem(pedgelump, pdh^.lumps[12].filelen); nedge := pdh^.lumps[12].filelen div 4; SetFilePointer(hbspf, pdh^.lumps[12].fileofs, nil, FILE_BEGIN); ReadFile(hbspf, pedgelump^, pdh^.lumps[12].filelen, t, nil); WriteLn('Readed Edge Lump'); GetMem(psurfedgelump, pdh^.lumps[13].filelen); nsurfedge := pdh^.lumps[13].filelen div 4; SetFilePointer(hbspf, pdh^.lumps[13].fileofs, nil, FILE_BEGIN); ReadFile(hbspf, psurfedgelump^, pdh^.lumps[13].filelen, t, nil); WriteLn('Readed SurfEdge Lump'); CloseHandle(hbspf); fnmp := ChangeFileExt(fnbsp, '.ms'); if FileExists(fnmp) then DeleteFile(fnmp); hms := CreateFile(PChar(fnmp), GENERIC_WRITE, 0, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0); WriteData; WriteLn('Writed ' + fnmp); WriteLn; WriteLn('For Exit Press Enter'); CloseHandle(hms); FreeMem(psurfedgelump); FreeMem(pedgelump); FreeMem(pfacelump); FreeMem(pvertexlump); FreeMem(pdh); ReadLn; end.
|
Это BSPUnit | Код | unit BSPUnit;
interface
uses Windows;
type pvector = ^vector; vector = record x: Single; y: Single; z: Single; end; pvectora = ^vectora; vectora = array [0..65535] of vector;
plump_t = ^lump_t; lump_t = record fileofs: Integer; filelen: Integer; version: Integer; fourCC: array [0..3] of Char; end;
pdheader_t = ^dheader_t; dheader_t = record ident: array [0..3] of Char; version: Integer; lumps: array [0..63] of lump_t; mapRevision: Integer; end;
pdedge_t = ^dedge_t; dedge_t = record v: array [0..1] of Word; end; pdedge_ta = ^dedge_ta; dedge_ta = array [0..262143] of dedge_t;
pdface_t = ^dface_t; dface_t = record planenum: Word; side: Byte; onNode: Byte; firstedge: Integer; numedges: Word; texinfo: Word; dispinfo: Word; surfaceFogVolumeID: Word; styles: array [0..3] of Byte; lightofs: Integer; area: Single; LightmapTextureMinsInLuxels: array [0..1] of Integer; LightmapTextureSizeInLuxels: array [0..1] of Integer; origFace: Integer; numPrims: Word; firstPrimID: Word; smoothingGroups: DWord; end; pdface_ta = ^dface_ta; dface_ta = array [0..65535] of dface_t;
implementation
end.
|
Но вот что-то не могу сложить фейсы, ребра и вершины. Могет кто-нидь подскажет, как с ними разобраться? Дока по BSP прикреплена (там косячек в HTML просто не давайте ей выполнить скрипт, а то переводит на сайт какой-то [что не говорили что я вам вирусягу принес]) Это сообщение отредактировал(а) dvamaster - 5.8.2006, 11:14
Присоединённый файл ( Кол-во скачиваний: 5 )
bspformat.rar 16,02 Kb
--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/
Что же я сделал не так? /Король Лир/
Я делаю это для твоего же блага! /Любой родитель и палач/
PKUNZIP.ZIP /неизвестный/
|