Page 1 sur 1

Dreamotion3D : Coquillage

Publié : ven. 17/nov./2006 11:44
par comtois
J'ai repris un ancien code qui représente un coquillage et j'ai des soucis avec l'éclairage et la couleur du mesh, pourtant j'ai fait comme pour le cube ? enfin il me semble, je vais vérifier encore une fois !

Code : Tout sélectionner

;Fichiers Include
IncludePath "..\Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"    

Global *camera.CEntity, *entity.CEntity
Global *font.CFont
Global *brush.CBrush
Global *texture.CTexture

  
If InitSprite() = 0 Or InitKeyboard() = 0
   MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 )
   End
EndIf

ExamineDesktops()
Texte$ = "Morphing 3D"
Sx = DesktopWidth(0)
Sy = DesktopHeight(0)
Sd = DesktopDepth(0)
OpenScreen(Sx, Sy,Sd, Texte$)
DM_InitGraphics(ScreenID(), Sd, 1, 1)
*DM_d3d9    = DM_GetD3D9()
*DM_d3dDev9 = DM_GetDevice9()
DM_WIDTH    = ScreenWidth
DM_HEIGHT   = ScreenHeight

;-font
*font = DM_LoadFont("Arial", 8, 1)
DM_SetColorText(*font, 255, 255, 0,255)

#E = 2.71828182

Global Pas.f

Procedure.f Exp(value.f)
  ProcedureReturn Pow(#E, value)
EndProcedure

Macro CX(p1,p2)
  exp(p1/k)*Cos(p1)*(1+b*Cos(p2))
EndMacro
Macro   CY(p1,p2)
  exp(p1/k)*Sin(p1)*(1+b*Cos(p2))
EndMacro
Macro CZ(p1,p2)
  exp(p1/k)*(1+b*Sin(p2))
EndMacro

Procedure CreateMeshCoquillage()
;http://aesculier.chez-alice.fr/fichiersPovray/coquillages/coquillages.html
; equation - Coquillage
;x=exp(p1/k)*Cos(p1)*(1+b*Cos(p2))
;y=exp(p1/k)*Sin(p1)*(1+b*Cos(p2))
;z=exp(p1/k)*(1+b*Sin(p2))
;Peut s'appliquer à toute surface paramétrique en mettant les
;bonnes formules dans CX, CY, CZ

  k       = 10      
  b.f     = 0.49268  
  umin.f  = -34               
  umax.f  = -4      
  NbSommet = 25000  
  NbTriangle = 12500 * 2 
     
     
  vmin.f  = 0        ;
  vmax.f  =  6.3     ;
  uiter.f = 140      ;  nombre de pas en u
  viter.f = 40       ;  nombre de pas en v


  iu.f    = (umax-umin)/uiter 
  iv.f    = (vmax-vmin)/viter 

  Define.f uu, vv
   
  Define.f x1, y1, z1
  Define.f x2, y2, z2
  Define.f x3, y3, z3
  Define.f x4, y4, z4
    
  uu = umin   
  p = 0
  ;rouge = $DB
  ;vert = 17
  ;bleu = $02
  rouge = 255
  vert = 0
  bleu = 0
  *entity = DM_CreateMesh(NbTriangle, NbSommet, 1, #Null)
  While (uu<=umax)                     
    vv = vmin
    While (vv<=vmax)                     
      ;POINTS     
      DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv)) 
      DM_VertexColor(*entity, i, rouge, vert, bleu, 255) 
      i + 1
      uu=uu+iu   
      DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv)) 
      DM_VertexColor(*entity, i, rouge, vert, bleu, 255) 
      i + 1         
      vv=vv+iv
      DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv)) 
      DM_VertexColor(*entity, i, rouge, vert, bleu, 255) 
      i + 1
      uu=uu-iu
      DM_VertexCoords(*entity, i, CX(uu,vv), CY(uu,vv), CZ(uu,vv)) 
      DM_VertexColor(*entity, i, rouge, vert, bleu, 255) 
      i + 1
      vv=vv-iv

      ;TRIANGLES   
      DM_VertexTriangle(*entity, t, p, p + 1, p + 2, 0)  
      t + 1
      DM_VertexTriangle(*entity, t, p, p + 2, p + 3, 0)
      t + 1
      DM_VertexTriangle(*entity, t, p + 2, p + 1, p, 0)  
      t + 1
      DM_VertexTriangle(*entity, t, p + 3, p + 2, p, 0)
      t + 1    
      p + 4

      vv = vv+iv
    Wend                 
    uu = uu+iu
  Wend   

  DM_UpdateNormal(*entity)
  DM_ScaleEntity(*entity, 120, 120, 120)
   
EndProcedure   


;-Mesh
CreateMeshCoquillage()

;-camera
*camera = DM_CreateCamera(#Null)
DM_CameraClsColor(*camera, 0, 0, 85)
DM_MoveEntity(*camera, 0, 0, 400)
DM_PointEntity(*camera, *entity)

;-Light
DM_AmbiantLight(75,75,75)
*light = DM_CreateLight(0)
DM_LightColor(*light, 255,  255,  255, 255)
pas = 0.8
Repeat

  DM_TurnEntity(*entity, pas, pas/2,-pas)

  ExamineKeyboard()

  DM_BeginScene()
    DM_RenderWorld()
  DM_EndScene()  
Until KeyboardPushed(#PB_Key_Escape)