环境 基于 Android GLSurfaceView
实践内容 :
绘制6个矩形。
1.指定2个纹理图像。每3个矩形使用同一纹理。
2.对同一纹理的两个矩形,分别按照:重复显示部分图像、拉伸、clamp方式显示。
3.再绘制一个矩形,其纹理为2个纹理的混合。(混合方式由用户指定)
最终效果如下 :
以下是 GLSurfaceView的绘图,
读取Bitmap 和绑定Texture 在 OnCreat中进行
摄像机使用的是投影矩阵,注意这里画矩形的时候,因为卷绕方向为背面,所以把背面剔除关了~~,
分别画了 7个矩矩形
package com.talentgame.openglestexture;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import java.io.InputStream;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL;
import javax.microedition.khronos.opengles.GL10;
import utils.MatrixState;
/**
* Created by 54560 on 2016/10/11.
*/
public class MyGLSurfaceView extends GLSurfaceView {
int[] textures = new int[7];
DrawRect[] rect = new DrawRect[6];
DrawRect mutRect;
public MyGLSurfaceView(Context context) {
super(context);
this.setEGLContextClientVersion(2);
ZjRenderer zjRenderer = new ZjRenderer();
this.setRenderer(zjRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}
private class ZjRenderer implements GLSurfaceView.Renderer
{
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
MatrixState.PushMatrix();
MatrixState.scale(1.1f,1.1f,1.1f);
MatrixState.translate(0,0.4f,0);
MatrixState.PushMatrix();
MatrixState