Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs 3D
Moteurs 3D Forum d'entraide sur les moteurs 3D (conception d'un moteur, Ogre, Irrlicht...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/10/2011, 10h50   #121
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Je n'ai pas loadé la moitié des mesh dont je vais avoir besoin et le nombre de frames par secondes chute dramatiquement a 14/15fps. Et elle chute a 12 quand je fais en plus bouger la camera La lenteur ne vient pas du code que j'ai ecris (autre que du code destiné a utiliser de la 3D). Si je lance le meme programme et que je ne lance pas la fonction qui cree mes mesh je suis environ a 300fps. Y a t il des moyens de rendre l'affichage plus rapide? Je n'ai pas une carte graphique qui est un foudre de guerre mais elle etait pas mal y a quelque années et elle arrive encore bien a faire tourner de jeux recents qui comporte au moinsmille fois plus de mesh que je n'utilise. D'ailleur je met ci dessous l'ensemble des infos que le programme me donne pour vous faire une idee du peu de choses loadées:

Code :
1
2
3
4
5
6
7
8
9
 
13 fps
773 dc /f
1sc/f
~718fl/f
0 tasks
29 res
1103 st/f
78 ms/f
et ci dessous mon code qui va charger plein de fois la meme mesh et la disposer un peu partout sur mon terrain:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
	Public objet_3D As Mesh.TZMesh
 
	matricule = matricule_mur_non_utilise()
 
        objet_3D = New Mesh.TZMesh("couloir_mur.x", "Mesh-mur-n" & CStr(matricule))
 
        objet_3D.Material(0).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("Corridor_Floor_A_01.tga", "texture-mur-n" & CStr(matricule) & "-1")
        objet_3D.Material(0).Diffuse = Color.White
        objet_3D.Material(0).Ambient = Color.Black
 
        objet_3D.Material(1).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("Corridor_Floor_A_01.tga", "texture-mur-n" & CStr(matricule) & "-2")
        objet_3D.Material(1).Diffuse = Color.White
        objet_3D.Material(1).Ambient = Color.Black
 
        objet_3D.Material(2).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("Corridor_Floor_A_01.tga", "texture-mur-n" & CStr(matricule) & "-3")
        objet_3D.Material(2).Diffuse = Color.White
        objet_3D.Material(2).Ambient = Color.Black
 
        objet_3D.Scale = New Vector3(0.5, 0.5, 0.5)
        objet_3D.load()
En plus de ca y a une camera, un terrain, 3 acteurs, et une skybox. Le fichier Corridor_Floor_A_01.tga ne fait que 193 Ko et le msh couloir_mur.x fait quand a lui 79 Ko et est loin d'etre chiadé.

Des idées?
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 11h01   #122
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
"Public objet_3D As Mesh.TZMesh"

là je ne vois qu'un seul mesh? tu utilise la même classe? Le code est prévu pour une classe par mesh.
De plus si c'est pour afficher plusieurs meshs il vaut mieux utiliser une Scene (regarde demo_fps pour savoir comment l'utiliser). En gros il suffit de remplacer ton_mesh1.load par myScene.Add(ton_mesh1) puis une fois tout ajouter: myScene.Load et pour le rendu: myScene.Render.

Autre chose, si tu utilise la même texture inutile de lui donner des noms different, ce qui donne par exemple:
Code :
1
2
3
objet_3D.Material(0).DiffuseMap =  Texture.TZTextureManager.GetInstance.Load("Corridor_Floor_A_01.tga", "texture-mur-n" & CStr(matricule) & "-1")
objet_3D.Material(1).DiffuseMap =  objet_3D.Material(0).DiffuseMap
objet_3D.Material(2).DiffuseMap =  objet_3D.Material(0).DiffuseMap
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 17h04   #123
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Oui j'utilise la meme classe: la c'est une classe qui s'appelle Class_mur et qui me sert a afficher des murs de mes batiments. chaque objet mur est ainsi stoqué dans une collection appelée murs. Le code que j'ai collé juste avant est le constructeur de cette classe (methode new).

La scene dont vous parlez n'est ce pas une collection? ca semble s'utiliser de la meme maniere que ma collection (murs). Et je crée un mur de cette maniere:

Code :
1
2
3
4
5
 
Dim mur As New Class_mur With {.type = type_de_mur, .orientation = orientation}
murs.Add(mur, CStr(mur.matricule))
mur.position.X = position.X
mur.position.y = position.y
Et je l'affiche dans la fonction render3D (comme dans vos tutos):

Code :
1
2
3
4
5
6
 
For Each element_ In murs
    If TypeOf element_ Is Class_mur Then
        element_.objet_3D.Render()
    End If
Next
Votre methode ressemble a ce que j'ai fais non? cela fera t il quand meme gagner du temps?

Pour ce qui est des textures j'avais deja fais ce que vous disiez mais les textures vont changer et je n'utiliserai plus deux ou trois fois la meme texture sur le meme mesh. De plus en testant comme vous disiez (en reutilisant objet_3D.Material(0).DiffuseMap), ca ne me fait pas gagner de temps substanciel (le nombre de fps n'avait pas changé).
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 18h15   #124
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
En ce qui concerne objet_3D.Material(0).DiffuseMap = ... c'est juste une question de qualité du code, bien sur que cela change rien au rendu.

Et non la classe TZScene n'est pas une collection, en interne un octree est utilisé ainsi que l'ordre des entités est classé pour optimiser le rendu. Et dans la prochaine mise à jours l'occlusion culling (ne pas dessiner des meshs cachés par d'autres) sera réactivé, en bref TZScene est fait pour
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 18h41   #125
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Ah ok excellent je vais donc tester avec une scene alors. Merci.

Et effectivement ne pas traiter les parties de mesh (ou les meshs entiere je ne sais pas) ca doit faire gagner pas mal de temps au final.

Quant a la methode Texture.TZTextureManager.GetInstance.Load() je ne savais pas si elle etait lourde en terme de consommation de temps CPU avant de tester. Il ne faut pas oublier que ce qui vous parait evident (parce que vous avez concu TZU3D) ne l'est pas forcement pour nous qui utilisons/testons. C'est d'ailleur aussi pour ca que je continue d'utiliser ce forum au lieu de votre mail (et j'espere que ca ne vous derange pas, c'etait deja sympa de me le donner). Pour que mes diffucultés et leur resolution puissent servir a d'autres.

Pour le tuto sur le FPS chez moi il ne fonctionne pas et je ne me suis pas encore penché dessus pour comprendre pourquoi, ni n'ai meme regardé comment il fonctionnait.
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 21h08   #126
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
J'ai donc suivi vos conseils et ai utilisé des scenes pour faire les murs et les sols de mes batiments. le resultat est en effet flagrant, j'ai gagné 40fps. je vais donc user et abuser des scenes.

Ca plus le fait que je me suis rendu compte que dans la boucle de rendu je testais des deplacements de meshs qui n'avaient pas a bouger comme les murs et les sols par exemple, bien au final ca me fait passer de 15fps a 95fps pour un affichage identique.

Sinon j'aurais quand meme deux petites questions:

1) Sous quelle licence est tzu3D? Les sources deviendront elle disponibles?
2) J'essaye, mais sans succes pour le moment, de faire un effet mirroir (comme un sol qui viendrait d'etre lavé et qui refleterait les gens qui passent dessus de maniere attenuée). une idee de comment je peux faire ca? je n'ai rien trouvé dans la doc ni dans aucun des tutos qui parle de reflexion (a part pour water mais ce n'est pas une etendue d'eau que je veux faire). Il y a bien le tuto 8 des utilisation de GlossMap mais je ne crois pas que ca puisse m'aider pour ce que je veux faire en fait parce que je voudais qu'on distingue bien le reflet du personnage (un peu attenué).
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 22h47   #127
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
1) à réfléchir, mais de sur jamais les sources seront dispos.
2) il y a plusieurs méthode mais le principe est le même que pour l'eau: il faut faire le rendu du reflet dans une texture puis utiliser cette texture sur la surface où l'on veut le reflet. C'est un peu compliqué je pense que je vais faire une classe pour simplifier ça.
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 14h16   #128
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
J'ai enfin (j'ai vraiment galéré) reussi à creer des actor direct x texturés et animés et j'ai reussi a les loader dans mon programme.

Mais prenons l'exemple d'une animation. "Courrir" par exemple. C'est une animation que je peux vouloir intégrer autant dans un actor nommé "pompier" que dans un actor nommé "infirmiere".

Et du coup je prefere avoir trois fichiers:
-pompier.x (sans anim)
-infirmiere.x (sans anim)
-courrir.jesaispasquoi (contenant mon animation)
Que deux fichiers:
-pompier.x (avec anim courrir)
-infirmiere.x (avec anim courrir)

Ma question est donc la suivante: Peut on loader un actor a partir d'un fichier directx (.x), sans qu'il contienne d'animation, et loader ses animations par le biais d'un autre fichier ou autre type de fichiers (si oui lequel/lesquels)?

Merci
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 20h26   #129
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
oui c'est pratique mais malheureusement non, ce n'est pas possible avec Tzu3D
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 23h52   #130
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Et vous pensez que ce sera possible ou que c'est une fonctionnalité a oublier?

Le constructeur de la classe Actor.TZActor doit bien faire appel a une methode ou une fonction qui charge du fichier directx les animations. Ca ne devrait pas etre trop dur de laisser la possibilité de charger ces animations depuis un autre fichier. A moins que ce ne soit pas vous qui ayez programmé le chargement des mesh, textures et animation des fichiers directx auquel cas je compendrai que ce ne soit pas faisable (facilement du moins).
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 19h21   #131
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
A oublié pour le moment, plein de chose à penser pour que cela soit possible, comme la corrélation entre les bones du mesh et les bones de l'anime ou bien quel format de fichier pour l'anim.
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 02h39   #132
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Je comprend ca fait beaucoup de choses.

Mais ca pourrait faire beaucoup moins de choses a faire si on pouvait juste partager les anims entre actors. On ne le ferait que si on est sur que les squelettes coincident (laissé a la verification du developpeur de l'application utilisant tzu3D). Ainsi on pourrait par exemple charger deux actors differents (ex: pompier.x et infirmiere.x) respectivement dans actor1 et actor2, qui auraient chacun une animation differente (le pompier a juste l'animation "courrir" et l'infirmiere a juste l'animation "marcher"). Ainsi on devrait pouvoir faire:

Code :
actor1.ajoute_une_animation(actor2.recupere_index_de_lanimatio_n(1), 2)
pour ajouter en animation n°2 a actor1 (pompier) l'animation n°1 de l'actor 2 (l'infirmiere). Du coup le pompier saurait courrir et marcher.

Dans la plupart des applis 3d on met souvent des humains. Qu'ils aient le meme squelette n'est pas choquant et ce genre de modif pourrait beaucoup aider sans qu'on ait besoin de quelque chose d'aussi compliqué que ce que vous avez decris plus haut...

Maintenant, je ne suis pas un expert 3d ni du format de fichier directx et c'est peut etre pas realisable aussi facilement que je le dis. Dites moi ce que vous en pensez
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 18h52   #133
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Que pensez vous de mon idee?
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2011, 21h14   #134
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
faut que je test, voir ce que cela peut donner
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 15h13   #135
Mat77164
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : octobre 2011
Messages : 1
Points : 1
Points : 1
Bonjour à tous,

Je viens de télécharger la Démo posté sur une page antérieure. Je l'ai extraite, puis je lance le .exe : Tzu_ShowRoom a cessé de fonctionner ...

Quelqu'un pourrait-il m'aider ?
Mat77164 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2011, 18h14   #136
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
cette demo date un peu, essayez plutôt les tutos du sdk. Il me semble que cette demo ne marche pas avec un OS 64bits. Sinon cela peut venir de la carte graphique qui ne supporte pas les pixels/vertex shader 3.0
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 13h45   #137
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Bonjour,

J'ai vraiment eu du mal mais j'ai reussi a creer, animer et texturer un mesh exportable au format directx. Et jarrive a le loader dans mon jeu qui utilise tzu3D.

J'ai une question relative a ca justement. Est il possible avec votre moteur d'attacher un mesh a un autre. Par exemple attacher un objet (une brosse a dent par exemple) a la main d'un personnage creé avec de bones et exporté en directx?

Pour un personnage immobile il n'y a pas besoin bien sur mais des qu'il se met a courrir (ou a se brosser les dents), les coordonnées de la main bougent et donc je ne sais plus où se trouve mon objet.

Je dis attacher (parce que j'ai lu que c'est comme ca qu'on faisait avec un autre moteur 3D) mais ca peut etre attaché ou si vous aviez un moyen de connaitre l'emplacement de tel ou tel bone de mon suqelette de mon personnage et son orientation ca pourrait faire l'affaire aussi.

EDIT: [les methodes attach() de actor.tzactor et de mesh.tzmesh peut etre?]

Merci
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 19h14   #138
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
Bonjour,


Je crois avoir trouvé un BUG.


Je ne peux pas loader deux textures differentes sur le meme actor.tzactor.

Alors que je peux le faire sur un mesh.tzmesh sans probleme.

Un peu de code pour etre plus explicite:

Le code ci dessous ne charge que la premiere texture

Code :
1
2
3
4
5
6
7
8
9
myMesh = New Actor.TZActor("console_ordi.x", "ordi")
 
myMesh.Material(0).Diffuse = Color.White
myMesh.Material(0).Ambient = Color.DarkGray
myMesh.Material(0).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture1.tga", "t1")
 
myMesh.Material(1).Diffuse = Color.White
myMesh.Material(1).Ambient = Color.DarkGray
myMesh.Material(1).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture2.tga", "t2")
Alors que le code ci dessous fonctionne correctement:

Code :
1
2
3
4
5
6
7
8
9
myMesh = New Mesh.TZMesh("console_ordi.x", "ordi")
 
myMesh.Material(0).Diffuse = Color.White
myMesh.Material(0).Ambient = Color.DarkGray
myMesh.Material(0).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture1.tga", "t1")
 
myMesh.Material(1).Diffuse = Color.White
myMesh.Material(1).Ambient = Color.DarkGray
myMesh.Material(1).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture2.tga", "t2")

Merci de me dire ce qu'il en est svp.
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 16h24   #139
ShadowTzu
Membre habitué
 
Avatar de ShadowTzu
 
Inscription : juin 2005
Messages : 184
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juin 2005
Messages : 184
Points : 135
Points : 135
effectivement, c'est bien un bug dû au chargement multithread. C'est contournable en changeant la texture après que l'actor soit chargé du style:

Code :
1
2
3
4
5
Engine.WaitLoad...
 
myMesh.Material(1).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture2.tga", "t2")
 
Engine.Load
Et sinon oui je n'ai pas encore programmé "l'attachement" d'un mesh à un actor. Alors que c'est possible avec les meshs statique.
__________________
Tzu3D: Mon Moteur 3D DirectX9 en VB.NET
ShadowTzu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 02h05   #140
afrique
Membre à l'essai
 
Inscription : septembre 2006
Messages : 24
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 24
Points : 22
Points : 22
J'ai donc testé ce code en suivant vos conseils (je crois l'avoir fait en tout cas) :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
myMesh = New Actor.TZActor("console_ordi.x", "ordi")
 
myMesh.Material(0).Diffuse = Color.White
myMesh.Material(0).Ambient = Color.DarkGray
myMesh.Material(0).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture1.tga", "t1")
 
myMesh.load()
Engine.WaitLoad(False, False, False)
 
myMesh.Material(1).Diffuse = Color.White
myMesh.Material(1).Ambient = Color.DarkGray
myMesh.Material(1).DiffuseMap = Texture.TZTextureManager.GetInstance.Load("texture2.tga", "t2")
 
Engine.Load()
Mais le resultat est le meme (a savoir une seule texture est chargé pour tous les materiaux de l'actor)

J'ai testé plusieures variantes et ca me fait toujours la meme chose. Il faut que je precise que je charge plusieurs actors (issus de fichiers .x differents) dans mon jeu et chacun a plusieures textures (que je nomme differement bien entendu).
afrique est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h15.


 
 
 
 
Partenaires

Hébergement Web