已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录目录 1主菜单主菜单 2 1 1ANDROID OPENGL 画球 画圆 2 1 2PERFORMANCE 8 1 3IDENTICAL 8 1 4SCALE 规模 8 1 5ANDROID 光学建模知识 有时间多看一下 9 1 63D 绘图基本概念 9 1 7ANDROID GL 纹理怎么理解 19 1 8ANDROID 3D 纹理 球的纹理 31 1 9ANDROID OPENGL 分享心得 47 1 10GL 中画正方体如何定义顶点BUFFER COLORBUFFER 索引INDEXBUFFER 49 1 10 1建立脚本 61 1 10 2 61 2智力拼图项目智力拼图项目 61 2 1目的 61 2 2最终效果 61 3常用命令常用命令 62 3 1ECLIPSE连不上模拟器的问题 62 3 2 64 3 2 1 64 1 1 主菜单主菜单 1 11 1AndroidAndroid OpenGLOpenGL 画球画球 画圆画圆 做了 2 个简单的类 一个是描述球的 一个是平面圆的 public class Ball private int slices 36 越大越圆滑 private int stacks 24 同 private FloatBuffer normalsBuffers private FloatBuffer slicesBuffers private float yAngle private float zAngle float radius 1 3f public Ball slicesBuffers new FloatBuffer slices normalsBuffers new FloatBuffer slices for int i 0 i slices i float vertexCoords new float 6 stacks 1 float normalCoords new float 6 stacks 1 double alpha0 i 2 Math PI slices double alpha1 i 1 2 Math PI slices float cosAlpha0 float Math cos alpha0 float sinAlpha0 float Math sin alpha0 float cosAlpha1 float Math cos alpha1 float sinAlpha1 float Math sin alpha1 for int j 0 j stacks j double beta j Math PI stacks Math PI 2 float cosBeta float Math cos beta float sinBeta float Math sin beta setXYZ vertexCoords 6 j radius cosBeta cosAlpha1 radius sinBeta radius cosBeta sinAlpha1 setXYZ vertexCoords 6 j 3 radius cosBeta cosAlpha0 radius sinBeta radius cosBeta sinAlpha0 setXYZ normalCoords 6 j cosBeta cosAlpha1 sinBeta cosBeta sinAlpha1 setXYZ normalCoords 6 j 3 cosBeta cosAlpha0 sinBeta cosBeta sinAlpha0 slicesBuffers i FloatBuffer wrap vertexCoords normalsBuffers i FloatBuffer wrap normalCoords public void setXYZ float vector int offset float x float y float z vector offset x vector offset 1 y vector offset 2 z public void draw GL10 gl gl glLoadIdentity gl glTranslatef 0 0f 0 0f 7 0f gl glColor4f 1 0f 0 2f 0 3f 1 0f gl glRotatef yAngle 1 0f 0 0f 0 0f gl glRotatef zAngle 0 0f 1 0f 0 0f for int i 0 i slices i gl glVertexPointer 3 GL10 GL FLOAT 0 slicesBuffers i gl glDrawArrays GL10 GL TRIANGLE STRIP 0 2 stacks 1 gl glEnableClientState GL10 GL VERTEX ARRAY public void setyAngle float yAngle this yAngle yAngle public void setzAngle float zAngle this zAngle zAngle public class Oval private float vertices new float 720 private FloatBuffer verBuffer private float yAngle private float zAngle public Oval 初始化圆形数据 for int i 0 i 720 i 2 x 坐标 vertices i float Math cos DegToRad i 1 y 坐标 vertices i 1 float Math sin DegToRad i 1 设置圆形顶点数据 ByteBuffer qbb ByteBuffer allocateDirect vertices length 4 qbb order ByteOrder nativeOrder verBuffer qbb asFloatBuffer verBuffer put vertices verBuffer position 0 public float DegToRad float deg return float 3 14159265358979323846 deg 180 0 public void draw GL10 gl 重置投影矩阵 gl glLoadIdentity 移动操作 移入屏幕 Z 轴 5 个像素 x y z gl glTranslatef 0 0f 0 0f 5 0f 旋转 angle x y z gl glRotatef yAngle 0 0f 1 0f 0 0f gl glRotatef zAngle 1 0f 0 0f 0 0f 设置当前色为红色 R G B Alpha gl glColor4f 1 0f 0 1f 0 1f 1 0f 设置顶点类型为浮点坐标 gl glVertexPointer 2 GL10 GL FLOAT 0 verBuffer 打开顶点数组 gl glEnableClientState GL10 GL VERTEX ARRAY 向 OGL 发送实际画图指令 gl glDrawArrays GL10 GL TRIANGLE FAN 0 360 画图结束 gl glFinish public void setyAngle float yAngle this yAngle yAngle public void setzAngle float zAngle this zAngle zAngle 这个是 renderer 类 声明了 Ball 和 Oval 变量 public class GLRender implements Renderer Oval o new Oval Ball b new Ball 度到弧度的转换 Override public void onDrawFrame GL10 gl gl glClear GL10 GL COLOR BUFFER BIT GL10 GL DEPTH BUFFER BIT gl glMatrixMode GL10 GL MODELVIEW gl glLoadIdentity gl glEnable GL10 GL CULL FACE gl glLightModelx GL10 GL LIGHT MODEL TWO SIDE GL10 GL FALSE o draw gl 画圆 b draw gl 画球 public void setyAngle float yAngle b setyAngle yAngle o setyAngle yAngle public void setzAngle float zAngle b setzAngle zAngle o setzAngle zAngle Override public void onSurfaceChanged GL10 gl int width int height if height 0 height 1 gl glViewport 0 0 width height gl glMatrixMode GL10 GL PROJECTION gl glLoadIdentity GLU gluPerspective gl 45 0f float width float height 1 0f 100 0f Override public void onSurfaceCreated GL10 gl EGLConfig config gl glShadeModel GL10 GL SMOOTH gl glClearColor 0 0 0 0 gl glClearDepthf 1 0f gl glEnable GL10 GL DEPTH TEST gl glDepthFunc GL10 GL LEQUAL gl glHint GL10 GL PERSPECTIVE CORRECTION HINT GL10 GL NICEST gl glCullFace GL10 GL BACK gl glEnable GL10 GL LIGHT0 最后是 GLSurfaceView 类 public class MyGLSurfaceView extends GLSurfaceView GLRender myRenderer 自定义的渲染器 private final float TOUCH SCALE FACTOR 180 0f 320 角度缩放比例 private float mPreviousY 上次的触控位置 Y 坐标 private float mPreviousX 上次的触控位置 X 坐标 float yAngle 0 绕 y 轴旋转的角度 float zAngle 0 绕 z 轴旋转的角度 public MyGLSurfaceView Context context super context myRenderer new GLRender 创建渲染器 this setRenderer myRenderer 设置渲染器 this setRenderMode GLSurfaceView RENDERMODE CONTINUOUSLY 设置渲 染模式 Override public boolean onTouchEvent MotionEvent e 触摸事件的回调方法 float x e getX 得到 x 坐标 float y e getY 得到 y 坐标 switch e getAction case MotionEvent ACTION MOVE 触控笔移动 float dy y mPreviousY 计算触控笔 Y 位移 float dx x mPreviousX 计算触控笔 X 位移 yAngle dx TOUCH SCALE FACTOR 设置沿 y 轴旋转角度 zAngle dy TOUCH SCALE FACTOR 设置沿 z 轴旋转角度 myRenderer setyAngle yAngle myRenderer setzAngle zAngle requestRender 重绘画面 mPreviousY y 记录触控笔位置 mPreviousX x 记录触控笔位置 return true 返回 true 重写了 ontouch 事件 通过 x y 计算出变化的角度 可以让图形做简单的转动 改一改就可 以平动了 不过球因为没有做处理 只是用单一颜色绘制的 所以看起来和圆差不多 可以加上颜色数组 就比较明显了 本篇文章来源于 Linux 公社网站 原文链接 1 21 2 PerformancePerformance 业绩 效能 1 31 3IdenticalIdentical 相同的 1 41 4ScaleScale 规模规模 规模 尺寸 比例尺 Foundational 基础 Manipulate 操纵 Graphics 图形 Geometry 几何 Crossplatform 跨平台 Capture 捕捉 Compression 压缩 Coordinates 坐标 Square 正方形 1 51 5AndroidAndroid 光学建模知识 有时间多看一下光学建模知识 有时间多看一下 内容导航 第 1 页 第 2 页 OpenGL 概念建立 第 3 页 Windows NT 环境下的 OpenGL第 4 页 OpenGL 基本程序结构 第 5 页 OpenGL 数据类型和函数名第 6 页 OpenGL 辅助库的基本使用 第 7 页 OpenGL 建模第 8 页 OpenGL 变换 第 9 页 OpenGL 颜色第 10 页 OpenGL 光照 第 11 页 位图和图像第 12 页 纹理映射 第 13 页 复杂物体建模第 14 页 特殊光处理 第 15 页 效果处理第 16 页 显示列表 1 61 63D3D 绘图基本概念绘图基本概念 发表于 2011 年 05 月 30 日 由 guidebee 前面介绍了使用 Android 编写 OpenGL ES 应用的程序框架 本篇介 绍 3D 绘图的一些基本构成要素 最终将实现一个多边形的绘制 一个 3D 图形通常是由一些小的基本元素 顶点 边 面 多边形 构成 每个基本元素都可以单独来操作 Vertex 顶点 顶点 顶点是 3D 建模时用到的最小构成元素 顶点定义为两条或是多条边 交会的地方 在 3D 模型中一个顶点可以为多条边 面或是多边形所 共享 一个顶点也可以代表一个点光源或是 Camera 的位置 下图中 标识为黄色的点为一个顶点 Vertex 在 Android 系统中可以使用一个浮点数数组来定义一个顶点 浮点数 数组通常放在一个 Buffer java nio 中来提高性能 比如 下图中定义了四个顶点和对应的 Android 顶点定义 1 2 3 4 5 6 private float vertices 1 0f 1 0f 0 0f 0 Top Left 1 0f 1 0f 0 0f 1 Bottom Left 1 0f 1 0f 0 0f 2 Bottom Right 1 0f 1 0f 0 0f 3 Top Right 为了提高性能 通常将这些数组存放到 java io 中定义的 Buffer 类中 1 2 3 4 5 6 7 a float is 4 bytes therefore we multiply the number if vertices with 4 ByteBuffer vbb ByteBuffer allocateDirect vertices length 4 vbb order ByteOrder nativeOrder FloatBuffer vertexBuffer vbb asFloatBuffer vertexBuffer put vertices vertexBuffer position 0 有了顶点的定义 下面一步就是如何将它们传给 OpenGL ES 库 OpenGL ES 提供一个成为 管道 Pipeline 的机制 这个管道定义了一 些 开关 来控制 OpenGL ES 支持的某些功能 缺省情况这些功能是关 闭的 如果需要使用 OpenGL ES 的这些功能 需要明确告知 OpenGL 管道 打开所需功能 因此对于我们的这个示例 需要告诉 OpenGL 库打开 Vertex buffer 以便传入顶点坐标 Buffer 要注意的使用完某个 功能之后 要关闭这个功能以免影响后续操作 1 2 3 4 5 6 7 8 Enabled the vertex buffer for writing and to be used during rendering gl glEnableClientState GL10 GL VERTEX ARRAY OpenGL docs Specifies the location and data format of an array of vertex coordinates to use when rendering gl glVertexPointer 3 GL10 GL FLOAT 0 vertexBuffer OpenGL docs When you are done with the buffer don t forget to disable it Disable the vertices buffer gl glDisableClientState GL10 GL VERTEX ARRAY OpenGL docs Edge 边 边 边定义为两个顶点之间的线段 边是面和多边形的边界线 在 3D 模 型中 边可以被相邻的两个面或是多边形形共享 对一个边做变换将 影响边相接的所有顶点 面或多边形 在 OpenGL 中 通常无需直接 来定义一个边 而是通过顶点定义一个面 从而由面定义了其所对应 的三条边 可以通过修改边的两个顶点来更改一条边 下图黄色的线 段代表一条边 Face 面 在 OpenGL ES 中 面特指一个三角形 由三个顶点和三条边构成 对 一个面所做的变化影响到连接面的所有顶点和边 面多边形 下图黄 色区域代表一个面 定义面的顶点的顺序很重要定义面的顶点的顺序很重要 在拼接曲面的时候 用来定义面的顶点的 顺序非常重要 因为顶点的顺序定义了面的朝向 前向或是后向 为 了获取绘制的高性能 一般情况不会绘制面的前面和后面 只绘制面 的 前面 虽然 前面 后面 的定义可以应人而易 但一般为所有的 前面 定义统一的顶点顺序 顺时针或是逆时针方向 下面代码设置逆时针方法为面的 前面 1gl glFrontFace GL10 GL CCW 打开 忽略 后面 设置 1gl glEnable GL10 GL CULL FACE 明确指明 忽略 哪个面的代码如下 1gl glCullFace GL10 GL BACK Polygon 多边形 多边形 多边形由多个面 三角形 拼接而成 在三维空间上 多边形并一定 表示这个 Polygon 在同一平面上 这里我们使用缺省的逆时针方向代 表面的 前面 Front 下图黄色区域为一个多边形 来看一个多边形的示例在 Android 系统如何使用顶点和 buffer 来定义 如下图定义了一个正方形 对应的顶点和 buffer 定义代码 1private short indices 0 1 2 0 2 3 2 3 4 5 6 7 8 To gain some performance we also put this ones in a byte buffer short is 2 bytes therefore we multiply the number if vertices with 2 ByteBuffer ibb ByteBuffer allocateDirect indices length 2 ibb order ByteOrder nativeOrder ShortBuffer indexBuffer ibb asShortBuffer indexBuffer put indices indexBuffer position 0 Render 渲染 渲染 我们已定义好了多边形 下面就要了解如和使用 OpenGL ES 的 API 来绘制 渲染 这个多边形了 OpenGL ES 提供了两类方法来绘制一 个空间几何图形 public abstract void glDrawArrays int mode int first int count 使用 VetexBuffer 来绘制 顶点的顺序由 vertexBuffer 中 的顺序指定 public abstract void glDrawElements int mode int count int type Buffer indices 可以重新定义顶点的顺序 顶点的顺序由 indices Buffer 指定 前面我们已定义里顶点数组 因此我们将采用 glDrawElements 来绘 制多边形 同样的顶点 可以定义的几何图形可以有所不同 比如三个顶点 可 以代表三个独立的点 也可以表示一个三角形 这就需要使用 mode 来指明所需绘制的几何图形的基本类型 GL POINTS 绘制独立的点 GL LINE STRIP 绘制一系列线段 GL LINE LOOP 类同上 但是首尾相连 构成一个封闭曲线 GL LINES 顶点两两连接 为多条线段构成 GL TRIANGLES 每隔三个顶点构成一个三角形 为多个三角形组成 GL TRIANGLE STRIP 每相邻三个顶点组成一个三角形 为一系列相接三角形构成 GL TRIANGLE FAN 以一个点为三角形公共顶点 组成一系列相邻的三角形 下面可以来绘制正方形了 在项目中添加一个 Square java 定义如下 1 71 7androidandroid glgl 纹理怎么理解纹理怎么理解 相关阅读 Android 3D 系列之光效篇 Android 3D 系列之入门实践篇 Android 3D 系列之纹理篇 Android 3D 系列之基本概念篇 本篇文章来源于 Linux 公社网站 原文链接 Android OpenGL es 纹理坐标设定与贴图规则 2010 11 17 21 17 515 3 人阅读 当 opengl 对一个四方形进行贴图时 会定义纹理贴图坐标 一串数组 相信 初学 openggl es 者看到后会很头疼 不知道写得是什么东西 现在就将我的 研究成果与大家分享下 当纹理映射启动后绘图时 你必须为 OpenGL ES 提供其他数据 即顶点数组 中各顶点的纹理坐标 纹理坐标定义了图像的哪一部分将被映射到多边形 它 的工作方式有点奇怪 下面看下在 android 平台下 Opengl 纹理系统坐标 左下角为原点 我们现在讨论怎样使用这些纹理坐标 当我们指定顶点数组中的顶点时 我们需要在另一个数组中提供纹 理坐标 它称为纹理坐标数组 这里需要注意定义坐标数组顺序 这很关键 float texCoords new float FRONT 0 0f 0 0f 1 0f 0 0f 0 0f 1 0f 1 0f 1 0f 效果如下 如果我们想截取图片右上角部分做纹理 按照上面方法可获的数组 float texCoords new float FRONT 0 5f 0 5f 1f 0 5f 0 5f 1f 1f 1f 效果如下 我们看下贴图的原始文件 你会发现截屏中的图片 y 轴是颠倒的 其实这是 android 图像坐标系统与 Opengl es 坐标系统不一致导 致的 最简单的修正办法将原始图片用工具翻转过来 这样会比用程序翻转节省很多性能 资源是宝贵的 三角形纹理映射 只要按照我们的映射规则 便可以顺利完成映射 float texCoords new float 0 0f 0 0f 1 0f 0 0f 0 5f 1 0f 效果 看到这里应该知道纹理坐标数组规则定义的意义了吧 平铺与箔拉 我们的纹理坐标系统在两个轴上都是从 0 0 到 1 0 如果设置超出此范围的值会怎么样 根据视图的设置 方式有两种选择 平铺 也叫重复 一种选择是平铺纹理 按 OpenGL 的术语 也叫 重复 如果我们将第一个纹理坐标数组的所有 1 0 改为 2 0 static const GLfloat texCoords 0 0 2 0 2 0 2 0 0 0 0 0 2 0 0 0 我们可以通过 glTexParameteri 函数设置 glTexParameterf GL TEXTURE 2D GL TEXTURE WRAP S GL10 GL REPEAT glTexParameterf GL TEXTURE 2D GL TEXTURE WRAP T GL10 GL REPEAT 箝位 另一种可能的选择是让 OpenGL ES 简单地将超过 1 0 的值限制为 1 0 任何低于 0 0 的值限制为 0 0 这实际会引起边沿像素重复 我们可以通过 glTexParameteri 函数设置 glTexParameterf GL TEXTURE 2D GL TEXTURE WRAP S GL CLAMP TO EDGE glTexParameterf GL TEXTURE 2D GL TEXTURE WRAP T GL CLAMP TO EDGE 1 public class CubeRenderer implements Renderer 2 3 Bitmap bmp 4 float box new float 5 FRONT 6 0 5f 0 5f 0 5f 7 0 5f 0 5f 0 5f 8 0 5f 0 5f 0 5f 9 0 5f 0 5f 0 5f 10 BACK 11 0 5f 0 5f 0 5f 12 0 5f 0 5f 0 5f 13 0 5f 0 5f 0 5f 14 0 5f 0 5f 0 5f 15 LEFT 16 0 5f 0 5f 0 5f 17 0 5f 0 5f 0 5f 18 0 5f 0 5f 0 5f 19 0 5f 0 5f 0 5f 20 RIGHT 21 0 5f 0 5f 0 5f 22 0 5f 0 5f 0 5f 23 0 5f 0 5f 0 5f 24 0 5f 0 5f 0 5f 25 TOP 26 0 5f 0 5f 0 5f 27 0 5f 0 5f 0 5f 28 0 5f 0 5f 0 5f 29 0 5f 0 5f 0 5f 30 BOTTOM 31 0 5f 0 5f 0 5f 32 0 5f 0 5f 0 5f 33 0 5f 0 5f 0 5f 34 0 5f 0 5f 0 5f 35 36 37 float lightAmbient new float 0 5f 0 5f 0 6f 1 0f 环境光 38 float lightDiffuse new float 0 6f 0 6f 0 6f 1 0f 漫反射光 39 float lightPos new float 0 0 3 1 光源位置 40 41 因为进行光照处理 你必须告知系统你定义的模型各个面的方向 以便系统计算光影 情况 方向的描述是通过向量点来描述的 42 43 float norms new float 法向量数组 用于描述个顶点的方向 以此说明各个面 的方向 44 FRONT 45 0f 0f 1f 方向为 0 0 0 至 0 0 1 即 Z 轴正方向 46 0f 0f 1f 47 0f 0f 1f 48 0f 0f 1f 49 BACK 50 0f 0f 1f 51 0f 0f 1f 52 0f 0f 1f 53 0f 0f 1f 54 LEFT 55 1f 0f 0f 56 1f 0f 0f 57 1f 0f 0f 58 1f 0f 0f 59 RIGHT 60 1f 0f 0f 61 1f 0f 0f 62 1f 0f 0f 63 1f 0f 0f 64 TOP 65 0f 1f 0f 66 0f 1f 0f 67 0f 1f 0f 68 0f 1f 0f 69 BOTTOM 70 0f 1f 0f 71 0f 1f 0f 72 0f 1f 0f 73 0f 1f 0f 74 75 76 77 float texCoords new float 纹理坐标对应数组 78 FRONT 79 0 0f 0 0f 80 1 0f 0 0f 81 0 0f 1 0f 82 1 0f 1 0f 83 BACK 84 1 0f 0 0f 85 1 0f 1 0f 86 0 0f 0 0f 87 0 0f 1 0f 88 LEFT 89 1 0f 0 0f 90 1 0f 1 0f 91 0 0f 0 0f 92 0 0f 1 0f 93 RIGHT 94 1 0f 0 0f 95 1 0f 1 0f 96 0 0f 0 0f 97 0 0f 1 0f 98 TOP 99 0 0f 0 0f 100 1 0f 0 0f 101 0 0f 1 0f 102 1 0f 1 0f 103 BOTTOM 104 1 0f 0 0f 105 1 0f 1 0f 106 0 0f 0 0f 107 0 0f 1 0f 108 109 110 111 FloatBuffer cubeBuff 112 FloatBuffer normBuff 113 FloatBuffer texBuff 114 115 float xrot 0 0f 116 float yrot 0 0f 117 118 119 将 float 数组转换存储在字节缓冲数组 120 param arr 121 return 122 123 public FloatBuffer makeFloatBuffer float arr 124 ByteBuffer bb ByteBuffer allocateDirect arr length 4 分配缓冲空间 一个 float 占 4 个字节 125 bb order ByteOrder nativeOrder 设置字节顺序 其中 ByteOrder nativeOrder 是获取本机字节顺序 126 FloatBuffer fb bb asFloatBuffer 转换为 float 型 127 fb put arr 添加数据 128 fb position 0 设置数组的起始位置 129 return fb 130 131 132 public CubeRenderer Context c 133 TODO Auto generated constructor stub 134 cubeBuff makeFloatBuffer box 转换 float 数组 135 normBuff makeFloatBuffer norms 136 texBuff makeFloatBuffer texCoords 137 bmp BitmapFactory decodeResource c getResources R drawable face 138 139 140 141 protected void init GL10 gl 142 gl glClearColor 0 0f 0 0f 0 0f 1 0f 设置清屏时背景的颜色 R G B A 143 144 gl glEnable GL10 GL LIGHTING 启用光照 145 gl glEnable GL10 GL LIGHT0 开启光源 0 146 设置光照参数 也可以使用默认的 不设置 147 gl glLightfv GL10 GL LIGHT0 GL10 GL AMBIENT lightAmbient 0 148 gl glLightfv GL10 GL LIGHT0 GL10 GL DIFFUSE lightDiffuse 0 149 gl glLightfv GL10 GL LIGHT0 GL10 GL POSITION lightPos 0 150 151 gl glNormalPointer GL10 GL FLOAT 0 normBuff 152 gl glEnableClientState GL10 GL NORMAL ARRAY 153 154 使用纹理步骤 155 1 开启贴图 156 gl glEnable GL10 GL TEXTURE 2D 157 158 2 生成纹理 ID 159 int tmp tex new int 1 尽管只有一个纹理 但使用一个元素的数组 160 glGenTextures 申请个数 存放数组 偏移值 161 gl glGenTextures 1 tmp tex 0 向系统申请可用的 用于标示纹理的 ID 162 int texture tmp tex 0 163 164 3 绑定纹理 使得指定纹理处于活动状态 一次只能激活一个纹理 165 gl glBindTexture GL10 GL TEXTURE 2D texture 166 167 4 绑定纹理数据 传入指定图片 168 GLUtils texImage2D GL10 GL TEXTURE 2D 0 bmp 0 169 170 5 传递各个顶点对应的纹理坐标 171 gl glTexCoordPointer 2 GL10 GL FLOAT 0 texBuff 172 gl glEnableClientState GL10 GL TEXTURE COORD ARRAY 开启纹理坐标 数组 173 174 6 设置纹理参数 可选 175 下面的两行参数告诉 OpenGL 在显示图像时 当它比放大得原始的纹理大 176 GL TEXTURE MAG FILTER 或缩小得比原始得纹理小 GL TEXTURE MIN FILTER 177 时 OpenGL 采用的滤波方式 通常这两种情况下我都采用 GL LINEAR 这使得纹理从很远处 178 到离屏幕很近时都平滑显示 使用 GL LINEAR 需要 CPU 和显卡做更多的 运算 如果您的机器很慢 179 您也许应该采用 GL NEAREST 过滤的纹理在放大的时候 看起来马赛 克的很 您也可以结合这 180 两种滤波方式 在近处时使用 GL LINEAR 远处时 GL NEAREST 181 182 gl glTexParameterx GL10 GL TEXTURE 2D GL10 GL TEXTURE MAG FILTER GL10 GL LINEAR 183 gl glTexParameterx GL10 GL TEXTURE 2D GL10 GL TEXTURE MIN FILTER GL10 GL LINEAR 184 185 186 gl glEnable GL10 GL DEPTH TEST 启用深度缓存 187 gl glEnable GL10 GL CULL FACE 启用背面剪裁 188 gl glClearDepthf 1 0f 设置深度缓存值 189 gl glDepthFunc GL10 GL LEQUAL 设置深度缓存比较函数 GL LEQUAL 表示新的像素的深度缓存值小于等于当前像素的深度缓存值 通过 gl glClearDepthf 1 0f 设置 时通过深度测试 190 gl glShadeModel GL10 GL SMOOTH 设置阴影模式 GL SMOOTH 191 192 193 Override 194 public void onSurfaceCreated GL10 gl EGLConfig config 195 TODO Auto generated method stub 196 init gl 197 198 199 Override 200 public void onSurfaceChanged GL10 gl int w int h 201 TODO Auto generated method stub 202 gl glViewport 0 0 w h 设置视窗 203 gl glMatrixMode GL10 GL PROJECTION 设置投影矩阵 204 gl glLoadIdentity 设置矩阵为单位矩阵 相当于重置矩阵 205 GLU gluPerspective gl 45 0f float w h 0 1f 10f 设置透视范围 206 207 208 Override 209 public void onDrawFrame GL10 gl 210 TODO Auto generated method stub 211 gl glClear GL10 GL COLOR BUFFER BIT GL10 GL DEPTH BUFFER BIT 清除屏幕和深度缓存 212 213 gl glMatrixMode GL10 GL MODELVIEW 切换至模型观察矩阵 214 gl glLoadIdentity 重置当前的模型观察矩阵 215 GLU gluLookAt gl 0 0 3 0 0 0 0 1 0 设置视点和模型中心位置 216 217 gl glVertexPointer 3 GL10 GL FLOAT 0 cubeBuff 设置顶点数据 218 gl glEnableClientState GL10 GL VERTEX ARRAY 219 220 gl glRotatef xrot 1 0 0 绕着 0 0 0 与 1 0 0 即 x 轴旋转 221 gl glRotatef yrot 0 1 0 222 223 gl glColor4f 1 0f 0 0 1 0f 设置颜色 红色 224 gl glDrawArrays GL10 GL TRIANGLE STRIP 0 4 绘制正方型 FRONT 面 225 gl glDrawArrays GL10 GL TRIANGLE STRIP 4 4 226 227 gl glColor4f 0 1 0f 0 1 0f 228 gl glDrawArrays GL10 GL TRIANGLE STRIP 8 4 229 gl glDrawArrays GL10 GL TRIANGLE STRIP 12 4 230 231 gl glColor4f 0 0 1 0f 1 0f 232 gl glDrawArrays GL10 GL TRIANGLE STRIP 16 4 233 gl glDrawArrays GL10 GL TRIANGLE STRIP 20 4 234 235 xrot 0 5f 236 yrot 0 5f 237 238 239 本篇文章来源于 Linux 公社网站 原文链接 1 81 8androidandroid 3D 3D 纹理纹理 球的纹理球的纹理 看了几天 3D 这些天才弄懂些画图 现在弄这个纹理烦得很 半懂半不懂的 这个 例子是我到网站下载的 感觉不错 先给大家看看 下期我再和大家讨论讨论 package wyf sj import android app Activity import android os Bundle import android widget CompoundButton import android widget LinearLayout import android widget ToggleButton import android widget CompoundButton OnCheckedChangeListener public class Sample6 2 extends Activity Called when the activity is first created MySurfaceView mGLSurfaceView Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main mGLSurfaceView new MySurfaceView this mGLSurfaceView requestFocus 获取焦点 mGLSurfaceView setFocusableInTouchMode true 设置为可触控 LinearLayout ll LinearLayout findViewById R id main liner ll addView mGLSurfaceView ToggleButton tb ToggleButton this findViewById R id ToggleButton01 tb setOnCheckedChangeListener new OnCheckedChangeListener Override public void onCheckedChanged CompoundButton buttonView boolean isChecked mGLSurfaceView setSmoothFlag mGLSurfaceView isSmoothFlag package wyf sj import java io IOException import java io InputStream import javax microedition khronos egl EGLConfig import javax microedition khronos opengles GL10 import android content Context import android graphics Bitmap import android graphics BitmapFactory import android opengl GLSurfaceView import android opengl GLUtils import android view MotionEvent public class MySurfaceView extends GLSurfaceView private final float TOUCH SCALE FACTOR 180 0f 320 角度缩放比例 private SceneRenderer mRenderer 场景渲染器 private float mPreviousY 上次的触控位置 Y 坐标 private float mPreviousX 上次的触控位置 Y 坐标 private b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025贵州赤水市水务投资限责任公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025贵州茅台和义兴酒业分公司助力扶贫就业招聘302人易考易错模拟试题(共500题)试卷后附参考答案
- 2025贵州省遵义交通建设投资(集团)限公司招聘15人易考易错模拟试题(共500题)试卷后附参考答案
- 2025贵州习水县招聘事业单位人员(102人)易考易错模拟试题(共500题)试卷后附参考答案
- 高中英语阅读理解集锦(附答案)
- 2025福建福州地铁集团限公司社会招聘32人易考易错模拟试题(共500题)试卷后附参考答案
- 2025福建泉州市磁灶镇人民政府招聘编外工作人员6人重点基础提升(共500题)附带答案详解
- 2025福建南平市供电服务限公司招聘39人易考易错模拟试题(共500题)试卷后附参考答案
- 2025甘肃省平凉高速公路处甜永高速公路招聘898人易考易错模拟试题(共500题)试卷后附参考答案
- 2025湖南长沙市政府法制办公室所属事业单位招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2025江苏南通市通州区石港镇招聘便民服务中心人员2人笔试考试参考题库及答案解析
- 学堂在线 高技术与现代局部战争 章节测试答案
- 行政公文写作-报告(应用文写作课件)
- 巨量千川账户投放操作策略
- 消防栓定期检查记录表
- 年产10万吨甲醇蛋白项目可行性研究报告
- 中国地质大学地球科学概论教学课程pptpart5公开课获奖课件
- 糖尿病与肥胖
- GA 1016-2012枪支(弹药)库室风险等级划分与安全防范要求
- 2023年上海技术交易所有限公司招聘笔试模拟试题及答案解析
- 英语学习水循环课件
评论
0/150
提交评论