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

Aktuelle Zeit: Mi Jul 16, 2025 01:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Dez 19, 2005 13:11 
Offline
DGL Member

Registriert: Mo Dez 19, 2005 13:04
Beiträge: 17
Hallo.

Ich bin relativ neu in OpenGL. Deswegen gleich vorweg mein Hauptproblem:

Ich versuche so etwas ähnliches wie den Desktop zu emulieren. Was ich habe und brauche ist:
orthographische Projektion
mehrere Schichte (z.B. 2): z.B. Hintergrund (entspricht Objekten) und Vordergrund (entspricht Mausselektierbox)

Mein Problem besteht nun im speed. Ich habe auf der untersten Schicht (Hintergrund) zu viele Objekte die jedes mal neu gerendert werden müssen.
Wenn ich eine Selektierbox erstelle mit der Maus, also Klick und drag, muss ich ja den Bildschirm clearen und dann alles neuzeichnen, samt meiner vergrößerten/verkleinerten Box.
Das Problem ist nun, das ich im Hintergrund zu viele Primitive habe (z.B. circles oder lines) mit alpha-blending (können schon über 100.000 werden) und diese selektiert werden müssen. Nun wenn ich meine Maus bewege, dann verändert sich natürlich alles wie geplant nur hängt es, weil die items nicht so schnell gerendert werden.

Ich dachte mir, dieses Problem zu lösen, dass ich nur eine z-Ebene lösche und dann auf dieser z-Ebene meine Mausselektierungsbox zeichne, Hintergrund bleibt fix. Wie kann ich das realisieren?

(Scissortest wird wohl nicht helfen, weil ich oft fast alle Items selektiere).

Danke im voraus.
MfG,
yadaddy.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 19, 2005 13:38 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Teile deiner Objekte die statisch sind solltest du in eine Displayliste oder VBO packen. Damit solltest du schonmal etwas schneller werden.

Was ich mich gerade frage ist welchen einsatzzweck dein Programm verfolgt. Möchtest du wirklich einen Desktop emulieren (so wie SharpDesk ) oder möchtest du (z.B. für ein Spiel) eine GUI bauen? (Da gibts bei uns schon einige Mitglieder die sowas machen.)

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Dez 19, 2005 14:04 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
yadaddy hat geschrieben:
Ich dachte mir, dieses Problem zu lösen, dass ich nur eine z-Ebene lösche und dann auf dieser z-Ebene meine Mausselektierungsbox zeichne, Hintergrund bleibt fix. Wie kann ich das realisieren?

Soweit ich weiss garnicht.
Du hast nämlich nur 2 Ebenen. Eine die die später angezeigten Pixel (der x,y-Pixel hat die Farbe (z_1,z_2,z_3) ) enthält und eine weitere die die Tiefeninformationen enthält (der x,y-Pixel hat die Tiefe z).
Du könntest aber versuchen den Hintergrund, der bei sowas statisch ist, in eine Textur zu rendern und diese anzuzeigen.
So könntest du Renderarbeit sparen.

Aber Flash hat recht, wir bräuchten etwas mehr Informationen über dein Projekt.
Könntest du einfach mal ein Bild der Anwendung machen und markieren was selektierbar ist etc.?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 20, 2005 09:53 
Offline
DGL Member

Registriert: Mo Dez 19, 2005 13:04
Beiträge: 17
Hallo.

Also es geht nicht um eine Emulation des Desktops, sondern um statistische Plots.
Das Problem ist, dass ich zu viele Standardprimitiven habe (am umfangreichsten zu rendern natürlich die Kreise unter diesen) und diese mit jedem Mausmove jedes mal neugezeichnet werden. Stell dir vor du hast 3 Ebenen:
Background == die Primitive von oben
2te Schicht == markierte Primitive
3te Schicht == Mausselektierbox.

Mit jeder Mausbewegung muss ich also die unteren 2 Schichten neu rendern, wenn ich Primitive auswählen möchte. V.a. besteht das Problem wenn ich z.B. 10000 Kreise mit Alpha und Radius >= 100px habe.

Ich habe das Problem mit Displaylisten schonmal probiert. Ja es wurde schneller, aber ab einem bestimmten Kreisradius (>=120px z.B.) wars wieder wie vorhin.

MfG,
yadaddy.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 20, 2005 13:15 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
yadaddy hat geschrieben:
Background == die Primitive von oben

Rendere diese einfach als Textur. Dann musst du nur einmal dieses berechnen und kannst es danach einfach nur zeichnen.
Musst aber aufpassen, dass deine Grafikkarte entsprechen grosse Texturen unterstützt.
yadaddy hat geschrieben:
2te Schicht == markierte Primitive

Wie markierst du die Primitive? Wenn dein Hintergrund (die Clearcolor) schwarz ist und die Primitive weiss sind könntest du sie mit einem einfachem roten Quadrat und Blending einfärben. So müsstest du nicht alle markierten Primitive neuzeichnen.

Wegen der Geschwindigkeit: Ist eigentlich der Tiefentest an?
Weil er bei geschickter Sortierung unnötig ist und nur Leistung kostet.
Ich könnte mir das mit den grösseren Radien so erklären.
Weil bei mehr Punkten jetzt überprüft werden muss ob er gerendert werden darf.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 20, 2005 15:38 
Offline
DGL Member

Registriert: Mo Dez 19, 2005 13:04
Beiträge: 17
Hallo.

Gibt es da einen Unterschied, ob ich den Background als Textur oder Displayliste speichere und dann rendere?
Das einzige Problem bei der Textur wäre ja, dass ihre größe eine 2er Potenz sein muss, bei mir ist das Window flexibel groß, kann also zusätzlich Zeit verbraten beim Speichern.

@ 2te Schicht: Das ist so. Ich brauche das Schichtensystem, d.h. ich muss Background und 2te Schicht gespeichert haben.

i.A. ist das was ich oben erzählt habe nur ein Sonderfall. Es soll abstrakt mit n Schichten funktionieren können. Die Anwendung, die ich gerade mache, braucht nur 3.


Deswegen muss ich wohl die einzelnen Schichten gleichartig behandeln und nicht fallspezifisch in der Anwendung.
Gibt es dann einen Unterschied ob ich die Schichten als Texturen speichere und dann lade oder lieber als Displaylisten? (Ich denke Texturen sind doch eher für komplexere Objekte spezifiziert und nicht für solche Primitive)
Der Hintergrund wird wohl auch oft nacheinander verändert werden müssen, also schnelle Speicherung und Laden notwendig, so dass immernoch ein sichtbarer Renderfluß existiert.

MfG,
yadaddy.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 20, 2005 18:01 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun...Unterschied ist einfacg, dass ein Kreis mit 100 Vertices plötzlich nur noch 4 hat (die des Quads wo die Textur draufliegt).

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 20, 2005 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
wenn du wirklich 10000 kreise mit je Radius >100pixel hast würde ich mal davon ausgehen, dassdir irgendwo dann die Füllrate nen strich durch die rechnung macht, insofern ist das nicht alllzu verwunderlich wenn DLs oder VBOs nicht mehr soviel bringen
Ich würde dazu wie schon erwähnt wirklich alles, was in irgendeinerweise statisch ist zusammen auf eine (oder auf einige wenige) textur rendern, um overdraw einzusparen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 22, 2005 08:12 
Offline
DGL Member

Registriert: Mo Dez 19, 2005 13:04
Beiträge: 17
Ja werd ich wohl machen müssen.

Danke für eure Mühe


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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.008s | 14 Queries | GZIP : On ]