当前位置:操作系统 > 安卓/Android >>

android3D场景绘制1——房间的绘制

 

相信大家都会画矩形了,下面我们来画一个房间,大家想想怎么画了,我以前想用索引法把每个面都画出来,但是遇到了很多问题,画不出我想要的结果,其实还有种方法,那就是通过旋转,和位移变换,把矩形旋转和位移到长方体的各个面,再加工一下,这样就变成小房间了,下面我们来看看效果和代码吧。

\

package yy.cal; 

 

 

import android.app.Activity; 

import android.os.Bundle; 

import android.widget.LinearLayout; 

 

public class GLSu易做图ceViewActivity extends Activity { 

    private MySu易做图ceView mSu易做图ceView;//声明MySu易做图ceView对象 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main);      

        mSu易做图ceView=new MySu易做图ceView(this);//创建MySu易做图ceView对象 

        mSu易做图ceView.requestFocus();//获取焦点 

        mSu易做图ceView.setFocusableInTouchMode(true);//设置为可触控 

        LinearLayout ll=(LinearLayout)this.findViewById(R.id.main_liner);//获得线性布局的引用 

        ll.addView(mSu易做图ceView); 

    } 

    @Override 

    protected void onPause() { 

        // TODO Auto-generated method stub 

        super.onPause(); 

        mSu易做图ceView.onPause(); 

    } 

    @Override 

    protected void onResume() { 

        // TODO Auto-generated method stub 

        super.onResume(); 

        mSu易做图ceView.onResume(); 

    }   

 

 

 

 

package yy.cal; 

 

import javax.microedition.khronos.egl.EGLConfig; 

import javax.microedition.khronos.opengles.GL10; 

 

import android.content.Context; 

import android.opengl.GLSu易做图ceView; 

import android.opengl.GLU; 

import android.view.MotionEvent; 

 

public class MySu易做图ceView extends GLSu易做图ceView{ 

    private final float TOUCH_SCALE_FACTOR = 180.0f/320;//角度缩放比例 

    private SceneRenderer mRenderer;//场景渲染器  

 

    private float mPreviousX;//上次的触控位置X坐标 

     

    public MySu易做图ceView(Context context) { 

        super(context); 

        mRenderer = new SceneRenderer();    //创建场景渲染器 

        setRenderer(mRenderer);             //设置渲染器      

        setRenderMode(GLSu易做图ceView.RENDERMODE_CONTINUOUSLY);//设置渲染模式为主动渲染    

    } 

     

    //触摸事件回调方法 

    @Override  

    public boolean onTouchEvent(MotionEvent e) { 

        float x = e.getX(); 

        switch (e.getAction()) { 

        case MotionEvent.ACTION_MOVE: 

            float dx = x - mPreviousX;//计算触控笔X位移 

            mRenderer.angle += dx * TOUCH_SCALE_FACTOR;//设置沿x轴旋转角度 

             

            requestRender();//重绘画面 

        }    

        mPreviousX = x;//记录触控笔位置 

        return true; 

    } 

 

    private class SceneRenderer implements GLSu易做图ceView.Renderer  

    {    

        Cube cube=new Cube();//立方体 

        float angle=45;//总旋转角度 

         

        public void onDrawFrame(GL10 gl) { 

            //设置为打开背面剪裁 

            gl.glEnable(GL10.GL_CULL_FACE); 

 

            //设置着色模型为平滑着色    

            gl.glShadeModel(GL10.GL_SMOOTH); 

             

            //清除颜色缓存于深度缓存 

            gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

            //设置当前矩阵为模式矩阵 

            gl.glMatrixMode(GL10.GL_MODELVIEW); 

            //设置当前矩阵为单位矩阵 

            gl.glLoadIdentity();     

             

            GLU.gluLookAt//不太可能变形的视角——小视角 

            ( 

                    gl,  

                    0f,   //人眼位置的X 

                    10f,    //人眼位置的Y 

               &nb

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,