CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Doom engine - Wikipédia

Doom engine

Un article de Wikipédia, l'encyclopédie libre.

Vous avez de nouveaux messages (diff ?).

Le Doom engine (moteur Doom) est un moteur de jeu qui permit de faire fonctionner les jeux Doom et Doom II de id Software. Il a aussi été utilisé sous licence par les jeux Hexen, Heretic, Strife et HacX, et d'autres jeux. Il a été créé par John Carmack, et certaines fonctions auxiliaires ont été écrites par Mike Abrash, John Romero, Dave Taylor et Paul Radek. Initialement développé sur les systèmes NeXT, il a été porté sous DOS pour la première version de Doom et a été porté ensuite sur un grand nombre de console et de système d'exploitation.

Le code source de la version Linux de Doom a été libéré en 1997 sous une licence permettant la libre utilisation non commerciale, puis a été de nouveau libéré en 1999 sous la licence publique générale GNU (GPL). La douzaine de ports non officiel des sources qui ont été créé depuis, ont permis de faire fonctionner le jeu sur des systèmes d'exploitation jusqu'alors incompatibles avec le jeu, et dans certaine cas on permis d'étendre les capacités du moteur en ajoutant de nouvelle fonction.

Ce n'est pas un vrais moteur 3D, car il n'est pas possible de d'incliner le champ de vision en haut ou en bas, et deux pièces ne peuvent pas se trouver l'une en dessous de l'autre, mais c'est une architecture logiciel assez élégante qui permet de faire du pseudo rendu 3D. Lors de son développement, Doom était révolutionnaire pour sa capacité à faire rapidement des projections de textures dans un environnement 3D.

Sommaire

[modifier] Structure des niveaux

En y regardant de plus près, tous les niveaux de Doom sont en 2 dimensions, démontrant l'une des principales limitations du Doom engine : il n'est pas possible de créer des salles les une en dessous des autres. Cette limitation permet toutefois de faciliter l'affichage de niveau sous forme de carte, représentant les murs par des lignes et le personnage de dessus.

[modifier] Éléments de base

L'élément de base est le sommet (vertex), qui représente un point en deux dimensions. Les sommets sont reliés pour former des lignes (linedefs). Chaque ligne peut avoir un ou deux cotés (connu sous le nom de sidedefs). Les sidedefs sont enfin groupés ensemble pour former des polygones (appelé sector ; secteur). Un secteur est une zone particulière d'un niveau.

[modifier] Secteurs

Chaque secteur contient un ensemble de propriété : comme une hauteur de plancher et de plafond ainsi qu'une texture pour le plancher et pour le plafond.

[modifier] Sidedefs

[modifier] Things

[modifier] Subdivision binaire de l'espace

Doom utilise une technique connue sous le nom de partition binaire de l'espace (plus connu sous le nom de binary space partitioning ou BSP). Un outil est utilisé pour convertir un niveau en arbre BSP, les niveaux bruts ne sont pas intégrés dans le jeu. Selon la taille du niveau, le processus peut prendre un temps important. C'est pour cette raison qu'il n’est pas possible de déplacer des murs dans Doom ; alors que des portes ou des ascenseurs se déplacent de haut en bas jamais aucun ne se déplace sur le coté.

Un niveau est divisé en arbre binaire : chaque position de l'arbre est un nœud qui représente une zone particulière du niveau (la racine représente par exemple l'ensemble du niveau). À chaque branche de l'arbre représente une ligne de division séparent l'espace en deux. En même temps, cette ligne de division peut couper les murs (linedefs) en sous-segments (segs).

Les feuilles de l'arbre représente des polygones convexes, et il n'est pas utile de diviser plus encore la zone. Ces polygones convexes sont référés sous le nom de sous-secteur (ou SSECTORS), et sont lié a un secteur particulier. Chaque sous-secteur possède une liste de segs qui lui est associé.

Le système BSP est vraiment une manière très intelligente de structurer les sous-secteurs pour qu'ils soit bien ordonné pour le rendu graphique. L'algorithme devient assez simple :

  1. Commencer au nœud racine.
  2. Traiter les nœuds fils de ce nœud de manière récursive. Les nœuds les plus proche de l'observateur étant traité en premier. Cette information peut être trouvé en regardant de quel coté de la ligne de division l'observateur se trouve.
  3. Lorsque un sous-secteur est atteint, le dessiner.

Le processus est terminé lorsque la colonne entière des pixels est remplie (c'est-à-dire lorsqu'il n'y plus de trou). Cet ordre de traitement assure qu'aucun temps n'est gaspillé pour dessiner des objets qui ne sont pas visibles et en conséquence les niveaux peuvent devenir très grandes sans qu'il n'y ait vraiment de pénalité de vitesse.

[modifier] Rendu

A l'époque les ordinateurs n'étaient pas assez performants pour rendre de la vraie 3d. Doom utilisait un moteur de fausse 3d: la camera ne peut jamais tourner vers le haut ou vers le bas, et le terrain est codé en analysé en 2d, ce qui reduit considérablement les calculs.

[modifier] Dessin des murs

Les murs sont rendus avec la technique du Raycasting, utilisée aussi pour wolfenstein 3d. Elle consiste à tracer des tranches verticales de texture à hauteur variable pour donner l'illusion des murs.

[modifier] Plancher et plafond

Les planchers et plafonds sont rendus avec une méthode similaire: le Z-Mapping, également utilisé dans des jeux comme mariokart, et qui fonctionne avec des tranches de texture horizontales.

[modifier] Objet (sprites)

Chaque secteur du niveau possède une liste chaînée représentant les objets (things) s'y trouvant. Pendant la phase de rendu des secteurs, les objets sont placé dans la file d'attende pour être affichés. Ceux qui ne sont pas dans le champ de vision sont ignorés.

Les bords des sprites sont coupés en vérifiant la liste des segments déjà dessinés. Les sprites dans Doom sont stockés avec le même format que celui utilisé pour les murs, de tel sorte qu'il est très facile pour de moteur de rendu de les afficher : les mêmes fonctions qui sont utilisés pour afficher des murs sont employées pour dessiner des sprites.

Alors que les sous secteurs garantisse d’être déjà triés, les sprites ne le sont pas. Doom stocke une liste de sprites à afficher (vissprites) et trie cette liste juste avant le rendu. Ainsi les sprites les plus en retrais sont affichés avant ceux qui se trouvent plus proche du champ de vision. Ceci génère des recouvrements — que l'on peut considérer comme un traitement non optimal — mais qui sont habituellement négligeables sur le temps de traitement.

Enfin, les textures utilisé sur les deux cotés d'un mur et recourant à la transparence sont affichés en même temps que les sprites à la fin du processus de rendu plutôt qu'avec les autres murs.

[modifier] Voir aussi

[modifier] Références

Série Doom
Doom - Doom II - Doom 3 - Doom (film)

Doom engine - Doom 3 engine

Portail du jeu vidéo – Accédez aux articles de Wikipédia concernant le jeu vidéo.
Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com