OpenGL ES 光照
来源:互联网 发布:淘宝导航代码大全 编辑:程序博客网 时间:2024/05/21 17:10
1、新建 Draw.java 绘制一些图像方法
public class Draw {/* * 绘制 球 */static public void drawSphere(GL10 gl,float r,int tiers,int blocks){float tiersAnger =(float) (Math.PI / tiers); // 一个层的角度差float blockAngle =(float) ((Math.PI *2) / blocks);// 一个圆每个的角度差List<Float> pos =new ArrayList<Float>();for(int i =0;i <tiers; i++){//一次画两个圆层float alpha0 =(float) ((-Math.PI/2) +(i *tiersAnger)) ;float alpha1 =(float) ((-Math.PI/2) +((i +1) *tiersAnger)) ;//y 值float y0 =(float) (Math.sin(alpha0) *r);float y1 =(float) (Math.sin(alpha1) *r);//圆半径float r0 =Math.abs((float) (Math.cos(alpha0) *r));float r1 =Math.abs((float) (Math.cos(alpha1) *r));for(int j=0;j <=blocks; j++){//圆坐标float x0 = (float) (Math.cos(j *blockAngle) *r0);float z0 = (float) (Math.sin(j *blockAngle) *r0);float x1 = (float) (Math.cos(j *blockAngle) *r1);float z1 = (float) (Math.sin(j *blockAngle) *r1);pos.add(x0);pos.add(y0);pos.add(z0);pos.add(x1);pos.add(y1);pos.add(z1);}}ByteBuffer pBB =BufferUtil.list2ByteBuffer(pos);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, pBB);gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, pos.size()/3);}}
2、BufferUtil.java 添加 arr2FloatBuffer方法
public static FloatBuffer arr2FloatBuffer(float[] arr){FloatBuffer fbb =FloatBuffer.allocate(arr.length);fbb.order();fbb.put(arr);fbb.position(0);return fbb;}
3、新建 MyLightingRenderer1.java
/* * 光照 * openGL分为三种光 * 环境光(全局光 ambient light) * 散射光(diffuse light) * 镜面光(specular light) */public class MyLightingRenderer1 extends MyAbstractRenderer {public void onSurfaceCreated(GL10 gl, EGLConfig arg1) { //设置清屏色(背景) gl.glClearColor(0, 0, 0, 1); //启用顶点缓冲区 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST);}protected void drawBefore(GL10 gl) {//清除颜色缓冲区 |深度缓冲区gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);}protected void draw(GL10 gl) {//启用光照gl.glEnable(GL10.GL_LIGHTING);//全局 环境光//默认值是{0.2 ,0.2 ,0.2 ,1.f} 是非常暗淡float []global_ambient ={1f ,0f ,1f ,1f};gl.glLightModelfv(GL10.GL_LIGHT_MODEL_AMBIENT, BufferUtil.arr2FloatBuffer(global_ambient));//gl.glLightModelfv(GL10.GL_LIGHT_MODEL_AMBIENT, global_ambient, 0);//设置材料属性float []gray ={1f ,0f ,0f ,1.0f};//反射率//openGL ES 支持双面 ,openGL 支持 背面、正面、双面//由于 android 使用的是 openGL ES//正面 背面 双面//指定 光 //反射率gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT_AND_DIFFUSE, BufferUtil.arr2FloatBuffer(gray));gl.glColor4f(1, 0, 0, 1);Draw.drawSphere(gl, 0.4f, 20, 20);}}
4、由于
float []gray ={1f ,0f ,0f ,1.0f};//反射率
反射的只有红光
运行结果
5、设置可以材料反射 红蓝光
float []gray ={1f ,0f ,1f ,1.0f};//反射率运行结果
0 0
- openGL es 5:光照
- OpenGL ES 光照
- OpenGl ES光照
- OpenGL ES光照
- OpenGL ES 光照效果
- OpenGL ES 2.0 - 光照
- android opengl es 光照效果
- [OpenGL ES 07]光照原理
- Android OpenGL ES 光照模型
- OpenGL ES 镜面光照
- OpenGL ES 简单光照学习
- OpenGL ES 光照(一)
- OpenGL ES 光照(二)
- OpenGL ES 光照(三)
- OpenGL ES系列 之 提高-3:光照
- android opengl es--纹理映射,光照
- [OpenGL ES 07-1]光照原理
- [OpenGL ES 07-1]光照原理
- vim 配置vim
- STM32学习笔记——中断
- ZOJ 3080 ChiBi [图论]
- 路由交换基本命令+一些笔记
- (转)Android中用OpenGL ES Tracer分析绘制过程
- OpenGL ES 光照
- HDU 5372 - Segment Game(树状数组)
- 第六章 项目整体管理
- 祝贺自己的软件《万能数据库查询分析器》在非凡软件站和太平洋电脑的下载排行榜分别名列第1和第2
- 认知http
- How to check which certificate was used to sign my app
- POJ 2312 Battle City
- 【Android基础】Android中的Intent详解
- ORACLE分页查询SQL语法