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

Aktuelle Zeit: Fr Jul 18, 2025 07:57

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



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [gelöst] Problem mit Linien
BeitragVerfasst: Mi Aug 06, 2008 22:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Hallo allerseits, ich versuche ein paar Linien zu zeichnen und scheiter dabei völlig, wäre nett, wenn jemand mir sagen könnte, was an diesem Code nicht stimm (es soll einfach eine Linie daagestellt werden, ich bekomme aber eine leere Fläche):

Code:
  1.  
  2.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  3.  
  4. glMatrixMode(GL_PROJECTION);
  5. glLoadIdentity;
  6. glViewport(0,0,ClientWidth,ClientHeight);
  7. glOrtho(0,clientwidth,0,clientheight,0,256);
  8.  
  9. glMatrixMode(GL_MODELVIEW);
  10. glLoadIdentity;
  11.  
  12.     glcolor3f(1,0,0);
  13.     glLineWidth(2);
  14.  
  15.     glbegin(GL_lines);
  16.     glVertex3f(0,
  17.                0,
  18.                -12);
  19.     glVertex3f(clientwidth div 2,
  20.                clientheight div 2,
  21.                -12);
  22.     glend;
  23.  
  24.  
  25. SwapBuffers(DC);
  26.  


Vielen Dank für jede Hilfe

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 22:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das Problem dürfte sien, dass deine NearClippingPlane bei 0 liegt und deine Linien bei -12...

Gruß Lord Horazont

_________________
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:
BeitragVerfasst: Mi Aug 06, 2008 22:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Zitat:

BeitragVerfasst am: Mi Aug 06, 2008 23:14 Titel:
Das Problem dürfte sien, dass deine NearClippingPlane bei 0 liegt und deine Linien bei -12...


Ne, daran kann es nicht liegen, ich zeichne sonst auch alles mit einem -X als Z-Koordinate und es klappt wunderbar, auch wenn ich in dem obigen Code die -12 durch 12 ersetze ist keine Linie zu sehen.

Danke trotzdem für deine Antwort

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 22:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Bei +12 dürfte es daran liegen, dass die Linie "hinter dir" ist.
-> mit gluLookAt() die Kamera setzen.
Oder auch mal mit 0 statt +-12 zeichnen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 22:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
gluLookAt bei Ortho? Geht das überhaupt (gut)?

Auch ein grund könnte sein, dass du vielleicht die Parameter von glOrtho vertauscht hast. glOrtho will links rechts unten oben haben, du hast oben und unten vertauscht, aber ich weiss nicht, inwiefern glOrtho das sogar egal ist.

Gruß Lord Horazont

_________________
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:
BeitragVerfasst: Mi Aug 06, 2008 22:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Zitat:
Auch ein grund könnte sein, dass du vielleicht die Parameter von glOrtho vertauscht hast. glOrtho will links rechts unten oben haben, du hast oben und unten vertauscht, aber ich weiss nicht, inwiefern glOrtho das sogar egal ist.


Nach dem was ich aus den Tutorials weiß, dürfte es egal sein, auch ein vertauschen der parameter hilft nichts.


Ic steh hier echt aufm Schlauch, kann es sein das ich irgendwo anders quasi ds Linienzeichnen "verboten" hab? Geht das in Opengl irgendwie?


€: Hab auch schon andere Werte für z versucht (0,-10,+5 etc.) will alles nichts.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 22:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Lord Horazont hat geschrieben:
gluLookAt bei Ortho? Geht das überhaupt (gut)?

Ist kein Problem.

Linien verbieten: Nein, das geht nicht. Kannst du denn andere primitive zeichnen?
Sind die Linien vielleicht in der gleichen Farbe wie deine ClearColor?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 23:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Zitat:
wenn jemand mir sagen könnte, was an diesem Code nicht stimm

Bei mir funktioniert der Code fehlerfrei, eine rote Linie von links unten in die Mitte des Fensters. Vermutlich wird irgendein anderer Teil deines Codes dafür verantwortlich sein. Sicher, dass OpenGL richtig initalisiert wurde?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 23:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Zitat:
Zitat:
wenn jemand mir sagen könnte, was an diesem Code nicht stimm

Bei mir funktioniert der Code fehlerfrei, eine rote Linie von links unten in die Mitte des Fensters. Vermutlich wird irgendein anderer Teil deines Codes dafür verantwortlich sein. Sicher, dass OpenGL richtig initalisiert wurde?

MfG


Bin OpenGl Neuling sicher ist noch gar nichts.

Andere Primitiven kann ich fehlerfrei zeichnen (benutze nur Quads mit Texturen) das die Linie dieselbe Farbe hat wie der Hintergrund der sonstiges kann ich ausschliessen da ein ändern der Farbe nichts bringt.

Mein SetupGl sieht wie folgt aus:
Code:
  1.  
  2.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  3.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  4.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  5.   glEnable(GL_TEXTURE_2D);
  6.   glEnable(GL_ALPHA_TEST);
  7.   glAlphaFunc(GL_GREATER, 0.1);
  8.   glEnable(GL_BLEND);
  9.  


Und im Oncreate steht folgendes
Code:
  1.  
  2.   DC:= GetDC(Handle);
  3.   if not InitOpenGL then Application.Terminate;
  4.   RC:= CreateRenderingContext( DC,
  5.                                [opDoubleBuffered],
  6.                                32,
  7.                                24,
  8.                                0,0,0,
  9.                                0);
  10.   ActivateRenderingContext(DC, RC);
  11.   setupgl;

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 23:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Das sieht soweit alles gut aus.
Jann1k hat geschrieben:
Code:
  1.  
  2.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  3.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  4.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  5.   glEnable(GL_TEXTURE_2D);
  6.   glEnable(GL_ALPHA_TEST);
  7.   glAlphaFunc(GL_GREATER, 0.1);
  8.   glEnable(GL_BLEND);
  9.  

Was, wenn du die ganzen glEnables mal aus lässt?
Bzw. hast du ein unsichtbares Polygon vor der Linie, eine Textur noch aktiviert, die die Farbe der Linie beeinflussen könnte, einen Alphawert <= 0.1 irgendwo davor gesetzt oder eine glBlendFunc davor verwendet, die womöglich die Darstellung verhindert?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 06, 2008 23:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Zitat:
Was, wenn du die ganzen glEnables mal aus lässt?
Bzw. hast du ein unsichtbares Polygon vor der Linie, eine Textur noch aktiviert, die die Farbe der Linie beeinflussen könnte, einen Alphawert <= 0.1 irgendwo davor gesetzt oder eine glBlendFunc davor verwendet, die womöglich die Darstellung verhindert?


Die ganzen glenables auskommentieren ändert leider nichts.

Das irgendetwas darüber gezeichnet wird hatte ich mir auch schon gedacht, deswegen hab ich alles andere bereits auskommentiert, es soll nur diese eine Linie gezeichnet werden.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 06:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

hast du schon glLineWidth(1) probiert?
Möglich, daß dein Grafikkartentreiber keine anderen Weiten zulässt ( schau mal ins Wiki : glLineWidth ).

dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 08:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie dj3hut1 schon sagte. Nicht alle Grafikkarten können unterschiedliche Liniengrößen. Dazu am Besten die Werte der OpenGL Implementation erfragen. Siehe wiki Artikel. Alternativ dazu kannst du auch glView benutzen. Der zeigt auch an welche Ausmaße die Linien annehmen dürfen. Allerdings dein fertiges Programm darf ja auch durchaus mal auf anderen Systemen laufen und da sollte dein Programm so etwas von selbst auslesen können.

Hattest du anstelle der Linie auch mal ein einfarbiges Quad (ohne textur) gezeichnet? Denn wenn das richtig dargestellt wird dann liegt es nicht an irgendwelchen Einstellungen in OpenGL. Kleines Szenario. Du hast vergessen die letzte SpriteTextur (ein kleines Männchen mit transparenten ecken) direkt zu entfernen. Beim bloßen Laden der Textur muss sie schon gebunden werden. Alles was du danach zeichnen würdest würde mit der Textur und der zu letzt gesetzten Texturkoordinate (per default 0,0) überzogen. Wenn du Alphatest oder Blending aktiv hättest wäre so vermutlich dein Primitiv anschließend weg.

Außerdem solltest bei Dingen die nicht funktionieren OpenGL Fehler erfragen. Meiner Meinung nach sollte man das grundsätzlich immer ein mal am Ende eines jeden Fames machen. Ganz besondern wärend der Entwicklung. Dann merkt man mitunter frühzeit, wenn einige Aufrufe keine Wirkung haben.
Code:
  1. var
  2.   Error: TGLenum;
  3. begin
  4.  
  5.   Error := glGetError;
  6.   if Error <> GL_NO_ERROR then
  7.     ShowMessage(gluErrorString(Error));
  8. end;


PS: Falls du dir als Einsteiger nicht sicher bist ob dein Code richtig ist oder nicht, dann kannst du auch größere Teile oder ganz posten/anhängen. Oftmals werden einige Stellen durch andere Stellen Code beeinflusst an die man auf den ersten Blick gar nicht denkt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 09:01 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich tippe darauf, dass du die Texture nicht wieder ausgeschalten hasst.
glDisable(GL_TEXTURE_2D); vor dein Zeichenblock packen.

_________________
"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: Do Aug 07, 2008 09:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Okay, danke für die vielen Antworten, leider funktioniert es immer noch nicht, mit gllinewidt(1) ändert sich nichts ebenso wenig hilft glDisable(GL_TEXTURE_2D) weiter.

Ein einfarbiges Quad kann ich ohne Probleme zeichnen, wird komplett fehlerlos dargestellt.

Vielleicht hilft der OpenGl-Error weiter, der gibt mir nämlich als Fehlermeldung "invalid value" aus, woher der ungültige Wert kommt weiß ich aber nicht.


MfG

Basti

€: Ich habe mir jetzt auch glView runtergeladen, allerdings weiß ich nicht wo es mir die möglichen Linienausmaße anzeigt, sind ziemlich viele Informationen. Openl Version ist 1.4


€2: Bin den Tag über unterwegs, werde erst heut Abend weitere Infos liefern können.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


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 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.010s | 15 Queries | GZIP : On ]