学习为企业系统构建数据驱动的Android应用程序。Android设备已经超越消费应用范畴,进入企业领域。如果你准备着手构建与企业系统集成的数据驱动型Android应用程序,那么本书无疑是理想之选。 Android数据库应用
尝试在桌子的中间画一个冰球。做有点挑战性的事情,看看你是否能给桌子周围添加一个边框。你会怎么做呢?提示一下,看看你是否可以画两个不同颜色的长方形。一旦你完成了这些练习,让我们开始下一章,学习如何让
在最后把第一个版本的空气曲棍球桌子显示之前,我们不得不撰写了很多样例代码,好消息是,我们可以在后面的项目中重用这些代码。让我们花点儿时间回顾一下本章学过的内容:如何创建和编译着色器。顶点着色器和片
我们可以更新代码,告诉OpenGL那些点在屏幕上所显示的大小。在simple_vertex_shader glsl文件里,在gl_Position赋值后面,我们可以加入如下代码行指定其大小:通过给另外一个特殊的输出变量gl_PointSize赋值,我
目前为止,我们还没有解决的一个大问题就是:OpenGL是怎样把我们已经定义的坐标映射到屏幕上的实际物理坐标的?这个问题的答案很复杂,随着后面章节的讲解,我们会了解到更多有关的内容;目前,我们只需要知道,
让我们运行这个程序,看看屏幕上会出现什么。按Ctrl+F11键让程序运行,观察设备上或模拟器里会显示什么。你的屏幕看起来应该与图3-1相似。如果碰到了什么问题,首先在Eclipse里尝试选择Project->Clean,清理这个
最后要做的就是画两个木槌;在onDrawFrame()结尾处加入如下代码:通过传递GL_POINTS给glDrawArrays()方法,我们让OpenGL绘制点。对于第一个木槌,我们设置其颜色为蓝色,从偏移位置8开始,并用一个顶点绘制一个点
下一步是绘制跨越桌子中间的中心分隔线。在onDrawFrame()方法的结尾处加入如下代码:通过传递1 0f给第一个分量(红色)及传递0 0f给绿色和蓝色,我们把颜色设为红色;但这次需要OpenGL画线;我们从六个顶点后的第
3 5 在屏幕上绘制随着完成这些最后的连接,我们现在就准备好开始在屏幕上绘制了!我们将先画桌子,然后画分隔线和木槌。3 5 1 绘制桌子在onDrawFrame()结尾处,让我们在glClear()调用之后加入如下代码:我们首
尽管我们已经把数据属性链接起来了,在开始绘制之前,我们还需要调用glEnableVertexAttribArray()使能这个属性。在glVertexAttribPointer()调用之后加入如下代码:通过这最后一个调用,OpenGL现在就知道去哪里寻
下一步是要告诉OpenGL到哪里找到属性a_Position对应的数据。在onSurfaceCreated()的结尾处加入如下代码:回到本章的开始处,我们创建了一个浮点数数组,这些浮点数表示组成空气曲棍球桌子的顶点的位置;我们在本
像uniform一样,在使用属性之前我们也要获得它们的位置。我们可以让OpenGL自动给这些属性分配位置编号,或者在着色器被链接到一起之前,可以通过调用glBindAttribLocation()由我们自己给它们分配位置编号。我们要
下一步是获得我们早前在着色器中定义的uniform的位置。当OpenGL把着色器链接成一个程序的时候,它实际上用一个位置编号把片段着色器中定义的每个uniform都关联起来了。这些位置编号用来给着色器发送数据,并且我
在开始使用OpenGL的程序之前,我们首先应该验证一下它,看看这个程序对于当前的OpenGL状态是不是有效的。根据OpenGL ES 2 0的文档,它也给OpenGL提供了一种方法让我们知道为什么当前的程序可能是低效率的、无法
我们在前两章中用了很大篇幅为这个应用打下了很好的基础:我们学习了如何使用属性数组定义一个物体的结构,也学习了如何创建着色器、加载并编译它们,以及把它们链接起来形成一个OpenGL的程序。现在是时候在这个
既然我们已经有代码把这些着色器链接在一起了,让我们继续,从程序中调用它。首先在AirHockeyRenderer的顶部加入如下成员变量:这个整型值用来存储那个链接的程序的ID。在onSurfaceCreated()的结尾处加入如下代码
现在需要检查链接状态:如果它是0,就意味着这个链接失败,这个程序对象将无法被使用,因此要把它删除并返回0给调用代码:我们已经讲了这么多了,如果这个程序链接成功了,就可以在代码中使用它了。现在完成了,
现在准备把这些着色器联合起来了,为此,将调用glLinkProgram(programObjectId):为了检查这个链接是成功还是失败,我们会遵循编译着色器时所使用的步骤:首先创建了一个新的整型数组来容纳这个结果,然后调用gl
我们要做的第一件事情就是调用glCreateProgram()新建程序对象,并把那个对象的ID存进programObjectId。让我们加入如下代码:这个语义同我们早前创建一个新的着色器对象是一样的:返回的整型值是程序对象的引用,
3 3 把着色器一起链接进OpenGL的程序既然我们已经加载并编译了一个顶点着色器和一个片段着色器,下一步就是把它们绑定在一起放入一个单个的程序(program)里。3 3 1 理解OpenGL的程序简单来说,一个OpenGL程序