Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Имитация водной поверхности.
Как в хорсе можно манипулировать значением xMouseZ()?
BBDECL void BBCALL xMoveMouse ( int x,
int y
)
Moves the mouse to a designated location.
Although the mouse isn't visible on the screen, the mouse location is still being tracked and you can attach a graphic to it. However, there are times when you want to put the pointer to a specific location on the screen.
Parameters:
x The x coordinate on the screen to move the mouse
y The y coordinate on the screen to move the mouse
|
Где Z?
Алгоритм ствола дерева с ветками.
1.Создаем цилиндрический меш. Он должен начинаться в (0,0,0)
2.Делаем цилиндр коническим, сжимая верхние точки на 50%
3.Создаем для цилиндра в п.2 детей копий цилиндра с масштабом вдвое меньшим, чем у родителя. Ориентируем их в пространстве и масштабируем их длину по вкусу.
4.Для каждого ребенка повторяем п.3.
5.Повторяем п.4 пока результат не станет похож на дерево.
6.На последний уровень ветвей клеим листья.
7.Профит
Создаем функцию:
Function CreateChilds(child,zscale#,level#)// чилд это будущий пэрент. Длина текущего уровня ветвей, масштаб ветви, должен быть кратным 0.5 (1, 0.5, 0.25, 0.125 ....)
;определяем кол-во ветвей от родительского конца ветки
qbranches=Rand(1,2)
; для хаотичности облика задаем начальное вращение ветвей относительно родительской ветки
sdegree=Rand(0,359)
;создаем ветки детьми
For i=0 To qbranches
;копируем конический цилиндр из п.2
pc=xCopyEntity(gh,child)
; позиционируем цилиндр относительно родителя, -0.01 для того чтобы щели были менее заметны
xPositionEntity pc,0,xMeshHeight(child)-0.01,0
; применяем нужный масшьаб к ветви
xScaleEntity pc,level,zscale+Rnd(-0.1,0.1),level
;задаем положение в пространстве
xRotateEntity pc,40+Rnd(-15,15),sdegree+i*(360/(qbranches+1))+Rnd(-25,25),0
Next
End Function
|
Теперь можно строить само дерево.
Function BuildTree()
;грузим цилиндрический меш
gh=xLoadMesh("mesh/tree.b3d")
;красим его
xEntityTexture gh,treetex
; ставим основу дерева
base=xCopyEntity (gh)
;скэйлим под куб пивот всего дерева
xScaleEntity base,2,1,2
;делаем загруженный цилиндр коническим
MakeItCone(gh)
; пивот дерева.
ph=xCreateСube()
xPositionMesh ph,0,1,0
xEntityAlpha ph,0.1
CreateChilds(ph,1,1)
;первый уровень ветвей.
For d=0 To xCountChildren(ph)-1
child=xGetChild(ph,d)
CreateChilds(child,0.6,0.5)
Next
;пэрентим к пивоту ствол.
xentityparent base,ph
;второй левел веток
For d=0 To xCountChildren(ph)-1
child=xGetChild(ph,d)
For z=0 To xCountChildren(child)-1
childl2=xGetChild(child,z)
CreateChilds(childl2,0.8,0.25)
Next
Next
;третий левел веток
For d=0 To xCountChildren(ph)-1
child=xGetChild(ph,d)
For z=0 To xCountChildren(child)-1
childl2=xGetChild(child,z)
For x=0 To xCountChildren(childl2)-1
childl3=xGetChild(childl2,x)
CreateChilds(childl3,1.2,0.125)
СоздатьЛистья()
Next
Next
Next
End Function
|
|