forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Пружина (http://forum.boolean.name/showthread.php?t=14978)

dsd 24.06.2011 11:20

Пружина
 
Сделал из тора более полезный объект. Легко анимировать манипулируя последним значением.

Код:

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 24.06.2011 17:50

Ище одна поверхность вращения
 
Еще одна бесполезная, но симпатишная поверхность:) отдаленно, похожа по смыслу на винтовую линию.

Я походу замутил довольно универсальный конструктор поверхностей вращения. :-D

Код:

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 24.06.2011 18:39

Ответ: Пружина
 
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

Получится винтовая лестница без ступенек


Часовой пояс GMT +4, время: 05:29.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot