Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 19.12.2006, 15:04   #1
GoodWin
ПроЭктировщик
 
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений
(для 19 пользователей)
помогите!!!!

Привет!
Есть две задачи, разрешить их сам не могу, помогите советом, примером:

1 Есть текстура 512х512 - как мне в реальном времени в нужном месте делать прозрачную область?…
2 Есть текстура 512х512, есть изображение 128х128 – как в реальном времени отрисовать на текстуре изображение в нужном мне месте?…
вот….
заранее спасибо….
(Offline)
 
Ответить с цитированием
Старый 19.12.2006, 17:17   #2
Platon
Знающий
 
Регистрация: 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
HolyDel
 
Регистрация: 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
GoodWin
ПроЭктировщик
 
Регистрация: 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
Platon
Знающий
 
Регистрация: 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
GoodWin
ПроЭктировщик
 
Регистрация: 14.08.2006
Сообщений: 105
Написано 15 полезных сообщений
(для 19 пользователей)
Re: помогите!!!!

все получается, но результат не тот...
Если я текстуру не создаю, а гружу с флагом 2 - она стоновится полупрозачной.... мне же для результата необходимо нормально отображаемую текстуру а на ней прозрачная область, которую нужно перемещать в реальном времени...
(Offline)
 
Ответить с цитированием
Старый 20.12.2006, 23:03   #7
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: помогите!!!!

Да, каникулы в школах- воистину страшное время года...

2 GoodWin: Подсказываю. Слово "мультитекстурирование".
(Offline)
 
Ответить с цитированием
Старый 21.12.2006, 02:53   #8
HolyDel
 
Регистрация: 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
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: помогите!!!!

2 Cyan, мне не кажется этот вариант самым быстрым.
А этот вариант не есть быстрый. Он есть удобный
Да и скорость тут целиком зависит от самой функции чтения\записи пикселя - битовые сдвиги и логические операции почти не влияют на скорость выполнения (3-5 тактов всего)
(Offline)
 
Ответить с цитированием
Старый 22.12.2006, 01:24   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: помогите!!!!

пожалуй ты прав, +/- 3 такта за проход погоды не сделают, все равно чтение запись намного дольше.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com