
Function BuildTree()
gh=xLoadMesh("mesh/tree.b3d")
xEntityTexture gh,treetex
base=xCopyEntity (gh)
xScaleEntity base,2,1,2
MakeItCone(gh)
ph=xCreateCube()
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
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
Function CreateChilds(child,zscale#,level#)
qbranches=Rand(1,4)
sdegree=Rand(0,359)
For i=0 To qbranches
pc=xCopyEntity(gh,child)
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
Но это глупо все-таки. По-моему надо замутить покореженный ствол с минимумом толстых корявых веток. На конце каждой ветки сделать типа моих камней только с низкой детализацией, и натыкать рандомно штук 10-20 двухсторонних квадов для имитации отдельных мелких веток. И все одной поверхностью. Ствол можно думать из сетки деформированной шумом перлина и свернутой в цилиндр, которую еще несколькими синусами вдоль игрека изогнуть и в переменно от высоты отскэйлить. То же и для веток. Должно получиться дешево и сердито.
У тебя кстати получилось похоже на алгоритм в котором есть несколько точек куда ветки должны более охотно расти.