Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 06:17

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 13:25 
Offline
DGL Member

Registriert: So Sep 11, 2005 16:18
Beiträge: 9
LarsMiddendorf hat geschrieben:
Ich würde Quads benutzen, weil die leichter zu kontrollieren sind. Man zeichnet es einfach an die gewünschte Position, während man beim Punkt noch die verschiedenen Parameter für Größe und Abnahme der Größe usw... alles einstellen muß.


Bei Quads habe ich zum einen den Nachteil dass ich 4 Vertices an die Graphikkarte übertragen muss und zum anderen den Nachteil dass ich für jeden Punkt die Vertices berechnen muss.
Ich habe ja eine Bounding Box, in deren Mittelpunkt ich das Quad zeichnen möchte. Die Bounding Box hat eine Normale gespeichert um die Schattierung zu ermöglichen.
Nur: wie berechne ich die 4 Eckpunkte des Quads anhand der Normale? Wenn ich schon 4 Vertices übertragen muss, dann sollte das entstehende Quad senkrecht auf der Normalen stehen und durch den Mittelpunkt der Box gehen.
Wenn ich eine Formel dafür hätte könnte ich überlegen anstelle der GL_POINTs Quads zu nehmen, da dann der Nachteil der 4 Vertices durch den Vorteil einer exakteren Darstellung aufgewogen wäre.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 14:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
johnd hat geschrieben:
Die Bounding Box hat eine Normale gespeichert um die Schattierung zu ermöglichen.

Wie muss man das verstehen?
Eine Box sollte doch 6 Normalen haben?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 14:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
eventuell würde es auch helfen, wenn du mal erklären könntest, was in etwa du darstellen willst :-)

nen obstsalat auß ner großküche, ne großstadt von oben für ne flugsimulation oder ne Massenkarambulage auf der A7 oder...

Wenn du da viele Statische sachen hast kanste die ja prima in ner vbo ablegen und musst sie nur 1 mal berechnen. dann ist das eventuell schneller als punkte, da deine cpu dann gar nix mehr zu tun hat...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 15:27 
Offline
DGL Member

Registriert: So Sep 11, 2005 16:18
Beiträge: 9
Flash hat geschrieben:
johnd hat geschrieben:
Die Bounding Box hat eine Normale gespeichert um die Schattierung zu ermöglichen.

Wie muss man das verstehen?
Eine Box sollte doch 6 Normalen haben?


geo hat geschrieben:
eventuell würde es auch helfen, wenn du mal erklären könntest, was in etwa du darstellen willst :-)

nen obstsalat auß ner großküche, ne großstadt von oben für ne flugsimulation oder ne Massenkarambulage auf der A7 oder...

Wenn du da viele Statische sachen hast kanste die ja prima in ner vbo ablegen und musst sie nur 1 mal berechnen. dann ist das eventuell schneller als punkte, da deine cpu dann gar nix mehr zu tun hat...


*g* sorry, das klingt bestimmt total komisch was ich hier erzähle, aber es hat schon seinen Sinn.
Also, viele Dreiecke werden zusammengefasst und in eine Box gesteckt. Dabei wird die gemittelte Normale aller Dreieckspunkte berechnet. So kann ich später anstelle der vielen Dreiecke einen schattierten GL_POINT (oder meinetwegen zur not auch ein Quad) darstellen wenn der Betrachter weit genug vom Objekt entfernt ist um den Unterschied nicht zu bemerken. Ziel der Aktion ist es, nachher eine Szene mit -zig-Millionen Dreiecken (oder Punkten) in echtzeit darstellen zu können. Das klappt auch soweit recht gut, deshalb habe ich nicht direkt erklärt was ich machen möchte, weil es eigentlich irrelevant ist, da ich nur
1. die größe der projizierten Boxen berechnen muss um zu erkennen ob ich die Dreiecke zeichnen muß oder einen Punkt (deshalb bracuhe ich die projizierte größe auf jeden Fall),
2.a) entweder die glPointSize auf diesen Wert setzen muss oder
2.b) ein GL_QUAD zeichnen muss, dass senkrecht auf der gespeicherten Normale im Zentrum der Box steht oder
2.c) die Dreiecke zeichnen muss.

Ich habe es bereits implementiert, aber die Darstellung der Punkte funktioniert momentan eben nicht so richtig, weil ich die Größe wohl falsch berechne.
Zudem habe ich den Part mit den Quads nicht implementiert weil mir das bisher als unsinnig erschien, aber wie hier bereits richtig festgestellt wurde würde sich damit das Problem der skalier zwar nicht lösen aber keine Grafikfehler erzeugen und zum anderen ist die Darstellung der Quads natürlich genauer. Allerdings weiss ich momentan nicht wie ich aus "Koordinaten der Bounding Box" + Normale 4 Punkte berechne die ein Quad malen dass in der Box liegt, durch das Zentrum geht und senkrecht auf der Normalen steht (siehe Anhang).


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Zuletzt geändert von johnd am Mo Sep 12, 2005 15:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 15:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Guck mal ins WIki unter Billboard. Das könnte dir helfen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 15:49 
Offline
DGL Member

Registriert: So Sep 11, 2005 16:18
Beiträge: 9
Flash hat geschrieben:
Guck mal ins WIki unter Billboard. Das könnte dir helfen.


Nee, Billboard ist ja eigentlich das was ich NICHT will (oder hab ich da was übersehen?). Das macht ein GL_POINT zwar automatisch, aber dafür hat der Point den Vorteil dass ich nur ein Vertex an die graka schicken muss (ist also schnell;-)).
Wenn ich schon 4 Punkte an die graka schicken muss um ein quad zu zeichenen, dann sollen die 4 Punkte auch so sein dass das Quad sekrecht auf der Normalen steht. Wobei mit gerade einfällt dass es evtl einfacher ist anstelle der Bounding Box ne Bounding Sphere zu nehmen umd die 4 Punkte zu berechnen...

Vielen dank dass ihr euch hier solche mühe macht.

aber wie gesagt: eigentlich wüsste ich nur gerne wie ich die glPointSize berechnen kann. Ich möchte quasi (auch wenn es doof klingt, ich muss das wirklich so machen) eine Box oder eine Kugel mit den Kameradaten die ich habe in Software selber projizieren. Eigentlich interessiert mich dabei nur die projizierte Größe, die Position ist unwichtig, aber ich weiss leider nicht wie ich das machen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 12, 2005 21:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Billboards stehen immer senkrecht zur Kamera. Wenn du Spherische Billborgs nimmst. Bei Zylindrischen BB gücken die in ihrer vorgegebenen Eben in diene Richtung.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 07:33 
Offline
DGL Member

Registriert: So Sep 11, 2005 16:18
Beiträge: 9
Flash hat geschrieben:
Billboards stehen immer senkrecht zur Kamera. Wenn du Spherische Billborgs nimmst. Bei Zylindrischen BB gücken die in ihrer vorgegebenen Eben in diene Richtung.


Jo, das habe ich verstanden. aber ich weiss nicht wie mir das bei meinem Problem weiterhelfen soll. Vielleicht drücke ich mich zu kompliziert aus :cry:
Aber vielen Dank trotzdem

Axso, vielleicht weiss ich jetzt was du meinst: das Problem dass ich habe ist NICHT, wie es evtl auf den Zeichnungen aussieht, dass Quads sich nicht zum Betrachter drehen, sondern dass ich nicht weiss wie ich die Vier Punkte ausrechnen kann und auch nicht weiss wie ich die Größe der Box in der Bildebene berechnen kann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 16:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
dein zweites bild zeigt ja eine Situation, wo der betrachter schräg auf die Box guckt.
So wie du das Quad dann berechnen willst, währe es auf jeden fall um einiges kleiner als die Siluette des Würfels (was als Näherung ja eher ungeschickt ist). Außerdem wäre die Berechnung genau dieses Quads wohl recht kompliziert!

Wie währe es, wenn du versuchst aus jedem würfel einen Mitellwehrt (etwa den Mittelwehrt aller 4 Raumdiagonalen) zu nehmen und den in eine feste Beziehung mit der Quadgröße setzen würdest.

Dann würde sich die Größe des Quads nur noch mit der Entvernung zur Kamera ändern und du müsstest den Mittelwehrt nur 1 mal berechnen pro Würfel, da er vom Betrachterpunkt unabhängig ist.

Ich denke anders wirste kaum Performance hinbekommen...

ist verständlich?

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 17:20 
Offline
DGL Member

Registriert: So Sep 11, 2005 16:18
Beiträge: 9
geo hat geschrieben:
dein zweites bild zeigt ja eine Situation, wo der betrachter schräg auf die Box guckt.
So wie du das Quad dann berechnen willst, währe es auf jeden fall um einiges kleiner als die Siluette des Würfels (was als Näherung ja eher ungeschickt ist). Außerdem wäre die Berechnung genau dieses Quads wohl recht kompliziert!

Wie währe es, wenn du versuchst aus jedem würfel einen Mitellwehrt (etwa den Mittelwehrt aller 4 Raumdiagonalen) zu nehmen und den in eine feste Beziehung mit der Quadgröße setzen würdest.

Dann würde sich die Größe des Quads nur noch mit der Entvernung zur Kamera ändern und du müsstest den Mittelwehrt nur 1 mal berechnen pro Würfel, da er vom Betrachterpunkt unabhängig ist.

Ich denke anders wirste kaum Performance hinbekommen...

ist verständlich?

jo, ich glaube schon. So etwas ähnliches mache ich auch schon indem ich die Größe über ein paar tricks abschätze um sie nicht berechnen zu müssen.
Etwas ganz ähnliches mache ich auch mit der Position. Aber die idee mit den Quads gefällt mir eben aus genau dem Grund so sehr, weil ich eine "vernünftige" repräsentation der Box bekomme (auch wenn sie natürlich schief und viel kleiner ist).
Ich habe es jetzt noch ein wenig anders probiert:
ich berechne die 4 Punkte die eine Ebene durch den Mittelpunkt bilden wie folgt:
ich nehme einen von der Normalen linear unanbhängigen Vektor a (zb: (nx, ny. nz+5)) und normalisiere ihn.
dann berechne ich den Darauf senkrecht stehenden Vektor b= Normale kreuz A.
dann überschreibe ich A mit dem Vektor der seknrecht auf N und B steht:
A=Normale kreuz B

A, B und Normale spannen nun ein Koordinatensystem auf dass so gedreht ist dass N eine Achse davon ist.
Nun kann ich die 4 Punkte berechnen:
P1=Zentrum+Size*A+Size*B;
P2=Zentrum-Size*A+Size*B;
P3=Zentrum-Size*A-Size*B;
P4=Zentrum+Size*A-Size*B;
Die habe ich als Quad gerendert.
Habe das noch nicht genau getestet, aber es scheint ganz gut auszusehen.
Natürlich liegen die Punkte nicht in der Bounding Box, aber immerhin in der Bounding Sphere, und damit kann ich auch leben :wink:

Um das ganze performant zu bekommen muss ich jetzt noch etwas tricksen, aber ich denke das skalierte Koordinatensystem kann ich vorher berechnen, wird dann ne etwas größere lookup-table, aber das klappt schon.

Bleibt nur noch das Problem mit der Größe der Bounding Box oder Bounding Sphere.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]