DirectDraw in DirectX8

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

mrs2000
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 05.01.2004 (Пн) 16:53
Откуда: Иркутск

DirectDraw in DirectX8

Сообщение mrs2000 » 17.03.2004 (Ср) 16:38

Объясните как сделать 2D в DX8
То есть DirectDraw я знаю и мне нужен вывод картинки в 2D под DX8 с возожностью вращения и т.п.

Как все это инцализировать, загрузть картнку и т.д.

Может у кого есть прмерчик или ссылка.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 17.03.2004 (Ср) 22:35

Щас времени нет, но позже я тебе могу свой движок дать или пример. А пока могу сказать, что 2D в DX8 при помощи DXSprite выводиться. Там всё есть и Alphablending и Alpha прозрачность и рендеринг с любым оттенком цвета. Можешь попробовать сам разобраться, он очень прост. Если нет то завтра пример будет.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 18.03.2004 (Чт) 15:19

Maxwell писал(а):Щас времени нет, но позже я тебе могу свой движок дать или пример. А пока могу сказать, что 2D в DX8 при помощи DXSprite выводиться. Там всё есть и Alphablending и Alpha прозрачность и рендеринг с любым оттенком цвета. Можешь попробовать сам разобраться, он очень прост. Если нет то завтра пример будет.
Если тебе не сложно, то выложи пож-ста.... мне тоже хочется взглянуть... :roll:

mrs2000
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 05.01.2004 (Пн) 16:53
Откуда: Иркутск

OK

Сообщение mrs2000 » 18.03.2004 (Чт) 16:41

Сам разобраться немогу. Подожду.

mrs2000
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 05.01.2004 (Пн) 16:53
Откуда: Иркутск

OK

Сообщение mrs2000 » 18.03.2004 (Чт) 16:48

Сам разобраться немогу. Подожду.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 18.03.2004 (Чт) 16:52

Вот когда-то писал такой пример:

http://www.tuapse-mikle.narod.ru/4sprite.zip

Небо разделено на 6 частей для совместимости со старыми видеокартами, не поддерживающими текстуры больше, чем 256*256. Сейчас не актуально.

Maxwell
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 182
Зарегистрирован: 01.10.2003 (Ср) 15:48
Откуда: Russia

Сообщение Maxwell » 18.03.2004 (Чт) 17:01

Для 2D можно и D3DXSprite юзать - он проще. И скорость не плохая. Вот пример который я обещал.
У вас нет доступа для просмотра вложений в этом сообщении.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 19.03.2004 (Пт) 19:59

Скорость - ужасная!!! Без вывода спрайта - 256 фпс, тока спрайт на экране - 155; 100 спрайтов - 2 фпс.. :cry: Иногда глюк: не понятно почему разворачивает рисунок на весь экран... :cry:

mrs2000
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 78
Зарегистрирован: 05.01.2004 (Пн) 16:53
Откуда: Иркутск

Error

Сообщение mrs2000 » 20.03.2004 (Сб) 9:37

В твоем примере функция LoadTexture, строка Set LoadTexture = D3DX.CreateTextureFromFile(D3DDevice, path) выдает ошибку D3DERR_INVALIDCALL

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Error

Сообщение Vovik » 21.03.2004 (Вс) 16:58

Mikle, не могу переклипать твой пример для вывода просто одного спрайта....чё т меня с буферами глючит... :cry: У тебя нет примера просто для вывода одного спрайта? :roll:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 22.03.2004 (Пн) 14:01

Вот с одним спрайтом:

http://www.tuapse-mikle.narod.ru/sprite.zip

Я удалил все лишнее, а все, касающееся непосредственно спрайта, вынес в класс. Теперь, чтобы добавить другой спрайт, достаточно добавить:

Public MySprite As New Sprite
соответствующий MySprite.Create в процедуру InitD3D,
соответствующий MySprite.Render в процедуру Render,
соответствующий MySprite.Kill в процедуру CloseD3D.

Потом управляем, используя свойства Angle, Size, PosX и PosY.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 22.03.2004 (Пн) 15:11

Большое спасибо Майкл!!! Всё работает, но опять есть пара нюансов:
Как мне сделать так, чтобы спрайт выводился всегда спереди, т.е. при рендеринге ландшафта камера меняет матрицы и спрайт улетает....наверно придёться запоминать старые, потом выводить спрайт и опять ставить старые......нет ли другого способа? :roll:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 22.03.2004 (Пн) 15:47

Так же, как каждый спрайт помнит свою матрицу, ландшафт должен помнить свою. Если для передвижения ландшафта будешь использовать D3DTS_VIEW, тогда и ее придется запоминать для каждого спрайта. Если же использовать D3DTS_WORLD, тогда и спрайт и ландшафт будут совершенно независимы и D3DTS_VIEW можно не трогать.
Подробнее опиши игру, что из себя представляет ландшафт и т. д. Тогда прикинем, как лучше.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 22.03.2004 (Пн) 21:20

Ландшафт ездит с помощью D3DTS_WORLD... Вроде разобрался с матрицами, но есть ещё один вопросик: нельзя ли координаты приобщить к нормальным.... а то 0, 0 - центр, а мне нужно левый верхний угол...во.... :cry: :( :roll:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 23.03.2004 (Вт) 11:28

Поменяй строку:
D3DXMatrixLookAtLH Mtrx, Vec3(0, 0, -5), Vec3(0, 0, 0), Vec3(0, 5, 0)
на что-то вроде:
D3DXMatrixLookAtLH Mtrx, Vec3(X, Y, -5), Vec3(X, Y, 0), Vec3(0, 5, 0)
где вместо X, Y подбери соответствующие значения. Примерно 4 и 6.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 27.03.2004 (Сб) 0:52

Mikle писал(а):Поменяй строку:
D3DXMatrixLookAtLH Mtrx, Vec3(0, 0, -5), Vec3(0, 0, 0), Vec3(0, 5, 0)
на что-то вроде:
D3DXMatrixLookAtLH Mtrx, Vec3(X, Y, -5), Vec3(X, Y, 0), Vec3(0, 5, 0)
где вместо X, Y подбери соответствующие значения. Примерно 4 и 6.

Вообще улетает куда-то.... :cry: А больше никак нельзя? очень надо...в этих координатах не удобно... :cry:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 27.03.2004 (Сб) 11:36

Помяняй это:
Код: Выделить всё
  D3DXMatrixPerspectiveFovLH Mtrx, 1.08, 0.75, 1, 10
  d3dDevice.SetTransform D3DTS_PROJECTION, Mtrx

  D3DXMatrixLookAtLH Mtrx, Vec3(4, -3, -5), Vec3(4, -3, 0), Vec3(0, 5, 0)
  d3dDevice.SetTransform D3DTS_VIEW, Mtrx

'.........

  Private Sub hsY_Scroll()
    Player.PosY = hsY.Value / -100      '-100 для разворота Y координаты.
    Render
  End Sub

, а диапазоны скролов по X и Y сделай соответственно 0-800 и 0-600, то есть координаты по X будут: 0-8, а по Y: 0-6.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList  
cron