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

Вниз

Рендер на текстуру под PowerDraw!   Найти похожие ветки 

 
dRake ©   (2003-12-21 19:39) [0]

Каким образом это можно осуществить? А то динамического ландшафта хочется,
а уйму спрайтов плодить - тормозно и, вообще, неспортивно ;)
Большая просьба - напишите, если кто знает ;)


 
Darthman ©   (2003-12-22 10:36) [1]

Через указатель на текстуру можно сделать. Пробовал, получается нормально.


 
dRake ©   (2003-12-22 11:40) [2]

Тоесть таким макаром?
PowerGraph.RenderEffect(^Texture, x, y, patern, effect); ?
Напиши плиз


 
Darthman ©   (2003-12-22 13:04) [3]

рендерэффект тут не при чем.
Через D3DLockedTexture делать
Image.Lock.... и так далее потом через указатель на поверхность
Сейчас ПД нет под рукой не могу сказать.


 
dRake ©   (2003-12-22 14:06) [4]

Ну тогда, когда будет, можешь тут написать, или скинуть на мыло?


 
dRake ©   (2003-12-23 19:53) [5]

Ау! Я те уж письмо выслсал - ни ответа ни привета :))


 
Darthman ©   (2003-12-23 21:24) [6]

Ну не было меня еще дома, не было. Вчера за комп дома не содился, извини. Работы много, устаю сильно, забываю про все на свете. :)


 
dRake ©   (2003-12-23 22:18) [7]

:)))
Я скоро помру от нетерпения :))


 
Darthman ©   (2003-12-24 10:36) [8]

Смотри сюда:

var
 i : integer
 LRect: TD3DLocked_Rect;
 Ptr: pdword;
begin
 Image.FastLock(PatternNumber,LRect);   // лочим текстуру
 for j:= 0 to ImageHeight-1 do
 begin
   SrcPtr:= Pointer(Integer(LRect.pBits) + (LRect.Pitch * j)); //  указатель на нужную "строчку" картинки сдвигаем на начало "строки"
   for i:=0 to ImageWidth-1 do
   begin
     SrcPtr^ :=(j shl 24) or  Ptr^ and $00FFFFFF;  // присваиваем нужное значение точки (вместе с альфой)
     Inc(integer(Ptr), FormatSize); // увеличиваем указатель. FormatSize - величина формата пиксела для текстуры в байтах
   end;
 end;

 Image.Unlock(k);


Если формат A8R8G8B8, то размер будет 4, если A4R4G4B4, то 2 и так далее. Учитывай специфику формата, и все будет здорово. Я намедни на таком принципе скринсейвер делал со снегом падающим и собирающимся в сугробы ;)

Удачи.


 
dRake ©   (2003-12-24 12:33) [9]

Пасибо большое! Надеюсь я скоро доделаю игруху ;)
Вот сессия кончится...


 
dRake ©   (2003-12-24 13:13) [10]

Много непонятного :(

Тоесть в этом цикле по идее мы лочим текстуру в рект,
затем перебираем все точки ректа, и складываем их с
точками текстурки, которую надо рисовать, учитывая альфу,
и после разлочиваем исходную текстуру.

Но в этом коде я что-то разобраться не могу.. :(

>Я намедни на таком принципе скринсейвер делал со снегом падающим и собирающимся в сугробы ;)

Можешь мне исходники на почту кинуть, я тебе тоже могу свой скринсейвер кинуть ;)


 
dRake ©   (2003-12-24 13:17) [11]

mailto : drakosha@pisem.net


 
Darthman ©   (2003-12-24 14:35) [12]

Да, я его не доделал.
А чего непонятного-то? Лочишь текстуру, рисуешь в нее что надо и разлочиваешь.


 
dRake ©   (2003-12-25 13:51) [13]

Ну в теории понятно, но похоже что ты этот код прям тут писал, не работает он ;) По-порядку...

SrcPtr^ :=(j shl 24) or  Ptr^ and $00FFFFFF;

Насколько я понял в этой строчке пиксель исходной картинки должен формироваться из него самого + пиксель рисуемой картинки.
Компилер на этой строчке выдаёт ошибу (где-то пропущенная скобка).
Я не вижу тут пикселя РИСУЕМОЙ картинки.

Image.Unlock(k);
Что есть "k" ?

И вообще можешь написать рабочий код (из своего скринсейвера), а то я вообще не секу в указателях итп. Мне нужна процедурка типа
DrawOnTexture(SrcTex, DrawTex : TAGFImage; DrawPosX, DrawPosY : integer); Но это в идеальном случае. Кстати неплохо было бы включить нечто подобное в новые версии PD :)


 
Darthman ©   (2003-12-25 14:43) [14]

DrawOnTexture(SrcTex, DrawTex : TAGFImage; DrawPosX, DrawPosY : integer); Но это в идеальном случае. Кстати неплохо было бы включить нечто подобное в новые версии PD :)
Идея неплохая ;)

к - номер паттерна текстуры, забыл написать. ;) сорри, процедурку наваяю сегодня, если не усну;))) тада кину тебе


 
dRake ©   (2003-12-25 19:53) [15]

Ну если ты такое сделаеш то я тебя в рамочке пропишу в about"e в своей гаме :))


 
Sapersky ©   (2003-12-26 00:24) [16]

Стоило использовать D3D, чтобы рисовать попиксельно процессором :)
То есть если это предварительная загрузка изображения в текстуру, тогда конечно, а вот если в реальном времени - есть же IDirect3DDevice8.SetRenderTarget. Правда, сам ни разу не пользовался, но раз есть - должно работать :)


 
dRake ©   (2003-12-27 00:03) [17]

Посмотрел по-поводу SetRenderTarget,
но там нужно указать поверхность, значит придётся самому их создавать, итд.. короче получится обычный Direct3D, зачем тогда нужен PD :)
---------------------------------
Darthman ау ;)


 
Sapersky ©   (2003-12-28 22:04) [18]

Surface можно получить из текстуры (GetSurfaceLevel).
Ещё, текстура должна быть создана с D3DUSAGE_RENDERTARGET.


 
dRake ©   (2003-12-29 00:45) [19]

Щас попробуем так...



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

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

Наверх




Память: 0.51 MB
Время: 0.03 c
8-1074102210
miek
2004-01-14 20:43
2004.05.16
Демка "Граффити"


3-1082570720
alle
2004-04-21 22:05
2004.05.16
Проблема в DataModule


9-1073339831
$iD
2004-01-06 00:57
2004.05.16
Пожалуйста, помогите с алгоритмами!!!!!!!!!!!!!!!


1-1082649393
NumLock
2004-04-22 19:56
2004.05.16
Непонятка с TThread V2.


3-1082115450
nv_
2004-04-16 15:37
2004.05.16
А всё таки поиск в подстановочном поле...