你定义了要绘制的形状后,你就可以绘制它们了。使用OpenGLES 2.0会形状会有一点点复杂,因为API提供了大量的对渲染管线的控制能力。本文讲解如何绘制你在前文中定义的那些形状。
一、初始化形状
在你做任何绘制之前,你必须初始化形状然后加载它,考虑到内存和运行效率的优化,你应该尽可能的在Renderer的方法onSurfaceCreated()中进行初始化,代码如下:
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
...
// 初始化一个三角形
mTriangle = new Triangle();
// 初始化一个正方形
mSquare = new Square();
}
二、绘制形状
使用OpenGLES 2.0绘制一个定义好的形状需要大量代码,因为你必须为图形渲染管线提供一大堆信息。下面这些定义是必须的:
- VertexShader-用于渲染形状的顶点的OpenGLES 图形代码。
- FragmentShader-用于渲染形状的外观(颜色或纹理)的OpenGLES 代码。
- Program-一个OpenGLES对象,包含了你想要用来绘制一个或多个形状的shader。
(1)定义着色器
你至少需要一个vertexshader来绘制一个形状和一个fragmentshader来为形状上色。这些形状必须被编译然后被添加到一个OpenGLES program中,program之后被用来绘制形状。下面是一个展示如何定义一个可以用来绘制形状的基本shader的例子:
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
//

最低0.47元/天 解锁文章
1539

被折叠的 条评论
为什么被折叠?



