Here's my feeble attempt at trying to recreate a popular demo effect, where objects twist around on an axis. I know the effect as a Peristalis Effect.
I wondered if you could help me make it a proper peristalis effect. As allthough it doesnt look too bad, it does lack in smoothness and the movement is all screwy. And to be honest, I don't quite know how to address it too well. And please use your own media, as Im unable to host at present.
Here's the routine that I'd appreciate any help with:
;peristalis effect :WIP
;by Mikey F
Const xres=640,yres=480
Graphics3D xres,yres,32
SetBuffer BackBuffer()
cam=CreateCamera()
PositionEntity cam,0,0,-25
lit=CreateLight()
AmbientLight 000,000,000
Global cntsurf,surf
Global UpdateX#
Global UpdateY#
Global UpdateZ#
Global angle1#,angle2#
Global angle3#,angle4#
Global angle5#,angle6#
Global counter
Global aa1#,aa2#,aa3#,aa4#,aa5#,aa6#
;-==========================================================-
;-=[load and make / store vertex and triangles etc ]=-
;-=[in order to manipulate each face, that's the theory ;)]=-
;-==========================================================-
Global copymodel =LoadMesh ("media\yourmodel.3ds")
Global surf1 =GetSurface (copymodel,1)
Global effectmod =CreateMesh()
Global surf2 =CreateSurface(effectmod)
Global amount1 =CountVertices (surf1)
Global amount2 =CountTriangles (surf1)
Dim vrt(amount1,3),vrtx#(amount1),vrty#(amount1),vrtz#(amount1)
Dim tri(amount2)
For count=0 To CountVertices(surf1)-1
AddVertex(surf2,VertexX(surf1,count),VertexY(surf1,count),VertexZ(surf1,count))
VertexNormal surf2,count, VertexNX( surf1, count), VertexNY( surf1, count), VertexNZ( surf1, count )
vrtx(count)=VertexX#(surf2,count)
vrty(count)=VertexY#(surf2,count)
vrtz(count)=VertexZ#(surf2,count)
vertices=count
Next
For count=0 To CountTriangles(surf1)-1
tri(count)=AddTriangle(surf2,TriangleVertex(surf1,count,0),TriangleVertex(surf1,count,1),TriangleVertex(surf1,count,2))
triangles=count
Next
FreeEntity copymodel
texture =LoadTexture("media\texture.png",512)
ScaleEntity effectmod,.1,.1,.1
;EntityShininess effectmod,.5
PositionEntity effectmod,0,0,10
EntityFX effectmod,16
EntityTexture effectmod,texture
;-=============-
;-=[Main Loop]=-
;-=============-
While Not KeyHit(1)
Cls
wobble_wobble()
RotateEntity effectmod,xr#,yr#,zr#
xr#=xr#+.3
yr#=yr#+.5
zr#=zr#+.4
RenderWorld()
UpdateWorld()
Flip
Wend
FreeEntity effectmod
Function wobble_wobble()
cntsurf =CountSurfaces (effectmod)
surf =GetSurface (effectmod,cntsurf)
aa1=angle1
aa2=angle2
aa3=angle3
aa4=angle4
aa5=angle5
aa6=angle6
For count=0 To amount1-1
x#=vrtx#(count)
y#=vrty#(count)
z#=vrtz#(count)
counter=count ;comment this for different movement :)
UpdateX=Sin(aa1+counter)*4;+Cos(aa2+counter)*12
UpdateY=Cos(aa3+counter)*3;+Cos(aa4+counter)*32
UpdateZ=Sin(aa5+counter)*12;+Cos(aa6+counter)*14
VertexCoords surf,count,x#+UpdateX,y#+UpdateY,z#+UpdateZ
Next
angle1 = angle1 +2
angle2 = angle2 -4
;-
angle3 = angle3 +3
amgle4 = angle4 +2
;-
angle5 = angle5 -2
angle6 = angle6 +1
If angle1>359 Then angle1=000
If angle2<000 Then angle2=359
;--
If angle3>359 Then angle3=000
If angle4>359 Then angle4=000
;--
If angle5<000 Then angle5=359
If angle6>359 Then angle6=000
End Function
|