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

Aktuelle Zeit: Fr Jul 18, 2025 15:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mein Material bleibt einfach grau!?
BeitragVerfasst: Mo Aug 06, 2007 13:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Hi,
wo zur Hölle übersehe ich was beim Setzen der Materialeigenschaften? Mein Cube hier bleibt einfach stumpf weiß...
(Sry, C++, kein Delphi...)
Ich aktiviere Materialien in einem Init-Teil:
Code:
  1.  
  2.     qglClearColor(Qt::black);
  3.     initLists();
  4.     glEnable(GL_DEPTH_TEST);
  5.     glEnable(GL_CULL_FACE);
  6.     glCullFace(GL_BACK);
  7.     glEnable(GL_COLOR_MATERIAL);
  8.  

Setze in jedem Frame das Material (Hier noch testweise blau, um irgendwas zu bekommen):
Code:
  1.  
  2.     CGColorf cMaterial = {0.0f, 0.0f, 1.0f, 1.0f};
  3.     float matShininess[] = { 20.0f };
  4.     float matSpecular[] = { 0.0f, 0.0f, 0.0f, 1.0f};
  5.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  6.    
  7.     glMatrixMode(GL_MODELVIEW);
  8.     glLoadIdentity();
  9.     gluLookAt(0.0, 0.0, 6.0,
  10.             0.0, 0.0, 0.0,
  11.             0.0, 1.0, 0.0);
  12.    
  13.     glPushMatrix();
  14.     glEnable(GL_LIGHTING);
  15.         light->on();
  16.         glRotated(logic->getRotation(), 1.0, 1.0, 0.0);
  17.         glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
  18.         glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular);
  19.         glMaterialfv(GL_FRONT, GL_AMBIENT, cMaterial);
  20.         glMaterialfv(GL_FRONT, GL_DIFFUSE, cMaterial);
  21.         UnitForms::drawUnitCube();
  22.         light->off();
  23.         glDisable(GL_LIGHTING);
  24.     glPopMatrix();
  25.  

So zeichne ich den Cube:
Code:
  1.  
  2. #include "unitForms.h"
  3.  
  4. #include <GL/gl.h>
  5.  
  6. void UnitForms::drawUnitQuad (void) {
  7.     glBegin (GL_QUADS);
  8.         glNormal3f(0.0f, 0.0f, 1.0f);
  9.         glTexCoord2f(0.0f, 0.0f);
  10.         glVertex3f (0.5f, 0.5f, 0.0f);
  11.         glTexCoord2f(1.0f, 0.0f);
  12.         glVertex3f (-0.5f, 0.5f, 0.0f);
  13.         glTexCoord2f(1.0f, 1.0f);
  14.         glVertex3f (-0.5f, -0.5f, 0.0f);
  15.         glTexCoord2f(0.0f, 1.0f);
  16.         glVertex3f (0.5f, -0.5f, 0.0f);
  17.     glEnd ();
  18. }
  19.  
  20. void UnitForms::drawUnitCube (void) {
  21.     /* Frontflaeche */
  22.     glPushMatrix ();
  23.         glTranslatef (0.0f, 0.0f, 0.5f);
  24. //      glColor3f (1.0, 0.0, 0.0);
  25.         drawUnitQuad ();
  26.     glPopMatrix ();
  27.    
  28.     /* rechte Seitenflaeche */
  29.     glPushMatrix ();
  30.         glRotatef (90.0f, 0.0f, 1.0f, 0.0f);
  31.         glTranslatef (0.0f, 0.0f, 0.5f);
  32. //      glColor3f (0.0, 1.0, 0.0);
  33.         drawUnitQuad ();
  34.     glPopMatrix ();
  35.    
  36.     /* Rueckseitenflaeche */
  37.     glPushMatrix ();
  38.         glRotatef (180.0f, 0.0f, 1.0f, 0.0f);
  39.         glTranslatef (0.0f, 0.0f, 0.5f);
  40. //      glColor3f (0.0, 0.0, 1.0);
  41.         drawUnitQuad ();
  42.     glPopMatrix ();
  43.    
  44.     /* linke Seitenflaeche */
  45.     glPushMatrix ();
  46.         glRotatef (270.0f, 0.0f, 1.0f, 0.0f);
  47.         glTranslatef (0.0f, 0.0f, 0.5f);
  48. //      glColor3f (0.0, 1.0, 1.0);
  49.         drawUnitQuad ();
  50.     glPopMatrix ();
  51.    
  52.     /* Deckelflaeche */
  53.     glPushMatrix ();
  54.         glRotatef (-90.0f, 1.0f, 0.0f, 0.0f);
  55.         glTranslatef (0.0f, 0.0f, 0.5f);
  56. //      glColor3f (1.0, 0.0, 1.0);
  57.         drawUnitQuad ();
  58.     glPopMatrix ();
  59.    
  60.     /* Bodenflaeche */
  61.     glPushMatrix ();
  62.         glRotatef (90.0f, 1.0f, 0.0f, 0.0f);
  63.         glTranslatef (0.0f, 0.0f, 0.5f);
  64. //      glColor3f (1.0, 1.0, 0.0);
  65.         drawUnitQuad ();
  66.     glPopMatrix ();
  67. }
  68.  


Und das hier ist meine kleine bisherige Lichtklasse:
Code:
  1.  
  2. #include "light.h"
  3.  
  4. Light::Light(GLenum glLight, CGPoint3Df cAmb, CGPoint3Df cDiff, CGPoint3Df cSpec) {
  5.  
  6.     this->glLight = glLight;
  7.    
  8.     glLightfv (glLight, GL_AMBIENT, cAmb);
  9.     glLightfv (glLight, GL_DIFFUSE, cDiff);
  10.     glLightfv (glLight, GL_SPECULAR, cSpec);
  11.     glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
  12. }
  13.  
  14. DirectedLight::DirectedLight(GLenum glLight, CGPoint3Df cAmb, CGPoint3Df cDiff, CGPoint3Df cSpec)
  15.             : Light(glLight, cAmb, cDiff, cSpec) {
  16.  
  17. }
  18.  
  19. void DirectedLight::setDirection(CGPoint3Df dir) {
  20.     this->dir[0] = dir[0];
  21.     this->dir[1] = dir[1];
  22.     this->dir[2] = dir[2];
  23.     this->dir[3] = 0.0f;
  24. }
  25.  
  26. void DirectedLight::on() {
  27.     glLightfv (glLight, GL_POSITION, dir);
  28.     glEnable(glLight);
  29. }
  30.  
  31. void DirectedLight::off() {
  32.     glDisable(glLight);
  33. }
  34.  
  35.  

Mein Licht wird so erzeugt dann:
[code
CGColorf amb = {0.1f, 0.1f, 0.1f, 1.0f};
CGColorf diff = {1.0f, 1.0f, 1.0f, 1.0f};
CGColorf spec = {1.0f, 1.0f, 1.0f, 1.0f};
CGPoint3Df dir = {0.3f, 1.0f, 0.5f};
this->logic = logic;
light = new DirectedLight(GL_LIGHT0, amb, diff, spec);
light->setDirection(dir);
[/code]

Das Licht scheint soweit auach gut zu funktionieren. Bloß die Materialeigenschaften vom Cube... Die funktionieren partout nicht. :/
Sry für die Listings. Denke aber, das ist so besser, als wenn ich die Dateien anhänge.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 13:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,
versuch mal glEnable(GL_COLOR_MATERIAL); beim Init-Teil wegzulassen.
Wenn es aktiviert ist, wird nämlich die aktuell mit glColor3x gesetzte Farbe als Material benutzt.
Bei dir ist die wahrscheinlich weiss (standard).
Die übergebenen Werte mit glMaterial werden dann, glaub ich, von OpenGL ignoriert.

Gruß,
MatReno

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 14:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Treffer, funktioniert nun.
Danke. :)
Befehl missverstanden, na glückwunsch an mich selbst. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 15:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Achso, was ich jetzt erst sehe:
Dein Rendervorgang deines Cubes ist "etwas" unperformant geschrieben...
Für jede Seite die Matrix pushen und popen mit gltranslate und glrotate drin :?
Und was wenn der Würfel größer sein soll? Scalen???
Nee, ich würde den Würfel anders zeichnen.
Der Wiki-Artikel könnte ein erster Anhaltspunkt sein. Ist zwar in Pascal, aber ich denke, damit kommst du klar... :wink:
Sieht am Anfang ziemlich komplex aus, man kann aber auch Teile weglassen, z.B. die Option inverted, falls du deinen Würfel immer von aussen sehen willst. Evtl kannst du dir auch die tscale und toffset sparen, falls du ohne texturen arbeitest, oder deine texturen immer eine würfelfläche komplett ausfüllen sollen.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Jo, danke, ich weiß. :)
Das sind noch Überbleibsel der Computergrafik-Übung des Studiums. Da sollte alles schön aus Grundformen aufgebaut und zusammengesetzt werden. Passt schon soweit auch noch, als das in der Szene nur maximal 20-30 Cubes zu sehen sind.
Skalieren usw. geht damit übrigens wunderbar. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 17:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Alibi hat geschrieben:
Das sind noch Überbleibsel der Computergrafik-Übung des Studiums. Da sollte alles schön aus Grundformen aufgebaut und zusammengesetzt werden.

Na dann kann man das ja verzeihen ;)

Alibi hat geschrieben:
Skalieren usw. geht damit übrigens wunderbar. Smile

Hatte ich auch erwartet, jedoch versuche ich glScalef() zu vermeiden, da es performance Verlust gibt und die Normalen mit-gescalet werden, was die Lichtberechnung ändert.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 19:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@ALIBI: Du studierst aber nicht zufällig hier in Chemnitz? 8)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 06, 2007 21:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Ne, Medieninformatik in Wedel. :)


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


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