OpenGL编程指南12:光照_渲染真实球体
生活随笔
收集整理的這篇文章主要介紹了
OpenGL编程指南12:光照_渲染真实球体
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.場景中添加光照的步驟
1.定義每個物體的每個頂點的法線向量。這個法向量決定了物體相對于光源的方向。 2.創(chuàng)建和選擇一個或多個光照,并設(shè)置他們的位置。 3.創(chuàng)建和選擇一種光照模型,它定義了全局環(huán)境光的層析以及觀察點的有效位置(便于進行光照計算)。 4.定義場景中物體的材料屬性。2.光照球體及分析
#include <vgl.h>void init(void) {//光照參數(shù)初始化全位于此處GLfloat mat_specular [] = {1.0,1.0,1.0,1.0};GLfloat mat_shininess [] = {100.0};GLfloat light_position [] = {5.0,5.0,5.0,1.0}; //點光源//GLfloat light_position [] = {0.0,0.0,50.0,0.0}; //無限遠模擬平行光GLfloat white_light [] = {1.0,1.0,1.0,1.0};GLfloat model_ambient [] = {0.1,0.1,0.1,1.0};glClearColor(0.0,0.0,0.0,0.0);glShadeModel(GL_SMOOTH);//為場景中的物體定義材料屬性:如何反射光線(材料環(huán)境、散射、鏡面顏色、光澤度)glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //使用鏡面材質(zhì)顏色glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //使用光澤度glLightfv(GL_LIGHT0,GL_POSITION,light_position); //定義光源的位置glLightfv(GL_LIGHT0,GL_DIFFUSE,white_light); //定義散射光為白色glLightfv(GL_LIGHT0,GL_SPECULAR,white_light); //定義鏡面光為白色glLightModelfv(GL_LIGHT_MODEL_AMBIENT,model_ambient); //光照模型參數(shù):全局環(huán)境光glEnable(GL_LIGHTING); //驅(qū)動光源glEnable(GL_LIGHT0); //啟動特定光源glEnable(GL_DEPTH_TEST); } void display(void) {glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glutSolidSphere(1.0,300,16); //定義球體法向量glFlush(); } void reshape(int w, int h) {glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if( w<h )glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);elseglOrtho(-1.5,1.5,-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity(); } int main(int argc, char** argv) {glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);glutInitWindowPosition(200,200);glutInitWindowSize(400,400);glutCreateWindow(argv[0]);init();glutDisplayFunc(display);glutReshapeFunc(reshape);glutMainLoop();return 0; }輸出結(jié)果:3.注意事項
1.定義球體的法向量是在函數(shù)gluSolideSphere()中完成的。為了進行正確的光照運算,表面法相必須為單位法向量。 2.光照模型中不僅僅定義了全局環(huán)境光,還定義了場景中觀察者應(yīng)該位于無限遠處還是位于場景本地;也會確定場景中物體的正面和背面是否應(yīng)該執(zhí)行不同的光照運算。上例中采用了默認設(shè)置,即觀察者位于無限遠處,并且只有一面接受光照。總結(jié)
以上是生活随笔為你收集整理的OpenGL编程指南12:光照_渲染真实球体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业即时通讯一个全新行业的诞生
- 下一篇: OpenGL编程指南13:光源移动