|
3D-программирование Вопросы, касающиеся программирования 3D мира |
30.11.2007, 17:20
|
#1
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Как определить, какова высота меша?
Есть земля-мешь. Есть игрок. Вопрос: как определить, на какой высоте (Y) класть декаль тени если известны её координаты X и Z (которые совпадают с координатами игрока) ?
Подскажите плз команду, которой это определяется если таковая существует. Заранее спасибо.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
30.11.2007, 17:47
|
#2
|
Бывалый
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений (для 110 пользователей)
|
Re: Как определить, какова высота меша?
попробуй пиком!
|
(Offline)
|
|
30.11.2007, 17:52
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Как определить, какова высота меша?
ABTOMAT, такой(математической) не существует, если нету закономерности у индексов вершин. Если террайн создаёться в блице но мешем, то есть возможность.
Вот примерно так выглядит математическая версия функции, она полностью на математике, и поэтому её производительность на высоте (без проблем вызывай хоть по 10 раз за цикл)
Function mTerrainY#(x#,z#) ; Terrain
Local TerTotTilWH%=(CCnt*TilS)
Local TerCurQuadX%,TerCurQuadZ%
Local TerCurX#,TerCurZ#
Local tX1#,tZ1#,tY1#
Local tX2#,tZ2#,tY2#
Local tX3#,tZ3#,tY3#
Local QuadPX#,QuadPZ#
Local a#,b#,c#,d#
If x>0
If x<(HeightMapS*TilS)
If z>0
If z<(HeightMapS*TilS)
For t.Ter=Each Ter
TerCurX#=((t\X-1)*TerTotTilWH)
TerCurZ#=((t\Z-1)*TerTotTilWH)
If x>TerCurX
If x<((t\X)*TerTotTilWH)
If z>TerCurZ
If z<((t\Z)*TerTotTilWH)
TerCurQuadX=((x-TerCurX-(TilS*.5))/TilS)
TerCurQuadZ=((z-TerCurZ-(TilS*.5))/TilS)
QuadPX= (x-TerCurX-(TerCurQuadX*TilS))
QuadPZ=(TilS-(z-TerCurZ-(TerCurQuadZ*TilS)))
If TerQR(t\X,t\Z,TerCurQuadZ,TerCurQuadX)=1
tX2=(((TerCurQuadX+1)*TilS)+TerCurX)
tZ2=((TerCurQuadZ*TilS)+TerCurZ)
tY2=TerVY(t\x,t\z,(TerCurQuadX+1),TerCurQuadZ)
tX3=tX2-TilS
tZ3=tZ2+TilS
tY3=TerVY(t\x,t\z,TerCurQuadX,(TerCurQuadZ+1))
If ((TilS-QuadPX)+QuadPZ)>TilS
tX1=tX3
tZ1=tZ2
tY1=TerVY(t\x,t\z,TerCurQuadX,TerCurQuadZ)
Else
tX1=tX2
tZ1=tZ3
tY1=TerVY(t\x,t\z,(TerCurQuadX+1),(TerCurQuadZ+1))
EndIf
Else
tX2=((TerCurQuadX*TilS)+TerCurX)
tZ2=((TerCurQuadZ*TilS)+TerCurZ)
tY2=TerVY(t\x,t\z,TerCurQuadX,TerCurQuadZ)
tX3=tX2+TilS
tZ3=tZ2+TilS
tY3=TerVY(t\x,t\z,(TerCurQuadX+1),(TerCurQuadZ+1))
If (QuadPX+QuadPZ)>TilS
tX1=tX3
tZ1=tZ2
tY1=TerVY(t\x,t\z,(TerCurQuadX+1),TerCurQuadZ)
Else
tX1=tX2
tZ1=tZ3
tY1=TerVY(t\x,t\z,TerCurQuadX,(TerCurQuadZ+1))
EndIf
EndIf
a#=-(tz3*ty2-tz1*ty2-tz3*ty1+ty1*tz2+ty3*tz1-tz2*ty3)
b#= (tz1*tx3+tz2*tx1+tz3*tx2-tz2*tx3-tz1*tx2-tz3*tx1)
c#= (ty2*tx3+ty1*tx2+ty3*tx1-ty1*tx3-ty2*tx1-tx2*ty3)
d#=-a*tx1-b*ty1-c*tz1
Y#=-(a*x+c*z+d)/b
Return Y
EndIf
EndIf
EndIf
EndIf
Next
EndIf
EndIf
EndIf
EndIf
End Function
А так можешь покурить это.
Делал по этой статье.
|
(Offline)
|
|
30.11.2007, 18:56
|
#4
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Re: Как определить, какова высота меша?
У меня террайн не содержит закономерностей... Видимо, твоя функция не поможет.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
30.11.2007, 19:57
|
#5
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Как определить, какова высота меша?
ABTOMAT, тогда находи триангл на котором высота (это уже сам), и юзай этот алгоритмик, спомощью него должно прокатить, но не гарантирую.
a#=-(tz3*ty2-tz1*ty2-tz3*ty1+ty1*tz2+ty3*tz1-tz2*ty3)
b#= (tz1*tx3+tz2*tx1+tz3*tx2-tz2*tx3-tz1*tx2-tz3*tx1)
c#= (ty2*tx3+ty1*tx2+ty3*tx1-ty1*tx3-ty2*tx1-tx2*ty3)
d#=-a*tx1-b*ty1-c*tz1
Y#=-(a*x+c*z+d)/b
|
(Offline)
|
|
30.11.2007, 20:14
|
#6
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Re: Как определить, какова высота меша?
Пиком будет проще
а скорость там не нужна (для декалей) онож не в цикле
__________________
|
(Offline)
|
|
30.11.2007, 20:54
|
#7
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Re: Как определить, какова высота меша?
tormoz, я вообще-то хотел сделать тень, которая следует за игроком...
Но в принципе пик сойдёт для статики, тока надо алгоритмик сделать чтоб тенёк ровненько ложился
Ежели у кого есть, плз дайте примерчег где как раз есть тень, которая двигается по неровной поверхности.
Заранее спасибо.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:03.
|