绘制创建场景渲染器设置-pt100换算表

时间:2024-07-31 06:22:32
【文件属性】:

文件名称:绘制创建场景渲染器设置-pt100换算表

文件大小:20.23MB

文件格式:PDF

更新时间:2024-07-31 06:22:32

OpenGL ES

5.8 设置合理的透视参数 15 public boolean onTouchEvent(MotionEvent e){ //触控事件回调方法 16 ……//此处省略了触摸事件回调方法中的代码,读者可自行查看随书的源代码 17 } 18 private class SceneRenderer implements GLSurfaceView.Renderer{ 19 Cube cube1; //立方体对象 1 引用 20 Cube cube2; //立方体对象 2 引用 21 public void onDrawFrame(GL10 gl){ 22 GLES30.glClear(GLES30.GL_DEPTH_BUFFER_BIT 23 | GLES30.GL_COLOR_BUFFER_BIT); //清除深度缓冲与颜色缓冲 24 MatrixState.pushMatrix(); //保护现场 25 MatrixState.rotate(yAngle, 0, 1, 0); //绕 y 轴旋转 yAngle 度 26 MatrixState.rotate(xAngle, 1, 0, 0); //绕 x 轴旋转 xAngle 度 27 //绘制左侧立方体 28 MatrixState.pushMatrix(); //保护现场 29 MatrixState.translate(-250f, 0, 0); //执行平移 30 cube1.drawSelf(); 31 MatrixState.popMatrix(); //恢复现场 32 //绘制右侧立方体 33 MatrixState.pushMatrix(); //保护现场 34 MatrixState.translate(250f, 0, 0); //执行平移 35 cube2.drawSelf(); 36 MatrixState.popMatrix(); //恢复现场 37 MatrixState.popMatrix(); //恢复现场 38 } 39 public void onSurfaceChanged(GL10 gl, int width, int height){ 40 GLES30.glViewport(0, 0, width, height);//设置视口的大小及位置 41 ratio = (float) width / height; //计算视口的宽高比 42 final float NEAR=1.0f; //透视参数 near 43 final float FAR=10000.0f; //透视参数 far 44 final float LEFT=-NEAR*ratio*0.25f; //透视参数 left 45 final float RIGHT=NEAR*ratio*0.25f; //透视参数 right 46 final float BOTTOM=-NEAR*0.25f; //透视参数 bottom 47 final float TOP=NEAR*0.25f; //透视参数 top 48 MatrixState.setProjectFrustum( //调用此方法计算产生透视投影矩阵 49 LEFT, RIGHT, BOTTOM, TOP, NEAR, FAR); 50 MatrixState.setCamera( //调用此方法产生摄像机矩阵 51 5000f,0.5f,0f,0f,0f,0f,0f,1.0f,0.0f); 52 MatrixState.setInitStack(); //初始化变换矩阵 53 } 54 public void onSurfaceCreated(GL10 gl, EGLConfig config) { 55 GLES30.glClearColor(0.5f,0.5f,0.5f, 1.0f);//设置屏幕背景色 RGBA 56 cube1=new Cube(MySurfaceView.this,500,new float[]{0,1,1,0}); //创建立方体对象 57 cube2=new Cube(MySurfaceView.this,499.5f,new float[]{1,1,0,0}); 58 GLES30.glEnable(GLES30.GL_DEPTH_TEST); //打开深度检测 59 GLES30.glEnable(GLES30.GL_CULL_FACE); //打开背面剪裁 60 }}}  第 7-13 行为构造器,主要包括了设置使用 OpenGL ES 3.0 绘制、创建场景渲染器、设置 渲染器和设置渲染模式为主动渲染等。  第 21-38 行为渲染每帧画面的 onDrawFrame 方法,其中在清除深度缓冲与颜色缓冲之后, 绘制了两个嵌套在一起的立方体。第一个立方体沿 x 轴负方向平移,第二个立方体沿 x 轴正方向 平移。每次绘制前都调用了 MatrixState 类的 pushMatrix 方法保护现场,绘制后都调用 MatrixState 类的 popMatrix 方法恢复现场。  第 39-53 行为界面改变时调用的 onSurfaceChanged 方法,其中设置了视口的大小及位置, 声明并初始化了透视投影相关的 near、far、bottom、top、left 和 right 六个参数变量,然后调用 setProjectFrustum 方法计算产生透视投影矩阵。接着计算了摄像机矩阵,最后初始化了基本变换 矩阵。  第 54-60 行为界面创建时调用的 onSurfaceCreated 方法,在其中设置了屏幕的背景颜色、 创建了两个立方体对象、打开了深度检测和背面剪裁。 从上述案例代码的开发中可以看出,此案例没有太多特殊之处,与前面的很多案例套路基本


网友评论