大佬教程收集整理的这篇文章主要介绍了c – OpenGL照明问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的照明代码
glewInit(); glClearColor(0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT) glShadeModel(GL_SMOOTH); //light position and colour GLfloat light_position[] = { 0.0,20.0,0.0 }; GLfloat white_light[] = {0.8,0.8,0.0}; GLfloat diff_light[] = {1.0,1.0,0.0}; GLfloat spec_light[] = {1.0,0.0}; glLightfv(GL_LIGHT0,GL_AMBIENT,white_light); glLightfv(GL_LIGHT0,GL_DIFFUSE,diff_light); glLightfv(GL_LIGHT0,GL_SPECULAR,spec_light); glLightfv(GL_LIGHT0,GL_POSITION,light_position); //ambient light GLfloat ambient[] = {0.3,0.3,0.3}; glMaterialfv(GL_FRONT,ambient); //diffuse material component GLfloat diff[] = {0.6,0.6,0.6}; glMaterialfv(GL_FRONT,diff); //specular material component GLfloat WhiteSpec[] = {1,1,1}; glMaterialfv(GL_FRONT,WhiteSpec); GLfloat shininess = 50; glMaterialf(GL_FRONT,GL_SHINInesS,shininess); //ENABLE LIGHTinG AND DEPTH TEST glEnable(GL_LIGHTinG); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST);
这是我创造我的海洋的类方法
glColor3f(0,1); glPushMatrix(); //enable texturing glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D,seaTeX); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_replaCE); for(int i = 0,k = 0; i < (getWidth()/10); i++){ for(int j = 0; j < (getLength()/10); j++){ if(i >= Sea::waveLoc1 && i <= Sea::waveLoc1+Sea::sinArrayLength){ int nextK = k+1; if(nextK == Sea::sinArrayLength){ nextK = 0; } if(i == Sea::waveLoc1+Sea::sinArrayLength){ //front of wave glBegin(GL_POLYGON); glNormal3f(0.0f,1.0f,0.0f); glTexCoord2f(0.0,1.0);glVertex3f(Sea::seaGrid[i][j].x,Sea::sinVals[nextK],Sea::seaGrid[i][j].z); glTexCoord2f(0.0,0.0);glVertex3f(Sea::seaGrid[i][j+1].x,Sea::seaGrid[i][j+1].z); glTexCoord2f(1.0,0.0);glVertex3f(Sea::seaGrid[i+1][j+1].x,Sea::seaGrid[i+1][j+1].y,Sea::seaGrid[i+1][j+1].z); glTexCoord2f(1.0,1.0);glVertex3f(Sea::seaGrid[i+1][j].x,Sea::seaGrid[i+1][j].y,Sea::seaGrid[i+1][j].z); glEnd(); }else{ //rest of wave glBegin(GL_POLYGON); glNormal3f(0.0f,Sea::sinVals[k],Sea::seaGrid[i+1][j].z); glEnd(); } }else{ //draw flat sea glBegin(GL_POLYGON); glNormal3f(0.0f,0.0f); glTexCoord2f(0.0,Sea::seaGrid[i+1][j].z); glTexCoord2f(0.0,Sea::seaGrid[i+1][j+1].z); glTexCoord2f(1.0,Sea::seaGrid[i][j+1].y,Sea::seaGrid[i][j+1].z); glTexCoord2f(1.0,Sea::seaGrid[i][j].y,Sea::seaGrid[i][j].z); glEnd(); } } //increment k if i is in the area of the wave if(k < Sea::sinArrayLength-1 && (i >= Sea::waveLoc1 && i <= Sea::waveLoc1+Sea::sinArrayLength)){ k++; }else if(k == Sea::sinArrayLength){ k = 0; } } if(Sea::waveLoc1 < 100 && Sea::waveInc == Sea::waveSpeedLimiter){ Sea::waveLoc1 +=1; }else if(Sea::waveLoc1 >= 100){ Sea::waveLoc1 = 0; } //limits speed of wave if(Sea::waveInc < Sea::waveSpeedLimiter){ Sea::waveInc++; }else{ Sea::waveInc = 0; } //disable texturing glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); glPopMatrix();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_@R_262_2770@; glLoadIdentity(); gluPerspective(45.0f,(GLfloat)screenWidth/(GLfloat)screenHeight,0.1f,1000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); camera.@R_801_9531@eCameraPosition(mouse_x,mouse_y,screenWidth,screenHeight); sea.buildSeaPlane(); scene.buildEdges(); glPushMatrix(); glColor3f(0,0); glTranslatef(0,20,200); model.speedDisplayFaceNormals(); glPopMatrix(); glPushMatrix(); plane.@R_801_9531@ePlanePosition(); glBegin(GL_POLYGON); glNormal3f(0.0f,0.0f); glVertex3f(0,25,10); glVertex3f(2,20); glVertex3f(0,20); glEnd(); glPopMatrix(); glFlush();
知道为什么我看不到这个吗?
更新:
如果我禁用纹理,我可以看到我的大海.如何修复它以便我可以使用纹理和灯光?
更新2:
以上是大佬教程为你收集整理的c – OpenGL照明问题全部内容,希望文章能够帮你解决c – OpenGL照明问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。