Page 1 sur 1

3D: modelisation d'une avalanche- problème CreateTerrain()

Publié : ven. 17/juin/2011 22:02
par Kayne
Bonjour à tous, je fais un tipe (travail sur un sujet scientifique) sur les avalanches et je voudrais réaliser un programme de modélisation de l'écoulement.
Le principe du programme:
- je charge un terrain (la montagne)
- à t=0, je prends un ensemble de points (la neige déplacée) => je leur applique des lois physique pour calculer leur position à t=1s par exemple et je les affiche sur l'écran. Ainsi petit à petit (seconde par seconde) j'arrive à recréer l'écoulement approché de l'avalanche .
Le rendu final devrait être une courbe (surface) ou la couleur représenterais la vitesse de chaque point (par exemple du blanc au rouge [blanc= vitesse nulle,rose= vitesse intermédiaire, rouge = vitesse max])

J'ai plusieurs problème:
1) Je pense utiliser la fonction createterrain() pour représenter la montagne seulement quand je veux charger une image que je crée sur paint pour le test j'ai le droit à une erreur microsoft avec rapport d'erreur et tout (rien sur le debogueur) par contre si je prend l'image dans les exemples de purebasic pas d'erreur....
2) comment représenter les points dans l'espace 3D ?

Re: 3D: modelisation d'une avalanche- problème CreateTerrai

Publié : ven. 17/juin/2011 22:12
par G-Rom
1) Je pense utiliser la fonction createterrain() pour représenter la montagne seulement quand je veux charger une image que je crée sur paint pour le test j'ai le droit à une erreur microsoft avec rapport d'erreur et tout (rien sur le debogueur) par contre si je prend l'image dans les exemples de purebasic pas d'erreur....
De mémoire, regarde bien la taille des images. 512x512 = 513x513 il me semble
2) comment représenter les points dans l'espace 3D ?
Des billboards ?

Re: 3D: modelisation d'une avalanche- problème CreateTerrai

Publié : ven. 17/juin/2011 22:22
par Kayne
J'ai refais un test et je pense que c'est la discontinuité qui pose problème pck quand je fais un dégradé ça marche parfaitement.

Je vais regarder la piste des billboard pour les point dans l'espaces

Re: 3D: modelisation d'une avalanche- problème CreateTerrai

Publié : sam. 18/juin/2011 0:36
par Kayne
Mon code est le suivant: il y a surement des maladresses j'aimerais les corriger. et j'ai une erreur: invalide memory access avec la bande rouge sur le addbillboard

Code : Tout sélectionner

;-----TIPE Avalanche------
InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()

UseJPEGImageEncoder()

#CameraSpeed = 1


OpenScreen(1024,768,32,"HR - TIPE - Avalanche")



Add3DArchive("source",#PB_3DArchive_FileSystem)
AmbientColor(RGB(255,255,255))
LoadTexture(0, "terrain_texture.jpg")
LoadTexture(1, "terrain_detail.jpg")


For i = 2 To 255
  CreateImage(i,64,64)
  StartDrawing(ImageOutput(i))
    Box(0,0,100,100,RGB(i,0,0))
    SaveImage(i,"source/"+Str(i)+"avalanche.jpg",#PB_ImagePlugin_JPEG)
  StopDrawing()
  
  CreateMaterial(i, LoadTexture(i, Str(i)+"avalanche.jpg"))
  CreateBillboardGroup(i, MaterialID(i),100,100)
Next
    
CreateMaterial  (0, TextureID(0))
AddMaterialLayer(0, TextureID(1), #PB_Material_Add) 
CreateTerrain("terrain.png", MaterialID(0), 1, 1, 1, 4)

SkyDome("clouds.jpg",10)

AddBillboard(2, 100,  0, 30, 10)
AddBillboard(3, 200,  0, 30, 20)
AddBillboard(4, 50,  0, 30, 30)

CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 0,0, 0)

Repeat
  If ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Left)
      KeyX = -#CameraSpeed 
    ElseIf KeyboardPushed(#PB_Key_Right)
      KeyX = #CameraSpeed 
    Else
      KeyX = 0
    EndIf
    
    If KeyboardPushed(#PB_Key_Up)
      KeyZ = -#CameraSpeed 
    ElseIf KeyboardPushed(#PB_Key_Down)
      KeyZ = #CameraSpeed 
    Else
      KeyZ = 0
    EndIf
    
    If KeyboardPushed(#PB_Key_Z)
      KeyY = -#CameraSpeed 
    ElseIf KeyboardPushed(#PB_Key_S)
      KeyY = #CameraSpeed 
    Else
      KeyY = 0
    EndIf
    
    
  EndIf
  
  If ExamineMouse()
    MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
    MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
  EndIf
  
  Height.f = TerrainHeight(CameraX(0), CameraZ(0))
  
  RotateCamera(0, MouseY, MouseX, RollZ, #PB_Relative)
  MoveCamera  (0, KeyX, KeyY, KeyZ)
  
  RenderWorld()
  FlipBuffers()
  
  
Until KeyboardPushed(#PB_Key_Escape)