Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android opengl观察扭曲对象_Android_Opengl Es 2.0_Glulookat - Fatal编程技术网

Android opengl观察扭曲对象

Android opengl观察扭曲对象,android,opengl-es-2.0,glulookat,Android,Opengl Es 2.0,Glulookat,首先道歉,我想我有多个条目有类似的问题,但无法解决我的问题,因为我不相信我能够正确地解释我的问题,希望粗略绘制的图像将有助于解释我的问题 我有一个正方形在x轴和y轴上绕着我的世界移动,物体离开屏幕,有时在移动的时候又回来。我想使用设备中的陀螺仪来获取数值,这些数值将用于改变相机在x和y方向上的观察位置,尝试在物体在世界各地移动时搜索它。这是当前代码,当我移动设备时,它似乎扭曲了正方形的形状 class SquareRenderer implements GLSurfaceView.Rendere

首先道歉,我想我有多个条目有类似的问题,但无法解决我的问题,因为我不相信我能够正确地解释我的问题,希望粗略绘制的图像将有助于解释我的问题

我有一个正方形在x轴和y轴上绕着我的世界移动,物体离开屏幕,有时在移动的时候又回来。我想使用设备中的陀螺仪来获取数值,这些数值将用于改变相机在x和y方向上的观察位置,尝试在物体在世界各地移动时搜索它。这是当前代码,当我移动设备时,它似乎扭曲了正方形的形状

class SquareRenderer implements GLSurfaceView.Renderer {

private int counter = 0;
private boolean mTranslucentBackground;
private Square mSquare;
private float mTransY;
private float mTransX;
private float mAngle;
private Context context;

private float xPoint = 0.0f;
private float yPoint = 0.0f;


public SquareRenderer(boolean useTranslucentBackground,Context context) {
    mTranslucentBackground = useTranslucentBackground;
    this.context=context;
    mSquare = new Square();
}

public void onDrawFrame(GL10 gl) {
    gl.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL11.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glTranslatef(mTransX, mTransY, -10.0f);
    GLU.gluLookAt(gl, 0.0f, 0.0f, 0.0f,(float) MainActivity.azimuth , (float) MainActivity.roll, 0.0f, 0.0f, 1, 0.0f);

    mSquare.draw(gl);
    //GLU.gluLookAt(gl, 0.0f, 0.0f, 0.0f, (float) MainActivity.azimuth, (float) MainActivity.roll, 0.0f, 0.0f, 1, 0.0f);
    Random rnd = new Random();

    float maxx = 180.0f;
    float minx = -180.0f;
    float maxy = 90.0f;
    float miny = -90.0f;

    if( xPoint == 0.0f && yPoint == 0.0f){
        xPoint = rnd.nextFloat()*(maxx-minx)+minx;
        xPoint = round(xPoint,1);
        yPoint = rnd.nextFloat()*(maxy-miny)+miny;
        yPoint = round(yPoint,1);

        Log.d("XPOINT    YPOINT",xPoint +"      " +yPoint);
    }
    if(mTransX != xPoint && xPoint>mTransX) {
        mTransX += 0.1f;
        mTransX = round(mTransX,1);
    }else if(mTransX != xPoint && xPoint<mTransX){
        mTransX -= 0.1f;
        mTransX = round(mTransX,1);
    }else if(mTransX == xPoint){
        xPoint = rnd.nextFloat()*(maxx-minx)+minx;
        xPoint = round(xPoint,1);
    }
    if(mTransY != yPoint && yPoint >mTransY) {
        mTransY += 0.1f;
        mTransY = round(mTransY,1);
    }else if(mTransY != yPoint && yPoint < mTransY){
        mTransY -= 0.1f;
        mTransY = round(mTransY,1);
    }else if(mTransY == yPoint){
        yPoint = rnd.nextFloat()*(maxy-miny)+miny;
        yPoint = round(yPoint,1);
    }
}

public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
    float ratio = (float) width / height;
    gl.glMatrixMode(GL11.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
}

public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glDisable(GL11.GL_DITHER);
    gl.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_FASTEST);
    gl.glClearColor(0,0,0,0);
    gl.glEnable(GL11.GL_CULL_FACE);
    gl.glShadeModel(GL11.GL_SMOOTH);
    gl.glEnable(GL11.GL_DEPTH_TEST);
}

public static float round(float d, int decimalPlace) {
    BigDecimal bd = new BigDecimal(Float.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
}
class SquareRenderer实现GLSurfaceView.Renderer{
专用整数计数器=0;
私有布尔mtranscentbackground;
私人广场;
私人浮动租金;
私人浮动地铁;
私人浮动式轧钢机;
私人语境;
专用浮点xPoint=0.0f;
专用浮点数=0.0f;
public SquareRenderer(布尔useTranslucentBackground,上下文){
MTTranslucentBackground=使用半透明背景;
this.context=context;
mSquare=new Square();
}
公共框架(GL10 gl){
gl.glClear(GL11.gl_颜色_缓冲_位| GL11.gl_深度_缓冲_位);
gl.glMatrixMode(GL11.gl_MODELVIEW);
gl.glLoadIdentity();
总账GLTRANSTEF(mTransX,mTransY,-10.0f);
GLU.gluLookAt(gl,0.0f,0.0f,0.0f,(浮动)主活动角,(浮动)主活动角,滚动,0.0f,0.0f,1,0.0f);
平方英尺(gl);
//GLU.gluLookAt(gl,0.0f,0.0f,0.0f,(浮动)主活动角,(浮动)主活动角,滚动,0.0f,0.0f,1,0.0f);
随机rnd=新随机();
浮动最大值=180.0f;
浮动最小值=-180.0f;
浮动最大值=90.0f;
浮动最小值=-90.0f;
if(xPoint==0.0f&&yPoint==0.0f){
xPoint=rnd.nextFloat()*(maxx-minx)+minx;
xPoint=圆形(xPoint,1);
yPoint=rnd.nextFloat()*(maxy miny)+miny;
yPoint=圆形(yPoint,1);
Log.d(“XPOINT-YPOINT”,XPOINT+“”+YPOINT);
}
如果(mTransX!=xPoint&&xPoint>mTransX){
mTransX+=0.1f;
mTransX=圆形(mTransX,1);
}else if(mTransX!=xPoint&&xpointmtranse){
mTransY+=0.1f;
mTransY=圆形(mTransY,1);
}else if(mTransY!=yPoint&&yPoint

方位角和横摇值是通过陀螺仪获得的。这是我第一次制作一个增强现实类应用程序,因此任何帮助都将不胜感激。

为什么您仍然使用方位角和横摇作为笛卡尔矢量分量?它们是极坐标,需要用三角函数或u使用矩阵上的旋转方法进行sed

虽然这似乎是你的主要问题,但我可能错了。你需要一个系统来实际识别问题。你先添加一些触摸事件,让相机拖动,看看你是否得到了预期的结果。这些应该模拟你的方位角和滚动值

至于将陀螺仪和相机集成在一起,已经有多种答案了。即使是Android,比如