Главная страница
    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.46 MB
Время: 0.046 c
15-1167758067
kaZaNoVa
2007-01-02 20:14
2007.01.28
Пространств вариантов или свобода выбора


15-1168176479
ProgRAMmer Dimonych
2007-01-07 16:27
2007.01.28
Помогите советом, пожалуйста...


2-1168436770
FIL-23
2007-01-10 16:46
2007.01.28
работа с константой


2-1168593143
vigo_
2007-01-12 12:12
2007.01.28
Вызов переменной из другого Unit a


15-1167984292
DeadMeat
2007-01-05 11:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский