IOS Opengl ES 用多光源实现材质,阴影,高光效果
来源:互联网 发布:蓝牙扫描app安卓源码 编辑:程序博客网 时间:2024/04/30 16:04
在Opengl ES 1.0 中, 要实现材质效果,往往需要光源的设置, 如果环境光和漫反射光强了,材质效果难以体现, 如果环境光和漫反射光弱了,材质就暗了
实现阴影效果,可以放置一个主平行光源, 为了材质效果,需要将环境光设到比较弱,漫反射光设到稍强
glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); const GLfloatlightAmbient[] = {0.08, 0.08, 0.08, 1.0}; const GLfloatlightDiffuse[] = {1.0, 1.0, 1.0, 1.0}; const GLfloatlightSpecular[] = {1.0, 1.0, 1.0, 1.0}; const GLfloatlightPosition[] = {50, 100, 50, 0.0}; glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
将环境光调到很低, 增强漫反射光, 为体现材质,将镜面光调到最高
此时暗面非常暗, 需要往暗面打一个光
glEnable(GL_LIGHT1); const GLfloat lightAmbient2[] = {0.08, 0.08, 0.08, 1.0}; const GLfloat lightDiffuse2[] = {0.2, 0.2, 0.2, 1.0}; const GLfloat lightSpecular2[] = {0.1, 0.1, 0.1, 1.0}; const GLfloat lightPosition2[] = {-500, -1000, 500.0, 1.0}; glLightfv(GL_LIGHT1, GL_AMBIENT, lightAmbient2); glLightfv(GL_LIGHT1, GL_DIFFUSE, lightDiffuse2); glLightfv(GL_LIGHT1, GL_SPECULAR, lightSpecular2); glLightfv(GL_LIGHT1, GL_POSITION, lightPosition2);
由于是暗面光,将漫反射光调低
此时发现物体亮度不够, 因此在主光源的同一位置再加两个光源
glEnable(GL_LIGHT2); glEnable(GL_LIGHT3); const GLfloat lightAmbient3[] = {0.06, 0.06, 0.06, 1.0}; const GLfloat lightDiffuse3[] = {0.3, 0.3, 0.3, 1.0}; const GLfloat lightSpecular3[] = {1.0, 1.0, 1.0, 1.0}; const GLfloat lightPosition3[] = {20, 40, 20, 1.0}; const GLfloat lightPosition4[] = {50, 100, 50, 0.0}; glEnable(GL_LIGHT2); glEnable(GL_LIGHT3); glLightfv(GL_LIGHT2, GL_AMBIENT, lightAmbient3); glLightfv(GL_LIGHT2, GL_DIFFUSE, lightDiffuse3); glLightfv(GL_LIGHT2, GL_SPECULAR, lightSpecular3); glLightfv(GL_LIGHT2, GL_POSITION, lightPosition3); glLightfv(GL_LIGHT3, GL_AMBIENT, lightAmbient3); glLightfv(GL_LIGHT3, GL_DIFFUSE, lightDiffuse3); glLightfv(GL_LIGHT3, GL_SPECULAR, lightSpecular3); glLightfv(GL_LIGHT3, GL_POSITION, lightPosition4);
将镜面光都调到最大, 更好的体现材质效果
最后加上材质
const GLfloat matAmbient[] = {0.4, 0.4, 0.4, 1.0}; const GLfloat matDiffuse[] = {0.6, 0.6, 0.6, 1.0}; const GLfloat matSpecular[] = {0.5, 0.5, 0.5, 1.0}; const GLfloat matEmission[] = {0.0, 0.0, 0.0, 1.0}; glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmbient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matSpecular); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, matEmission); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, lightShininess);
- IOS Opengl ES 用多光源实现材质,阴影,高光效果
- opengl es 光照效果,材质设置
- OpenGL ES 学习教程(九) 油腻的效果 Lighting Maps 高光贴图
- OpenGL(十二) 光源类型 平行光 、 点光源 、 聚光灯 的实现
- opengl平行光光源,点光源,聚光灯光源同台出现
- OpenGL ES着色语言-光照效果之散射光
- Opengl ES 阴影(shadow)
- UIButton高光状态(highlighted)时阴影效果
- OpenGL光源、材质和光照模型
- OpenGL ES五 – 材质
- Android OpenGL ES :材质渲染
- OpenGL 材质效果 (转)
- Opengl ES实现简单水波纹效果
- OpenGL ES中光源颜色的参数
- 球面环境映射实现高光效果
- 使用shaderMaterial实现平行光下的高光效果
- Android OpenGL ES材质及光照示例
- Android OpenGL ES 绘图 -- 材质渲染
- 打败主力的神奇划线法
- 递归、回溯算法(八皇后问题,世界上最难的数独问题)
- android中 MediaStore提取缩略图和原始图像
- 对于网站优化要提供的一些建议
- C++中string类型与char *类型转换
- IOS Opengl ES 用多光源实现材质,阴影,高光效果
- 【cocos2d-x 初级教程之四 2.x版本】cocos2d-x如何发射子弹
- STL容器中放入wchar_t*指针出错 Vector中放入wchar_t*
- windows 8 游戏(Xbox Game)
- 其实。讲道理和放闷屁是一回事 - http://my.oschina.net/luckystar/blog/66043
- Implement the quicksort algorithm in as many different ways as possible
- 基于信号量的线程同步
- Windows 8 文件资源管理器(推荐)
- hadoop的文件系统一致模型