Besoin de quelques conseils d'utilisateurs aguerris [Direct3D] - Programmation
Marsh Posté le 15-10-2001 à 16:19:55
* d3dx ... non, tu peux gérer la matrice de proj toi-même, il suffit de multiplier les coeffs de la ligne x ou y par ce que tu veux.
* processvertices est à ne jamais utiliser (sauf si tu sais ce que tu fais ), car la transformation est faite en soft.
* les vertex buffers sont toujours plus rapides qu'un DrawPrimitiveUP() : avec un drawprimitive(), les appels sont batchés, donc la fonction copie ta zone mémoire pour ensuite la balancer à la carte. avec un vb, c'est dx (hard ou soft) qui possède la mémoire, jamais de recopie. si tu as une carte t&l, les vbs sont stockés sur la carte vidéo (dans la limite de la mémoire). un DrawPrimitiveVB() ne fait que dire à la carte "render tel vb", plutôt que de copier les données.
* optimiser tes VBS ? si ce sont des objets statiques, tu les initiliases une bonne fois pour toutes et tu n'y touches plus. s'ils sont dynamiques, tu les créés avec les bons flags (_writeonly & co), tu les lockes, tu écris tes nouvelles données, tu unlockes.
* buffers d'index = même topo que drawprimitive up / vb. pas beaucoup de cartes le gèrent en hard, mais ça évite la recopie quoiqu'il arrive.
* progressive mesh = ça dépend. lis un peu la littérature sur le sujet, comme les slides du mec qui a fait planetside (je sais plus où c'est), ça te renseignera bien. dans certains cas il est préférable d'avoir 2-3 modèles à des niveaux de détail fixes car les cartes modernes bourrent bourrent bourrent. le progressive mesh est toujours fait en soft. tu ne peux voire le bon équilibre qu'en testant.
Marsh Posté le 15-10-2001 à 16:21:57
la page de ratcliff (codeur de planetside) : http://jratcliff.flipcode.com/
les slides :
http://jratcliff.flipcode.com/speech.ppt
http://jratcliff.flipcode.com/speech.doc
Marsh Posté le 15-10-2001 à 16:09:21
Salut,
je débute dans l'API DirectX et mon but de renderiser une scène 3D décrite ci dessous. C'est typiquement un jeu de plateforme style Civilisation. Actuellement je suis un peu perdu dans l'API et je me pose des questions sur quelle méthode est plus optimisée que telle autre.
* entre 1000 & 10000 objets dans la scène mais maxi une dizaine de type différents
* entre 100 & 1000 facettes par objet
* une centaine d'objets vus en même temps dans la fenêtre de rendu
* Textures dynamiques (fct de propriétés de l'objet)
* objets stockés en .X (invariants) (une dizaine)
* fenêtré
* rendu temps réel (10 fps min)
Voila mes questions :
D3DXMatrixPerspectiveFovLH pour fixer le ratio Y/X d'un pixel : est-ce la seule méthode ?
IDirect3DDevice8::ProcessVertices : SI j'ai bien compris, cette optimisation ne sert à rien si la camera bouge tout le temps ?
Vertex Buffer : est-ce vraiment plus rapide que DrawPrimitiveUP ?
Comment je peux optimiser mes vertex buffer pour eviter d'avoir à faire des copies à chaque rendu ?
Faut il que j'utilise les buffer d'index ?
Les ProgressiveMesh offrent ils une bonne optimisation ?
Mon but n'est pas de faire un moteur ultra optimisé (vu qu'il y a maxi 1 MTri/sec) mais plutôt évolutif.
Merci par avance pour toute réponse même partielle.
---------------
Pipiru piru piru pipiru pi