 |
3D-программирование Вопросы, касающиеся программирования 3D мира |
28.05.2007, 12:11
|
#1
|
AnyKey`щик
Регистрация: 18.10.2006
Сообщений: 6
Написано 0 полезных сообщений (для 0 пользователей)
|
Реализация эффекта линз
С Блитцом идет пример: Blitz 3D Samples\AGore\GrassDemo
Там реализован эффект от линз, когда появляются блики при "попадании источника света в видимость камеры"
Как реализовать подобный эффект с учетом того что истоник бликов может быть закрыт различными предметами (при закрытии источника света - блики исчезают).
единственно что я догадался пользовать это
EntityPickMode PF, 2
If EnityVisible(Camera, PivotLight) Then
Показать_Спарайты
Else
Спрятать_Спрайты
End If
Мне не очень нравится то, что эффект пропадает в случае заграждения слишком резко и не высокая производительность этого метода.
Есть ли другие способы определения видимости объекта или даже реализации самого эффекта более быстродействующие и/или более точные.
|
(Offline)
|
|
28.05.2007, 12:47
|
#2
|
ПроЭктировщик
Регистрация: 23.11.2006
Сообщений: 130
Написано 3 полезных сообщений (для 35 пользователей)
|
Re: Реализация эффекта линз
ух.. прикольно... хочу так же.. Присоединяюсь к запросу..
|
(Offline)
|
|
28.05.2007, 23:27
|
#3
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,743
Написано 5,461 полезных сообщений (для 15,676 пользователей)
|
Re: Реализация эффекта линз
Г-муха-ха!! А вот у меня в Матвее уже есть линзовые эффекты! Простов случае
[blitz]EntityPickMode PF, 2
If EnityVisible(Camera, PivotLight) Then
Показать_Спарайты
Else
Спрятать_Спрайты
End If[/blitz]
У меня есть функция
[blitz]
Function Спрятать_спрайты
Прозрачность каждого линза системы уменьшаем на 0,05
If прозрачность < 0 то Hide_entity все спрайты нах
end function
Function показать_спрайты
If прозрачность спрайтов < 0 то Show_entity все спрайты, опять же, нах.
Else увеличить прозрачность каждого спрайта на 0.05
end function
[/blitz]
Также вместо
[blitz]If EnityVisible(Camera, PivotLight) Then[/blitz]
можно сделать так:
[blitz]If EnityVisible(Camera, PivotLight) and EntityInView PivitLightThen[/blitz]
Так же я у себя уменьшаю/увеличиваю сияние солнца - так получается ещё красивее.
Но помните - это всё кушает ресурсы.
З.Ы. Ещё у меня есть вычисление косинуса угла между камерой и солнцем, что делает появление\исчезание линз полностью соответствующим реальности, но это всё убивает на корню производительность.
Присоединяюсь к вогпросу: "Есть ли более точные/ производительные решения?" 
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
28.05.2007, 23:27
|
#4
|
Бывалый
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений (для 267 пользователей)
|
Re: Реализация эффекта линз
|
(Offline)
|
|
29.05.2007, 01:56
|
#5
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Реализация эффекта линз
Не видел примера, но как понял, там нету материального объекта, как реализовть спрятание:
Значит, создаём в кажлом месте где нужно этот эффект сделать, сферу, с прозрачностью 0, далее в цикле, каждый период времени, просто делает CameraPick в точку полученную функцией CameraProject(координаты сферки), да и прописать пикаблемоде сфере и всему окружающему, что может загараживать, не забудь, так вот если пикедентити=сфера, то видно, если другой любой объект, то загороженно.
|
(Offline)
|
|
27.01.2010, 19:01
|
#6
|
Нуждающийся
Регистрация: 26.04.2006
Сообщений: 66
Написано 8 полезных сообщений (для 21 пользователей)
|
Ответ: Реализация эффекта линз
Вот функция для бликов, но она отжирает фпс при нахождении в кадре 2 и более бликов ровно в 2 раза, вот это действительно проблема

Global flar.flare
Type Flare
Field lightsphere
Field lightsp
Field visible
Field timefade
End Type
Function CreateNewFlare.Flare(x#,y#,z#,sx#,sy# )
flar.Flare=New Flare
flar\lightsphere = CreateSphere()
EntityAlpha flar\lightsphere, 0
PositionEntity flar\lightsphere,x,y,z
EntityPickMode flar\lightsphere, 2
flar\lightsp=LoadSprite( ".\Data\effects\misc_flare.png",8,flar\lightsphere )
;HandleSprite f\lightsp,0,-1
ScaleSprite flar\lightsp,sx#*10,sy#*10
PositionEntity flar\lightsp, 0,0,0
SpriteViewMode flar\lightsp,3
EntityColor flar\lightsp,100,100,100
;EntityShininess f\lightsp, 1
EntityOrder flar\lightsp, -1
HandleSprite flar\lightsp, 0, 0
flar\visible = False
Return flar
End Function
Function UpdateFlares()
For flar.Flare=Each Flare
If EntityVisible(CameraBody, flar\lightsphere) And (Not flar\visible)
flar\visible = True
EntityColor flar\lightsp,150,150,150
distan = EntityDistance(CameraBody,flar\lightsphere)
scale = distan/2
ScaleSprite flar\lightsp, scale, scale
ShowEntity flar\lightsphere
RotateSprite flar\lightsp, EntityYaw(camerabody)*2
Else
If flar\visible
flar\visible = False
; If Rnd(500)<100 Then HideEntity flar\lightsphere
flar\timefade = 100
Else
If flar\timefade >= 0
flar\timefade = flar\timefade - 10
EntityColor flar\lightsp,flar\timefade,flar\timefade,flar\timefade
EndIf
EndIf
EndIf
Next
End Function
|
(Offline)
|
|
27.01.2010, 19:38
|
#7
|
Мастер
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений (для 2,207 пользователей)
|
Ответ: Реализация эффекта линз
Спустя два с половиной года блики нашлись, УРА ТОВАРИЩИ УРА!!1!
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Hurrit за это полезное сообщение:
|
|
27.01.2010, 19:54
|
#8
|
Нуждающийся
Регистрация: 26.04.2006
Сообщений: 66
Написано 8 полезных сообщений (для 21 пользователей)
|
Ответ: Реализация эффекта линз
Нашлись то нашлись, но жрут фпс, попробую сделать это на фасте, может чего добьюсь.
|
(Offline)
|
|
27.01.2010, 21:18
|
#9
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Реализация эффекта линз
попробуй ничего не делать.
если кому-то внезапно понадобится эффект - ищем тут (видел как минимум 3 очень качественных) http://www.blitzbasic.com/codearcs/codearcs.php?cat=11
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.02.2010, 02:09
|
#10
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Реализация эффекта линз
помоему EntityOrder линза,параметр.имха ща 3ночи сижу на сотике.смореть код -лень комп врубать.короч этой командой делаем линзу на задний план,её перекрывают другие объекты.или я туплю,башка не варит.я спать...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:39.
|