1

Bon, vous le savez probablement pas (même si je poste des captures d'écran de temps en temps), mais je suis en train de bosser sur un programme, qui, en gros, copie le moteur graphique de World of Warcraft.

C'est en C#, parce que je suis un grand flemmard, et pour le moment ça fonctionne très bien.

Mais, parce que oui, il y a toujours un mais... Certaines maps ne fonctionnent pas.

Je m'explique: il y a deux types de maps dans Wow: les maps classiquent, dites ADT, et les autres, dites WDT.

La différence principale c'est que la map dite WDT ne contient pas de vertices à proprement parler, Blizzard spawn un objet appelé WMO et c'est ça qui sert de map.
L'intérêt c'est qu'au final toute la géométrie de l'instance (c'est utilisé uniquement pour les instances où on ne voit pas la skybox) est contenue dans un seul fichier: terrain, textures, objets (un WMO peut contenir des références vers des objets appelés M2 ou MDX, qui définit la géométrie d'une caisse, par exemple; un WMO miniature en fait).

Donc jusqu'à présent je ne chargeais que les maps de type ADT, parce que c'est beaucoup plus compliqué à traiter, mais après avoir implémenté le chargement des PNJs et des objets interactibles (les drapeaux de capture, les coffres, ce genre de conneries), je me suis dit que j'allais finalement m'attaquer aux WDT.

Après une première implémentation torchon ne fonctionnant pas, je finis par me connecter sur les serveurs officiels histoire de voir quelles sont les coordonnées exactes du WMO.

Surprise: au lieu d'utiliser les mêmes transformations que les WMO contenus dans les maps de type WDT, le WMO "global" de la map WDT en utilise d'autres. Une bonne heure de réflexion plus tard et c'est implémenté.

Je finis le code, je teste: rien ne s'affiche.

Bon, pas grave. Je reprend le code de zéro, et là miracle, j'ai bien de la géométrie à l'écran:

arpVolxl.png

Je remarque que les coordonnées ne sont toujours pas correctes; je corrige, et je charge les PNJs pour voir.

y9mnKQql.jpg

Je fais quelques modifications sans aucun rapport (je vire du vieux code, bref, du nettoyage classique), commit, et je vais faire autre chose.

Je reviens 5h plus tard. Je modifie encore du code sans rapport; et comme les maps WDT chargent sensiblement plus vite que les ADT, je reteste dessus. Et là, je n'ai plus rien de géométrie.
Je revert à la commit où ça fonctionnait? Ça ne fonctionne plus...

p1Ci8M6l.png

Le pire, c'est qu'à coups de débuggeur, je vois très bien que le WMO est chargé en mémoire, et considéré comme dans le champ de vue de la caméra; simplement, il ne s'affiche pas.
Enfin, bon point: les PNJs apparaissent.

2

Y'a pas une histoire d'orientation des vertices ?

3

Le système de coordonnées interne de wow c'est de la merde (sans rire), chaque type de fichier est dans un système de coordonnées différent, et le système en jeu est orthonormé mais indirect: par rapport au direct, l'axe y est inversé.

Mais de toute façon avec ou sans orientation ça devrait dessiner...

4

QNxw0MBl.png

Ligne 109. Commentée, ça fonctionne. Décommentée, ça foire.

Ça me dépasse.

5

moi ce qui me dépasse c'est un moteur 3d en js.

6

(c#)

7

8

squalyl (./7) :
Huh?
(seconde ligne)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

10

./5 : http://threejs.org/ ? (moi ce qui me dépasse c'est cette constance à cracher sur des choses random, l'autre jour c'était zsh, aujourd'hui c'est js, demain quelle sera la techno que tu auras décidé de ne pas aimer ?)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

désolé hein mais j'ai jamais aimé js et c'est pas nouveau ^^

puis bon j'ai pas vraiment craché fort aussi embarrassed

12

Tout de même, le JS est pas le langage le plus approprié pour faire un moteur 3D ^^ (sauf si on n'a pas le choix, comme pour les applis Web)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

13

Y a, à ma connaissance, deux applications JS qui ont pour but d'émuler le moteur graphique de wow.

https://github.com/timkurvers/wowser
https://github.com/Deamon87/WebWoWViewer

14

Zeph (./10) :
./5 : http://threejs.org/ ? (moi ce qui me dépasse c'est cette constance à cracher sur des choses random, l'autre jour c'était zsh, aujourd'hui c'est js, demain quelle sera la techno que tu auras décidé de ne pas aimer ?)
surtout que JS c'est mieux qu'avant! JS de 2000 je dis pas, mais JS d'aujourd'hui ça fait des trucs très bien!
avatar
https://air-gaming.com/tests/ si vous voulez de la bonne lecture :=)

15

Ouais, ES6 a rendu le JS moins mal, et ES7 l'améliorera davantage. JS a souffert et souffre toujours de bases pas forcément saines, pendant longtemps (ce n'est plus le cas) d'une évolution trop lente, et d'une librairie standard trop restreinte.
Mais il reste encore quantité de pièges et bizarreries dans le langage, qui resteront d'ailleurs toujours pour des raisons de compatibilité, même si les analyseurs statiques peuvent signaler de plus en plus de choses. Un autre aspect désagréable est qu'essayer d'optimiser la vitesse d'exécution de code JS (hors asm.js / WebAssembly, je veux dire) est un peu la loterie...
La combinaison d'ES6, pour lequel tous les moteurs JS convenables ont maintenant une bonne couverture, et du fait que MS ne maintienne plus les vieux IE, est une bénédiction pour kicker les browsers obsolètes et d'une façon plus générale, les runtimes JS obsolètes (vieux Node.js qui sont de toute façon moins performants, etc.).

Mais on commence à être off-topic ^^
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.