Yes it's great, i'm playing with it.
Here a small example to create a mesh and texture manual, i needed this example for my own code
Code: Select all
;////////////////////////////////////////////////////////////////
;//
;// Project Title: Dreamotion3D pour PureBasic
;// File Title: MESH MANUEL & TEXTURE MANUELLE
;//
;// Created On: 12-10-2006
;// Conversion Author: Terry Myke
;//
;////////////////////////////////////////////////////////////////
; Fichiers Include
IncludePath "Include\"
IncludeFile "d3dx9.pbi"
IncludeFile "dreamotion3d.pbi"
Declare CreateCube()
Global *camera.CEntity
Global *entity.CEntity
Global *brush.CBrush
Global *texture.CTexture
Global *font.CFont
;Initialisation des différents modules
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
End
EndIf
;ouvre un ecran 3D
DM_Graphics3D(800, 600, 32, 1, 1)
*font = DM_LoadFont( "Arial",16, 2)
;creation du cube
CreateCube()
;--------------------------------------------------------------
; UNE PETITE CAMERA POUR VOIR NOTRE SCENE
;--------------------------------------------------------------
*camera = DM_CreateCamera(#Null)
DM_MoveEntity(*camera, 0, 0, -50)
DM_CameraClsColor(*camera, 25, 25, 25)
Repeat
ExamineKeyboard()
DM_TurnEntity(*entity,1,1,1)
;debut rendu
DM_BeginScene()
;rendu scene
DM_Renderworld()
;fin rendu
DM_EndScene()
Until KeyboardPushed(#PB_Key_Escape)
DM_ClearGraphics()
End
Procedure CreateCube()
;creation d'un mesh vide, un canal de texutre,
;12 faces, 24 vertices, 1 surface, pas de parent
*entity = DM_CreateMesh(12, 24, 1, #Null)
;les vertex
Restore Vertex
For i= 0 To 23
Read x.f
Read y.f
Read z.f
Read u.f
Read v.f
;les coordonnées de vertex
DM_VertexCoords(*entity, i, x, y, z)
;les coordonnées de texture (canal 0)
DM_VertexTexCoords(*entity, i, 0, u, v)
Next i
;les triangles
Restore Indice
For i = 0 To 11
Read v1.l
Read v2.l
Read v3.l
DM_VertexTriangle(*entity, i, v1,v2,v3, 0)
Next i
;on crée une petite Brush, dont on récupère le pointeur
*brush = DM_CreateBrush("cube")
;modifie certains paramètres de la brush
DM_BrushAmbient(*brush, 255,128,0,255)
DM_BrushDiffuse(*brush, 255,128,0,255)
;--------------------------------------------------------
; TEXTURE
;--------------------------------------------------------
;creation d'une texture vide de 256x256
*texture = DM_CreateTexture(256,256)
;ré-oriente le buffer de sortie graphique vers notre texture
DM_SetBuffer(*texture)
;debut d'un rendu
DM_BeginScene()
DM_ClsScreen (210, 0, 255, 0) ; efface le buffer avec une couleur
DM_DrawRect ( 10, 10, 200, 200) ; dessin d'un rectangle 2D
DM_SetColor2D(222, 0, 0, 255) ; change couleur du trait
DM_DrawOval (100, 100, 50, 50) ; dessin oval 2D
DM_DrawText(*font, 10, 15, "TEXTURE") ; un petit texte
;fin rendu
DM_EndScene()
;de nouveau le buffer vers l'ecran
DM_SetBuffer(#Null)
DM_BrushTexture(*brush, *texture, 0)
; modifie l'état de rendu de la Brush pour voir de tous les cotés
DM_BrushAddRender(*brush, #D3DRS_CULLMODE, #D3DCULL_NONE)
; affecte la brush créee a notre entity
DM_PaintEntity(*entity, *brush, 0)
; génératon auto des normales de l'entity créée
DM_UpdateNormal(*entity)
; p'tite rotation
DM_RotateMesh(*entity, 0, 45, 0)
EndProcedure
DataSection
Vertex:
; liste des 24 vertex avec leurs coordonnées de textures
Data.f -10, 10,-10, 1, 0
Data.f 10, 10,-10, 1, 1
Data.f -10,-10,-10, 0, 0
Data.f 10,-10,-10, 0, 1
Data.f -10, 10, 10, 0, 0
Data.f -10,-10, 10, 0, 1
Data.f 10, 10, 10, 1, 0
Data.f 10,-10, 10, 1, 1
Data.f -10, 10, 10, 0, 0
Data.f 10, 10, 10, 0, 1
Data.f -10, 10,-10, 1, 0
Data.f 10, 10,-10, 1, 1
Data.f -10,-10, 10, 1, 0
Data.f -10,-10,-10, 1, 1
Data.f 10,-10, 10, 0, 0
Data.f 10,-10,-10, 0, 1
Data.f 10, 10,-10, 0, 0
Data.f 10, 10, 10, 0, 1
Data.f 10,-10,-10, 1, 0
Data.f 10,-10, 10, 1, 1
Data.f -10, 10,-10, 1, 0
Data.f -10,-10,-10, 1, 1
Data.f -10, 10, 10, 0, 0
Data.f -10,-10, 10, 0, 1
Indice:
;liste des faces
Data.l 0, 1, 2
Data.l 1, 3, 2
Data.l 4, 5, 6
Data.l 5, 7, 6
Data.l 8, 9, 10
Data.l 9, 11, 10
Data.l 12, 13, 14
Data.l 13, 15, 14
Data.l 16, 17, 18
Data.l 17, 19, 18
Data.l 20, 21, 22
Data.l 21, 23, 22
EndDataSection