AndroidOpenGLES3D基础教程二.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AndroidOpenGLES3D基础教程二

接着上一节,下面我想从简单的点绘制来讨论起,例子是一个螺旋的弹簧,由点绘制组成。(无论如何我还是希望学习的同学,从这些很基础的东西,了解透然后学后面的API的调用实现)。 AbstractRenderer该抽象类就是上一节说到的对Renderer的一层包装。由于上一节已经详细讲说了其中的每一个函数的含义,这里就不做多讲解,代码如下: public abstract class AbstractRenderer implements Renderer { // 绘制画面过程调用 @Override public void onDrawFrame(GL10 gl) { gl.glDisable(GL10.GL_DITHER); // 关闭抗抖动 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// 清除缓存 gl.glMatrixMode(GL10.GL_MODELVIEW);// 设置矩阵:模式矩阵 gl.glLoadIdentity();// 设置为单位矩阵 GLU.gluLookAt(gl, 0, 0, -4f, 0, 0, 0, 0, 1f, 0);// 此处相当于设置观看地点,被观看的地点以及观看的角度 gl.glTranslatef(0, 0, -4f); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);// 启用顶点坐标数组 draw(gl);// 绘制 } // 当绘制面改变时(如 窗口大小改变) @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float radio = (float) width / height;// 宽高比例 gl.glViewport(0, 0, width, height);// 设置可视窗口 gl.glMatrixMode(GL10.GL_PROJECTION);// 设置矩阵为投影矩阵 gl.glLoadIdentity();// 改变时一样要记得 设置为单位矩阵( 重点) // gl.glFrustumf(-radio, radio, -1, 1, 0, 1);// 投影截头锥体 gl.glOrthof(-width / 2f, width / 2f, -height / 2f, height / 2f, -1000f, 1000f); } // 成功创建画面时 @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 示意快速矫正透视图 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); // 使用颜色刷屏 gl.glClearColor(0.5f, 0.5f, 0.5f, 1); // 着色模式:平滑着色 gl.glShadeModel(GL10.GL_SMOOTH); //打开颜色混淆 gl.glEnable(GL10.GL_BLEND); // 启用深度检测 gl.glEnable(GL10.GL_DEPTH_TEST); } // 此方法用于绘制过程 protected abstract void draw(GL10 gl); } 在这里注意几点不同:首先,在onSurfaceChanged函数中,我没有用到上一节的glFrustumf函数,在这里用了另外一个函数glOrthox,他们之间区别是什么,可以从参考下图: 由于本人水平有限,加上这个工具又各种问题,所以就画出了这个模型,简单解释一下,第一幅图就是glOrthox在坐标中的立方体就是我们能看到的空间,所有在立方体中的点都可以映射到屏幕上,他自动会适应屏幕大小,glFrumstumf就是上图的平截头体,而和第一幅图一样我们能看到的空间就是这个平截头体,这个头体中间的所用物体都会映射到屏幕上。 其次,我们要注意的地方就是,在onDrawFrame中GLU.gluLookAt(gl, 0, 0, -4, 0, 0, 0, 0, 1, 0);该函数的意思,如果大家注意到上面那个图的话就可以看到,是不是有一个观察点,那么观察点及其状况就是这里所设置的。这里后面的9个参数是三个三维坐标,第一个坐标表示眼睛的地点,第二个坐标表示眼睛观察的坐标点,第三个表示眼睛观察的角度。 大家可以调节这些参数来真正的体验一下它具体的实现。 p

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档