[glut.h][OpenGl] Stationeres Licht
-
Hallo,
ich will in ein object eine lichtquele einbrigen (nehmlich in die sphere ->glutSolidSphere(10, 20, 20);), damit es wie eine laterne funktioniert. Aber irgentwie funktioniert es nicht!. hatt einer eine ide?
Hab bischer das ausprobiert.
void zeichenfunktion(void) { static float X = 0; static float x = 0; static float Y = 0; static float y = 0; static float z = 0; static float Z =0; static float r = 15; static float f = 0; GLfloat light_position[] = { 0.0, 30.0, 0.0, 0.0 }; glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glutTimerFunc (MILLISEC_PRO_FRAME, timer_func, 1); // camera(); //Draw funktion z = Z+r*cos(f); y = Y+r*sin(f); f = f + 0.05; if(f >=360) { f = 0; } glPushMatrix (); glTranslatef(-1*y, 0, -1*z); glRotatef(-75*f, 0, 1,0); DrawMen(MenXMove(), MenYMove(), MenZMove(), MenFMove()); glRotatef(-10, 0, -1,0); // glRotatef(-x, -y, 0, -15); glTranslatef(y , 0, z); glPopMatrix(); glLightfv(GL_LIGHT0, GL_POSITION, light_position);//!!!!!Das licht glTranslatef(0, 30, 0); glColor3f(1, 1, 1); glutSolidSphere(10, 20, 20);//!!!!!!Hier rein glTranslatef(0, -30, 0); // glLoadIdentity(); // camera(); glutSwapBuffers(); }Ich weis der code is noch etwas n00bisch aber wird noch bereicht wenn alles so funktioniert wie ich es will ^^. Wen die hilfe ein link ist bitter was auf deutsch wen es geht :/.
-
glLightfv(GL_LIGHT0, GL_POSITION, light_position);//!!!!!Das lichtsetze das mal direkt vor oder nach dem Rendern der Kugel, sodass die Lichtposition diesselben Transformationen wie auch die Kugel mit durchläuft
-
Jop funktioniert jetzt!!!!!!!
Aber nun hab ich ein anderes problem mir wird das hauptlicht das ich in der folgenten fucktion definiere ausgemacht

void init(void)
{
//Set up light source
GLfloat light_position[] = { 0.0, 150.0, 0.0, 0.0 };//Parameter handling
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);// polygon rendering mode
glEnable(GL_COLOR_MATERIAL);
glColorMaterial( GL_FRONT, GL_AMBIENT_AND_DIFFUSE );glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);// Black background
glClearColor(0.0f,0.0f,0.0f,1.0f);}
aber egal shaut kacke aus die kuckel ^^. Ich lase es. Danke fur die hilfe hungs.
-
erstens: benutze bitte Code-Tags^^
Wenn du mit Hauptlicht GL_LIGHT0 meinst, dann mach einfag glDisable(GL_LIGHT0), das ist der Ausschalter.
Oder meinst du die ambiente Grundhelligkeit?
-
Ich meine das das hauptlicht in das objekt reingemacht wird. Alles wird sehr dunkel. Und das objekt sehr hell, aber verlirt gleichzeitich irgentwie das 3D fehling ^^, ich weis hort sich komish an aber das stort mich, gibts da vileicht was?. Aber wenn du lust hast kanst du mir ja sagen wie ich ein zweitlicht in das objektet einbringe, wurde mich sehr intresieren. Wenn nicht ist es auch okey.
-
Das alles sehr dunkel wird, kann auch daran liegen, das die Abnahme der Lichtintenistät zu stark ist, und die Lichtquelle nur einen im Bezug zur Szene kleinen wirksamen Einflussbereicht hat.
Ansonsten weis ich jetzt nicht, was du so direkt meinst^^
-
Hallo
ich an deiner Stelle würde mir ne Methode basteln, die mir die ganzen Lichtquellen initialisiert. Spätestens wenn du anfängst mit Materials zu arbeiten, wird es unübersichtlich.
Außerdem würde ich auch keine GL_LIGHT0 nutzen, sondern eine neue Lichtquelle nehmen, GL_LIGHT1. Die 0 würde ich nutzen, um den Raum komplette auszuleuchten.
Die 1 dann ab in die Laterne.Grüße
Fireball
-
FireballGFX schrieb:
Hallo
ich an deiner Stelle würde mir ne Methode basteln, die mir die ganzen Lichtquellen initialisiert. Spätestens wenn du anfängst mit Materials zu arbeiten, wird es unübersichtlich.
Außerdem würde ich auch keine GL_LIGHT0 nutzen, sondern eine neue Lichtquelle nehmen, GL_LIGHT1. Die 0 würde ich nutzen, um den Raum komplette auszuleuchten.
Die 1 dann ab in die Laterne.Grüße
Fireball
Für die Grundhelligkeit nimmt man aber das globale ambiente Licht und keine Lichtquelle.
Oder wie hast du das gemeint?