La 3D est ici !

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

La 3D est ici !

Message par kelly »

Bon, pour executer mon code, vous aurez besoin du lapin ci dessous :
http://w404.free.fr/lapin.jpg
Mettez le sur C:/ (sinon, il ne sera pas lu)

Voici mon code et quelques remarques juste en dessous :

Code : Tout sélectionner

If InitEngine3D() And InitSprite() And InitKeyboard() 
OpenScreen(1024,768,32,"")     ;Ouvre un ecran de 800x600x32 dont le nom est ""

    CreateMesh(0) 
    SetMeshData(0, #PB_Mesh_Vertices , ?CubeVertices          , 4) 
    SetMeshData(0, #PB_Mesh_Triangles , ?CubeFacesIndexes      , 4) 
    SetMeshData(0, #PB_Mesh_UVCoordinates, ?CubeTextureCoordinates, 4) 
    CreateMesh(1)
    SetMeshData(1, #PB_Mesh_Vertices , ?CubeVertices2         , 4) 
    SetMeshData(1, #PB_Mesh_Triangles , ?CubeFacesIndexes      , 4) 
    SetMeshData(1, #PB_Mesh_UVCoordinates, ?CubeTextureCoordinates2, 4) 

    LoadTexture(0, "c:\lapin.jpg") 
    CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0))) 
    CreateEntity(1, MeshID(1), CreateMaterial(0, TextureID(0))) 

    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0,0,0,7)
    
    Repeat 
      ExamineKeyboard() 
      RotateEntity(0, 1.38,0.7, 0.5)
      RotateEntity(1, 1.38,0.7, 0.5)
      RenderWorld() 
      FlipBuffers() 
    Until KeyboardPushed(#PB_Key_Escape) Or Quit 
Else 
  MessageRequester("Error", "Cant init DirectX 3D Engine",0) 
EndIf 
  
End 
DataSection 
  CubeVertices: ; coordonnées des 4 points du carré
    Data.f -1,-1,-0.2
    Data.f 1, -1,-0.2
    Data.f 1, 1, -0.2
    Data.f -1, 1, -0.2
  CubeVertices2:
    Data.f -1,-1,0.2
    Data.f 1,-1,0.2
    Data.f 1,1,0.2
    Data.f -1,1,0.2
  CubeFacesIndexes: 
    Data.w 0,1,2
    Data.w 0,2,3
    Data.w 0,3,2
    Data.w 0,2,1
  CubeTextureCoordinates: 
    Data.f 0.0, 0.0
    Data.f 1.0, 0.0 
    Data.f 1.0, 1.0
    Data.f 0.0, 1.0
  CubeTextureCoordinates2: 
    Data.f 0.0, 0.0
    Data.f 2.0, 0.0
    Data.f 2.0, 2.0
    Data.f 0.0, 2.0
EndDataSection 
Je me pose plusieurs questions :
1> pourquoi tout d'abord le lapin est devenu un peu foncé ?
2> j'ai essayé de creer une lumiere mais ca n'a pas marché. Comment faire ?
3> les 2 objets 3D sont independants. Comment les lier ?
4> j'ai essayé de compiler le code. Et bien, l'EXE me dit qu'il ne peux pas initialiser la 3D engine !!!! PKOI ????????

Bon bin, j'attend vos reactions :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

chez moi ça marche bien !

pour l'erreur 3D , je crois qu'il faut que la DDll " Engine3D.dll "
qui se situe dans le dossier Compiller du purebasic , soit presente dans le dossier ou tu vas compiller ton prg !
essaye en faisant une copie ! :D

pour la couleur , je supose que comme on est dans un espace 3D
il y a une dispersion des lumiere ! :? 8O

Comtois ? ....
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

HS
c'est pas un lapin c'est un chat... il s'apelle garfield

Dri :jesors:
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Pour la texture si tu veux la mettre n'importe où enlève le c:\ et place le code soucre et la texture dans le même répertoire.

Pour modifier l'affichage des couleurs il faut jouer avec :

MaterialDiffuseColor(#Matiere, Color)
MaterialSpecularColor(#Matiere, Color)
MaterialAmbientColor(#Matiere, Color)


Il y a aussi cette commande qui peut changer les couleurs des textures :

LightColor(#Lumiere, Couleur)

Pour joindre 2 meshs ensemble la nouvelle version de OGRE le supporte mais reste à savoir si Fred va conserver cette possibilité. Et je l'espère car je vais en avoir de besoin. Dans le cas contraire ça sera toujours possible de le programmer mais c'est énorme à mettre en oeuvre.

A+
Guimauve
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Aucune lumiere ne fonctionne. J'entend par lumiere une lumiere comme une ampoule electrique qui eclairerait la scene. Par contre, je peux colorer la texture mais ce n'est pas pareil a une lumiere.
Autre chose : la rotation et le scroll de texture sacade !! Bug ou pas ?

Code : Tout sélectionner

If InitEngine3D() And InitSprite() And InitKeyboard() 
OpenScreen(1024,768,32,"")     ;Ouvre un ecran de 800x600x32 dont le nom est ""

    CreateMesh(0) 
    SetMeshData(0, #PB_Mesh_Vertices , ?CubeVertices          , 4) 
    SetMeshData(0, #PB_Mesh_Triangles , ?CubeFacesIndexes      , 4) 
    SetMeshData(0, #PB_Mesh_UVCoordinates, ?CubeTextureCoordinates, 4) 
    CreateMesh(1)
    SetMeshData(1, #PB_Mesh_Vertices , ?CubeVertices2         , 4) 
    SetMeshData(1, #PB_Mesh_Triangles , ?CubeFacesIndexes      , 4) 
    SetMeshData(1, #PB_Mesh_UVCoordinates, ?CubeTextureCoordinates2, 4) 

    LoadTexture(0, "c:\lapin.jpg") 
    CreateEntity(0, MeshID(0), CreateMaterial(0, TextureID(0))) 
    CreateEntity(1, MeshID(1), CreateMaterial(0, TextureID(0))) 

    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0,0,0,7)
MaterialDiffuseColor(0,RGB(200,140,50))
MaterialBlendingMode(0,1)
MaterialSpecularColor(0,RGB(255,0,0))
RotateMaterial(0,0.05,1)
ScrollMaterial(0, 0.5, 0.5, 1) 

CreateLight(1, RGB(255,150,255)) 
LightColor(1, RGB(255,0,0)) 
LightSpecularColor(1, RGB(255,0,0)) 
    Repeat 
      ExamineKeyboard() 
      ClearScreen (0,0,0)
      RotateEntity(0, 1.38,0.7, 0.5)
      RotateEntity(1, 1.38,0.7, 0.5)
      RenderWorld() 
      FlipBuffers() 
    Until KeyboardPushed(#PB_Key_Escape) Or Quit 
Else 
  MessageRequester("Error", "Cant init DirectX 3D Engine",0) 
EndIf 
  
End 
DataSection 
  CubeVertices: ; coordonnées des 4 points du carré
    Data.f -1,-1,-0.2
    Data.f 1, -1,-0.2
    Data.f 1, 1, -0.2
    Data.f -1, 1, -0.2
  CubeVertices2:
    Data.f -1,-1,0.2
    Data.f 1,-1,0.2
    Data.f 1,1,0.2
    Data.f -1,1,0.2
  CubeFacesIndexes: 
    Data.w 0,1,2
    Data.w 0,2,3
    Data.w 0,3,2
    Data.w 0,2,1
  CubeTextureCoordinates: 
    Data.f 0.0, 0.0
    Data.f 1.0, 0.0 
    Data.f 1.0, 1.0
    Data.f 0.0, 1.0
  CubeTextureCoordinates2: 
    Data.f 0.0, 0.0
    Data.f 2.0, 0.0
    Data.f 2.0, 2.0
    Data.f 0.0, 2.0
EndDataSection 
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

C'est moi ou tu n'a pas localisé la lumière quelque part dans le monde 3D.

Voir la commande : LightLocate(#Lumiere, x, y, z)

A+
Guimauve
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

oui je sais, ta commande n'est pas dans mon code mais j'ai tout essayé. Essaye d'insérer ta commande. Moi j'ai essayé et je ne vois AUCUNE lumiere...
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Si je ne me trompe pas, il faut calculer les normales des triangles pour que la lumière soit visible. Le moteur 3D utilise ce vecteur calculer l'effet de lumière.

Donc pas de normales, pas de lumière.

A+
Guimauve
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

peut tu donner le code ?
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

C'est soit disant facile mais personne ne peux donner un code ?
peut etre que la "lumiere" dans de la 3D eclaire uniquement le decors et pas les objets !! Je ne vois que ca...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

pour les calculs de normales il faut regarder les codes sources de comtois mais la structure des mesh a changé dans la dernière bêta d'OGRE alors ses routines sont devenues obsolètes...

Dri
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ton lapin est sombre parce que tu n'as précisé la lumière ambiante

Code : Tout sélectionner

AmbientColor(RGB(255,255,255))
Par contre si tu veux voir l'effet des lumières , il vaut mieux baisser la lumière ambiante , par exemple

Code : Tout sélectionner

AmbientColor(RGB(95,95,95))
Et ensuite , il faut effectivement ajouter les normales à ton mesh(les lumières sont calculées en fonction des normales des objets 3D).
le tien est simple , pas besoin de calcul , c'est un vecteur perpendiculaire au plan , comme tu utilise le plan XY , la normale sera sur l'axe Z.
Tu ajoutes ça à ton code , et tu verras la lumière rouge.

Code : Tout sélectionner

 SetMeshData(0, #PB_Mesh_Normals, ?CubeNormale, 4)
     
    CubeNormale:
    Data.f 0,0,1
    Data.f 0,0,1
    Data.f 0,0,1
    Data.f 0,0,1
kelly
Messages : 176
Inscription : jeu. 09/sept./2004 16:15

Message par kelly »

Je me demande où se trouve la zone exacte qui me permettrait de changer en memoire l'apparence de la texture du chat.

Ca doit etre un truc comme ca :

Code : Tout sélectionner

For i=0 To 76
PokeB(@TextureID(0)+i,0)
Next
Mais bon...
OU ALORS, je serais interessée par un GrabMaterial. Mais est ce possible !!
Egalement, on ne peux pas appliquer un sprite sur une texture. Quel dommage !!!

Code : Tout sélectionner

      OutputID=TextureOutput(0)
      StartDrawing(OutputID)
      DisplaySprite(0,0,0)
      StopDrawing()
Dites m'en + + + :evil:
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Pour appliquer une image sur une texture. Il suffit donc de recopier le sprite dans une image et ensuite de transposer l'image dans la texture. Je sais que c'est indirect, mais ça fonctionne très bien.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre