2009-05-29 10 views
3

weiß jemand, wie man 3D-Oberflächen zeichnet und die unsichtbaren Linien versteckt?Wie zeichnet man 3D-Oberflächen und versteckt die unsichtbaren Linien?

Ich erinnere mich, etwas Code aus einem Apple II Buch zu lesen, und es war nur etwa 25 Zeilen in BASIC, und es könnte einige 3D-Oberflächen, wie ein Berg oder eine Form, die wie Wasserwellen aussieht. Die unsichtbaren Linien wurden zuerst gezeigt, aber nachdem einige Zeilen Code hinzugefügt wurden, sind auch die unsichtbaren Linien verschwunden.

Weiß jemand, wie man das macht oder kennt man dafür Ressourcen im Web?

+0

wirklich, kann es Punkte oder Linien sein ... ich in einigen Fällen denken, wurden die Punkte verbunden Bilden Sie die Linien –

Antwort

5

Das hängt ein wenig davon ab, wie Sie die Polygone zeichnen. Ich würde empfehlen, ein wenig über OpenGL oder DirectX zu lesen, da sie viele dieser Probleme für Sie lösen sollen. Wenn Sie sie nicht direkt verwenden möchten, gibt es bereits viele großartige Engines, die auf diesen APIs basieren.

Unter der Annahme, dass Sie gefüllt Polygone zeichnen (texturierte, fest usw.) sind hier ein paar gemeinsame Algorithmen könnten Sie verwenden:

  • sortieren die Polygone nach Entfernung von der Kamera und malen zuerst jene furtherest weg, ansonsten bekannt als Painters Algorithm. Diese Methode wurde von vielen alten 3D-Spielen wie dem klassischen Doom verwendet, das auch eine BSP Tree für eine effiziente Sortierung verwendete.

  • Speichern Sie die Entfernung von der Kamera zu jedem Pizel auf dem Bildschirm und zeichnen Sie nichts weiter weg, auch bekannt als Z-Buffering. Diese Methode wird von modernen 3D-Grafikkarten, OpenGL und DirectX gut unterstützt.

  • Verwenden Sie einen ray tracing Algorithmus, der die Oberflächenentfernung natürlich verdeckt hat.

+0

Yeah. Es macht Sinn, die Hardware zu benutzen, die wir haben. Der Code, über den der Fragesteller spricht, war das Zeichnen von Linien, aber keine gefüllten Polys. – Nosredna

+0

Die Frage beginnt mit "weiß jemand, wie man 3D-Flächen zeichnet".In jedem Fall ist es viel einfacher, schwarz gefüllte Polygone mit weißen Rändern zu verwenden, um die Linien zu fälschen, als zu versuchen, die Sichtbarkeit jeder Linie zu bestimmen. –

+0

Oh ja, ich stimme zu 100% zu. Aber wenn er nur versucht, das zu tun, was der Apple II getan hat (und was moderne Graphikrechner tun), ist es ziemlich einfach, das in ein paar Dutzend Zeilen auszudrücken. – Nosredna

3

Ich erinnere mich an dieses Buch. Wenn ich mich recht erinnere, waren das Oberflächenplots, und der Trick bestand darin, die Linien von vorne nach hinten zu zeichnen, wobei die Min- und Max-Y-Werte für jedes x aufgezeichnet wurden. Wahrscheinlich war die Linienschublade ein Bresenham, modifiziert, um die gezogenen Punkte zu überspringen, es sei denn, sie waren größer als max oder weniger als min.

Was ist schön an dem Algorithmus ist, dass Sie auch Kurven tun können. Nicht nur Liniensegmente. Wahrscheinlich war das Ripple-Bild eine Art Kombination von trigonometrischen Funktionen mit x und y als Parameter.

Ich kann diese Plots immer noch in meinem Kopf sehen. Ich würde gerne wissen, aus welchem ​​Buch das stammt.

2

Wenn Sie ein Dreiecksnetz zeichnen, dann sollten Sie tun Back-Face-Culling jedes Dreiecks, und ziehen Sie nicht die Kanten der Dreiecke, die eine Rück gerichtete Normal haben. Sie berechnen die Normale als das Kreuzprodukt zweier aufeinanderfolgender Kanten im Dreieck.

Wenn Sie nur den Umriss darstellen möchten, zeichnen Sie nur Kanten, die zwischen einem Dreieck mit einer nach vorne gerichteten Normalen und einem Dreieck mit einer nach hinten gerichteten Normalen liegen.

Oder Sie OpenGL verwenden, schalten Sie den Tiefenpuffer, und vergessen Sie all die zugrunde liegende Mathematik :-)

Verwandte Themen