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

Aktuelle Zeit: Di Jul 15, 2025 19:14

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zeichenstift-Funktion
BeitragVerfasst: Sa Mär 19, 2011 23:04 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Hallo Leute,

habe im Moment ein kleines Projekt in OpenGL in 2D am laufen. Es ist ein kleines Zeichenprogramm ähnlich wie paint.
Ich kann mit der Maus zeichnen. Allerdings gibt es ein kleines Problem. Meine Linie besteht im Grunde aus kleinen Rechtecken. Diese Zeichne ich mit glRectf. Es entsteht allerdings ein hässlicher Aliasing-effect und wenn ich die maus zu schnell bewege, wird die linie gepunktelt.
Habt ihr eine idee wie man eine schöne glatte durchgehende Linie mit der Maus in OpenGL zeichnen kann?

Ich hab irgendwie keine Idee mehr...Es geht auch nicht mit dem Modus gl_line_strip. Das hatte ich auch schon probiert, aber Pustekuchen...

Ich wäre für eure Hilfe echt dankbar, weil jetzt sieht es einfach nur s*****e aus.

Danke euch
:D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: So Mär 20, 2011 00:17 
Offline
DGL Member

Registriert: Mi Sep 15, 2010 18:22
Beiträge: 59
Wohnort: Sachsen Meißen
Programmiersprache: Pascal, C(++), Java
Zeichne einfach eine Linie vom letzten Mauspunkt zum aktuellen, so entstehen keine Lücken.

_________________
bluesky


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: So Mär 20, 2011 14:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Was ist denn dein Problem mit GL_LINE bzw GL_LINE_STRIP? Die sind eigentlich genau für sowas.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: So Mär 20, 2011 16:50 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Danke erstmal für eure Antworten, aber mein Problem ist Folgendes:

Ich möchte ja bei gedrückter Maustaste zeichnen und nicht immer einmal klicken mich ein Stück auf dem Bildschirm bewegen und dann nochmal klicken, so dass sich die Punkte verbinden. So etwas habe ich schon. Es geht mir um schönes Freihandzeichnen bei gedrückter Maustaste. Wie man das halt eben aus Photoshop und co kennt.

Mit glRectf und GL_LINE_STRIP hab ich halt eben den hässligen aliasing-effect und bei zu schneller Bewegung Lücken in der Linie.

Hättet ihr vielleicht andere Ideen wie man das umsetzen könnte?

Ich danke euch...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: So Mär 20, 2011 17:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn sich die Maus bewegt solltest du in irgendeiner Form ein MouseMoveEvent bekommen. Ich denke mal das benutzt du aktuell schon. Dieses Event gibt dir immer die aktuelle Mausposition und aktuell renderst du wohl an die entsprechende Stelle immer einen Pixel. Das funktioniert aber nicht, weil sich die Maus bei schneller Bewegung mehr als einen Pixel bewegt. Wie bluesky schon sagte.....statt einfach nur jeweils einen Pixel zu rendern solltest du eine Linie von der letzten Position zur aktuellen zeichnen. Ob da nun jetzt ein Button gedrückt ist oder nicht ist erstmal egal.

Mal als PseudoCode:
Code:
mouseMove(X,Y) {
    if (LinkeMaustasteGedrückt) {
        zeichneLinie(altesX, altesY, X, Y);
        altexX = X;
        altesY = Y;
    }
}

mousePressed(taste, X,Y) {
   if (taste == LinkeMaustaste) {
       LinkeMaustasteGedrückt = true;
       altexX = X;
       altesY = Y;
   }
}

mouseReleased(taste) {
   if (taste == LinkeMaustaste) {
       LinkeMaustasteGedrückt = false;
   }
}

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: So Mär 20, 2011 17:34 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Also das mit der durchgehenden Linie wurde damit erklärt. Solltest du dazu noch Fragen haben, stell sie einfach.

Was den Aliasing-Effekt betrifft, kannst du dir entweder selbst was basteln (Shader eignen sich hierfür besonders) oder glEnable(GL_LINE_SMOOTH); aufrufen.
http://wiki.delphigl.com/index.php/glEn ... INE_SMOOTH


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zeichenstift-Funktion
BeitragVerfasst: Mo Mär 28, 2011 16:08 
Offline
DGL Member

Registriert: Mo Apr 27, 2009 11:19
Beiträge: 35
Danke euch...
Es hat jetzt geklappt.
Konnte längere Zeit nicht coden, deshalb die verspätete Antwort...


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


Wer ist online?

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