GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, -1.0f }; GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, -1.0f }; GLfloat LightPosition[]= { 0.0f, 0.0f, -2.0f, -1.0f };
SDL_Init(SDL_INIT_EVERYTHING); screen = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL|SDL_FULLSCREEN); glViewport(0, 0, 800, 600); glMatrixMode(GL_PROJECTION); gluPerspective(60, 800.0/600.0, 1, 500); glMatrixMode(GL_MODELVIEW); glEnable(GL_LIGHTING); glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1, GL_POSITION, LightPosition); glEnable(GL_LIGHT1);
Mitä teen väärin tai mitä jätän tekemättä? Tämä vain yksinkertaisesti värjää kuution valkoiseksi.
glMaterial ja siihen liittyvät on myös määritelty kuutiolle?
GLfloat cyan[] = {0.f, .8f, .8f, 1.f}; glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cyan);
glEnable(GL_MATERIAL);
tai itse käytän ainoastaan
glEnable(GL_COLOR_MATERIAL);
jotta glColor määrittää ambient ja diffusen, huomattavasti helpompi.
Hmm, nyt se ei tee yhtään mitään. Ei värjää valkoiseksi, eikä tuo esiin valoa tai varjoja.
glEnable(GL_LIGHT0); (alkaa siis 0 eikä 1:stä) ilman glLightfv kutsuja oletusarvoilla pitäisi näyttää jotain, jos kuution normaalit on myös oikein.
glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); float vertex[8][3]={{x,y-koko,z-koko},{x+koko,y-koko,z-koko},{x,y,z-koko},{x+koko,y,z-koko}, {x,y-koko,z}, {x+koko,y-koko, z},{x,y, z},{x+koko, y, z}}; int index[6*4]={ 0,2,3,1, 4,5,7,6, 5,1,3,7, 4,6,2,0, 7,3,2,6, 4,0,1,5 }; GLfloat blue[] = {0, 0, 1, 1.f}; glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); glBegin(GL_QUADS); int i; for (i=0; i<6*4; i++) { glColor4f(0,0,255,0.1); glVertex3f(vertex[index[i]][0], vertex[index[i]][1], vertex[index[i]][2]); } glEnd(); }
Eli onko tässä kuutiossa nyt sitten jotain ongelmia, sillä en nyt yhtään ymmärrä miksi sitä valoa ei näy.
On, puuttuu ne normaalit kokonaan.
Tuo näyttäis olevan aika hyvä opas:
http://www.videotutorialsrock.com/
Aihe on jo aika vanha, joten et voi enää vastata siihen.