Eya*_*yal 5 textures opengl-es sprite opengl-es-2.0
我相信,我的问题非常简单,我正在使用OpenGL ES 2.0绘制一个简单的2D场景.
我有一个背景纹理,可以拉伸整个屏幕,还有一个花的纹理(或者我称为精灵?),它在屏幕上的特定位置绘制.
因此,我能想到这样做的简单方法是调用glDrawArrays两次,一次使用背景纹理的顶点,另一次使用花朵纹理的顶点.
这是正确的方法吗?如果是这样,那是不是意味着10朵花我需要打glDrawArrays10次?
混合呢?如果我想将花朵与背景混合,我需要背景和花朵像素颜色,这可能是两个绘制没有问题?
或者可以一次抽奖吗?如果是这样,我怎么能创建一个着色器,知道它现在是处理背景纹理顶点还是花纹理顶点?
或者可以一次抽奖吗?
一次绘制的问题是着色器需要知道当前顶点是背景顶点(比使用背景纹理颜色)还是花顶点(比使用花纹理颜色),我不知道该怎么做它.
这是我如何使用一个绘制调用来绘制背景图像拉伸整个屏幕,花是半个大小居中.
- (void)renderOnce {
//... set program, clear color..
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, backgroundTexture);
glUniform1i(backgroundTextureUniform, 2);
glActiveTexture(GL_TEXTURE3);
glBindTexture(GL_TEXTURE_2D, flowerTexture);
glUniform1i(flowerTextureUniform, 3);
static const GLfloat allVertices[] = {
-1.0f, -1.0f, // background texture coordinates
1.0f, -1.0f, // to draw in whole screen
-1.0f, 1.0f, //
1.0f, 1.0f,
-0.5f, -0.5f, // flower texture coordinates
0.5f, -0.5f, // to draw half screen size
-0.5f, 0.5f, // and centered
0.5f, 0.5f, //
};
// both background and flower texture coords use the whole texture
static const GLfloat backgroundTextureCoordinates[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat flowerTextureCoordinates[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
};
glVertexAttribPointer(positionAttribute, 2, GL_FLOAT, 0, 0, allVertices);
glVertexAttribPointer(backgroundTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, backgroundTextureCoordinates);
glVertexAttribPointer(flowerTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, flowerTextureCoordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |