Graphique de scène
Un scène-graphique est une structure de données générale utilisée généralement par les graphiques vecteur-basés par éditant des applications de et des jeux d'ordinateur modernes. Les exemples de tels programmes incluent le AutoCAD , l'illustrateur d'Adobe de et le CorelDRAW .
Le scène-graphique est une structure qui arrange le logique et souvent (mais pas nécessairement) représentation spatiale d'une scène graphique. La définition d'un scène-graphique est brouillée, étant donné que les programmeurs qui mettent en application des scène-graphiques dans les applications et en particulier l'industrie de jeux prennent les principes de base et adaptent ces derniers pour adapter à une application particulière. Ceci signifie qu'il n'y a aucune règle dure et rapide quant à quel scène-graphique devrait ou ne devrait pas être.
les Scène-graphiques sont une collection de noeuds dans un graphique ou la structure arborescente. Un noeud peut avoir beaucoup d'enfants mais souvent seulement un parent simple, avec l'effet d'un parent évident à tous ses noeuds d'enfant ; une opération s'est appliquée à un groupe propage automatiquement son effet à tous ses membres. Dans beaucoup de programmes, l'association d'une matrice géométrique de transformation de (voir également la transformation et la matrice ) à chaque niveau de groupe et la concaténation de telles matrices est ensemble une manière efficace et normale de traiter de telles opérations. Un dispositif commun, par exemple, est la capacité de grouper des formes/objets relatifs dans un objet composé qui peut alors être déplacé, transformé, choisi, etc. aussi facilement comme objet simple.
Scène-graphiques dans les graphiques éditant des outils
Dans les graphiques vecteur-basés éditant, chaque noeud dans un graphique de scène représente une certaine unité atomique du document, habituellement une forme telle qu'une ellipse ou le chemin de Bezier de . Bien que les formes elles-mêmes (en particulier des chemins) puissent être décomposées plus loin en noeuds tels que les noeuds de cannelure de , il est pratique pour penser au graphique de scène comme composé de formes plutôt qu'allant à un niveau plus bas de représentation.Un autre concept utile et déterminé par l'utilisateur de noeud est la couche. Une couche agit comme une feuille transparente sur laquelle tout nombre de formes et de groupes de forme peut être placé. Le document en devient alors un ensemble de couches, dont peut être commodément rendu invisible, obscurci, et/ou verrouillé (rendu inaltérable). Quelques applications placent toutes les couches dans une liste linéaire tandis que d'autres soutiennent les couches inférieures (c., couches dans des couches, à toute profondeur désirée).
Intérieurement, il ne peut y avoir aucune vraie différence structurale entre les couches et les groupes du tout, puisqu'ils sont les deux scenegraphs nichés justes. Si les différences sont nécessaires, un type commun déclaration dans le C++ serait de faire une classe générique de scenegraph, et puis dérive des couches et des groupes comme sous-classes. Un membre de visibilité, par exemple, serait un dispositif d'une couche mais pas nécessairement d'un groupe.
Scène-graphiques dans les jeux et les applications 3D
Les graphiques de scène sont idéaux pour les jeux modernes using les graphiques 3D et les mondes ou les niveaux de plus en plus grands. Dans de telles applications, les noeuds dans un scène-graphique (généralement) représentent des entités ou des objets dans la scène.Par exemple, un jeu pourrait définir un rapport logique entre un chevalier et un cheval de sorte que le chevalier soit considéré une prolongation au cheval. Le graphique de scène aurait un noeud de « cheval » avec un noeud de « chevalier » attaché à lui.
Aussi bien que décrire le rapport logique, le scène-graphique peut également décrire le rapport spatial des diverses entités : le chevalier se déplace par l'espace 3D pendant que le cheval se déplace.
Dans ces grandes applications, les conditions de mémoire sont des considérations importantes en concevant un scène-graphique. Pour cette raison beaucoup de grands systèmes de scène-graphique emploient l'illustration pour réduire des coûts de mémoire et pour augmenter la vitesse. Dans notre exemple ci-dessus, chaque chevalier est un noeud séparé de scène, mais la représentation graphique du chevalier (composé d'une maille 3D, des textures, des matériaux et des shaders) est citée. Ceci signifie que seulement une copie simple des données est gardée, qui sont alors mises en référence par tous les noeuds de « chevalier » dans le scène-graphique. Ceci permet un budget réduit de mémoire et a augmenté la vitesse, depuis quand un nouveau noeud de chevalier est créé, les données d'aspect n'a pas besoin d'être reproduit.
exécution de Scène-graphique
La forme la plus simple de graphique de scène emploie une rangée ou la structure de données de de la liste chaînée , et le déploiement de ses formes est simplement une question de réitérer linéairement les noeuds un. D'autres opérations communes, telles que la vérification pour voir le que la forme intersecte l'indicateur de souris (par exemple, dans un GUI - applications basées de ) sont également faites par l'intermédiaire des recherches linéaires. Pour de petits scenegraphs, ceci tend à suffire.De plus grands scenegraphs font devenir des opérations linéaires sensiblement lentes et des structures de données fondamentales plus complexes sont employées ainsi, être le plus populaire un arbre . C'est la forme la plus commune de scène-graphique. Dans ces scène-graphiques le modèle de conception composée est souvent utilisé pour créer la représentation hiérarchique des groupe-noeuds et des feuille-noeuds.
les noeuds de groupe de de - peuvent avoir tout nombre de noeuds d'enfant attachés à lui. Les noeuds de groupe incluent des transformations et commutent des noeuds.
les noeuds de feuille de de - sont les noeuds qui sont rendus ou voient réellement l'effet d'une opération. Ceux-ci incluent les objets, les sprites, les bruits, les lumières et tout ce qui pourraient être considérés « rendue » dans un certain sens abstrait.
opérations et expédition de Scène-graphique
Afin de s'appliquer une opération à un scène-graphique, une certaine manière d'expédier une opération basée sur quel noeud actuellement est considéré est nécessaire. Par exemple dans une opération de rendu un groupe-noeud de transformation ne ferait rien davantage qu'accumulent sa transformation (généralement c'est multiplication de matrice mais pourrait comporter des opérations avec le déplacement de vecteur et le Quaternions ou les angles d'Euler de à la place). Considérant qu'un feuille-noeud d'objet enverrait l'objet pour rendre au renderer (quelques réalisations pourraient rendre l'objet directement mais ceci peut intégrer le rendu fondamental api - par exemple OpenGL ou DirectX trop étroitement et rigidement - il est meilleure de séparer les systèmes de scène-graphique et de renderer pendant que ceci favorise le bon modèle et l'extensibilité d'OOP).Afin d'expédier différemment pour différents types de noeud plusieurs différentes approches peuvent être adoptées, chacune a le pour - et - des escroqueries et est largement contestée parmi l'argumentation de programmeurs ce qui est la meilleure.
Dans des langages de type objet tels que le C++ ceci peut facilement être réalisé par les fonctions virtuelles , le noeud de la classe que basse a des fonctions virtuelles pour chaque opération qui peut être effectuée sur les noeuds. C'est simple pour faire mais empêcher l'addition de nouvelles opérations par d'autres programmeurs qui n'ont pas accès à la source.
Alternativement le modèle de visiteur de de peut être employé - c'est des fonctions relativement simples et plus rapidement que virtuelles où l'opération exécuter est décidée par l'expédition multiple. Ceci a un inconvénient semblable parce qu'il est pareillement difficile d'ajouter de nouveaux types de noeud.
D'autres techniques comportent l'utilisation de RTTI (type d'exécution l'information ). L'opération peut être réalisée comme classe qui est passée au noeud courant, il alors questionne le type de noeuds (RTTI) et recherche l'opération correcte dans une rangée de rappels de service ou de functors. Ceci exige que l'initialisation les functors/rappels de service homme-machine de registres avec les différentes opérations ainsi eux peuvent être regardés vers le haut dans la rangée. Ce système offre la flexibilité, la vitesse et l'extensibilité massives de nouveaux noeuds et opérations.
Les variations sur ces techniques existent et les nouvelles méthodes peuvent offrir ont ajouté des avantages - une alternative est scène-graphique reconstruisant où le scène-graphique est reconstruit pour chacune des opérations effectuées, ceci cependant peut être très lente mais produit un scène-graphique fortement optimisé. Ceci démontre qu'une bonne exécution de scène-graphique dépend largement de l'application dans laquelle elle est employée.
Traversals
Les Traversals sont la clef à la puissance de s'appliquer des opérations aux scène-graphiques. Un traversal se compose généralement commencer à un certain noeud arbitraire (souvent la racine du scène-graphique), appliquant les opérations souvent la mise à jour et les opérations d'équarrissage sont les appliquées après l'autre, et périodiquement abaissant le scène-graphique (arbre) aux noeuds d'enfant, jusqu'à ce qu'un noeud de feuille soit atteint. En ce moment beaucoup de scène-graphiques traversent alors le support l'arbre appliquant probablement une opération semblable. Comme exemple - rendu : Tout en périodiquement traversant en bas de la hiérarchie de scène-graphique les opérations applique une opération de PreRender, une fois qu'atteignant un noeud de feuille il commencent à traverser le support l'arbre appliquant une opération de PostRender - ceci permet bien à certaine poussée de noeuds un état pour des noeuds d'enfant et saute l'état après.Quelques opérations de scène-graphique sont réellement plus efficaces quand des noeuds sont traversés dans un ordre différent - c'est où quelques systèmes mettent en application le scène-graphique reconstruisant pour commander à nouveau le scène-graphique dans un plus facile d'analyser le format ou l'arbre.
Par exemple :
Dans les 2D cas, les scenegraphs se rendent typiquement en commençant au noeud de racine de l'arbre et puis en dessinant périodiquement les noeuds d'enfant. Les feuilles de l'arbre représentent les la plupart des objets de premier plan. Puisque le dessin procède à partir de nouveau à l'avant avec des objets plus étroits recouvrant simplement plus loin ceux, le processus est connu en tant qu'utilisation de l'algorithme du peintre de . Dans les systèmes 3D, qui utilisent souvent les amortisseurs de profondeur de il est plus efficace de dessiner les objets les plus étroits d'abord, puisque des objets plus lointains doivent souvent seulement profondeur-être examinés au lieu réellement de rendre, parce qu'ils sont occlus par des objets plus proches.
hiérarchies de Scène-graphique et de volume de bondissement (BVHs)
Les hiérarchies de volume de bondissement (BVHs) sont utiles pour de nombreuses tâches - comprenant la détection de collision de cueillage et de accélération efficace entre les objets. Un BVH est une structure spatiale mais ne doit pas diviser la géométrie (voir la division spatiale, ci-dessous).Un BVH est un arbre des volumes de bondissement (souvent sphères, des boîtes de bondissement axe-alignées ou/et des boîtes de bondissement orientées). Au fond de la hiérarchie la taille du volume est juste assez grande pour entourer un objet simple étroitement (ou probablement même une certaine plus petite fraction d'un objet dans BVHs de haute résolution), car vous marchez vers le haut de la hiérarchie que chaque noeud a son propre volume qui entoure étroitement tous les volumes sous lui. À la racine de l'arbre est un volume qui entoure tous les volumes dans l'arbre (la scène entière).
BVHs sont utile pour accélérer la détection de collision entre les objets. Si le volume de bondissement d'un objet n'intersecte pas un volume plus haut dans l'arbre puis il ne peut intersecter aucun objet au-dessous de ce noeud (ainsi elles tous sont rejetés très rapidement).
Évidemment il y a quelques similitudes entre BVHs et scène-graphiques. Un scène-graphique peut facilement être adapté pour inclure/devient un BVH - si chaque noeud a un volume associé ou il y a sur mesure « bondissent le noeud » supplémentaire dedans à l'endroit commode dans la hiérarchie. Ceci ne peut pas être la vue typique du scène-graphique mais il y a des avantages à inclure un BVH dans un scène-graphique.
Scène-graphiques et division spatiale
Une façon efficace de combiner le de division spatial et les scène-graphiques est en créant un noeud de feuille de scène qui contient les données de division spatiales - ces données sont habituellement charge statique et contiennent généralement des données de niveau non-moving sous une certaine forme divisée. Quelques systèmes peuvent avoir les systèmes séparés et les rendre séparément, c'est très bien et il n'y a aucun vrai avantage à l'une ou l'autre méthode. En particulier il est mauvais pour avoir le scène-graphique contenu dans le système de division spatial, ceci est parce que le scène-graphique est une meilleure pensée de comme système plus grand à la division spatiale.
Quand il est utile de les combiner
En bref : La division spatiale/devrait considérablement accélérer la période de traitement et de rendu du scène-graphique.Les schémas très grands, ou les graphiques de scène qui sont produits seulement au temps d'exécution (comme se produit dans des programmes de rendu de lancer de rayon ), exigent la définition des noeuds de groupe d'une mode plus automatisée. Un raytracer, par exemple, prendra une description de scène d'un modèle du 3D et établira une représentation interne qui divise vers le haut ses différentes pièces en boîtes de bondissement (également appelées les galettes de bondissement). Ces boîtes sont groupées hiérarchiquement de sorte que des essais d'intersection de rayon (en tant qu'élément de la détermination de visibilité) puissent être efficacement calculés. Une boîte de groupe qui n'intersecte pas un rayon d'oeil, par exemple, peut entièrement sauter devoir examiner n'importe lequel de ses membres.
Une efficacité semblable se tient dans les 2D applications aussi bien. Si l'utilisateur a magnifié un document de sorte que seulement une partie de elle soit évidente sur son écran d'ordinateur, et puis rouleaux disait le document, il est utile d'utiliser une boîte de bondissement (ou dans ce cas-ci, un arrangement de bondissement de rectangle) pour déterminer rapidement quels éléments de scenegraph sont évidents et pour devoir ainsi réellement être dessiné.
Selon les conditions particulières de l'exécution du schéma de l'application, une grande partie de la conception des scenegraph peut être effectuée en rendant des considérations d'efficacité. En jeux vidéo 3D tels que le tremblement , par exemple, l'espace binaire de de divisant des arbres de (BSP) sont fortement favorisés pour réduire au minimum des essais de visibilité. Les arbres de BSP, cependant, prennent un moment très bon de calculer des scenegraphs de conception, et doivent recomputed si les changements de scenegraph de conception ainsi les niveaux tendent à demeurer statiques et des caractères dynamiques ne sont pas généralement considérés dans l'arrangement de division spatial.
Scenegraphs pour les objets réguliers denses tels que le Heightfields et mailles de polygone tendent à utiliser le Quadtrees et le Octrees qui sont des variantes spécialisées d'une hiérarchie de boîte de bondissement 3D. Puisqu'un heightfield occupe un volume de boîte lui-même, périodiquement la subdivision de cette boîte en huit subboxes (par conséquent « oct. » dans l'octree) jusqu'à ce que différents éléments de heightfield soient atteints est efficace et normale. Un quadtree est simplement un 2D octree.
PHIGS
PHIGS était les premières spécifications commerciales de scène-graphique, et est devenu une norme de norme ANSI en 1988. Des réalisations disparates ont été fournies par des fournisseurs de matériel d'Unix. Le " ; Graphiques System" des CERCLES 3D ; semble avoir été la première bibliothèque commerciale de graphique de scène fournie par un fournisseur de logiciel simple. Elle a été conçue pour fonctionner sur la 2D et les interfaces 3D plus basses disparates, avec le premier modèle de série de commandant (v3. Sous peu ensuite, Silicon Graphics a libéré l'inventeur 1.0 (1992) d'IRIS, qui était un scène-graphique établi sur l'IRIS GL 3D api. Il a été continué avec l'inventeur ouvert en 1994, un graphique portatif de scène établi sur OpenGL. Plus de bibliothèques du scenegraph 3D peuvent être trouvées dans le : Catégorie : api de 3D Scenegraph.
Voir également
Théorie de graphique Graphique de (structure de données)
Arbre de (structure de données)
L'espace de divisant
.
| Random links: | Washington, comté de porte, le Wisconsin | Henry G. Shirley | Corps nationaux de cadet (Singapour) | Traqueur de Scat | Cantilena | Gráfico_de_la_escena |