• Opengl es Android 3D 手指触控旋转+放大object


    明确原理:

    先确定一下OpenGL里面的坐标为:x轴正方向为屏幕向右,y轴正方向为屏幕向上,z轴正方向为屏幕由里向外。

    当手指在X轴方向上移动时,画面中物体应绕Y轴方向旋转,则为gl.glRotatef(Angle,0,1,0);

    当手指在Y轴方向上移动时,画面中物体应绕X轴方向旋转,则为gl.glRotatef(Angle,1,0,0);

    除此之外,android中屏幕响应手势移动所应用的function为:onTouchEvent.

    下面展示代码:

    public boolean onTouchEvent(MotionEvent e){
            // TODO Auto-generated method stub
            mDetector.onTouchEvent(e);
             y = e.getY();  
             x = e.getX();
             
            
            if(e.getAction()==MotionEvent.ACTION_POINTER_DOWN){//已经有一个手指在屏幕上了,此刻又多加了一个手指,即两只手指在屏幕上时启动
                baseValue = 0;//前一个手势的两只手指之间的距离
                float xx  = e.getRawX();
                float yy  = e.getRawY();
                
            }
             
            else if (e.getAction() == MotionEvent.ACTION_MOVE){  
               
                if(e.getPointerCount()==2){//两只手指时
    
                     float xx = e.getX(0)-e.getX(1);
                     float yy = e.getY(0)-e.getY(1);
                    float value = (float)Math.sqrt(xx*xx+yy*yy);//计算两只手指之间的距离
                    if(baseValue==0){
                        baseValue=value;
                    }
                    else{
                        if(value-baseValue >= 10 || value-baseValue <= -10){//防止手指在屏幕上抖动就触发
                            float scale = value/baseValue;
                            renderer.scale = scale;
                            Log.d("TAG", "Scale"+scale);
                            requestRender();
                        }
                    }
            }
                else if(e.getPointerCount()==1){//一只手指时
                     float dy = y - mPreviousY;//计算触控笔Y位移  
                     float dx = x - mPreviousX;//计算触控笔X位移  
                     renderer.center.mAngleX += dy * TOUCH_SCALE_FACTOR;//设置沿x轴旋转角度  
                     renderer.center.mAngleY += dx * TOUCH_SCALE_FACTOR;//设置沿y轴旋转角度  
                     requestRender();//重绘画面  
                    
                    }
                }
            
            
             mPreviousY = y;//记录触控笔位置  
             mPreviousX = x;//记录触控笔位置  
            MainActivity.temp=false;
            return true;
        }

    NewRender()是我继承Renderer创建的一个class.

    renderer.center.mAngleX += dy * TOUCH_SCALE_FACTOR;//设置沿x轴旋转角度  
    renderer.center.mAngleY += dx * TOUCH_SCALE_FACTOR;//设置沿y轴旋转角度  

    center.mAngleX 和 center.mAngleY是指我的Object(center)的旋转角度。

    在center中,我的旋转角度设置为:

    gl.glRotatef(mAngleX, 1, 0, 0);//旋转  
    gl.glRotatef(mAngleY, 0, 1, 0);  
    gl.glRotatef(mAngleZ,
    0, 0, 1);
  • 相关阅读:
    注册时正则验证及提示demo
    密码的修改(首先获取该用户的id,原密码判断是否一致,新密码和再次输入密码判断是否一样)
    变量和常量
    python入门基础
    python2设计一个用户登录
    python2与python3中input的区别
    python日记----2017.7.26
    python日记----2017.7.25
    python日记----2017.7.24
    python日记----2017.7.20
  • 原文地址:https://www.cnblogs.com/lws520/p/5997030.html
Copyright © 2020-2023  润新知