|
03.08.2011, 00:39
|
#1
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Рябь на воде
Хочу сделать функцию для создания эффекта ряби на воде. Думаю смотреть надо в сторону pixmap'ов. Как вы считаете стоит ли ее создавать, или такая функция нагрузит процессор? Так же буду рад помощи в создании этой функции...
Type Effect Field x%, y%, r%, t%, rnx%, rny%, timer% Field myi%,myj% = 0 Field mypm1:TPixmap,mypm2:TPixmap Field myimg:TImage Method Draw() mypm1=CreatePixmap(r*2,r*2,PF_RGBA8888, 4) mypm2=CreatePixmap(r*2,r*2,PF_RGBA8888, 4) mypm1=GrabPixmap(x-r,y-r,r*2,r*2) For myi=0 To r*2-1 For myj=0 To r*2-1 rnx=10-Rand(5) rny=10-Rand(5) If myi+rnx>r*2-1 Then rnx=0 If myj+rnx>r*2-1 Then rnx=0 If myi+rnx<0 Then rnx=0 If myj+rnx<0 Then rnx=0 If myi+rny>r*2-1 Then rny=0 If myj+rny>r*2-1 Then rny=0 If myi+rny<0 Then rny=0 If myj+rny<0 Then rny=0 mypm2.WritePixel(myi,myj,mypm1.ReadPixel(myi+rnx,myj+rny)) Next Next DrawPixmap mypm2, x-r+5, y-r+5 EndMethod Function Create(x%,y%,r%,t%) Local NewEffect:Effect = New Effect NewEffect.x=x NewEffect.y=y NewEffect.r=r NewEffect.timer=MilliSecs() NewEffect.t=t EffectList.AddLast NewEffect EndFunction Method destroy() EffectList.remove(Self) EndMethod EndType
Эффект конечно требует доработки, а так же начинает поддтормаживать при радиусе больше 64 пикселей...
__________________
OS: Ubuntu Linux 11.04
CPU: Intel® Core™ 2 Quad Q9000 (2.0GHz, 1066MHz, 6Mb)
RAM: DDR2 SODIMM 4096 Мб
Video: NVIDIA® GeForce® GT240M 1024 Мб
Последний раз редактировалось xmarat, 03.08.2011 в 21:08.
|
(Offline)
|
|
03.08.2011, 00:48
|
#2
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Рябь на воде
Че за нахер?
|
(Offline)
|
|
03.08.2011, 00:54
|
#3
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Рябь на воде
Зачем сразу нахер? Просто предлагаю написать функцию...
__________________
OS: Ubuntu Linux 11.04
CPU: Intel® Core™ 2 Quad Q9000 (2.0GHz, 1066MHz, 6Mb)
RAM: DDR2 SODIMM 4096 Мб
Video: NVIDIA® GeForce® GT240M 1024 Мб
|
(Offline)
|
|
03.08.2011, 00:54
|
#4
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Рябь на воде
пиксмапы на блицмаксе это медленно, хотя если научишься шустро менять пиксели на картинке over 256x256, обязательно отпишись)
|
(Offline)
|
|
03.08.2011, 01:01
|
#5
|
Нуждающийся
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Рябь на воде
Ну я думал если получится сюда выложить. Буду постепенно менять первое сообщение, поправляйте если что...
__________________
OS: Ubuntu Linux 11.04
CPU: Intel® Core™ 2 Quad Q9000 (2.0GHz, 1066MHz, 6Mb)
RAM: DDR2 SODIMM 4096 Мб
Video: NVIDIA® GeForce® GT240M 1024 Мб
|
(Offline)
|
|
06.08.2011, 15:53
|
#6
|
|
Ответ: Рябь на воде
Пиксмапы хранятся в ОЗУ, поэтому будет очень медленно.
ОЗУ->Перегонка данных пиксмапа по шине в видяху->Билд пиксмапа в видеопамяти в текстуру OpenGL\DirectX - вот такая получается длинная дорожка.
Думаю тебе известно что GAPI хранит текстуры в видеопамяти - это копии пиксмапов переведенные в формат графической библиотеки, и именно от них надо плясать, нет ничего сложного чтобы прочесть\записать данные напрямую в видеопамяти.
БлицМакс хранит текстуры здесь :
Это адрес в видеопамяти но напрямую обращатся к нему нельзя доступ к текстуре обеспечивает графическая библиотека что то наподобии этого :
Local frame:TD3D7ImageFrame = TD3D7ImageFrame(image.Frame(0))
Local pixels:Byte Ptr = MemAlloc(16*16*driver.GetPitch(frame.name))
driver.Lock(frame.name, D3D_READONLY)
driver.Read([0, 0, 16, 16], frame.name, Varptr pixels[0])
driver.UnLock(frame.name)
Предупреждаю - это псевдокод, поэтому надо разбиратся - но общая картина такова.
А вообще Анимированая текстура - тру_решение.
|
|
|
Сообщение было полезно следующим пользователям:
|
|
07.08.2011, 10:24
|
#7
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Рябь на воде
СПасибо, надо будет порыть в этом направлении..
+ ему не нужно анимированной текстуры - он просто хочет динамически прогонять эффекты по пиксмапе, тут анимированных картинок не хватит)))
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:24.
|