Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

Отображение в 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 вся ветка

Форум: "Media";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.044 c
15-1168314028
Sergey Masloff
2007-01-09 06:40
2007.01.28
Не такая великая как тайна воды но прикольно


2-1168457149
Kolan
2007-01-10 22:25
2007.01.28
Научите правильно работать с XMLDocument


15-1168283686
Prohodil Mimo
2007-01-08 22:14
2007.01.28
что такое CD/MD управление


15-1168066455
vidiv
2007-01-06 09:54
2007.01.28
Дизайн страницы


2-1168197505
anton773
2007-01-07 22:18
2007.01.28
разобрать число





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский