文件名称:遮挡查询-简易多波形信号发生器电路设计
文件大小:46.65MB
文件格式:PDF
更新时间:2024-07-31 10:04:38
OpenGL ES3x 游戏开发 下卷吴 亚峰pdf
12.1 遮挡查询
3 class MySurfaceView extends GLSurfaceView{
4 ……//此处省略了一些定义成员变量的代码,读者可自行查阅随书中的源代码
5 public static final int drawSample=3; //遮挡查询的数量
6 public MySurfaceView(Context context){/*此处省略了构造器的代码,读者可自行查阅随书*/}
7 private class SceneRenderer implements GLSurfaceView.Renderer {
8 LoadedObjectVertexNormalFace cft; //长方体绘制对象
9 LoadedObjectVertexNormalAverage qt; //球体绘制对象
10 LoadedObjectVertexNormalAverage ch; //茶壶绘制对象
11 public void onDrawFrame(GL10 gl){
12 GLES30.glClear( GLES30.GL_DEPTH_BUFFER_BIT//清除深度缓冲与颜色缓冲
13 | GLES30.GL_COLOR_BUFFER_BIT);
14 int[] tia=new int[drawSample]; //创建存放生成查询的 id 的数组
15 GLES30.glGenQueries(drawSample, tia, 0); //生成指定数量的查询对象
16 MatrixState.pushMatrix(); //保护现场
17 MatrixState.scale(1.5f, 1.5f, 1.5f); //缩放物体
18 MatrixState.pushMatrix(); //保护现场
19 MatrixState.translate(0, 0, 10f); //平移
20 ch.drawSelf(); //绘制茶壶
21 MatrixState.popMatrix(); //恢复现场
22 GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, tia[0]);//开启遮挡查询
23 MatrixState.pushMatrix(); //保护现场
24 MatrixState.translate(-10f, 0f, 0); //平移
25 cft.drawSelf(); //绘制长方体
26 MatrixState.popMatrix(); //恢复现场
27 GLES30.glEndQuery(GLES30.GL_ANY_SAMPLES_PASSED); //结束遮挡查询
28 GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, tia[1]);//开启遮挡查询
29 MatrixState.pushMatrix(); //保护现场
30 MatrixState.translate(0f, 0f, 0); //平移
31 qt.drawSelf(); //绘制球体
32 MatrixState.popMatrix(); //恢复现场
33 GLES30.glEndQuery(GLES30.GL_ANY_SAMPLES_PASSED); //结束遮挡查询
34 GLES30.glBeginQuery(GLES30.GL_ANY_SAMPLES_PASSED, tia[2]);//开启遮挡查询
35 MatrixState.pushMatrix(); //保护现场
36 MatrixState.translate(15f, 0f, 0); //平移
37 qt.drawSelf(); //绘制球体
38 MatrixState.popMatrix(); //恢复现场
39 GLES30.glEndQuery(GLES30.GL_ANY_SAMPLES_PASSED);//结束遮挡查询
40 MatrixState.popMatrix(); //恢复现场
41 for(int i=0;i