morphing using #PB_Mesh_PointList too slow

Everything related to 3D programming
User avatar
Psychophanta
Addict
Addict
Posts: 4975
Joined: Wed Jun 11, 2003 9:33 pm
Location: Lípetsk, Russian Federation
Contact:

morphing using #PB_Mesh_PointList too slow

Post by Psychophanta »

Hi all here.
I made this tip for MP3D some time ago and i translated to PB native, but i got surprised because is too slow.
Might be due to the fact that in MP3D the vertex coordinates are written directly in the mesh vertex memory?

Code: Select all

Structure Vector
  x.f
  y.f
  z.f
  m.f
EndStructure
Structure PointVertex
  x.f
  y.f
  z.f
  color.l;d3dcolor
EndStructure
InitEngine3D()
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/Textures",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3d/Data/fonts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3d/Data/Scripts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"examples/3d/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"examples/3d/Data/Packs/skybox.zip", #PB_3DArchive_Zip)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
Global bitplanes.b=DesktopDepth(0),RX.w=DesktopWidth(0),RY.w=DesktopHeight(0),refreshrate.a=DesktopFrequency(0)
; Global win.i=OpenWindow(#PB_Any,240,180,RX/3,RY/3,"press up/down to move",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_TitleBar)
; OpenWindowedScreen(WindowID(win),0,0,RX/3,RY/3,1,0,0,#PB_Screen_WaitSynchronization)
OpenScreen(RX,RY,bitplanes,"press up/down to move",#PB_Screen_WaitSynchronization,refreshrate)
Global camera.i=CreateCamera(#PB_Any,0,0,100,100)
MoveCamera(camera,0,0,300,#PB_Absolute)
CameraRange(camera,1,10000)
CameraLookAt(camera,0,0,0)
Global light.i=CreateLight(#PB_Any,RGB(245,245,245),0,100,200,#PB_Light_Point)
LightLookAt(light,0,0,0)
#NVertex=90000:#TransSteps=150:#ObjectStayTime=600

;- Material
Global mat.i=CreateMaterial(#PB_Any,TextureID(LoadTexture(#PB_Any,"White.jpg")))
DisableMaterialLighting(mat.i,1)
; MaterialShininess(mat,0)
; MaterialBlendingMode(mat,#PB_Material_AlphaBlend)

Global objeto.l=1,Stars.i,malla.i=CreateMesh(#PB_Any,#PB_Mesh_PointList,#PB_Mesh_Static),Dim OriginVertex.PointVertex(#NVertex),Dim TargetVertex.Vector(#NVertex),Dim trans.Vector(#NVertex),TransCount.l
Procedure DrawMatrix()
  Protected r.w=230,g.w=200,b.w=110,i.i
  For i=0 To #NVertex
    OriginVertex(i)\color=RGBA(r,g,b,200)
    OriginVertex(i)\x=(Random(1800)-900)/10*i/#NVertex
    OriginVertex(i)\y=(Random(1800)-900)/10*i/#NVertex
    OriginVertex(i)\z=(Random(1800)-900)/10*i/#NVertex
    MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
    MeshVertexColor(OriginVertex(i)\color)
  Next
  FinishMesh(0)
  SetMeshMaterial(malla,MaterialID(mat))
  Stars.i=CreateNode(#PB_Any,0,0,0)
  AttachNodeObject(Stars,MeshID(malla))
EndProcedure
Macro getmod(ve)
  v#\m=Sqr(v#\x*v#\x+v#\y*v#\y+v#\z*v#\z)
EndMacro
Macro GetTransStepVector()
  trans(i)\x=(TargetVertex(i)\x-OriginVertex(i)\x)/#TransSteps
  trans(i)\y=(TargetVertex(i)\y-OriginVertex(i)\y)/#TransSteps
  trans(i)\z=(TargetVertex(i)\z-OriginVertex(i)\z)/#TransSteps
EndMacro
Procedure object(obj.l)
  ;ver más en http://www.mathcurve.com/surfaces/superficies.shtml
  Protected i.l,xd.f,u.f,ii.f=360/#NVertex
  Select obj
    Case 2
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
;       ;cinta de moebius
;       For i=0 To #NVertex
;         xd=Random(1800)
;         u=i*ii
;         TargetVertex(i)\x=Cos(xd)*(10+u*Cos(xd/2))
;         TargetVertex(i)\y=Sin(xd)*(10+u*Cos(xd/2))
;         TargetVertex(i)\z=u*Sin(xd/2)
;         ;Get "trans" Step-vector:
;         GetTransStepVector()
;       Next
    Case 3
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 4
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(i*360/#NVertex)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Cos(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 5
      For i=0 To #NVertex
        xd=Random(1800)
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(xd)*Sin(xd)*100
        TargetVertex(i)\z=Sin(i*ii)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 6
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 7
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(u)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 8
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 9
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(u)*Cos(u)*Sin(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*Cos(xd)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 10
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Cos(xd)*Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 11
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Sin(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 12
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(u)*Cos(xd)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*Sin(xd)*Cos(u)*Cos(xd)*200 
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 13
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 14
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(xd)*Cos(xd)*100
        TargetVertex(i)\y=Sin(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 15
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 16
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*Sin(u)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*Cos(u)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 17
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 18
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Sin(u)*100
        TargetVertex(i)\y=Cos(xd)*Cos(u)*100
        TargetVertex(i)\z=Cos(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 19
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(xd)*Cos(xd)*Sin(u)*200
        TargetVertex(i)\y=Sin(u)*Cos(u)*Sin(xd)*200
        TargetVertex(i)\z=Sin(u)*Cos(xd)*Cos(u)*200
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 20
      For i=0 To #NVertex
        TargetVertex(i)\x=Random(150)-75
        TargetVertex(i)\y=Random(150)-75
        TargetVertex(i)\z=Random(150)-75
        If Random(1)
          PokeF(TargetVertex(i)+SizeOf(float)*(Random(2)),75)
        Else
          PokeF(TargetVertex(i)+SizeOf(float)*(Random(2)),-75)
        EndIf
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Default
      For i=0 To #NVertex
        TargetVertex(i)\x=(Random(1800)-900)/10*i/#NVertex
        TargetVertex(i)\y=(Random(1800)-900)/10*i/#NVertex
        TargetVertex(i)\z=(Random(1800)-900)/10*i/#NVertex
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
  EndSelect
  Transcount=#TransSteps
EndProcedure
;==============================================================
DrawMatrix()
; enti.i=CreateEntity(#PB_Any,MeshID(malla),MaterialID(mat))
zz.f=0
; UseCursor(0)
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Up)
    zz.f+20
  ElseIf KeyboardPushed(#PB_Key_Down)
    zz.f-20
  EndIf
  contador.l+1
  If contador>=#ObjectStayTime
    contador=0
    objeto+1:If objeto>20:objeto=1:EndIf
    object(objeto.l)
  EndIf
  If TransCount>0
    TransCount-1
    If TransCount>0
      UpdateMesh(malla,0)
      For i.i=0 To #NVertex
        OriginVertex(i)\x+trans(i)\x
        OriginVertex(i)\y+trans(i)\y
        OriginVertex(i)\z+trans(i)\z
        MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
      Next
      FinishMesh(0)
    Else
      UpdateMesh(malla,0)
      For i.i=0 To #NVertex
        OriginVertex(i)\x=TargetVertex(i)\x
        OriginVertex(i)\y=TargetVertex(i)\y
        OriginVertex(i)\z=TargetVertex(i)\z
        MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
      Next
      FinishMesh(0)
    EndIf
  EndIf
  MoveNode(Stars,0,0,zz,#PB_Absolute)
  RotateNode(Stars,1.333,0.5,0.2,#PB_Relative)
  RenderWorld()
  FlipBuffers():Delay(10)
Until KeyboardPushed(#PB_Key_Escape); Or WindowEvent()=#PB_Event_CloseWindow
http://www.zeitgeistmovie.com

While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB :mrgreen:
marc_256
Enthusiast
Enthusiast
Posts: 743
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: morphing using #PB_Mesh_PointList too slow

Post by marc_256 »

Hi Psychophanta,

1) Change "#PB_Screen_WaitSynchronization,refreshrate)" to "#PB_Screen_NoSynchronization)"

2) Change Delay(10) to Delay(1)

Try this ones ...

Marc
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
User avatar
Comtois
Addict
Addict
Posts: 1429
Joined: Tue Aug 19, 2003 11:36 am
Location: Doubs - France

Re: morphing using #PB_Mesh_PointList too slow

Post by Comtois »

you can use SetMeshData()

Code: Select all

Structure Vector
  x.f
  y.f
  z.f
  m.f
EndStructure
Structure PointVertex
  x.f
  y.f
  z.f
  color.l;d3dcolor
EndStructure
InitEngine3D()
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/Textures",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3d/Data/fonts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3d/Data/Scripts",#PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"examples/3d/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"examples/3d/Data/Packs/skybox.zip", #PB_3DArchive_Zip)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
Global bitplanes.b=DesktopDepth(0),RX.w=DesktopWidth(0),RY.w=DesktopHeight(0),refreshrate.a=DesktopFrequency(0)
; Global win.i=OpenWindow(#PB_Any,240,180,RX/3,RY/3,"press up/down to move",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_TitleBar)
; OpenWindowedScreen(WindowID(win),0,0,RX/3,RY/3,1,0,0,#PB_Screen_WaitSynchronization)
OpenScreen(RX,RY,bitplanes,"press up/down to move",#PB_Screen_WaitSynchronization,refreshrate)
Global camera.i=CreateCamera(#PB_Any,0,0,100,100)
MoveCamera(camera,0,0,300,#PB_Absolute)
CameraRange(camera,1,10000)
CameraLookAt(camera,0,0,0)
Global light.i=CreateLight(#PB_Any,RGB(245,245,245),0,100,200,#PB_Light_Point)
LightLookAt(light,0,0,0)
#NVertex=90000:#TransSteps=150:#ObjectStayTime=300

;- Material
Global mat.i=CreateMaterial(#PB_Any,TextureID(LoadTexture(#PB_Any,"White.jpg")))
DisableMaterialLighting(mat.i,1)
; MaterialShininess(mat,0)
; MaterialBlendingMode(mat,#PB_Material_AlphaBlend)

Global objeto.l=1,Stars.i,malla.i=CreateMesh(#PB_Any,#PB_Mesh_PointList,#PB_Mesh_Static),Dim OriginVertex.PointVertex(#NVertex),Dim TargetVertex.Vector(#NVertex),Dim trans.Vector(#NVertex),TransCount.l

Global Dim MeshData.PB_MeshVertex(0) 

Procedure DrawMatrix()
  Protected r.w=230,g.w=200,b.w=110,i.i
  For i=0 To #NVertex
    OriginVertex(i)\color=RGBA(r,g,b,200)
    OriginVertex(i)\x=(Random(1800)-900)/10*i/#NVertex
    OriginVertex(i)\y=(Random(1800)-900)/10*i/#NVertex
    OriginVertex(i)\z=(Random(1800)-900)/10*i/#NVertex
    MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
    MeshVertexColor(OriginVertex(i)\color)
  Next
  FinishMesh(1)
  SetMeshMaterial(malla,MaterialID(mat))
  ;Stars.i=CreateNode(#PB_Any,0,0,0)
  ;AttachNodeObject(Stars,MeshID(malla))

  
EndProcedure
Macro getmod(ve)
  v#\m=Sqr(v#\x*v#\x+v#\y*v#\y+v#\z*v#\z)
EndMacro
Macro GetTransStepVector()
  trans(i)\x=(TargetVertex(i)\x-OriginVertex(i)\x)/#TransSteps
  trans(i)\y=(TargetVertex(i)\y-OriginVertex(i)\y)/#TransSteps
  trans(i)\z=(TargetVertex(i)\z-OriginVertex(i)\z)/#TransSteps
EndMacro
Procedure object(obj.l)
  ;ver más en http://www.mathcurve.com/surfaces/superficies.shtml
  Protected i.l,xd.f,u.f,ii.f=360/#NVertex
  Select obj
    Case 2
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
;       ;cinta de moebius
;       For i=0 To #NVertex
;         xd=Random(1800)
;         u=i*ii
;         TargetVertex(i)\x=Cos(xd)*(10+u*Cos(xd/2))
;         TargetVertex(i)\y=Sin(xd)*(10+u*Cos(xd/2))
;         TargetVertex(i)\z=u*Sin(xd/2)
;         ;Get "trans" Step-vector:
;         GetTransStepVector()
;       Next
    Case 3
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 4
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(i*360/#NVertex)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Cos(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 5
      For i=0 To #NVertex
        xd=Random(1800)
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(xd)*Sin(xd)*100
        TargetVertex(i)\z=Sin(i*ii)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 6
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 7
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(u)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 8
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 9
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(u)*Cos(u)*Sin(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*Cos(xd)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 10
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(xd)*100
        TargetVertex(i)\z=Cos(xd)*Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 11
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Sin(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 12
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(u)*Cos(xd)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*Sin(xd)*Cos(u)*Cos(xd)*200
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 13
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 14
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(xd)*Cos(xd)*100
        TargetVertex(i)\y=Sin(xd)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 15
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*100
        TargetVertex(i)\y=Cos(u)*Sin(u)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 16
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(u)*Sin(u)*100
        TargetVertex(i)\y=Sin(u)*Sin(xd)*Cos(u)*100
        TargetVertex(i)\z=Sin(xd)*Cos(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 17
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Cos(xd)*100
        TargetVertex(i)\y=Cos(u)*Sin(u)*100
        TargetVertex(i)\z=Sin(u)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 18
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Cos(xd)*Sin(u)*100
        TargetVertex(i)\y=Cos(xd)*Cos(u)*100
        TargetVertex(i)\z=Cos(xd)*100
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 19
      For i=0 To #NVertex
        xd=Random(1800)
        u=i*ii
        TargetVertex(i)\x=Sin(xd)*Cos(xd)*Sin(u)*200
        TargetVertex(i)\y=Sin(u)*Cos(u)*Sin(xd)*200
        TargetVertex(i)\z=Sin(u)*Cos(xd)*Cos(u)*200
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Case 20
      For i=0 To #NVertex
        TargetVertex(i)\x=Random(150)-75
        TargetVertex(i)\y=Random(150)-75
        TargetVertex(i)\z=Random(150)-75
        If Random(1)
          PokeF(TargetVertex(i)+SizeOf(float)*(Random(2)),75)
        Else
          PokeF(TargetVertex(i)+SizeOf(float)*(Random(2)),-75)
        EndIf
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
    Default
      For i=0 To #NVertex
        TargetVertex(i)\x=(Random(1800)-900)/10*i/#NVertex
        TargetVertex(i)\y=(Random(1800)-900)/10*i/#NVertex
        TargetVertex(i)\z=(Random(1800)-900)/10*i/#NVertex
        ;Get "trans" step-vector:
        GetTransStepVector()
      Next
  EndSelect
  Transcount=#TransSteps
EndProcedure
;==============================================================
DrawMatrix()
  GetMeshData(malla,0, MeshData(), #PB_Mesh_Vertex, 0, MeshVertexCount(malla)-1)
 enti.i=CreateEntity(#PB_Any,MeshID(malla),MaterialID(mat))
zz.f=0
; UseCursor(0)
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Up)
    zz.f+20
  ElseIf KeyboardPushed(#PB_Key_Down)
    zz.f-20
  EndIf
  contador.l+1
  If contador>=#ObjectStayTime
    contador=0
    objeto+1:If objeto>20:objeto=1:EndIf
    object(objeto.l)
  EndIf
  If TransCount>0
    TransCount-1
    If TransCount>0
      ;UpdateMesh(malla,0)
      For i.i=0 To #NVertex
        OriginVertex(i)\x+trans(i)\x
        OriginVertex(i)\y+trans(i)\y
        OriginVertex(i)\z+trans(i)\z
        MeshData(i)\x = OriginVertex(i)\x
        MeshData(i)\y = OriginVertex(i)\y
        MeshData(i)\z = OriginVertex(i)\z
        
        ;MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
      Next
      ;FinishMesh(0)
      SetMeshData(malla, 0, MeshData(), #PB_Mesh_Vertex, 0, MeshVertexCount(malla)-1)
    Else
      ;UpdateMesh(malla,0)
      For i.i=0 To #NVertex
        OriginVertex(i)\x=TargetVertex(i)\x
        OriginVertex(i)\y=TargetVertex(i)\y
        OriginVertex(i)\z=TargetVertex(i)\z
        MeshData(i)\x = OriginVertex(i)\x
        MeshData(i)\y = OriginVertex(i)\y
        MeshData(i)\z = OriginVertex(i)\z
        
        ;MeshVertexPosition(OriginVertex(i)\x,OriginVertex(i)\y,OriginVertex(i)\z)
      Next
      ;FinishMesh(0)
       SetMeshData(malla, 0, MeshData(), #PB_Mesh_Vertex, 0, MeshVertexCount(malla)-1)
    EndIf
  EndIf
  MoveEntity(enti,0,0,zz,#PB_Absolute)
  RotateEntity(enti,1.333,0.5,0.2,#PB_Relative)
  RenderWorld()
  FlipBuffers():Delay(10)
Until KeyboardPushed(#PB_Key_Escape); Or WindowEvent()=#PB_Event_CloseWindow
Please correct my english
http://purebasic.developpez.com/
User avatar
Psychophanta
Addict
Addict
Posts: 4975
Joined: Wed Jun 11, 2003 9:33 pm
Location: Lípetsk, Russian Federation
Contact:

Re: morphing using #PB_Mesh_PointList too slow

Post by Psychophanta »

marc_256, that does not help because in MP3D is sincronized and also delay(10) .

Comtois, what is slow is the point management. Using Setmeshdata is another stuff.

Thanks both anyway.
http://www.zeitgeistmovie.com

While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB :mrgreen:
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 285
Joined: Thu Jul 09, 2015 9:07 am

Re: morphing using #PB_Mesh_PointList too slow

Post by pf shadoko »

splendid
BinoX
User
User
Posts: 46
Joined: Mon Jan 31, 2005 11:57 am

Re: morphing using #PB_Mesh_PointList too slow

Post by BinoX »

Compile without debugger and it works lovely...

It may well just be that the debugger tracking variables is very slow

Edit: Forgot to say - Very nice program :D

Also, for whatever reason... With the OpenGL subsystem there is a crash on exit :(
User avatar
Fig
Enthusiast
Enthusiast
Posts: 351
Joined: Thu Apr 30, 2009 5:23 pm
Location: Côtes d'Azur, France

Re: morphing using #PB_Mesh_PointList too slow

Post by Fig »

Nice effect ! :shock:
There are 2 methods to program bugless.
But only the third works fine.

Win10, Pb x64 5.71 LTS
jmg12
New User
New User
Posts: 3
Joined: Thu Feb 01, 2018 3:58 pm

Re: morphing using #PB_Mesh_PointList too slow

Post by jmg12 »

hi,

without debugger it's ok ,very pretty effect , is it possible to see the MP3D code in order to learn from ? i'm in love with MP3D :D

thanks,
applePi
Addict
Addict
Posts: 1404
Joined: Sun Jun 25, 2006 7:28 pm

Re: morphing using #PB_Mesh_PointList too slow

Post by applePi »

nice magic Psychophanta
@jmg12, the code is posted here:
http://www.purebasic.fr/english/viewtop ... 15#p433538
but to work with the latest MP3D engine, change the following function names to:
MP_PositionCamera ---> MP_PositionEntity(camera,0,0,500)
MP_CameraLookAt(camera,0,0,0) ---> MP_EntityLookAt(camera,0,0,0)
While MP_KeyUp ---> While Not MP_KeyDown

(it seems MP_KeyUp is removed from the current version)
don't forget to change the Library subsystem in compiler-->compiler options to dx9
for your convenience here is the file:
http://wikisend.com/download/757838/mp3d_morph.rar

download MP3D from the first page of the above link, it works the best with purebasic v5.61
jmg12
New User
New User
Posts: 3
Joined: Thu Feb 01, 2018 3:58 pm

Re: morphing using #PB_Mesh_PointList too slow

Post by jmg12 »

Many thanks !! , it's very useful to convert MP3D functions in native PB

changes made , works perfectly
Post Reply