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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 17:37   #1
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию Неразбериха с DX9

В общем как то странно. Раньше все работало, теперь перестало. Даже не знаю в чем может быть ошибка. Просто не отрисовывываюся полигоны
Очень хотелось бы разобраться, что я делаю не так. Заранее благодарен
Код:
//ОБЪЕКТ
//Создание объекта
constructor T3DObject.Create(device: IDirect3DDevice9);
begin
 inherited Create;
 FVertexCount:= 0;
 FPolygoneCount:= 0;
 FDevice:= device;
 FDevice.CreateVertexBuffer(555*SizeOf(T3DVertex),0,fvf,D3DPOOL_DEFAULT,FVertexBuffer,nil);
 FDevice.CreateIndexBuffer(555*SizeOf(word),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,FIndexBuffer,nil);
 D3DXMatrixTranslation(TransformMatrix,0,0,0);
 usealpha:= false;
end;
//Добавление точки
function T3DObject.AddVertex(x, y, z, nx, ny, nz, u, v: single; var index: word): boolean;
var ver: T3DVertex;
    pver: pointer;
begin
 Result:= false;
 ver.pos.x:= x; ver.npos.x:= nx; ver.u:= u;
 ver.pos.y:= y; ver.npos.y:= ny; ver.v:= v;
 ver.pos.z:= z; ver.npos.z:= nz;
 if Failed( FVertexBuffer.Lock(FVertexCount*SizeOf(T3DVertex),SizeOf(T3DVertex),pver,0{D3DLOCK_DISCARD}) ) then
  exit;
 Move(ver,pver^,SizeOf(T3DVertex));
 FVertexBuffer.Unlock;
 index:= FVertexCount;
 inc(FVertexCount);
 Result:= true;
end;
//Создание полигона
function T3DObject.CreatePolygone(v1, v2, v3: word): boolean;
 var ind: array [0..2] of word;
     pind: pointer;
begin
 Result:= false;
 ZeroMemory(@ind,SizeOf(ind));
 ind[0]:= v1;
 ind[1]:= v2;
 ind[2]:= v3;
 if Failed( FIndexBuffer.Lock(3*FPolygoneCount*SizeOf(word),3*SizeOf(word),pind,0{D3DLOCK_DISCARD}) ) then exit;
 inc(FPolygoneCount);
 Move(ind,pind^,3*SizeOf(word));
 FindexBuffer.Unlock;
 Result:= true;
end;
//Рендеринг
procedure T3DObject.Render;
begin
 FDevice.SetStreamSource(0,FVertexBuffer,0,SizeOf(T3DVertex));
 FDevice.SetIndices(FIndexBuffer);
 FDevice.SetTransform(D3DTS_WORLD,TransformMatrix);
 if usealpha then
  FDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, itrue);
 FDevice.SetMaterial(material);
 FDevice.SetTexture(0,texture);
 FDevice.DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,3*FPolygoneCount,0,FPolygoneCount);
 if usealpha then
  FDevice.SetRenderState(D3DRS_ALPHABLENDENABLE, ifalse);
end;


//Основной рендер
function T3DApi.Render: cardinal;
 var i: integer;
begin
 Result:= $000;
 Device.Clear(0,nil,D3DClear_Target or D3DClear_ZBuffer,$888888, 1.0, 0);
 device.BeginScene;
    for i:= 0 to Fobjcount-1 do
      Fobjects[i].Render;
 device.EndScene;
 device.Present(nil,nil,0,nil);
end;
//Добавление объекта в цикл рендера
procedure T3DApi.Create3DObject(var AObj: T3DObject);
begin
 Aobj:= T3DObject.Create(Device);
 with Aobj do
 begin
  _id:= Fobjcount;
  inc(Fobjcount);
  SetLength(FObjects,FObjcount);
  Fobjects[_id]:= Aobj;
 end;
end;
alexprey вне форума Ответить с цитированием
Ответ


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

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

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