环境光:那些在环境中进行了充分的散射,无法辨别其方向的光,它似乎来自所有方向 散射光:来自某个方向。因此从它正面照射的表面,看起来更明亮以下。 镜面光:来自特定的方向,并且倾向于从表面的某个特定的方向放射 右图1:环境光 右图2:散射光 右图3:环境光与散射光的混合 |
|
|
|
创建光源 GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); light:对应光源,一般支持0~7号光源 pname:光照信息参数 GL_AMBIENT 环境光 GL_DIFFUSE 散射光 GL_SPECULAR 镜面光 GL_POSITION 光源位置 GL_CONSTANT_ATTENUATION 常量衰减因子 GL_LINEAR_ATTENUATION 线性衰减因子 GL_QUADRATIC_ATTENUATION 二次衰减因子 params:参数 对于GL_LIGHT0与其他光源默认值不一致GL_LIGHT0的环境光和散射光的默认值是(1,1,1,1) |
|
光源位置 GLfloat light_position[] = { x,y,z,w}; glLightfv(GL_LIGHT2, GL_POSITION, light_position); w=0 为方向性光源 w!=0 为位置性光源 右图1:方向性光源(1,1,1,0) 右图2:位置性光源(1,1,1,1) 右图3:位置性光源(1,1,5,1) |
|
光的衰减 衰减因子=1/k1+k2d+k3d*d d=光源与顶点之间的距离 k1=GL_CONSTANT_ATTENUATION k2=GL_LINEAR_ATTENUATION k3=GL_QUADRATIC_ATTENUATION 说明光的衰减特效要求光源位位置性光源 右图1:光源位置z=5,k1=1 右图2:光源位置z=5,k1=3 |
|
|
|
材料属性 GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); face:GL_FRONT,GL_BACK,GL_FRONT_AND_BACK pname:GL_AMBIENT 材料的环境颜色 GL_DIFFUSE 材料的散射颜色 GL_SPECULAR 材料的镜面颜色 GL_SHININESS 镜面指数 GL_AMBIENT_AND_DIFFUSE 材料的环境和散射颜色 GL_EMSSION 材料的发射颜色 GL_COLOR_INDEXS 颜色索引 球1: GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); 球2: GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, 5); 球3: glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, 180) 球4: GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); |
|
|
|
镜面反射 OPENGL允许我们在不存在反射光的情况下通过设置反射材料达到效果,并控制亮点的大小和亮点(GL_SHININESS)其实范围在【0~128】值越小亮度越大 亮点越小 |
|
发射颜色光 通过GL_EMISSION参数指定RGBA颜色值,可以使物体看上去好像发射这种颜色的光 |
|
材料颜色模式
环境散射衰减光: #include "header.h" float roar=0.0f; GLfloat attentation[]={1.0}; GLfloat light_position[] = { 1.0, 1.0,1, 0}; void init(void) { GLfloat ambient[] = { 0.5, 0.5, 0.5, 0.0 }; GLfloat diffuse[] = { 1.0, 0.0, 0.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT1,GL_AMBIENT,ambient); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT2,GL_DIFFUSE,diffuse); glLightfv(GL_LIGHT3, GL_POSITION, light_position); glLightfv(GL_LIGHT3,GL_DIFFUSE,diffuse); glLightfv(GL_LIGHT3,GL_AMBIENT,ambient); glLightfv(GL_LIGHT1,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT2,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT3,GL_CONSTANT_ATTENUATION,attentation); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glutSolidSphere(1.0, 16, 16); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, 2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-2.5*(GLfloat)w/(GLfloat)h, 2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case '1': glEnable(GL_LIGHTING); glEnable(GL_LIGHT1); glDisable(GL_LIGHT0); glDisable(GL_LIGHT2); glDisable(GL_LIGHT3); break; case '2': glEnable(GL_LIGHTING); glEnable(GL_LIGHT2); glDisable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT3); break; case '3': glEnable(GL_LIGHTING); glEnable(GL_LIGHT3); glDisable(GL_LIGHT0); glDisable(GL_LIGHT2); glDisable(GL_LIGHT1); break; case '0': glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDisable(GL_LIGHT1); glDisable(GL_LIGHT2); glDisable(GL_LIGHT3); break; case 'A': light_position[0]=1; light_position[1]=1; light_position[2]=1; light_position[3]=0; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT3, GL_POSITION, light_position); break; case 'S': light_position[0]=1; light_position[1]=1; light_position[2]=1; light_position[3]=1; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT3, GL_POSITION, light_position); break; case 'D': light_position[0]=1; light_position[1]=1; light_position[2]=5; light_position[3]=1; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT3, GL_POSITION, light_position); break; case 'Z': light_position[0]=1; light_position[1]=1; light_position[2]=5; light_position[3]=1; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT3, GL_POSITION, light_position); attentation[0]=1; glLightfv(GL_LIGHT1,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT2,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT3,GL_CONSTANT_ATTENUATION,attentation); break; case 'X': light_position[0]=1; light_position[1]=1; light_position[2]=5; light_position[3]=1; attentation[0]=3; glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT2, GL_POSITION, light_position); glLightfv(GL_LIGHT3, GL_POSITION, light_position); glLightfv(GL_LIGHT1,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT2,GL_CONSTANT_ATTENUATION,attentation); glLightfv(GL_LIGHT3,GL_CONSTANT_ATTENUATION,attentation); break; } glutPostRedisplay(); } void rotate() { roar+=0.0001f; glutPostRedisplay(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 移动光源 #include "header.h" static int spin = 0; void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 }; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix (); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix (); glRotated ((GLdouble) spin, 1.0, 0.0, 0.0); glLightfv (GL_LIGHT0, GL_POSITION, position); glTranslated (0.0, 0.0, 1.5); glDisable (GL_LIGHTING); glColor3f (0.0, 1.0, 1.0); glutWireCube (0.1); glEnable (GL_LIGHTING); glPopMatrix (); glutSolidTorus (0.275, 0.85, 8, 15); glPopMatrix (); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { spin = (spin + 30) % 360; glutPostRedisplay(); } break; default: break; } } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 光源材料 #include "header.h" void init(void) { GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 }; GLfloat lmodel_ambient[] = { 0.4, 0.4, 0.4, 1.0 }; GLfloat local_view[] = { 0.0 }; glClearColor(0.0, 0.1, 0.1, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); glLightfv(GL_LIGHT0, GL_POSITION, position); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } void display(void) { GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 }; GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat no_shininess[] = { 0.0 }; GLfloat low_shininess[] = { 5.0 }; GLfloat high_shininess[] = { 100.0 }; GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0}; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef (-3.75, 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (-1.25, 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (1.25, 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (3.75, 3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (-3.75, 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (-1.25, 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (1.25, 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (3.75, 0.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (-3.75, -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (-1.25, -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (1.25, -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glPushMatrix(); glTranslatef (3.75, -3.0, 0.0); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat); glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission); glutSolidSphere(1.0, 16, 16); glPopMatrix(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= (h * 2)) glOrtho (-6.0, 6.0, -3.0*((GLfloat)h*2)/(GLfloat)w, 3.0*((GLfloat)h*2)/(GLfloat)w, -10.0, 10.0); else glOrtho (-6.0*(GLfloat)w/((GLfloat)h*2), 6.0*(GLfloat)w/((GLfloat)h*2), -3.0, 3.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (600, 450); glutCreateWindow(argv[0]); init(); glutReshapeFunc(reshape); glutDisplayFunc(display); glutKeyboardFunc (keyboard); glutMainLoop(); return 0; } 材料颜色模式 #include "header.h" GLfloat diffuseMaterial[4] = { 0.5, 0.5, 0.5, 1.0 }; void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glEnable(GL_DEPTH_TEST); glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseMaterial); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialf(GL_FRONT, GL_SHININESS, 25.0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glColorMaterial(GL_FRONT, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere(1.0, 20, 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); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { diffuseMaterial[0] += 0.1; if (diffuseMaterial[0] > 1.0) diffuseMaterial[0] = 0.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); } break; case GLUT_MIDDLE_BUTTON: if (state == GLUT_DOWN) { diffuseMaterial[1] += 0.1; if (diffuseMaterial[1] > 1.0) diffuseMaterial[1] = 0.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); } break; case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN) { diffuseMaterial[2] += 0.1; if (diffuseMaterial[2] > 1.0) diffuseMaterial[2] = 0.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); } break; default: break; } } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
|
- 浏览: 146867 次
- 性别:
- 来自: 长春
最新评论
发表评论
-
(转)OpenGL与DirectX 比较
2014-02-01 12:18 4481Linux易用性差的一个重要表现是对游戏的支持性差。当然,l ... -
OpenGL环境搭建
2014-01-28 08:08 925开发工具VS2008 OS: WIN7 搭建步骤 ... -
OpenGL学习四十:正玄移动
2014-01-28 08:08 904正玄波浪曲线的特点是一个周期在x(0-360°)之间,y在 ... -
OpenGL学习三十九:飘动的旗帜
2014-01-27 10:28 1894(此节内容对应NEHE教程第11课) 目前为止我们 ... -
OpenGL学习三十八:图片文字
2014-01-27 10:28 1243(此节内容对应NEHE教程第17课) 前面2节所创 ... -
OpenGL学习三十七:Windows 3D字体
2014-01-27 10:26 1450(此节内容对应NEHE教程第14课) 本节主要说明 ... -
OpenGL学习三十六:Windows 2D字体
2014-01-27 10:26 1308(此节内容对应NEHE教程第13课) 本节主要说明Ope ... -
OpenGL学习三十五:加载压缩TGA
2014-01-27 10:26 1051(此节内容对应NEHE教程第33课) 利用压缩算法 ... -
OpenGL学习三十四:剪裁区域和TGA图像文件的加载
2014-01-26 08:06 1285(此节内容对应NEHE教程第24课) 应用.tga ... -
OpenGL学习三十三:球面映射
2014-01-26 08:06 2755(此节内容对应NEHE教程第23课) 把环境纹理包 ... -
OpenGL学习三十二:二次几何体
2014-01-26 08:06 1912主要包含圆柱体(Cylinder)圆盘(Disk)球(Sp ... -
OpenGL学习三十一:累积缓冲区
2014-01-26 08:06 1235OpenGL除了颜色缓冲区 ... -
OpenGL学习三十:深度缓冲区与掩码
2014-01-26 08:05 7095深度缓冲区进行三维混合多边形的绘图顺序极大地影响了最终的混 ... -
OpenGL学习二十九:模板缓冲区与模板测试
2014-01-25 13:16 2217帧缓冲区有许多缓冲 ... -
OpenGL学习二十八:蒙版
2014-01-25 13:16 2043(本节对应分析NEHE教程 ... -
OpenGL学习二十七:混合
2014-01-25 13:16 913混合步骤:1.设置混合模式2.启用混合 glColor4 ... -
OpenGL学习二十六:雾
2014-01-25 13:15 1936雾效果是就是是远处看的模糊,一种类似于大气效果。雾是在执行 ... -
OpenGL学习二十五:像素存储模式
2014-01-25 13:14 1836内存对齐:字长32位的计算机上,如果数据在内存中按照32位 ... -
OpenGL学习二十四:绘制像素,位图,图像
2014-01-24 08:31 6550除了几何图形的渲染,还有两种重要的类型的数据渲染位图:由0 ... -
OpenGL学习二十三:多重纹理
2014-01-24 08:30 4571在进行纹理贴图是,一次是把一副图像应用在个一个 ...
相关推荐
OpenGL是一种广泛应用于游戏开发、图形渲染和科学可视化等领域...要深入学习和理解这些概念,你可以查看压缩包内的源代码、教程或示例,这将有助于你亲自动手实践OpenGL的纹理和光照技术,进一步提升你的图形编程能力。
通过学习和实践OpenGL光照基础Demo,开发者可以掌握如何在实际项目中应用光照模型,创建更加逼真的3D场景。了解这些基础知识对于进一步学习高级光照技术,如法线贴图、光泽贴图和环境光遮蔽等,都是至关重要的。因此...
学习这个实例,开发者不仅可以掌握基本的OpenGL光照和纹理应用,还能理解如何将这些技术结合,以创建更为逼真的3D场景。在实际项目中,这些技能对于游戏开发、可视化应用、科学模拟等领域都至关重要。
这个“OpenGL.rar”压缩包包含了与OpenGL光照处理相关的代码示例,可以帮助开发者学习如何在OpenGL环境中实现复杂的光照效果。 在OpenGL中,光照是通过模拟现实世界中的光传播来增强场景的真实感。它涉及到光源、...
OpenGL是一种强大的图形库,用于在各种操作系统和平台上创建2D和3D图形。光照是OpenGL渲染中的关键元素,它极大地影响了...通过这个例子,你可以学习如何在OpenGL环境中创建逼真的光照效果,从而提升你的图形编程技能。
在这个实验中,我们将深入探讨OpenGL中的光照、阴影和纹理这三大关键概念。 光照是创建真实感3D图像的重要部分。OpenGL提供了一系列模型来模拟不同光源对物体的影响,包括点光源、平行光和聚光灯。这些光源可以设置...
OpenGL是计算机图形学中广泛使用的应用编程接口(API),它...总结,这个资源为初学者提供了一个学习OpenGL光照系统的基础平台,通过源代码的学习和实践,可以提升对3D图形编程的理解,进而创建出更为逼真的3D场景。
如果要深入学习,你应该查看这些资源,理解代码逻辑,运行并调整参数,观察不同设置对光照效果的影响。 为了实现高质量的聚光效果,你还需要理解视锥体的概念,因为它会影响聚光灯在场景中的表现。视锥体是摄像机...
OpenGL是计算机图形学中用于创建和操作2D和3D图形的强大库。在OpenGL中,光照模型对于模拟现实世界中的物体...在"lightBlinnPhong"这个压缩包中,可能包含了实现这三种光照模型的示例代码或教程,供学习者参考和实践。
在这个"Opengl-光照球体"项目中,我们将深入探讨如何在OpenGL环境中创建一个带有光照效果的球体,并添加纹理背景,实现一个可直接运行的程序。 首先,我们需要理解OpenGL中的光照模型。在3D图形渲染中,光照是影响...
总的来说,这个OpenGL程序是一个很好的学习光照效果的实例,通过模拟光照的变化,帮助开发者理解光源、材质和光照模型在图形渲染中的作用。对于希望深入学习OpenGL光照系统的人来说,这是一个值得研究的示例。
OpenGL是一种强大的跨语言、跨平台的图形...总的来说,这个实验是学习和实践OpenGL光照渲染的重要步骤,它帮助开发者掌握创建逼真3D场景的技能,对于游戏开发、可视化应用和图形设计等领域都具有重要的理论和实践价值。
在实际应用中,"lightsphere"示例可以帮助学习者理解如何在OpenGL环境中模拟复杂的光照效果,例如环境光、漫射光、镜面光等,以及如何通过光照模型的调整来改变场景的视觉效果。此外,它还可以作为进一步研究高级...
在这个"opengl.zip"压缩包中,重点探讨的是OpenGL的光照处理和如何创建球体模型,这些都是3D图形渲染的基础部分。 首先,我们要理解OpenGL中的光照模型。在3D图形世界里,物体的外观很大程度上取决于光线与物体表面...
在这个模型中,我们可以学习到OpenGL如何处理光照效果,这对于3D图形渲染至关重要。光照在3D环境中起到决定性作用,它可以增强场景的真实感,使物体看起来更加立体和生动。 首先,我们来了解OpenGL中的光照模型。...
实验七“光照与材质练习”是学习OpenGL编程的一个重要环节,它涵盖了如何在3D场景中模拟真实世界的光照和物体表面材质,从而提高图像的真实感。 在OpenGL中,光照和材质是两个关键概念。光照主要涉及光源、物体和...
在这个“opengl有纹理有贴图有光照有影子的青花瓷茶壶”项目中,开发者使用了OpenGL来实现一个复杂的视觉效果,其中包括了纹理映射、贴图、光照计算以及阴影生成。以下是对这些技术的详细解释: 1. **纹理映射...
总的来说,这个示例项目提供了一个学习和理解OpenGL如何处理2D几何形状和光照效果的好机会。通过深入研究"drawball.cpp"的代码,你可以学习到如何在实际项目中实现这些功能,这对任何想要从事图形编程的人来说都是...
OpenGL是一种强大的图形编程接口,广泛应用于游戏开发、科学可视化、工程设计等领域。在这个"OpenGL漫游+碰撞检测+光照"的项目中,我们将探讨几个关键...这个OpenGL项目为学习和掌握这些核心概念提供了一个实用的平台。
8. **www.pudn.com.txt**:这可能是一个链接或说明文档,指向更多关于OpenGL学习资源的网站pudn.com。 通过学习和运行这些示例,初学者可以深入理解OpenGL的工作原理,逐步掌握3D图形编程的关键技术。同时,对光照...