Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL, C++] Nie działa oświetlenie diffuse - gluSphere

Ostatnio zmodyfikowano 2014-06-23 12:40
Autor Wiadomość
Malutki
Temat założony przez niniejszego użytkownika
[OpenGL, C++] Nie działa oświetlenie diffuse - gluSphere
» 2014-06-21 22:22:23
Hej ;)
Mam problem z kodem, robię prosty układ słoneczny i chciałem umieścić oświetlenie w centrum układu współrzędnych gdzie mam słońce. Napisałem takie linijki:

C/C++
GLfloat ambientLight[] = { 0.1f, 0.1f, 0.1f, 1.0f };
GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8f, 1.0f };
GLfloat specular[] = { 0.1f, 0.1f, 0.1f, 1.0f };
GLfloat lightPos[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };

glLightfv( GL_LIGHT0, GL_AMBIENT, ambientLight );
glLightfv( GL_LIGHT0, GL_DIFFUSE, diffuseLight );
glLightfv( GL_LIGHT0, GL_SPECULAR, specular );
glLightfv( GL_LIGHT0, GL_POSITION, lightPos );
"planetę" rysuję takim kodem:
C/C++
void kula1( void )
{
    GLUquadricObj * obj;
    obj = gluNewQuadric();
    gluQuadricTexture( obj, GL_TRUE );
    glBindTexture( GL_TEXTURE_2D, texture[ 0 ] );
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
    glColor3d( 1.0, 0.8, 0.8 );
    glEnable( GL_TEXTURE_2D );
    gluSphere( obj, 15, 15, 15 );
    glDisable( GL_TEXTURE_2D );
}
I teraz przed wywołaniem rysowania kuli wpisuję
C/C++
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
Efekt jest taki, że obiekty są oświetlone z każdej strony... dlaczego skoro lightPos jest punktem i w centrum? :<
P-112482
DejaVu
» 2014-06-23 12:40:34
http://cpp0x.pl/kursy​/Kurs-OpenGL-C++​/Swiatla-i-materialy/226

http://stackoverflow.com​/questions/2647440​/lighting-does-not-work-with-glusphere

Frazy, które należy wpisać w wyszukiwarkę google:

http://chiron.valdosta.edu​/dgibson/Courses/CS4830​/lectures/test2/20/lecture20.htm

C/C++
GLUquadricObj * lightBulb;

void drawLightBulb()
{
    glColor3f( 1.0, 0.0, 0.0 );
   
    lightBulb = gluNewQuadric();
    gluQuadricDrawStyle( lightBulb, GLU_FILL );
    gluQuadricNormals( lightBulb, GLU_SMOOTH );
    gluSphere( lightBulb, 1.0, 15, 15 );
    glFlush();
}
Być może brakuje Ci wyliczonych normalnych (a być może się mylę ;p).
P-112564
« 1 »
  Strona 1 z 1