probleme avec createmesh
Publié : lun. 06/mai/2013 18:55
je pédale dans la semoule depuis un bon moment.
j'ai enfin
réussi à mettre LA couleur que je veux sur mon cube avec l'éclairage qui va bien...
par contre impossible d'avoir le même resultat sur le mesh que je crée...
une idée ? qu'est ce que je fais mal ?
Merci
Patrick
j'ai enfin

par contre impossible d'avoir le même resultat sur le mesh que je crée...
une idée ? qu'est ce que je fais mal ?
Merci
Patrick
Code : Tout sélectionner
; *****************************************************************************
; CONSTANTE FENETRE - BOITE DE DIALOGUE
; *****************************************************************************
Enumeration 0
#FEN_PROGRAM
EndEnumeration
; *****************************************************************************
; CONSTANTE GADGET
; *****************************************************************************
Enumeration 0
EndEnumeration
Enumeration
#PLAN_XY
#PLAN_XZ
#PLAN_YZ
EndEnumeration
#K_STATUSBAR = 0
#K_STATUSBAR_CHAMP_TEXT = 15
#K_STATUSBAR_CHAMP_VAL = 40
Enumeration 0
#K_STATUSBAR_TEXT_SOURIS_X : #K_STATUSBAR_SOURIS_X
#K_STATUSBAR_TEXT_SOURIS_Y : #K_STATUSBAR_SOURIS_Y
;#K_STATUSBAR_TEXT_SOURIS_Z : #K_STATUSBAR_SOURIS_Z
#K_STATUSBAR_TEXT_ENTITY : #K_STATUSBAR_ENTITY
#K_STATUSBAR_TEXT_ENTITY_POS_X:#K_STATUSBAR_ENTITY_POS_X
#K_STATUSBAR_TEXT_ENTITY_POS_Y:#K_STATUSBAR_ENTITY_POS_Y
#K_STATUSBAR_TEXT_ENTITY_POS_Z:#K_STATUSBAR_ENTITY_POS_Z
EndEnumeration
Enumeration
#CAMERA_DESSOUS
#CAMERA_DESSUS
#CAMERA_DROITE
#CAMERA_GAUCHE
#CAMERA_FACE
#CAMERA_ARRIERE
#CAMERA_ISOMETRIQUE
#CAMERA_CONIQUE
EndEnumeration
#N = 10
; *****************************************************************************
; DECLARATION STRUCTURE
; *****************************************************************************
Structure STRU_POINT
x.f : y.f : z.f
EndStructure
; *****************************************************************************
; OBJET STANDARD
; *****************************************************************************
Structure STRU_OBJ_SPHERE ; Le numéro d'identification du nouveau mesh = position dans la liste
F_COORD_X.f : F_COORD_Y.f : F_COORD_Z.f
F_DIRECTION_X.f : F_DIRECTION_Y.f : F_DIRECTION_Z.f
F_RAYON.f ; Rayon de la sphère dans l'unité du monde
L_RAYON.l ; Nombre de segments de la sphère.
L_ANNEAU.l ; Nombre d'anneaux de la sphère.
EndStructure
Structure STRU_OBJ_CYLINDRE ; Le numéro d'identification du nouveau mesh = position dans la liste
F_COORD_X.f : F_COORD_Y.f : F_COORD_Z.f
F_DIRECTION_X.f : F_DIRECTION_Y.f : F_DIRECTION_Z.f
F_RAYON.f ; Rayon du cylindre dans l'unité du monde
F_LONGUEUR.f ; Longueur du cylindre dans l'unité du monde.
F_TESSELATION.f ; facteur de Tesselisation du cylindre
F_DECALAGE.f ; Spécifie le décalage, dans l'unité du monde, à appliquer entre le fond et le dessus du cylindre
EndStructure
Structure STRU_OBJ_CUBE ; Le numéro d'identification du nouveau mesh = position dans la liste
F_COORD_X.f : F_COORD_Y.f : F_COORD_Z.f
F_DIRECTION_X.f : F_DIRECTION_Y.f : F_DIRECTION_Z.f
F_TAILLE.f ; Taille du cube dans l'unité du monde
EndStructure
Structure STRU_OBJ_LIGNE ; Le numéro d'identification du nouveau mesh = position dans la liste
F_COORD_X1.f : F_COORD_Y1.f : F_COORD_Z1.f : L_COULEUR_DEBUT.l
F_COORD_X2.f : F_COORD_Y2.f : F_COORD_Z2.f : L_COULEUR_FIN.l
EndStructure
; *****************************************************************************
; DECLARATION VARIABLE GLOBALE
; *****************************************************************************
Global GU_Camera_courante.u
Global GL_Souris_X.l, GL_Souris_Y.l, GL_Souris_Z.l, GL_Entity_courante.l
; *****************************************************************************
; DECLARATION PROCEDURE
; *****************************************************************************
Procedure CreateCone(Mesh_Id.l, Rayon.f, Longueur.f, Nombre_de_face.w, Angle_a_decrire_en_degre.f, Couleur.l,fil_de_fer.b) ;, Ferme.b, DecalageVertical.f)
Protected indice.w,Angle_dune_facette.f, px.f,py.f,px2.f,py2.f,px0.f,py0.f,Mesh_Indice.l
Protected NewList lst_vertex.STRU_POINT()
If Angle_a_decrire_en_degre>360.0 :Angle_a_decrire_en_degre=360.0:EndIf
If Angle_a_decrire_en_degre<0.0 :Angle_a_decrire_en_degre=Abs(Angle_a_decrire_en_degre):EndIf
If Nombre_de_face<1:Nombre_de_face=1:EndIf
; Radian(Angle.f) = Convertit la valeur d'un 'Angle' en degré en radian
Angle_dune_facette = Angle_a_decrire_en_degre / Nombre_de_face
Angle_dune_facette = Radian(Angle_dune_facette)
Mesh_Indice = Mesh_Id
x0 = 0 : y0 = 0
; arc de cercle
; coordonnée X = Rayon x Cosinus de l'angle
; coordonnée Y = Rayon x Sinus de l'angle
CreateMesh(Mesh_Id, #PB_Mesh_TriangleList, #PB_Mesh_Dynamic)
AddElement(lst_vertex())
lst_vertex()\x = Rayon:px0=lst_vertex()\x
lst_vertex()\y = 0:py0=lst_vertex()\y
lst_vertex()\z = 0
MeshVertexPosition(lst_vertex()\x,lst_vertex()\y,lst_vertex()\z)
;MeshVertexColor(couleur)
;MeshVertexTextureCoordinate(0, 0)
For indice = 1 To Nombre_de_face
AddElement(lst_vertex())
lst_vertex()\x = Rayon * Cos(Angle_dune_facette*indice):px0=lst_vertex()\x
lst_vertex()\y = Rayon * Sin(Angle_dune_facette*indice):py0=lst_vertex()\y
lst_vertex()\z = 0
MeshVertexPosition(lst_vertex()\x,lst_vertex()\y,lst_vertex()\z)
;MeshVertexColor(couleur)
;MeshVertexTextureCoordinate(0, 0)
Next
MeshVertexPosition(0,0,0) ; Nombre_de_face+1 = centre
;MeshVertexColor(Couleur)
;MeshVertexTextureCoordinate(0, 0)
MeshVertexPosition(0,0,Longueur) ; Nombre_de_face+2 = pointe
;MeshVertexColor(Couleur)
;MeshVertexTextureCoordinate(0, 0)
indice = 0
ForEach lst_vertex()
MeshFace(Nombre_de_face+1,indice,indice+1)
MeshFace(Nombre_de_face+2,indice,indice+1)
indice+1
Next
FinishMesh(#True)
;NormalizeMesh(Mesh_Id)
BuildMeshShadowVolume(Mesh_Id)
UpdateMeshBoundingBox(Mesh_Id)
EndProcedure
; *****************************************************************************
; PROGRAMME PRINCIPAL
; *****************************************************************************
OpenWindow(#FEN_PROGRAM,0,0,800,600,"Tiny modeler",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
If CreateStatusBar(#K_STATUSBAR,WindowID(#FEN_PROGRAM))
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_SOURIS_X
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_SOURIS_X
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_SOURIS_Y
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_SOURIS_Y
;AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_SOURIS_Z
;AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_SOURIS_Z
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_TEXT_ENTITY
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT*2) ; #K_STATUSBAR_ENTITY
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_ENTITY_POS_X
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_ENTITY_POS_X
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_ENTITY_POS_Y
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_ENTITY_POS_Y
AddStatusBarField(#K_STATUSBAR_CHAMP_TEXT) ; #K_STATUSBAR_TEXT_ENTITY_POS_Z
AddStatusBarField(#K_STATUSBAR_CHAMP_VAL) ; #K_STATUSBAR_ENTITY_POS_Z
EndIf
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_SOURIS_X,"X")
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_SOURIS_Y,"Y")
;StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_SOURIS_Z,"Z")
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_ENTITY,"Entity")
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_ENTITY_POS_X,"X")
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_ENTITY_POS_Y,"Y")
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_TEXT_ENTITY_POS_Z,"Z")
LeftOffset.w = 0
TopOffset.w = 0;MenuHeight()
ScreenW.w = WindowWidth(#FEN_PROGRAM)-LeftOffset
ScreenH.w = WindowHeight(#FEN_PROGRAM)-StatusBarHeight(#K_STATUSBAR)-5
InitEngine3D():InitSprite():;InitMouse()
OpenWindowedScreen(WindowID(#FEN_PROGRAM),LeftOffset,TopOffset,ScreenW,ScreenH,0,0,0)
;
; CreateSprite(0,32,32)
; LoadSprite(0,"IMAGES\Souris.bmp")
;Debug GetCurrentDirectory()+"images\texture-bw.jpg"
Add3DArchive(GetCurrentDirectory()+"images", #PB_3DArchive_FileSystem)
;CreateMaterial(0, LoadTexture(1, "jaune-pale.jpg"))
CreateMaterial(0, LoadTexture(1, "texture-bw.jpg"))
; voir MaterialShadingMode(#Matiere, Mode) pour les modes de rendu
; Texture
;
CreateTexture(0, 256, 256)
StartDrawing(TextureOutput(0))
Box(0, 0, 256, 256, RGB(240, 172, 30)) ;$1EACF0
StopDrawing()
CreateMaterial(0, TextureID(0))
CreateCamera(#CAMERA_ISOMETRIQUE,0,0,100,50) ; Par défaut, une caméra nouvellement crée a une couleur de fond noire.
CameraBackColor(#CAMERA_ISOMETRIQUE,$FFFFFF) ; Change la couleur de fond d'une caméra.
MoveCamera(#CAMERA_ISOMETRIQUE,15,15,15, #PB_Absolute)
CameraLookAt(#CAMERA_ISOMETRIQUE,0,0,0)
CreateCamera(#CAMERA_ARRIERE,0,50,100,50)
CameraBackColor(#CAMERA_ARRIERE,$FFFFFF)
MoveCamera(#CAMERA_ARRIERE,0,0,15, #PB_Absolute)
CameraLookAt(#CAMERA_ARRIERE,0,0,0)
;- Light
;
CreateLight(0, RGB(255, 255, 255), -40, 100, 80)
AmbientColor(RGB(50, 50, 50))
; ^ Y
; |
; |
; +----> X
; /
; Z
CreateLine3D(0, 0, 0, 0, RGB(255,0,0),1000, 0, 0, RGB(255,0,0))
CreateLine3D(1, 0, 0, 0, RGB(0,255,0),0, 1000, 0, RGB(0,255,0))
CreateLine3D(2, 0, 0, 0, RGB(0,0,255),0, 0, 1000, RGB(255,0,255))
CreateCone(4,5,10,6,270,RGB(240, 172, 30),0)
CreateCube(5,5)
;SaveMesh(4,"Cone.txt") ; http://wiki.unity3d.com/index.php?title=MeshSerializer
CreateEntity(4,MeshID(4),MaterialID(0))
;EntityRenderMode(4,#PB_Entity_CastShadow)
CreateEntity(5,MeshID(5),MaterialID(0))
MoveEntity(5,0,0,-12)
GU_Camera_courante = #CAMERA_ISOMETRIQUE
Quit = 0
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 2
EndSelect ;WaitWindowEvent()
GL_Souris_X = WindowMouseX(#FEN_PROGRAM)
GL_Souris_Y = WindowMouseY(#FEN_PROGRAM)
GL_Souris_Z = 0
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_SOURIS_X,Str(GL_Souris_X))
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_SOURIS_Y,Str(GL_Souris_Y))
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_ENTITY,Str(GL_Entity_courante))
GL_Entity_courante = MouseRayCast(GU_Camera_courante, GL_Souris_X, GL_Souris_Y,-1);MousePick(GU_Camera_courante,GL_Souris_X,GL_Souris_Y) ; -> quand la souris passe sur le cube = renvoie le numero de l'entity
If GL_Entity_courante>-1
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_ENTITY_POS_X,Str(PickX()))
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_ENTITY_POS_Y,Str(PickX()))
StatusBarText(#K_STATUSBAR,#K_STATUSBAR_ENTITY_POS_Z,Str(PickX()))
CreateLine3D(3, PickX(), PickY(), PickZ(), RGB(255,0,0),
PickX() + NormalX()*#N,
PickY() + NormalY()*#N,
PickZ() + NormalZ()*#N, RGB(255,0,0))
EndIf
RenderWorld()
FlipBuffers()
Until quit <> 0