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

Aktuelle Zeit: Fr Jul 18, 2025 12:36

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Jan 03, 2009 19:36 
Offline
DGL Member

Registriert: Sa Jan 03, 2009 18:53
Beiträge: 22
Hey ho!

Ich habe mich jetzt ziemlich lange schon durch OpenGL (ES) und Objective-C gekämpft und kam bis hier hin auch sehr gut durch ^^ und jetzt zu meiner Sackgasse. In meiner Spielwelt lasse ich eine Gitternetzlinie anzeigen. Hierfür verwende ich:

Code:
  1.  
  2. for (i = 0; i <= 7; i = i + 1) {
  3.   for (j = 0; j <= 7; j = j + 1) {
  4.     GLfloat XlineVertices[] = {-3.5, i - 3.5, j - 3.5, 3.5, i - 3.5, j - 3.5};
  5.     glVertexPointer(3, GL_FLOAT, 0, XlineVertices);
  6.     glEnableClientState(GL_VERTEX_ARRAY);
  7.     glDrawArrays(GL_LINES, 0, 2);
  8.    
  9.     // Weiterer Code für die Z und Y Gitternetzlinien...
  10.   }
  11. }
  12.  


Funktioniert alles Prima. Nun existieren aber auch andere Objekte in meiner Welt, die mit Texturen versehen sind und beleuchtet werden. Deswegen hat glColorf keine Auswirkungen mehr auf meine Linien. Die sind knallig weiss (die Texturen sind für diesen Renderbereich deaktiviert - ich habe auch einmal versucht das Licht an der stelle zu deaktivieren und zu reaktivieren, aber es war umsonst). Ich bekomme es nur hin wenn ich die Linien mit Textur versehe und mit:

Code:
  1.  
  2. GLfloat mat_emission[] = { 1.0f, 1.0f, 0.0f, 1.0f };
  3. glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
  4.  


dem ganzen dann eine Farbe gebe. Ich denke es muss einen leichteren und sparsameren Weg geben!

Anmerkung: glColorMaterial ist unter OpenGL ES nicht verfügbar.



Ich wäre auch für einen Tip dankbar wie ich einen String in OpenGL (ES) rendern kann.

Danke im Vorraus =)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Gibt es einen grund, der dich daran hindert, für die Linien das Lighting einfach auszuschalten (glDisable(GL_LIGHTx) bzw glDisable(GL_LIGHTING) ) und es danach wieder einzuschalten (glEnable ...)?

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: Sa Jan 03, 2009 19:54 
Offline
DGL Member

Registriert: Sa Aug 09, 2008 09:07
Beiträge: 112
>> glEnableClientState(GL_VERTEX_ARRAY);

gehört das nicht eher im Init-Bereich?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 20:33 
Offline
DGL Member

Registriert: Sa Jan 03, 2009 18:53
Beiträge: 22
Lord Horazont hat geschrieben:
Gibt es einen grund, der dich daran hindert, für die Linien das Lighting einfach auszuschalten (glDisable(GL_LIGHTx) bzw glDisable(GL_LIGHTING) ) und es danach wieder einzuschalten (glEnable ...)?

Gruß Lord Horazont


Ok! Ich habe das Problem gefunden. Es liegt tatsächlich am ein und ausschalten von GL_LIGHTING - nun weiss ich aber auch warum es bei meinem Versuch damals so schien als ob dies nicht helfen würde, denn scheinbar wird der Alpha-Kanal von glColorf "falsch" interpretiert. Ich möchte die Linien nur andeuten, darum habe ich den Alpha-Kanal auf 0.1 gesetzt, dies bewirkt aber nur das die angegebene Farbe verblasst und nicht transparent wird. Ich habe damals weiss verwendet und das kann nicht weiter verblassen ^^
Jemand eine Idee?


Code:
  1.  
  2. glVertexPointer(3, GL_FLOAT, 0, arrayVertices);
  3.  


Dies verwende ich um beim Rendern immer ein anderes Objekt zu zeichnen.

Code:
  1.  
  2. glEnableClientState(GL_VERTEX_ARRAY);
  3.  


Und dies um nochmals sicher zugehen das es aktiviert ist.

Danke für die schnelle Antwort =)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 20:46 
Offline
DGL Member

Registriert: Sa Nov 24, 2007 11:59
Beiträge: 116
Programmiersprache: FreePascal
Zitat:
dies bewirkt aber nur das die angegebene Farbe verblasst und nicht transparent wird. Ich habe damals weiss verwendet und das kann nicht weiter verblassen ^^


Du musst dazu Blending benutzen und die Linien als letztes zeichnen.

Code:
  1. glEnable(GL_BLEND);
  2. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  3. zeichne_linien();
  4. glDisable(GL_BLEND);


Die Blendingfunktion müsste eigentlich die richtige sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2009 21:12 
Offline
DGL Member

Registriert: Sa Jan 03, 2009 18:53
Beiträge: 22
Japp, das hat funktioniert =)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 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.008s | 16 Queries | GZIP : On ]