| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
| frustrum clipping
Hi hallo, ich will eine simple Sache in 3D machen und das ohne Einsatz einer engine. Ich hab das Problem mal im Anhang aufgezeichnet. Ich denke das ist etwas anschaulicher. Es geht darum, dass Ebenen am viewing-Frustrum (Sichtfeld) der kamera geclippt werden, aber dadurch leerflächen im projektions-screen entstehen, wo sie eigentlich nicht sein sollten. Kleines Beispiel: die Kamera befindet sich knapp über eine Ebene, die parellel zur z-Achse liegt. In positiver z-Richtung verschwindet diese Ebene im Fluchtpunkt. Der Teil der Ebene, der sich außerhalb des Sichtfeldes der Kamera befindet ( z.B. hinter der Kamera oder direkt unter der Kamera) muss geclippt werden. Ich berechne also den Schnittpunkt dieser Ebene mit dem Frustrum, damit ich nur den sichtbaren Bereich rendere. In dem Fall schneidet die Ebene die near-clipping-plane. Wenn die Ebene nun an dieser Stelle abgeschnitten wird, entsteht im Sichtfeld eine Freifläche, die doch nach meinem optischen Empfinden auch durch die Ebene gefüllt sein müßte. Hmmm..., ich denke durch den Anhang wird das Problem noch etwas deutlicher. Ein frustrum: |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
|
Nochmal darüber nachgedacht. Es ist natürlich korrekt so. Wenn die Ebene auf mittlerer Höhe vor dem "Auge" liegt, kann man natürlich unter sie schauen. Man muss entsprechend dafür sorgen, dass man bestimmte Abstände einhält.
|
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
|
Hallo Wakka, die plane hatte die Maße 800px X 600px und war 300px vor der kamera positioniert. Mit diesen Werten spiele ich aber auch permanent rum. Der Effekt mußte auftreten, da sich die Kamera in einem Gang befindet (der durch vier Ebenen begrenzt wird, rechts - links -oben - unten) der auch nur 800px hoch und 600px breit war. Ich habe die Größe der plane sehr stark reduziert. Nun tritt das Artefakt immer noch auf, aber es ist anderer Herkunft. Wenn die berechnten clippingpoints auf unterschiedlichen Frustrumsbegrenzungsebenen sind, wird die Ecke, bzw. 2 Ecken einfach abgeschnitten. Ich habs nochmal aufgemalt (siehe Anhang). Das muss man beim clippen oder später beim rendern irgendwie beachten. Zu dem Thema konnte ich bisher nichts finden im Internet. |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: May 2008
Beiträge: 109
|
Hallo Flashesjetzt, nach welcher Methode clippst du denn die Plane im Frustum, Sutherland-Hodgman? Ich habe jetzt nicht die Ahnung von den Möglichkeiten des nativen 3D, können Polygone mit mehr als vier Punkten definiert werden? |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
|
Ja den Algorythmus benutze ich. Möglicherweise nicht ganz schulbuchmäßig, ich habe mir das aus 2-3 sourcecodes (Tutorial 4: Clipping , 3D Clipping to an arbitrary FOV - C++ Programming Tutorials, http://www.cubic.org/docs/3dclip.htm) zusammengeschustert. Anschauliches applet: Cohen-Sutherland Clipping applet Ich iteriere durch alle vertexe eines polygons und nehme zwei aufeinanderfolgende Eckpunkte: vertex 1 und vertex 2. Ich berechne für beide vertexe alle Distanzen zu den Frustrumsebenen. Liegen beide drinnen wird abgebrochen und der vertex 1 dem output-array hinzugefügt. Liegen beide außerhalb wird geprüft, ob beide auf derselben Seite außerhalb liegen, wenn ja wird abgebrochen, wenn nein wird ähnlich verfahren wie im weiteren Fall. Liegt vertex 1 im sichtbaren und vertex 2 im nicht sichtbaren Bereich, dann clippe ich nach und nach zur z-near eben zur linken und rechten Frustrumsebene und zuletzt zur Boden und Deckenebene des Frustrums. Falls geclippt wurde, berechne ich zwischendurch die Distanz zu den anderen Ebenen neu. Ich habe in den oben verlinkten Beispielen, kein Hinweis gefunden, dass ein Polygon auf eine bestimme Anzahl von Ecken begrenzt ist. Ich weiss es nicht. Das Problem wird gar nicht angesprochen. Genauso wie das Problem, wenn die Kamera so nah an eine Ebene kommt, dass die Ebene zwar noch im Frustrum liegt, aber alle vertexe außerhalb des frustrums. Das Problem tritt allerdings nur auf, wenn man sehr grosse Ebenen bzw. Polygone hat. |
| | |
| | #7 (permalink) | |
| Neuer User Registriert seit: May 2008
Beiträge: 109
|
Generell ist die Anzahl eines Polygons nicht begrenzt, auch nicht beim clipping. Wenn die Ebene im Frustum, die Vertices aber ausserhalb sind stellt dies fürs clipping auch kein Problem dar. Zitat:
| |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
|
Entschuldige, ich wollte damit sagen, dass ich nach und nach zu den frustrumsebenen clippe. Erst zur nearPlane, dann zu den Frustumsebenen links und rechts und dann zu Ebenen oben und unten. Der code ist etwas redundant. Anstatt wie beim clipping-vorgang üblich, habe ich keine while-Schleife, die die flags überprüft. Ich clippe erst zur nearplane (oder zplane, also die plane die alles abschneidet, was sich hinter ihr befindet.) Falls geclippt wurde, berechne ich die Distanzen neu für den nächsten möglichen clipping-vorgang. Hm naja, ist vermutlich nicht sonderlich gelungen. PHP-Code: Geändert von Flashesjetzt (23-07-2011 um 21:13 Uhr) |
| | |
| | #9 (permalink) | |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
| Zitat:
Ach, ich habe nach dem Cohen Sutherland Alogorithmus geclippt. Der Sutherland-Hodgman ist ja u.a. dazu gedacht um dieses Problem ein Polygon um die Ecke zu clippen, zu lösen. Na jetzt habe ich es, denke ich. | |
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Aug 2008
Beiträge: 205
|
So klappts: PHP-Code: |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Flash CS3] MovieClip: Clipping | Firemice | Flash Einsteiger | 1 | 04-05-2010 00:18 |
| Clipping Probleme | e-anima | 3D | 4 | 14-10-2009 08:10 |
| png-Clipping? | thomas_as | Flash 8 | 2 | 03-01-2006 10:38 |
| Clipping | rmasterb | Spielkonzepte und Spieleprogrammierung | 4 | 16-06-2005 06:03 |
| div clipping per js? | #exec | HTML und CSS | 2 | 03-12-2003 17:52 |