android 三维代码

  • R3_346669
    了解作者
  • 6.3MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-28 10:03
    上传日期
木有描述 纯手工制作 木有描述 纯手工制作 木有描述 纯手工制作 木有描述 纯手工制作
ElevationShow.rar
  • src
  • wyf
  • sj
  • Constant.java
    5KB
  • Water.java
    5.4KB
  • MySurfaceView.java
    12.6KB
  • LandForm.java
    5.3KB
  • MyActivity.java
    1.9KB
  • res
  • raw
  • eledata
  • ele.dat
    1.8MB
  • ele.dat
    1.8MB
  • drawable-ldpi
  • icon.png
    1.7KB
  • drawable-hdpi
  • icon.png
    4KB
  • drawable
  • water.png
    543.6KB
  • grass.png
    55.1KB
  • eleimage.png
    315.4KB
  • landform.png
    33.7KB
  • drawable-mdpi
  • icon.png
    2.5KB
  • layout
  • main.xml
    382B
  • values
  • strings.xml
    175B
  • assets
  • gen
  • wyf
  • sj
  • R.java
    931B
  • bin
  • wyf
  • sj
  • R$layout.class
    358B
  • Constant.class
    4.7KB
  • R$drawable.class
    486B
  • R$attr.class
    304B
  • MySurfaceView$SceneRenderer$1.class
    1KB
  • MyActivity.class
    2.1KB
  • R$raw.class
    348B
  • LandForm.class
    2.9KB
  • MySurfaceView.class
    5.5KB
  • Water.class
    3.1KB
  • R.class
    449B
  • R$string.class
    391B
  • MySurfaceView$SceneRenderer.class
    3.8KB
  • MyActivity$myListener.class
    979B
  • resources.ap_
    1.9MB
  • classes.dex
    19.3KB
  • ElevationShow.apk
    1.9MB
  • .project
    849B
  • AndroidManifest.xml
    672B
  • default.properties
    365B
  • .classpath
    280B
内容介绍
package wyf.sj; import static wyf.sj.Constant.CAMERA_INI_X; import static wyf.sj.Constant.CAMERA_INI_Y; import static wyf.sj.Constant.CAMERA_INI_Z; import static wyf.sj.Constant.DEGREE_SPAN; import static wyf.sj.Constant.DIRECTION_INI; import static wyf.sj.Constant.DISTANCE; import static wyf.sj.Constant.MOVE_SPAN; import static wyf.sj.Constant.bigwh; import static wyf.sj.Constant.imgh; import static wyf.sj.Constant.imgw; import static wyf.sj.Constant.yArray; import java.io.IOException; import java.io.InputStream; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.opengl.GLUtils; import android.view.KeyEvent; import android.view.MotionEvent; public class MySurfaceView extends GLSurfaceView { static float direction=DIRECTION_INI;//视线方向 static float cx;//摄像机x坐标 static float cy;//摄像机y坐标 static float cz;//摄像机z坐标 static float tx;//观察目标点x坐标 static float ty;//观察目标点y坐标 static float tz;//观察目标点z坐标 boolean flag=false; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } private SceneRenderer mRenderer;//场景渲染器 public MySurfaceView(Context context) { super(context); Constant.initConstant(this.getResources()); cx=CAMERA_INI_X;//摄像机x坐标 cy=CAMERA_INI_Y;//摄像机y坐标 cz=CAMERA_INI_Z;//摄像机z坐标 tx=(float)(cx-Math.sin(direction)*DISTANCE);//观察目标点x坐标 //ty=CAMERA_INI_Y+0.2f;//平视观察目标点y坐标 ty=CAMERA_INI_Y-2f;//鸟瞰观察目标点y坐标 tz=(float)(cz-Math.cos(direction)*DISTANCE);//观察目标点z坐标 mRenderer = new SceneRenderer(); //创建场景渲染器 setRenderer(mRenderer); //设置渲染器 setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);//设置渲染模式为主动渲染 } @Override public boolean onKeyDown(int keyCode, KeyEvent e) { if(keyCode==19||keyCode==20) {//上下键表示前进或后退 float xOffset=0;//此步的X位移 float zOffset=0;//此步的Z位移 switch(keyCode) { case 19://向上键代表前进 //前进时运动方向与当前方向相同 xOffset=(float)-Math.sin(direction)*MOVE_SPAN; zOffset=(float)-Math.cos(direction)*MOVE_SPAN; break; case 20://向下键代表后退 //后退时运动方向与当前方向相反 xOffset=(float)Math.sin(direction)*MOVE_SPAN; zOffset=(float)Math.cos(direction)*MOVE_SPAN; break; } //计算运动后的XZ值 cx=cx+xOffset; cz=cz+zOffset; } else { switch(keyCode) { case 21: //向左代表左转身 direction=direction+DEGREE_SPAN; break; case 22: //向右代表右转身 direction=direction-DEGREE_SPAN; break; } } //设置新的观察目标点XZ坐标 tx=(float)(cx-Math.sin(direction)*DISTANCE);//观察目标点x坐标 tz=(float)(cz-Math.cos(direction)*DISTANCE);//观察目标点z坐标 return true; } float _x=0; float _y=0; float xdiff2=0,xdiff1=0,ydiff2=0,ydiff1=0,xTemp=0,yTemp=0; public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN) { _x=event.getX(); _y=event.getY(); } if(event.getAction()==MotionEvent.ACTION_MOVE) if(isFlag()) { xdiff2 = (float) ((_x - event.getX())); ydiff2 = (float) ((_y - event.getY()) ); if(xdiff1==0) { xdiff1=xdiff2; return false; } else { xTemp=xdiff2-xdiff1; mRenderer.setXrot(xTemp); } if(ydiff1==0) { ydiff1=ydiff2; return false; } else{ yTemp=ydiff2-ydiff1; mRenderer.setYrot(yTemp); } }else { ydiff2 = (float) ((_y - event.getY()) ); if(ydiff1==0) { ydiff1=ydiff2; return false; } else{ yTemp=ydiff2-ydiff1; mRenderer.setAngel(yTemp); } } return true; } private class SceneRenderer implements GLSurfaceView.Renderer { int grassTextureId;//地形纹理的纹理ID int waterTextureId;//水面纹理的纹理ID LandForm landform;//地形 Water[] water=new Water[16];//水面 int currentWaterIndex;//当前水面帧索引 float xrot,yrot,zrot; float angel; public float getAngel() { return angel; } public void setAngel(float angel) { this.angel = angel; } public float getXrot() { return xrot; } public void setXrot(float xrot) { this.xrot = xrot; } public float getYrot() { return yrot; } public void setYrot(float yrot) { this.yrot = yrot; } public float getZrot() { return zrot; } public void setZrot(float zrot) { this.zrot = zrot; } public void onDrawFrame(GL10 gl) { //采用平滑着色 gl.glShadeModel(GL10.GL_SMOOTH); //清除颜色缓存于深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //设置当前矩阵为模式矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); //设置当前矩阵为单位矩阵 gl.glLoadIdentity(); //设置camera位置 GLU.gluLookAt ( gl, cx, //人眼位置的X cy, //人眼位置的Y cz, //人眼位置的Z tx, //人眼球看的点X ty, //人眼球看的点Y tz, //人眼球看的点Z 0, 1, 0 ); // gl.glRotatef(angle, 1, 0, 0); gl.glRotatef(getAngel(), 1, 0, 0); gl.glTranslatef(getXrot(), 0, 0); gl.glTranslatef(0, getYrot(), 0); gl.glTranslatef(0, 0, getZrot()); //绘制底层纹理矩形 landform.drawSelf(gl); water[currentWaterIndex].drawSelf(gl); } public void onSurfaceChanged(GL10 gl, int width, int height) { //设置视窗大小及位置 gl.glViewport(0, 0, width, height); //设置当前矩阵为投影矩阵 gl.glMatrixMode(GL10.GL_PROJECTION); //设置当前矩阵为单位矩阵 gl.glLoadIdentity(); //计算透视投影的比例 float ratio = (float) width / height; //调用此方法计算产生透视投影矩阵 gl.glFrustumf(-ratio*0.7f, ratio*0.7f, -0.7f*0.7f, 1.3f*0.7f, 1, 400); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { //关闭抗抖动 gl.glDisable(GL10.GL_DITHER); //设置特定Hint项目的模式,这里为设置为使用快速模式 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST); //设置为打开背面剪裁 gl.glEnable(GL10.GL_CULL_FACE); //开启混合 gl.glEnable(GL10.GL_BLEND); //设置源混合因子与目标混合因子 gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); //设置屏幕背景色黑色RGBA gl.glClearColor(0,0,0,0); //启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); //初始化纹理 grassTextureId=initEleTexture(gl,R.drawable.eleimage); waterTextureId=initTexture(gl,R.drawable.water); //创建地形 landform= new LandForm(grassTextureId,yArray,yArray.length-1,yArray[0].length-1); for(int i=0
评论
    相关推荐
    • Android学习
      Android学习Android学习Android学习Android学习Android学习Android学习
    • Android678
      Android678Android678Android678Android678Android678Android678Android678Android678Android678Android678
    • android 例子
      android 例子android 例子android 例子android 例子android 例子
    • android图片
      android精美小图片android精美小图片android精美小图片android精美小图片
    • android课件
      清华老师上课的android课件。ch_01android概述ch_02android开发基础ch_03资源的访问ch_04android用户界面ch_05Ativity和Intent。其他自己看。
    • AndroidKiller
      安卓App反编译工具AndroidKiller\AndroidKiller\AndroidKiller
    • AndroidSample
      Android示例 这是一个示例Android应用,用于降低Google Play服务和Android Volley的使用率。 有关更多详细信息,请参阅以下链接: Google Play服务: Android凌空抽射:
    • android source
      android 源代码 source android 源代码 source android 源代码 source android 源代码 source android 源代码 source android 源代码 source android 源代码 source
    • Android 教程
      Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android 案例 教程,Android ...
    • android资料
      Android程序员指南 Android_UI开发专题 Android程序开发初级教程 android的五大类各种常用类的资料整理 Android高手进阶教程