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

Aktuelle Zeit: Fr Jul 18, 2025 04:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Rechtecke
BeitragVerfasst: Mo Apr 24, 2006 21:10 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
Halli, Hallo mal wieder ;),

Ich brauche in letzter Zeit häufig Rechtecke (Ortho-Modus); deshalb habe ich mir folgende Prozedur geschrieben, um ebensolche zu zeichnen

Code:
  1. class procedure Com.RenderRect(left, bottom, right, top, z : single);
  2. begin
  3.  
  4.   glDisable(GL_TEXTURE_2D);                                 // Texturen deaktivieren
  5.   glBegin(GL_LINE_LOOP);                                    // Rechteck zeichnen
  6.     glVertex3f(left, bottom, z);
  7.     glVertex3f(right, bottom, z);
  8.     glVertex3f(right, top, z);
  9.     glVertex3f(left, top, z);
  10.   glEnd;
  11.  
  12. end;


Die Farbe muss halt vorher gesetzt werden; aber das ist auch nicht das Problem. Obwohl ich meine Ansicht nicht skaliert habe (ein Pixel auf der Fläche entspricht also exakt einem Pixel), entstehen manchmal Fehler an den Eckpunkten (siehe Anlage). Das ist prinzipiell natürlich nicht all zu dramatisch; aber schließlich will ich hier ja auch was lernen 8).

Die Quads, die man auch noch sehen kann, sind prinzipiell genauso gezeichnet - und auch wenn ich alles größer mache, treten dort auch nie Fehler auf. Bei den Rechtecken gibt es auch nie Fehler, außer dass halt manchmal ein beliebiger Eckpunkt fehlt. Muss ich bei dem LineLoop irgendwo noch einen Pixel aufschlagen - und warum?

Ogridi


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 24, 2006 21:43 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
zeichenreihenfolge bedacht? kann es sein, daß der rahmen rechts oben vom gelben später gezeichnet wird? passen die tiefen, ecc..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 24, 2006 22:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja.. sieht für mich auch danach aus, dass das obere Rechteck drübergezeichnet wurde. Du könntest das testen, indem du für jedes Rechteck eine andere Farbe wählst. Dann siehst du vielleicht obs drübergezeichnet wurde. Wobei...hmmm...vielleicht auch nicht. Guck halt mal was zuerst gerendert wird.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 13:20 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
öhm.. - sorry, hätt ich vielleicht gleich sagen sollen ;):

Das Schwarze ist der Hintergrund, also glClearColor, drübergezeichnet sind jetzt in regelmäßiger Reihenfolge Quads mit den komischen Bildchen und eben das gelbe Rechteck (noch darüber). Der Effekt tritt sogar in verschiedenen Zusammenhängen und Kontexten auf (s. zweites Beispiel). Dabei muss der Code doch ein exakt horizontal (bzw. vertikal) liegendes Rechteck ergeben, egal mit welchen Parametern man ihn füttert, oder?

Ach ja, und mir ist noch aufgefallen, dass die Fehler äußerst häufig rechts oben auftreten.

Wie gesagt: Wenn sich das Problem jetzt nicht lösen lässt, ist das kein Weltuntergang. Ich war nur überzeugt davon, dass man solche "Pixel"-Fehler vorhersagen kann und dass schlichtweg der Fehler im Code liegt.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 13:32 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Computer sind eigentlich deterministisch, und sollten somit vorhersagbar sein. Aber ne Idee hab ich auch nicht. Eventuell sind Rundingsfehler im Spiel die wiederum von verschiedenen Treibern anders behandelt werden. Hast dus mal mit nem anderen Rechner getestet?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 13:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ah. Hätte jetzt auch darauf getippt, dass es übermalt wird. Aber so hätte ich meinen Beitrag ja doch abschicken können. Darüber sprechen wir noch mal. :wink:

Also hier noch mal was was ich heute morgen schon sagen wollte.

Bei Linien habe ich dieses Phänomen schon häufiger gesehen. Keine Ahnung wieso. Aber anscheinend geht er manchmal davon aus, dass die Linie nicht ganz bis zum Punkt gezeichnet werden soll sondern hört vorher auf. Bei der GDI ist das glaube ich auch so. Das macht die Sache aber nicht unbedingt besser. Schau dir mal diesen Screenshoot an. Das sind auch bloß Linien. Fällt dir etwas auf?

In deinem Fall kannst du einfach hergehen und vor den Zeichnen der Fläche eine gelbe Fläche zeichnen. Wenn du anschließend deine Fläche entweder mit angepasster Tiefenfunktion oder deaktiviertem Tiefentest drüberzeichnest bleibt nur das übrig was übrig bleiben soll. Und Flächen weisen an der Stelle keine lücken auf.

Andere Möglichkeit wäre eine Fläche bei der du den Füllmodus anpasst. Mit glPolygonMode. Allerdings arbeitet der auch nur mit Linien. Aber vielleicht arbeitet der anders. Ich würde aber eher immer auf die andere Methode plädieren, da du dort mehr Gestaltungsmöglichkeiten hast. Zum Beispiel könntest du auf das Quad auch eine Textur legen und dieses über das Andere blenden. Damit würde deine Selektion mit sehr einfachen Mitteln einen ganz anderen Eindruck bekommen.

Von einer Anpassung der Koordinaten halte ich nicht viel, da du nie weißt ob es einer nicht vielleicht doch richtig macht und dann sieht es bei dem bescheiden aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 14:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Und außerdem fällts doch kaum auf. 8) ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 17:18 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
Zitat:
Und außerdem fällts doch kaum auf.


Seh ich auch so. Ging mir auch wie gesagt nur um grundsätzliche Fehler; wenn ich die GL richtig einsetze und die was falsch macht, soll mir das lange Recht sein 8) .

Das mit dem glPolygonMode werd ich mal ausprobieren, Quads unter die vorhandenen zu zeichnen nützt mir leider nicht viel. Die Rechtecke brauche ich in vielerlei Hinsicht; der zweite Screenshot stamt beispielsweise von einer stark verkleinerten Version des ersten. Hier haben die Quads aber keine Zwischenräume und die Rechtecke können auch mitten durch ein Quad verlaufen.

Auf jeden Fall thx für die Aufklärung :D!

Ogridi


PS:
Zitat:
Schau dir mal diesen Screenshoot an. Das sind auch bloß Linien.


Wie viele? ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich könnte mir vorstellen das es am Linewidth liegt.
Kannt ja mal versuchen es auf 1 zu stellen und eventuell alle Linien einzeln Zeichnen.
Ich kenne sowas nicht obwohl ich auch ab und zu mit linien arbeite.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 19:05 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
Ich hab jetzt nochmal alles durchprobiert: Sowohl glPolygonMode(GL_FRONT, GL_LINES), als auch glLineWidth(1) und glBegin(GL_LINES). Werd wohl damit leben müssen. Bei Gelegenheit probier ich's aber auch nochmal auf nem anderen Rechner aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 20:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

Wenn das alles nicht klappt würd ich evtl statt der linien nen Quad zeichnen.
D.h. Gelbes Quad zeichnen, so groß wie der Umriss, und dann das richtige Quad dadrauf ...

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 21:10 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
Hilft mir zwar in dem Beispiel oben, manchmal aber auch nicht; dann bin ich gerade darauf angewiesen, dass das Rechteck Quads in der Mitte teilt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 21:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mal ganz am Rande: Darf man fragen was du programmierst? Ein Spiel?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 25, 2006 22:45 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Eine Doom 3 Engine natürlich ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 29, 2006 11:45 
Offline
DGL Member

Registriert: Fr Feb 03, 2006 17:03
Beiträge: 28
Sorry, ich hielt den Thread für abgeschlossen und hab deshalb nicht mehr reingeschaut :roll: .

Zitat:
Mal ganz am Rande: Darf man fragen was du programmierst? Ein Spiel?


Zitat:
Eine Doom 3 Engine natürlich ;)


Da ich mir nicht vorstellen kann, dass eine Doom 3 Engine in 2D geschrieben werden kann - nein ;). Aber Engine geht in die richtige Richtung. Ursprünglich sollten ich und ein paar Freunde von mir ein beliebiges Grafikprojekt für den Info-Unterricht schreiben. Wir haben uns damals für ein rundenbasiertes Basis-Strategiespiel entschieden (nur Einheiten, die auf einer Karte hin und her laufen können und bekriegen, wenn sie aufeinandertreffen). Nach einigem hin und her konnte ich sie davon überzeugen, dass das in 3D eh nix wird und somit haben "wir" (etwa gleichbedeutend mit "ich") dann begonnen, einen 2D-Ediitor zu schreiben.

Die Grundfunktionen stehen auch eigentlich schon; ich bin jetzt vor allem noch dabei, das ganze etwas benutzerfreundlicher zu machen (mehrere Einheiten auf einmal selektieren, Tastatursteuerung, Formulardesign etwas aufbessern und sowas). - Naja und dann fehlt noch ne Speichern / Laden - Funktion, die ich aber absichtlich hinausgezögert habe, um mir Arbeit zu sparen (http://www.delphigl.com/forum/viewtopic.php?t=5342).

Zugegeben komm ich atm nicht mehr so schnell voran wie am Anfang; das liegt aber eher daran, dass ich jetzt wieder Halbzeit-Schüler bin, als dass mir die Lust daran vergangen wäre. Ich bin mir ziemlich sicher, dass ich zu mindest den Editor noch komplett fertig kriegen werde. - Und damit wär ich durchaus sehr zufrieden :D - nur um Verwechslungen mit den im Tutorial http://wiki.delphigl.com/index.php/Tutorial_quickstart genannten Doom3 - Kandidaten auszuschließen. - Ach ja - und auf über ein Jahr ist das Projekt sowieso auch nicht ausgelegt ;).

Ogridi


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


Wer ist online?

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