Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Отображение в D3Dx 2х-мерных изображений   Найти похожие ветки 

 
h8394E   (2006-06-02 16:24) [0]

Доброго времени суток. Я уже второй день сижу над D3Dx, аон не фурычит.... У меня должна из файла *.bmp загружаться текстура, копироваться в спрайт и выводиться на экран, под разным углом. Я сделал всё, как говорится "по книжке", а точнее по статье, а оно не фурычит - ничего не выводит. Даже когда поставить паузу на строчке кода - на красном кружке появляется галочка, а в момент выполнения программы - порга не останавливается, как будто тот участок кода не выполняется. Что я не так сделал?
Даю код:

var
 g_pD3D: IDirect3D8;
 g_device: IDirect3DDevice8;
 DispMode:_D3DDISPLAYMODE;
 D3D_pp:TD3DPRESENT_PARAMETERS;
 g_pTexture: IDirect3DTexture8;
 g_pSprite: ID3DXSprite;
hR:hResult;
WindowHandle:hWnd;

procedure IniDirX;
begin
g_pD3d:=Direct3DCreate8(D3D_SDK_VERSION);
// if g_pD3d=nil then exit;

hr:=g_pD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, DispMode);

ZeroMemory(@D3D_pp, sizeof(D3D_pp));
D3D_pp.Windowed:=BOOL(False);
D3D_pp.BackBufferWidth:=ScreenWidth;
D3D_pp.BackBufferHeight:=ScreenHeight;
D3D_pp.BackBufferFormat:=DispMode.Format;
D3D_pp.SwapEffect:=D3DSWAPEFFECT_DISCARD;

hR:=g_pD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, WindowHandle,
          D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3D_pp, g_device);

hR:=D3DXCreateSprite(g_device, g_pSprite);

hR:=D3DXCreateTextureFromFileEx(g_device, "Cells.bmp", 32, 16,D3DX_DEFAULT, 0, D3DFMT_UNKNOWN,D3DPOOL_DEFAULT, D3Dx_FILTER_NONE, D3DX_FILTER_NONE,
                           D3DCOLOR_XRGB(255,255,255), nil, nil, g_pTexture);

DrawSpriteOnScreen;
end;

procedure DrawSpriteOnScreen;
var
CRect:Trect;
Scal, Rot, trans:TD3DXVECTOR2;
begin
Scal.x:=1.0;
Scal.y:=1.0;

Rot.x:=16;
Rot.y:=7.5;

Trans.x:=0;
trans.y:=0;
SetRect(CRect, 0,0,32,15);
g_device.Clear(0, nil, D3DCLEAR_TARGET, $ff00ff00, 1.0, 0);
g_device.BeginScene;
g_pSprite.Draw(g_pTexture, @CRect, @Scal, @Rot, D3DX_PI*45/180.0, @Trans, $ffffffff);
g_device.EndScene;
g_device.Present(nil, nil, 0, nil);
g_device.SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
end;


 
a22 ©   (2006-06-02 16:34) [1]

не надо использовать ID3DXSprite, он медленный. сделайте руками VertexBuffer на 4 вершины
b d
|\|
a c
занесите a,b,c,d. рисуйте стрипом

вершины вносите в буфер с D3DFVF_XYZRHW, это позволит избежать обсчета геометрии и даст возможность задавать координаты сразу в координатах текущего рендертаргета (в стандартном случае - в кординатах экрана)


 
Sapersky   (2006-06-02 18:47) [2]

VertexBuffer при рисовании 4 вершин не нужен. Проще (и даже несколько быстрее) DrawPrimitiveUP.
Да, кстати, поворачивать тогда придётся самому, хотя это не сложно и не долго (вершины, а не картинку).

Что касается примера с ID3DXSprite - надеюсь, рисуется всё в цикле, а не один раз? И зачем сразу на полный экран? Опять же, надо проверить параметры g_pSprite.Draw, или выставить всё что можно для начала в nil.


 
h8394E   (2006-06-02 19:02) [3]

Ой, я - дура-ааак... Пишу-то всё на WinAPI... И окно создаю в отдельной процедуре. В той-же порцедуру цикл обработки сообщений написал. Получилось, что у меня инициализация и рисование происходило сразу после выхода...

А что на чсёт скорости, так я думаю, что в любом случае будет быстрее, чем
Image1.picture.canvas.draw(x, y, TurnPicture(Bitmap, 38));
И это было в каждом кадре раз по 30... И скорость было 60 кадров в сек.

Так что если у меня со спрайтом будет 120, то - нормально...



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
2-1168261997
Lamer666
2007-01-08 16:13
2007.01.28
DbGridEh


3-1162996659
Megabyte
2006-11-08 17:37
2007.01.28
Помогите составить запрос или подскажите что другое


15-1167474376
IMHO
2006-12-30 13:26
2007.01.28
MS Word и кубковые сетки


15-1168460817
Chort
2007-01-10 23:26
2007.01.28
Логотип программы


8-1149216168
h8394E
2006-06-02 06:42
2007.01.28
Библиотеки DirectX8 -> d3dx8ab.dll или d3dx8d.dll