|
3D-программирование Вопросы, касающиеся программирования 3D мира |
19.12.2006, 15:04
|
#1
|
ПроЭктировщик
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений (для 19 пользователей)
|
помогите!!!!
Привет!
Есть две задачи, разрешить их сам не могу, помогите советом, примером:
1 Есть текстура 512х512 - как мне в реальном времени в нужном месте делать прозрачную область?…
2 Есть текстура 512х512, есть изображение 128х128 – как в реальном времени отрисовать на текстуре изображение в нужном мне месте?…
вот….
заранее спасибо….
|
(Offline)
|
|
19.12.2006, 17:17
|
#2
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Re: помогите!!!!
1)
WritePixel (WritePixelFast) и текстурный флаг 2 тебе помогут:
Текстуре ставишь флаг 2 - альфа(прозрачность)
Пишешь в нужную область текстуры пиксели с прозрачностью 0
WritePixel(X, Y, $00000000, TextureBuffer(Текстура))
Пример
Function AlphaRect(Tex, X, Y, Width, Height)
LockBuffer(TextureBuffer(Tex))
For Px = X To (X + Width)
For Py = Y To (Y + Height)
WritePixelFast(Px, Py, $00000000, TextureBuffer(Tex))
Next
Next
UnlockBuffer(TextureBuffer(Tex))
End Function
Graphics3D(640, 480, 16, 2)
SetBuffer(BackBuffer())
BackGround = CreateCube()
ScaleEntity(BackGround, 100, 100, 1)
PositionEntity(BackGround, 0, 0, 20)
Cube = CreateCube()
PositionEntity(Cube, 0, 0, 10)
cam = CreateCamera()
Texture = CreateTexture(512, 512, 2)
EntityTexture(Cube, Texture)
Repeat
TurnEntity(Cube, 0, 1, 1)
If KeyDown(57) Then AlphaRect(Texture, Rand(462), Rand(462), 50, 50)
RenderWorld()
Flip()
Until KeyDown(1)
End
2)
открываешь текстурный буффер и рисуешь туда изображение
SetBuffer(TextureBuffer(Текстура))
DrawImage(Рисунок, X, Y)
SetBuffer(BackBuffer())
|
(Offline)
|
|
20.12.2006, 03:02
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: помогите!!!!
function writealpha(x,y,alpha,buff)
writepixelfast x,y,(readpixelfast(buff) and $00FFFFFF)+alpha shl 24),buff
end function
сможете оптимизировать (ускорить расчет)?
изменяет альфу пиксела (вы догадались)
|
(Offline)
|
|
20.12.2006, 16:22
|
#4
|
ПроЭктировщик
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений (для 19 пользователей)
|
Re: помогите!!!!
Сообщение от HolyDel
function writealpha(x,y,alpha,buff)
writepixelfast x,y,(readpixelfast(buff) and $00FFFFFF)+alpha shl 24),buff
end function
сможете оптимизировать (ускорить расчет)?
изменяет альфу пиксела (вы догадались)
|
readpixelfast(buff) - здесь что-то не то
самый простой пример с использованием твоей функции можно привести, а то что-то не получается у меня
|
(Offline)
|
|
20.12.2006, 17:44
|
#5
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Re: помогите!!!!
readpixelfast(buff) - здесь что-то не то
|
Конечно не-то - там недостает параметров x и y
Function ChangeAlpha(Px%, Py%, Alpha#, Buffer%)
Local ARGB% = ReadPixelFast(Px, Py, Buffer)
local A% = ((ARGB Shr 24) * Alpha) Shl 24
WritePixelFast(Px, Py, A + (ARGB And $00FFFFFF), Buffer)
End Function
|
(Offline)
|
|
20.12.2006, 22:48
|
#6
|
ПроЭктировщик
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений (для 19 пользователей)
|
Re: помогите!!!!
все получается, но результат не тот...
Если я текстуру не создаю, а гружу с флагом 2 - она стоновится полупрозачной.... мне же для результата необходимо нормально отображаемую текстуру а на ней прозрачная область, которую нужно перемещать в реальном времени...
|
(Offline)
|
|
20.12.2006, 23:03
|
#7
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: помогите!!!!
Да, каникулы в школах- воистину страшное время года...
2 GoodWin: Подсказываю. Слово "мультитекстурирование".
|
(Offline)
|
|
21.12.2006, 02:53
|
#8
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: помогите!!!!
извиняйте, писал в браузере (да вы догадались наверное).
2 Cyan, мне не кажется этот вариант самым быстрым.
2 GoodWin, а как насчет того, чтоб каждому пикселю текстуры задать альфу $FF?.
опять пишу в браузере, опять хз
buff=texturebuffer(tex)
w=BufferWidth(buff)
h=BufferHeight(buff)
lockbuffer buff
for i=1 to w
for j=1 to h
writepixelfast i,j,readpixelfast(i,j,buff) or $FF000000
next
next
Unlockbuffer buff
|
(Offline)
|
|
21.12.2006, 05:20
|
#9
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
Re: помогите!!!!
2 Cyan, мне не кажется этот вариант самым быстрым.
|
А этот вариант не есть быстрый. Он есть удобный
Да и скорость тут целиком зависит от самой функции чтения\записи пикселя - битовые сдвиги и логические операции почти не влияют на скорость выполнения (3-5 тактов всего)
|
(Offline)
|
|
22.12.2006, 01:24
|
#10
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: помогите!!!!
пожалуй ты прав, +/- 3 такта за проход погоды не сделают, все равно чтение запись намного дольше.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:12.
|