2009-05-29 7 views
3

Est-ce que quelqu'un sait comment dessiner des surfaces 3D et cacher les lignes invisibles? Je me souviens d'avoir lu du code d'un livre Apple II, et il ne contenait que 25 lignes dans BASIC, et il pouvait tracer des surfaces 3D, comme une montagne ou une forme ressemblant à des ondulations d'eau. Les lignes invisibles ont d'abord été montrées, mais après avoir ajouté quelques lignes de code, les lignes invisibles sont parties aussi.comment dessiner des surfaces 3D et masquer les lignes invisibles?

Est-ce que quelqu'un sait comment faire ou sait des ressources sur le Web pour ce faire?

+0

En fait, il peut être des points ou des lignes ... Je pense que dans certains cas, les points ont été connectés à former les lignes –

Répondre

5

Cela dépend un peu de la façon dont vous dessinez les polygones. Je recommande de lire un peu sur OpenGL ou DirectX car ils sont conçus pour résoudre un grand nombre de ces problèmes pour vous. Si vous ne voulez pas les utiliser directement, il existe déjà beaucoup de bons moteurs construits sur ces API.

En supposant que vous dessinez des polygones remplis (texture, etc solide), voici quelques algorithmes communs vous pouvez utiliser:

  • Trier les polygones par la distance de la caméra et de la peinture les furtherest loin d'abord, connu sous le nom de Painters Algorithm. Cette méthode a été utilisée par de nombreux vieux jeux 3D comme le Doom classique qui utilisait également un BSP Tree pour un tri efficace.

  • Stockez la distance la plus proche de l'appareil photo dans chaque pizel sur l'écran et ne dessinez rien plus loin, également connu sous le nom Z-Buffering. Cette méthode est bien supportée par les cartes vidéo 3D modernes, OpenGL et DirectX.

  • Utilisez un algorithme ray tracing qui a naturellement un retrait de surface caché.

+0

Ouais. Il est logique d'utiliser le matériel que nous avons. Le code dont parle le questionneur était en train de dessiner des lignes, mais pas des polys remplis. – Nosredna

+0

La question commence par «quelqu'un sait comment dessiner des surfaces 3D».D'une manière ou d'une autre, utiliser des polygones remplis de noir avec des bordures blanches pour truquer les lignes sera beaucoup plus facile que d'essayer de déterminer la visibilité de chaque ligne. –

+0

Oh oui, je suis d'accord à 100%. Mais s'il cherche à faire ce que l'Apple II a fait (et ce que font les calculatrices graphiques modernes), il est assez facile de le faire en quelques dizaines de lignes. – Nosredna

3

Je me souviens de ce livre. Si je me souviens bien, il s'agissait de parcelles de surface, et l'astuce utilisée était de tracer les lignes d'avant en arrière, en gardant une trace des min et max y tracés pour chaque x. Probablement le tiroir de ligne était un Bresenham, modifié pour sauter les points tirés à moins qu'ils ne soient supérieurs à max ou inférieurs à min.

Ce qui est bien avec l'algorithme, c'est que vous pouvez aussi faire des courbes. Pas seulement les segments de ligne. Probablement l'image d'ondulation était une sorte de combinaison de fonctions trig avec x et y comme paramètres.

Je peux encore voir ces parcelles dans ma tête. J'adorerais savoir de quel livre il s'agissait.

2

Si vous tracez un maillage triangulaire, alors vous devriez faire face culling arrière de chaque triangle, et ne pas tirer les bords des triangles qui ont un dos face à la normale. Vous calculez la normale comme le produit croisé de deux arêtes successives dans le triangle.

Si vous ne voulez tracer que le contour, vous tracez uniquement les arêtes qui se trouvent entre un triangle avec une face orientée vers l'avant et un triangle avec une face tournée vers l'arrière.

Ou vous utilisez OpenGL, mettez le tampon de profondeur, et oublier toutes les mathématiques sous-jacentes :-)

Questions connexes