|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
24.06.2011, 11:20
|
#1
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Пружина
Сделал из тора более полезный объект. Легко анимировать манипулируя последним значением.
Function CreateSpring(torrad#,inrad#,elements,segments,vitki,shagvitka#)
mesh=CreateMesh()
meshsurf=CreateSurface(mesh)
For i=0 To vitki*elements
For h=0 To segments
x1#=torrad*Sin(i*360/elements)+inrad*Cos(h*360/segments)*Sin(i*360/elements)
y1#=torrad*Cos(i*360/elements)+inrad*Cos(h*360/segments)*Cos(i*360/elements)
z1#=inrad*Sin(h*360/segments)+shagvitka*i/elements
AddVertex meshsurf,x1,z1,y1,inrad*h/segments,inrad*i/elements
Next
Next
For x=0 To vitki*elements
For i=0 To segments
v0=i+segments*X
v1=i+segments*X+1
v2=i+segments*X+segments
v3=i+segments*X+segments+1
If v3<=CountVertices(meshsurf)-1 Then
AddTriangle meshsurf,v0,v2,v3
AddTriangle meshsurf,v1,v0,v3
EndIf
Next
Next
UpdateNormals mesh
testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()
ScaleTexture testtex,0.2,0.2
EntityTexture mesh,testtex,0,0
Return mesh
End Function
Слегка недоработан последний сегмент. Если вызывать в цикле заглючит из-за создаваемой текстуры
Последний раз редактировалось dsd, 10.08.2011 в 03:06.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
|
24.06.2011, 17:50
|
#2
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ище одна поверхность вращения
Еще одна бесполезная, но симпатишная поверхность отдаленно, похожа по смыслу на винтовую линию.
Я походу замутил довольно универсальный конструктор поверхностей вращения.
Function CreateStrange(torrad#,inrad#,elements,segments,vitki,shagvitka#)
mesh=CreateMesh()
meshsurf=CreateSurface(mesh)
For i=0 To vitki*elements
For h=0 To segments
x1#=torrad*Sin(i*360/elements)+(inrad+shagvitka*i/elements/10)*Cos(h*360/segments)*Sin(i*360/elements)
y1#=torrad*Cos(i*360/elements)+(inrad+shagvitka*i/elements/10)*Cos(h*360/segments)*Cos(i*360/elements)
z1#=inrad*Sin(h*360/segments)+shagvitka*i/elements
AddVertex meshsurf,x1,z1,y1,inrad*h/segments,inrad*i/elements
Next
Next
For x=0 To vitki*elements
For i=0 To segments
v0=i+segments*X
v1=i+segments*X+1
v2=i+segments*X+segments
v3=i+segments*X+segments+1
If v3<=CountVertices(meshsurf)-1 Then
AddTriangle meshsurf,v0,v2,v3
AddTriangle meshsurf,v1,v0,v3
EndIf
Next
Next
UpdateNormals mesh
testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()
ScaleTexture testtex,0.2,0.2
EntityTexture mesh,testtex,0,0
Return mesh
End Function
Эммм... С учетом мизерного времени на генерацию можно замутить спецэффект с морфингом в прямом эфире. Заклинание какое-нить.
Последний раз редактировалось dsd, 10.08.2011 в 03:06.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
|
|
24.06.2011, 18:39
|
#3
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Пружина
x1#=(torrad+shagvitka*i/elements/10)*Sin(i*360/elements)+(inrad+shagvitka*i/elements/10)*Cos(h*360/segments)*Sin(i*360/elements)
y1#=(torrad+shagvitka*i/elements/10)*Cos(i*360/elements)+(inrad+shagvitka*i/elements/10)*Cos(h*360/segments)*Cos(i*360/elements)
z1#=inrad*Sin(h*360/segments)+shagvitka*i/elements
Получится винтовая лестница без ступенек
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:59.
|