voici un petit code, qui permet de charger une image (de preference pas trop grande :genre 800x600 )
pour en faire un scene Ogre en relief...
exemple cette image :
va donner :
le code n'est absolument pas optimisé , je suis parti d'un code existant dans les exemples 3D
du coup , l'utilisation des touches flechées pour se promener dans la scene
et la souris pour changer l'orientation de la vue ...
prennez de preference des images bien contrasté pour mieux apercevoir le relief de la scene
Esc pour quitter
a savoir :
plus la couleur est foncé, plus c'est en relief , je fait une moyenne des composants RVB
ça donne une valeur en niveau de gris, c'est cette valeur qui determine le relief
ligne 66
Code : Tout sélectionner
coul_hauteur=255-(red(coul)+green(coul)+blue(coul))/3
il faut retirer le "255-" au debut de la ligne
la hauteur des cubes se regle ligne 70
Code : Tout sélectionner
ScaleEntity(compteur, 1, coul_hauteur/30,1)
si on met "/80" ça diminue le relief ....
ligne 51 je reduit volontairement la taille de l'image par 10
Code : Tout sélectionner
ResizeImage( #image,ImageWidth(#image)/10,ImageHeight(#image)/10)
c'est pour ça qu'il ne faut pas charger d'images trop grande , sinon la scene va augmenter
et votre systeme risque de ramer ....
si toutefois ça rame chez vous , divisez par,20 , 30 ou 40 pour generer moins de cubes ....
a l'inverse , si vous chargez une image trop petite , alors retirez la reduction "/10"
Le code :
Code : Tout sélectionner
;
; ------------------------------------------------------------
;
; PureBasic -image to scene3d
;
; By Zorro
;
; ------------------------------------------------------------
;
UsePNGImageDecoder()
UseJPEGImageDecoder()
#PB_Material_SpecularColor = 1
#PB_Material_AmbientColor = 2
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
#CameraSpeed = 1
#RobotMesh = 0
#RobotTexture = 0
#Robot = 0
#image=0
Global compteur=0
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Models", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
LoadTexture(#RobotTexture, "soil_wall.jpg")
CreateMaterial(0, TextureID(#RobotTexture))
imagePath.s= OpenFileRequester("ouvre image", "d:\", "*mp|*.jpg|*.png", 1 )
If LoadImage(#image,imagePath.s)
ResizeImage( #image,ImageWidth(#image)/10,ImageHeight(#image)/10)
Else
MessageRequester("erreur","l'image ne se charge pas ! ")
End
Endif
CreateCube(0, 1) ; creer un mesh defaut
id_entity=CreateEntity(#pb_any, MeshID(0), MaterialID(0))
SetEntityMaterial(#Robot, MaterialID(0))
StartDrawing(ImageOutput(#image))
compteur=0
For y=1 to ImageHeight(#image)-1
For x=1 to ImageWidth(#image)-1
coul= Point(x,y)
coul_hauteur=255-(red(coul)+green(coul)+blue(coul))/3
compteur=compteur+1
CopyEntity(id_entity, compteur)
ScaleEntity(compteur, 1, coul_hauteur/30,1)
MoveEntity(compteur, X, 1, y )
texture=CreateMaterial(#Pb_any, TextureID(#RobotTexture))
SetEntityMaterial(id_entity, MaterialID(texture))
SetMaterialColor(texture,#PB_Material_AmbientColor, coul)
Next x
Next y
StopDrawing()
DisableMaterialLighting(0, 1)
SetMaterialColor(0, #PB_Material_AmbientColor, RGB(100, 100, 100))
SetMaterialColor(0, #PB_Material_SpecularColor, RGB(255, 255, 255))
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
SetLightColor(0, #PB_Light_SpecularColor, RGB(255, 0, 0))
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 50, 40, 150)
CameraBackColor(0, RGB(255, 255, 255))
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
EndIf
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)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End