[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]


  • Страница 1 из 1
  • 1
Модератор форума: Spidy, blitz3d  
Форум мира Blitz3D » Язык Blitz3D » 2D программирование » Ну почему не работает?
Ну почему не работает?
deejexДата: Суббота, 18.04.2009, 09:38 | Сообщение # 1
заядлый прогер
Группа: Пользователи
Сообщений: 522
Награды: 2
Репутация: 14
Статус: Offline
RANGE = 10
Graphics 800,600
SeedRnd MilliSecs()
SetBuffer BackBuffer()

IMA = LoadImage("im.bmp")
DrawImage IMA,0,0
Flip
Wait(2500)

While Not KeyDown(1)
Cls
DrawImage IMA,0,0
Noise(RANGE)
Flip
Wend

End

Function Wait(per)
ot = MilliSecs()
Wk = 0
Wmk = 0
While ot+per>MilliSecs()
Wk = GetKey()
Wmk = GetMouse()
If Wk <> 0 Or Wmk <> 0 Then Exit
Wend
End Function

Function Noise(ran)
LockBuffer BackBuffer()
For Bl_x = 0 To GraphicsWidth()
For Bl_x = 0 To GraphicsHeight()
CopyPixelFast(Bl_x+Rand(-ran,ran),Bl_y+Rand(-ran,ran),BackBuffer(),Bl_x,Bl_y,BackBuffer())
Next
Next
UnlockBuffer BackBuffer()
End Function

Почему не работает?

Добавлено (18.04.2009, 09:38)
---------------------------------------------
im.bmp (800x600) в комлект не входит




 
CrozzyДата: Воскресенье, 19.04.2009, 23:16 | Сообщение # 2
ученик
Группа: Пользователи
Сообщений: 92
Награды: 1
Репутация: 1
Статус: Offline
А что ты хотел написать? Мы не сможем помочь, если не знаем цели.

Не все то 3D, что вертится...
 
deejexДата: Среда, 22.04.2009, 19:10 | Сообщение # 3
заядлый прогер
Группа: Пользователи
Сообщений: 522
Награды: 2
Репутация: 14
Статус: Offline
Один пиксель должен копироваться случайным образом на пиксель рядом. Так получается цифровой шум.
В играх это можно использовать для размытия импостеров.

Добавлено (20.04.2009, 18:19)
---------------------------------------------
Ошибку я нашел - Copy(,Write,Read)PixelFast не работает с "мертвой зоной" изображений...
Но как исправить ошибку?

Добавлено (22.04.2009, 19:10)
---------------------------------------------
For Bl_x = ran To GraphicsWidth() - ran
For Bl_x = ran To GraphicsHeight() - ran
CopyPixelFast(Bl_x+Rand(-ran,ran),Bl_y+Rand(-ran,ran),BackBuffer(),Bl_x,Bl_y,BackBuffer())
Next
Next

Вроде такой вариант должен был заработать...






Сообщение отредактировал deejex - Четверг, 23.04.2009, 19:53
 
CrozzyДата: Суббота, 25.04.2009, 23:23 | Сообщение # 4
ученик
Группа: Пользователи
Сообщений: 92
Награды: 1
Репутация: 1
Статус: Offline
Copy(,Write,Read)PixelFast не работает с мертвой зоной не изображений, а буферов. Лови правильный вариант:

CopyPixelFast(Bl_x+Abs(Rand(-ran,ran)),Bl_y+Abs(Rand(-ran,ran)),BackBuffer(),Bl_x,Bl_y,BackBuffer())

Когда ссылаешься на пиксель буфера с отрицательным значением х или у, программа вылетает. Используй команду Abs для получения модуля числа.


Не все то 3D, что вертится...
 
deejexДата: Воскресенье, 26.04.2009, 09:41 | Сообщение # 5
заядлый прогер
Группа: Пользователи
Сообщений: 522
Награды: 2
Репутация: 14
Статус: Offline
Вылета больше нет, но эффекта тоже.
Ничего не происходит.
Просто всё виснит. sad
Я рассмотрел сэмпл CopyPixelFast и там тоже вылетает.






Сообщение отредактировал deejex - Воскресенье, 26.04.2009, 09:50
 
CrozzyДата: Воскресенье, 26.04.2009, 10:48 | Сообщение # 6
ученик
Группа: Пользователи
Сообщений: 92
Награды: 1
Репутация: 1
Статус: Offline
Запрети программе ссылаться на мертвые пиксели.

Repeat
xr=rand(-10,10)
Until Bl_x+xr>0 and Bl_x+xr<graphicswidth()-1

Аналогично с у.

Учти, что пиксель graphicswidth() тоже дохлый.

Честно говоря, эти фасты я не использую из-за вот такого геморроя, а в последних версиях с ними вообще невозможно работать. Если хочешь сделать качественный blur, ищи длл-шки.


Не все то 3D, что вертится...
 
Форум мира Blitz3D » Язык Blitz3D » 2D программирование » Ну почему не работает?
  • Страница 1 из 1
  • 1
Поиск: