Android OpenGL ES2.0编程教程系列之投影和相机视图的应用(四)

35 篇文章 0 订阅
8 篇文章 0 订阅

原文链接

OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象。物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的:

  • Projection — 这个变换是基于他们所显示的GLSurfaceView的宽和高来调整绘制对象的坐标的。没有这个计算变换,通过OpenGL绘制的形状会在不同显示窗口变形。这个投影变化通常只会在OpenGL view的比例被确定或者在你渲染器的onSurfaceChanged()方法中被计算。想要了解更多的关于投影和坐标映射的相关信息,请看绘制对象的坐标映射
  • Camera View — 这个换是基于虚拟的相机的位置来调整绘制对象坐标的。需要着重注意的是,OpenGL ES并没有定义一个真实的相机对象,而是提供一个实用方法,通过变换绘制对象的显示来模拟一个相机。相机视图变换可能只会在你的GLSurfaceView被确定时被计算,或者基于用户操作或你应用程序的功能来动态改变。

本课程描述怎样创建投影和相机视图并将其应用的到你的GLSurfaceView的绘制对象上。

定义投影

投影变化的数据是在你GLSurfaceView.Renderer类的onSurfaceChanged()方法中被计算的。下面的示例代码是获取GLSurfaceView的高和宽,并通过Matrix.frustumM()方法用它们填充到投影变换矩阵中。

// mMVPMatrix is an abbreviation for "Model View Projection Matrix"
private final float[] mMVPMatrix = new float[16];
private final float[] mProjectionMatrix = new float[16];
private final float[] mViewMatrix = new float[16];

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);

    float ratio = (float) width / height;

    // this projection matrix is applied to object coordinates
    // in the onDrawFrame() method
    Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}
上面的代码填充有一个投影矩阵mProjectionMatrix, mProjectionMatrix可以在onFrameDraw()方法中与下一部分的相机视图结合在一起。

注意:如果仅仅只把投影矩阵应用的到你绘制的对象中,通常你只会得到一个非常空的显示。一般情况下,你还必须为你要在屏幕上显示的任何内容应用相机视图。
定义相机视图

通过在你的渲染器中添加相机视图变换作为你绘制过程的一部分来完成你的绘制图像的变换过程。在下面的代码中,通过Matrix.setLookAtM()方法计算相机视图变换,然后将其与之前计算出的投影矩阵结合到一起。合并后的矩阵接下来会传递给绘制的图形。

@Override
public void onDrawFrame(GL10 unused) {
    ...
    // Set the camera position (View matrix)
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

    // Calculate the projection and view transformation
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);

    // Draw shape
    mTriangle.draw(mMVPMatrix);
}

应用投影和相机变换

为了使用在上一部分内容中展示的投影和相机视图变换的合并矩阵,首先要在之前Triangle类中定义的定点着色器代码中添加一个矩阵变量:

public class Triangle {

    private final String vertexShaderCode =
        // This matrix member variable provides a hook to manipulate
        // the coordinates of the objects that use this vertex shader
        "uniform mat4 uMVPMatrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        // the matrix must be included as a modifier of gl_Position
        // Note that the uMVPMatrix factor *must be first* in order
        // for the matrix multiplication product to be correct.
        "  gl_Position = uMVPMatrix * vPosition;" +
        "}";

    // Use to access and set the view transformation
    private int mMVPMatrixHandle;

    ...
}
下一步,修改你的图形对象的draw()方法来接收联合变换矩阵,并将它们应用到图形中:

public void draw(float[] mvpMatrix) { // pass in the calculated transformation matrix
    ...

    // get handle to shape's transformation matrix
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

    // Pass the projection and view transformation to the shader
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

    // Draw the triangle
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(mPositionHandle);
}
一旦你正确的计算并应用投影和相机视图变换,你的绘图对象将会以正确的比例绘制,它看起来应该像下面这样:


图1、应用投影和相机变换绘制的三角形
现在你已经有一个可以以正确比例显示图形的应用了。是时候为你的图形添加运动了。


例程源码下载




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1   1.1 Android简介 1   1.2 版本分裂 3   1.3 谷歌的角色 3   1.3.1 Android开源项目 3   1.3.2 Android Market 4   1.3.3 挑战赛、设备播种计划   和谷歌I/O 4   1.4 Android的功能和体系结构 5   1.4.1 内核 6   1.4.2 运行库和Dalvik虚拟机 6   1.4.3 系统库 7   1.4.4 应用程序框架 8   1.5 软件开发工具包 8   1.6 开发人员社区 9   1.7 设备,设备,设备 9   1.7.1 硬件 9   1.7.2 设备的范围 10   1.8 所有设备之间的兼容性 15   1.9 不同的手机游戏 15   1.9.1 人手一台游戏机 16   1.9.2 随时上网 16   1.9.3 普通用户与游戏迷 17   1.9.4 市场很大,开发人员很少 17   1.10 小结 18   第2章 从Android SDK开始 19   2.1 搭建开发环境 19   2.1.1 安装JDK 20   2.1.2 安装Android SDK 20   2.1.3 安装Eclipse 21   2.1.4 安装ADT Eclipse插件 22   2.1.5 Eclipse快速浏览 23   2.1.6 一些实用的Eclipse快捷键 24   2.2 Android环境下的Hello World 25   2.2.1 创建项目 25   2.2.2 进一步分析项目 26   2.2.3 编写应用程序代码 27   2.3 运行和调试Android应用   程序 29   2.3.1 连接设备 29   2.3.2 创建一个Android虚拟   设备 29   2.3.3 运行应用程序 30   2.3.4 调试应用程序 32   2.3.5 LogCat和DDMS 34   2.3.6 使用ADB 36   2.4 小结 37   第3章 游戏开发基础 39   3.1 游戏类型 39   3.1.1 休闲游戏 40   3.1.2 益智游戏 41   3.1.3 动作和街机游戏 42   3.1.4 塔防游戏 44   3.1.5 创新 45   3.2 游戏设计:笔比代码更强大 46   3.2.1 游戏的核心机制 46   3.2.2 一个故事和一种艺术风格 47   3.2.3 画面和切换 48   3.3 代码:具体细节 52   3.3.1 应用程序和窗口管理 52   3.3.2 输入 53   3.3.3 文件I/O 56   3.3.4 音频 57   3.3.5 图形 60   3.3.6 游戏框架 69   3.4 小结 75   第4章 面向游戏开发人员的Android 77   4.1 定义一个Android应用程序:   清单文件 77   4.1.1 <manifest>元素 78   4.1.2 <application>元素 79   4.1.3 <activity>元素 80   4.1.4 <uses-permission>元素 82   4.1.5 <uses-feature>元素 83   4.1.6 <uses-sdk>元素 84   4.1.7 10个简单步骤建立Android   游戏项目 84   4.1.8 市场过滤器 86   4.1.9 定义游戏图标 87   4.2 Android API基础 87   4.2.1 创建测试项目 88   4.2.2 活动的生命周期 91   4.2.3 处理输入设备 96   4.2.4 文件处理 110   4.2.5 音频编程 116   4.2.6 播放音效 116   4.2.7 音乐流 119   4.2.8 基本图形编程 122   4.3 最佳实践 143   4.4 小结 144   第5章 Android游戏开发框架 145   5.1 制定计划 145   5.2 AndroidFileIO类 146   5.3 AndroidAudio、AndroidSound   和AndroidMusic 147   5.4 AndroidInput和Accelerometer-   Handler 152   5.4.1 AccelerometerHandler:手机   哪一面朝上 152   5.4.2 CompassHandler 153   5.4.3 Pool类:重用相当有用 154   5.4.4 KeyboardHandler 156   5.4.5 触摸处理程序 160   5.4.6 AndroidInput:优秀的   协调者 167   5.5 AndroidGraphics和   AndroidPixmap 169   5.5.1 处理不同屏幕大小和   分辨率的问题 169   5.5.2 AndroidPixmap:人物的   像素 174   5.5.3 AndroidGraphics:满足   绘图需求 174   5.5.4 AndroidFastRenderView 178   5.6 AndroidGame:合并所有   内容 180   5.7 小结 184   第6章 Mr. Nom入侵Android 185   6.1 创建资源 185   6.2 建立项目 187   6.3 MrNomGame:主要活动 187   6.3.1 资源:便捷的资源存储 188   6.3.2 设置:跟踪用户的选项设置   和高分榜 189   6.3.3 LoadingScreen:从磁盘获取   资源 191   6.4 主菜单画面 192   6.5 HelpScreen类 195   6.6 高分榜画面显示 197   6.6.1 渲染数字 198   6.6.2 画面的实现 199   6.7 抽象 201   6.7.1 抽象Mr. Nom的世界:   模型、视图、控制器 201   6.7.2 GameScreen类 211   6.8 小结 218   第7章 OpenGL ES介绍 219   7.1 OpenGL ES概述以及关注它的   原因 219   7.1.1 编程模型:一个比喻 220   7.1.2 投影 221   7.1.3 规范化设备空间和视口 223   7.1.4 矩阵 223   7.1.5 渲染管道 224   7.2 开始之前 225   7.3 GLSurfaceView:从2008年开始,   事情变得简单了 225   7.4 GLGame:实现游戏接口 228   7.5 绘制一个红色的三角形 235   7.5.1 定义视口 235   7.5.2 定义投影矩阵 235   7.5.3 指定三角形 238   7.5.4 综合示例 241   7.6 指定每个顶点的颜色 243   7.7 纹理映射:轻松地创建   壁纸 246   7.7.1 纹理坐标 247   7.7.2 上传位图 248   7.7.3 纹理过滤 249   7.7.4 释放纹理 250   7.7.5 有用的代码片段 251   7.7.6 启用纹理 251   7.7.7 综合示例 251   7.7.8 Texture类 253   7.8 索引顶点:重用是有好处的 255   7.8.1 代码整合 256   7.8.2 Vertices类 258   7.9 半透明混合处理 260   7.10 更多图元:点、线、条   和扇 263   7.11 2D变换:操作模型视图   矩阵 264   7.11.1 世界空间和模型空间 264   7.11.2 再次讨论矩阵 265   7.11.3 第一个使用平移的   示例 266   7.11.4 更多的变换 270   7.12 性能优化 273   7.12.1 测量帧率 273   7.12.2 Android 1.5平台下Hero的   奇特案例 275   7.12.3 使OpenGL ES渲染如此   慢的原因 275   7.12.4 移除不必要的状态   改变 276   7.12.5 减小纹理大小意味着需要   获取更少的像素 278   7.12.6 减少OpenGL ES/JNI方法的   调用 278   7.12.7 绑定顶点的概念 279   7.12.8 写在结束之前 282   7.13 小结 283   第8章 2D游戏编程技巧 285   8.1 写在开始 285   8.2 向量 286   8.2.1 使用向量 286   8.2.2 一点三角学的知识 288   8.2.3 实现一个向量类 289   8.2.4 一个简单的用法示例 292   8.3 2D物理定律浅析 296   8.3.1 牛顿和欧拉,永远的   好朋友 296   8.3.2 力和质量 297   8.3.3 理论上的运动 298   8.3.4 运动的实现 299   8.4 2D碰撞检测和对象表示 302   8.4.1 边界形状 303   8.4.2 构造边界形状 304   8.4.3 游戏对象的属性 306   8.4.4 宽阶段和窄阶段碰撞检测 307   8.4.5 一个详细的示例 313   8.5 2D照相机 324   8.5.1 Camera2D类 327   8.5.2 示例 328   8.6 纹理图集 329   8.7 纹理区域、精灵和批处理:   隐藏OpenGL ES 334   8.7.1 TextureRegion类 334   8.7.2 SpriteBatcher类 335   8.8 精灵动画 343   8.8.1 Animation类 344   8.8.2 示例 345   8.9 小结 348   第9章 Super Jumper:一个2D   OpenGL ES游戏 351   9.1 核心游戏机制 351   9.2 背景故事和艺术风格 352   9.3 画面和切换 352   9.4 定义游戏世界 353   9.5 创建资源 355   9.5.1 UI元素 355   9.5.2 使用点阵字体处理文本 356   9.5.3 游戏元素 358   9.5.4 用于救援的纹理图集 359   9.5.5 音乐与音效 360   9.6 实现Super Jumper 361   9.6.1 Assets类 361   9.6.2 Settings类 364   9.6.3 主活动 366   9.6.4 Font类 367   9.6.5 GLScreen 369   9.6.6 主菜单画面 369   9.6.7 帮助画面 372   9.6.8 高分画面 374   9.6.9 模拟类 377   9.6.10 游戏画面 390   9.6.11 WorldRenderer类 397   9.7 是否需要优化 401   9.8 小结 402   第10章 OpenGL ES:进入3D   世界 403   10.1 准备工作 403   10.2 3D中的顶点 404   10.2.1 Vertices3:存储3D空间   位置 404   10.2.2 示例 406   10.3 透视投影:越近则越大 409   10.4 z-buffer:化混乱为有序 411   10.4.1 完善上一个例子 412   10.4.2 混合:身后空无一物 413   10.4.3 z-buffer精度与   z-fighting 416   10.5 定义3D网格 417   10.5.1 立方体:3D中的“Hello   World” 417   10.5.2 一个示例 419   10.6 矩阵和变换 422   10.6.1 矩阵堆栈 423   10.6.2 用矩阵堆栈实现分层   系统 425   10.6.3 木箱太阳系的简单   实例 425   10.7 小结 433   第11章 3D编程技巧 435   11.1 准备工作 435   11.2 3D中的向量 436   11.3 OpenGL ES中的光照 440   11.3.1 光照的工作机制 440   11.3.2 光源 441   11.3.3 材质 442   11.3.4 OpenGL ES中如何对光照   过程进行运算:顶点   法线 442   11.3.5 实践 443   11.3.6 关于OpenGL ES中光照   应用的一些建议 456   11.4 材质变换(Mipmapping) 456   11.5 简单的照相机 460   11.5.1 第一人称照相机或欧拉   照相机 460   11.5.2 一个欧拉照相机的示例 463   11.5.3 跟随照相机 468   11.6 加载模块 470   11.6.1 Wavefront OBJ格式 470   11.6.2 OBJ加载器的实现 471   11.6.3 使用OBJ加载器 475   11.6.4 关于加载模型的一些   建议 475   11.7 3D中的一些物理知识 476   11.8 碰撞检测与3D中的对象   表达法 477   11.8.1 3D中的边界形状 477   11.8.2 边界球重叠测试 477   11.8.3 GameObject3D与Dynamic-   GameObject3D 478   11.9 小结 479   第12章 Droid Invaders游戏 481   12.1 游戏的核心机制 481   12.2 游戏的故事背景与艺术   风格 483   12.3 屏幕与场景切换 483   12.4 定义游戏世界 484   12.5 创建资源 485   12.5.1 用户界面的资源 485   12.5.2 游戏资源 486   12.5.3 音效与音乐 488   12.6 开始编写代码 488   12.7 Assets类 489   12.8 Settings类 492   12.9 主活动 493   12.10 主菜单 494   12.11 游戏设置画面 496   12.12 模拟类 499   12.12.1 Shield类 499   12.12.2 Shot类 500   12.12.3 Ship类 500   12.12.4 Invader类 502   12.12.5 World类 505   12.13 GameScreen类 510   12.14 WorldRender类 516   12.15 游戏优化 521   12.16 小结 522   第13章 发布游戏 523   13.1 关于测试 523   13.2 成为注册开发人员 524   13.3 给游戏的APK包签名 524   13.4 将游戏发布至Market 527   13.4.1 上传资源 527   13.4.2 产品详情 528   13.4.3 发布选项 528   13.4.4 发布 529   13.4.5 市场推广 529   13.5 开发人员控制台 529   13.6 小结 530   第14章 进阶内容 531   14.1 社交网络 531   14.2 位置识别 531   14.3 多玩家功能 532   14.4 OpenGL ES 2.0以及更多   内容 532   14.5 框架及引擎 532   14.6 网络资源 534   14.7 结束语 534
第1章 android,后起之秀  1.1 android简介  1.2 版本分裂  1.3 谷歌的角色  1.3.1 android开源项目  1.3.2 android market  1.3.3 挑战赛、设备播种计划和谷歌i/o  1.4 android的功能和体系结构  1.4.1 内核  1.4.2 运行库和dalvik虚拟机  1.4.3 系统库  1.4.4 应用程序框架  1.5 软件开发工具包  1.6 开发人员社区  1.7 设备,设备,设备  1.7.1 硬件  1.7.2 设备的范围  1.8 所有设备之间的兼容性  1.9 不同的手机游戏  1.9.1 人手一台游戏机  1.9.2 随时上网  1.9.3 普通用户与游戏迷  1.9.4 市场很大,开发人员很少  1.10 小结 第2章 从android sdk开始  2.1 搭建开发环境  2.1.1 安装jdk  2.1.2 安装android sdk  2.1.3 安装eclipse  2.1.4 安装adt eclipse插件  2.1.5 eclipse快速浏览  2.1.6 一些实用的eclipse快捷键  2.2 android环境下的hello world  2.2.1 创建项目  2.2.2 进一步分析项目  2.2.3 编写应用程序代码  2.3 运行和调试android应用程序  2.3.1 连接设备  2.3.2 创建一个android虚拟设备  2.3.3 运行应用程序  2.3.4 调试应用程序  2.3.5 logcat和ddms  2.3.6 使用adb  2.4 小结 第3章 游戏开发基础  3.1 游戏类型  3.1.1 休闲游戏  3.1.2 益智游戏  3.1.3 动作和街机游戏  3.1.4 塔防游戏  3.1.5 创新  3.2 游戏设计:笔比代码更强大  3.2.1 游戏的核心机制  3.2.2 一个故事和一种艺术风格  3.2.3 画面和切换  3.3 代码:具体细节  3.3.1 应用程序和窗口管理  3.3.2 输入  3.3.3 文件i/o  3.3.4 音频  3.3.5 图形  3.3.6 游戏框架  3.4 小结 第4章 面向游戏开发人员的android  4.1 定义一个android应用程序:清单文件  4.1.1 [manifest]元素  4.1.2 [application]元素  4.1.3 [activity]元素  4.1.4 [uses-permission]元素  4.1.5 [uses-feature]元素  4.1.6 [uses-sdk]元素  4.1.7 10个简单步骤建立android游戏项目  4.1.8 市场过滤器  4.1.9 定义游戏图标  4.2 android api基础  4.2.1 创建测试项目  4.2.2 活动的生命周期  4.2.3 处理输入设备  4.2.4 文件处理  4.2.5 音频编程  4.2.6 播放音效  4.2.7 音乐流  4.2.8 基本图形编程  4.3 最佳实践  4.4 小结 第5章 android游戏开发框架  5.1 制定计划  5.2 androidfileio类  5.3 androidaudio、androidsound和androidmusic  5.4 androidinput和accelerometer-handler  5.4.1 accelerometerhandler:手机哪一面朝上  5.4.2 compasshandler  5.4.3 pool类:重用相当有用  5.4.4 keyboardhandler  5.4.5 触摸处理程序  5.4.6 androidinput:优秀的协调者  5.5 androidgraphics和androidpixmap  5.5.1 处理不同屏幕大小和分辨率的问题  5.5.2 androidpixmap:人物的像素  5.5.3 androidgraphics:满足绘图需求  5.5.4 androidfastrenderview  5.6 androidgame:合并所有内容  5.7 小结 第6章 mr. nom入侵android  6.1 创建资源  6.2 建立项目  6.3 mrnomgame:主要活动  6.3.1 资源:便捷的资源存储  6.3.2 设置:跟踪用户的选项设置和高分榜  6.3.3 loadingscreen:从磁盘获取资源  6.4 主菜单画面  6.5 helpscreen类  6.6 高分榜画面显示  6.6.1 渲染数字  6.6.2 画面的实现  6.7 抽象  6.7.1 抽象mr. nom的世界:模型、视图、控制器  6.7.2 gamescreen类  6.8 小结 第7章 opengl es介绍  7.1 opengl es概述以及关注它的原因  7.1.1 编程模型:一个比喻  7.1.2 投影  7.1.3 规范化设备空间和视口  7.1.4 矩阵  7.1.5 渲染管道  7.2 开始之前  7.3 glsurfaceview:从2008年开始,事情变得简单了  7.4 glgame:实现游戏接口  7.5 绘制一个红色的三角形  7.5.1 定义视口  7.5.2 定义投影矩阵  7.5.3 指定三角形  7.5.4 综合示例  7.6 指定每个顶点的颜色  7.7 纹理映射:轻松地创建壁纸  7.7.1 纹理坐标  7.7.2 上传位图  7.7.3 纹理过滤  7.7.4 释放纹理  7.7.5 有用的代码片段  7.7.6 启用纹理  7.7.7 综合示例  7.7.8 texture类  7.8 索引顶点:重用是有好处的  7.8.1 代码整合  7.8.2 vertices类  7.9 半透明混合处理  7.10 更多图元:点、线、条和扇  7.11 2d变换:操作模型视图矩阵  7.11.1 世界空间和模型空间  7.11.2 再次讨论矩阵  7.11.3 第一个使用平移的示例  7.11.4 更多的变换  7.12 性能优化  7.12.1 测量帧率  7.12.2 android 1.5平台下hero的奇特案例  7.12.3 使opengl es渲染如此慢的原因  7.12.4 移除不必要的状态改变  7.12.5 减小纹理大小意味着需要获取更少的像素  7.12.6 减少opengl es/jni方法的调用  7.12.7 绑定顶点的概念  7.12.8 写在结束之前  7.13 小结 第8章 2d游戏编程技巧  8.1 写在开始  8.2 向量  8.2.1 使用向量  8.2.2 一点三角学的知识  8.2.3 实现一个向量类  8.2.4 一个简单的用法示例  8.3 2d物理定律浅析  8.3.1 牛顿和欧拉,永远的好朋友  8.3.2 力和质量  8.3.3 理论上的运动  8.3.4 运动的实现  8.4 2d碰撞检测和对象表示  8.4.1 边界形状  8.4.2 构造边界形状  8.4.3 游戏对象的属性  8.4.4 宽阶段和窄阶段碰撞检测  8.4.5 一个详细的示例  8.5 2d照相机  8.5.1 camera2d类  8.5.2 示例  8.6 纹理图集  8.7 纹理区域、精灵和批处理:隐藏opengl es  8.7.1 textureregion类  8.7.2 spritebatcher类  8.8 精灵动画  8.8.1 animation类  8.8.2 示例  8.9 小结 第9章 super jumper:一个2dopengl es游戏  9.1 核心游戏机制  9.2 背景故事和艺术风格  9.3 画面和切换  9.4 定义游戏世界  9.5 创建资源  9.5.1 ui元素  9.5.2 使用点阵字体处理文本  9.5.3 游戏元素  9.5.4 用于救援的纹理图集  9.5.5 音乐与音效  9.6 实现super jumper  9.6.1 assets类  9.6.2 settings类  9.6.3 主活动  9.6.4 font类  9.6.5 glscreen  9.6.6 主菜单画面  9.6.7 帮助画面  9.6.8 高分画面  9.6.9 模拟类  9.6.10 游戏画面  9.6.11 worldrenderer类  9.7 是否需要优化  9.8 小结 第10章 opengl es:进入3d世界  10.1 准备工作  10.2 3d中的顶点  10.2.1 vertices3:存储3d空间位置  10.2.2 示例  10.3 透视投影:越近则越大  10.4 z-buffer:化混乱为有序  10.4.1 完善上一个例子  10.4.2 混合:身后空无一物  10.4.3 z-buffer精度与z-fighting  10.5 定义3d网格  10.5.1 立方体:3d中的“helloworld”  10.5.2 一个示例  10.6 矩阵和变换  10.6.1 矩阵堆栈  10.6.2 用矩阵堆栈实现分层系统  10.6.3 木箱太阳系的简单实例  10.7 小结 第11章 3d编程技巧  11.1 准备工作  11.2 3d中的向量  11.3 opengl es中的光照  11.3.1 光照的工作机制  11.3.2 光源  11.3.3 材质  11.3.4 opengl es中如何对光照过程进行运算:顶点法线  11.3.5 实践  11.3.6 关于opengl es中光照应用的一些建议  11.4 材质变换(mipmapping)  11.5 简单的照相机  11.5.1 第一人称照相机或欧拉照相机  11.5.2 一个欧拉照相机的示例  11.5.3 跟随照相机  11.6 加载模块  11.6.1 wavefront obj格式  11.6.2 obj加载器的实现  11.6.3 使用obj加载器  11.6.4 关于加载模型的一些建议  11.7 3d中的一些物理知识  11.8 碰撞检测与3d中的对象表达法  11.8.1 3d中的边界形状  11.8.2 边界球重叠测试  11.8.3 gameobject3d与dynamic-gameobject3d  11.9 小结 第12章 droid invaders游戏  12.1 游戏的核心机制  12.2 游戏的故事背景与艺术风格  12.3 屏幕与场景切换  12.4 定义游戏世界  12.5 创建资源  12.5.1 用户界面的资源  12.5.2 游戏资源  12.5.3 音效与音乐  12.6 开始编写代码  12.7 assets类  12.8 settings类  12.9 主活动  12.10 主菜单  12.11 游戏设置画面  12.12 模拟类  12.12.1 shield类  12.12.2 shot类  12.12.3 ship类  12.12.4 invader类  12.12.5 world类  12.13 gamescreen类  12.14 worldrender类  12.15 游戏优化  12.16 小结 第13章 发布游戏  13.1 关于测试  13.2 成为注册开发人员  13.3 给游戏的apk包签名  13.4 将游戏发布至market  13.4.1 上传资源  13.4.2 产品详情  13.4.3 发布选项  13.4.4 发布  13.4.5 市场推广  13.5 开发人员控制台  13.6 小结 第14章 进阶内容  14.1 社交网络  14.2 位置识别  14.3 多玩家功能  14.4 opengl es 2.0以及更多内容  14.5 框架及引擎  14.6 网络资源  14.7 结束语
### 回答1: 《OpenGL ES 2.0编程指南》是一本介绍OpenGL ES 2.0的编程技术和方法的指南。OpenGL ES(OpenGL for Embedded Systems)是一套专为嵌入式系统和移动设备设计的2D和3D图形API,而OpenGL ES 2.0是其中的版本之一。 这本指南首先介绍了OpenGL ES 2.0编程的基础知识,包括OpenGL ES的特性和架构,以及基本的绘制流程。然后,它详细介绍了OpenGL ES 2.0的着色器编程,包括顶点着色器和片段着色器。着色器编程OpenGL ES 2.0的核心,通过编写和使用着色器代码,开发者可以灵活地控制和定制图形渲染的各个环节。 此外,该指南还介绍了OpenGL ES 2.0的纹理映射、混合、剪裁和光照等高级技术。纹理映射可以让开发者在场景中添加细节和图案,混合可以实现透明效果,剪裁可以限制绘制的区域,光照可以增强场景的真实感。 《OpenGL ES 2.0编程指南》还提供了丰富的实例代码和实践案例,让读者能够通过实际操作深入理解OpenGL ES 2.0的编程方法和技巧。通过学习和掌握本书的内容,读者可以成为一名优秀的OpenGL ES 2.0开发者,能够开发出高性能、高质量的嵌入式图形应用程序。 总之,《OpenGL ES 2.0编程指南》是一本权威、全面且具有实践性的指南,对想要学习和应用OpenGL ES 2.0的开发者来说是一本非常有价值的参考书。 ### 回答2: 《OpenGLES2.0编程指南》是一本介绍OpenGL ES 2.0编程的指南书籍。OpenGL ES是一种针对移动设备和嵌入式系统的图形库,而OpenGL ES 2.0是其最新版本,提供了强大的图形渲染功能和灵活的编程接口。 这本书以深入浅出的方式介绍了OpenGL ES 2.0的基本概念、渲染管线、顶点和片元着色器、纹理映射、渲染缓冲区和帧缓冲区等核心知识。读者可以通过学习本书,了解到如何利用OpenGL ES 2.0编写高性能的图形应用程序。 在《OpenGLES2.0编程指南》中,作者还会通过大量的示例代码来演示如何使用OpenGL ES 2.0进行图形渲染。这些示例代码会涉及到常用的图形渲染技术,如图元绘制、光照、投影变换、深度测试等。读者可以通过对这些示例代码的学习和分析,更好地理解OpenGL ES 2.0的编程思想和技术要点。 此外,本书还介绍了一些常见的图形效果和优化技巧,如阴影、反射和抗锯齿等。这些内容对于那些希望提升图形应用程序性能和效果的开发者来说十分有用。 总的来说,《OpenGLES2.0编程指南》是一本全面而深入的OpenGL ES 2.0编程教材,适合那些想要学习OpenGL ES 2.0编程或者提升自己OpenGL ES 2.0编程技能的开发者阅读。通过学习本书,读者可以掌握OpenGL ES 2.0的基本知识和相关的编程技术,进一步提高自己在图形应用开发领域的水平。 ### 回答3: 《OpenGL ES 2.0编程指南》是一本深入解析OpenGL ES 2.0编程的指南。OpenGL ES(OpenGL for Embedded Systems)是为嵌入式设备和移动设备设计的精简版OpenGL。这本指南主要面向对OpenGL ES 2.0编程感兴趣的开发人员。 本书首先介绍了OpenGL ES 2.0的基本概念和工作原理。接着详细讲解了OpenGL ES 2.0的渲染管线、着色器语言以及顶点和片元着色器的编程。书中还提供了大量的示例代码和实践案例,帮助读者更好地理解各种概念和技术,并应用于实际项目中。 《OpenGL ES 2.0编程指南》还涵盖了纹理映射、深度缓冲、帧缓冲和多重渲染目标等高级主题。读者可以学习到如何使用这些高级功能实现更加复杂的图形效果。此外,书中还介绍了一些优化技巧和调试方法,帮助开发人员提高应用性能并排除错误。 这本指南对于初学者来说可能会有一些挑战,因为OpenGL ES 2.0的编程相对复杂。但对于有一定OpenGL基础的开发人员来说,它是一本非常有价值的参考书。作为一本权威的OpenGL ES 2.0编程指南,它提供了丰富的知识和实践经验,可以帮助读者掌握这一领域的核心技术和开发流程。 综上所述,《OpenGL ES 2.0编程指南》是一本深入介绍和解析OpenGL ES 2.0编程的权威指南。无论是初学者还是有经验的开发人员,都可以通过阅读这本书来学习和应用OpenGL ES 2.0的编程技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值