Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
Java 在矩阵缩放之后,如何将OpenGL对象居中?_Java_Android_Android Studio_Matrix_Matrix Multiplication - Fatal编程技术网

Java 在矩阵缩放之后,如何将OpenGL对象居中?

Java 在矩阵缩放之后,如何将OpenGL对象居中?,java,android,android-studio,matrix,matrix-multiplication,Java,Android,Android Studio,Matrix,Matrix Multiplication,我试图在缩放圆对象后使其保持居中。我用mRadius作为标尺。这是我的密码 公共类MyGLRenderer实现GLSurfaceView.Renderer{ 私人圈子; //vPMatrix是“模型视图投影矩阵”的缩写 私有最终浮动[]vPMatrix=新浮动[16]; 私有最终浮动[]projectionMatrix=新浮动[16]; 私有最终浮点[]viewMatrix=新浮点[16]; 私有浮点[]旋转矩阵=新浮点[16]; 私有浮点[]平移矩阵=新浮点[16]; 私有浮点[]scaleM

我试图在缩放圆对象后使其保持居中。我用mRadius作为标尺。这是我的密码

公共类MyGLRenderer实现GLSurfaceView.Renderer{
私人圈子;
//vPMatrix是“模型视图投影矩阵”的缩写
私有最终浮动[]vPMatrix=新浮动[16];
私有最终浮动[]projectionMatrix=新浮动[16];
私有最终浮点[]viewMatrix=新浮点[16];
私有浮点[]旋转矩阵=新浮点[16];
私有浮点[]平移矩阵=新浮点[16];
私有浮点[]scaleMatrix=新浮点[16];
公共垃圾桶;
公共浮点数mRadius=1.0f;
公共浮点getAngle(){
回料槽;
}
公共空隙设置角度(浮动角度){
裂口=角度;
}
已创建曲面上的公共void(GL10未使用,EGLConfig EGLConfig){
//设置背景框颜色
GLES20.glClearColor(0.0f,0.0f,1.0f,1.0f);
mCircle=新圆();
}
@凌驾
公共框架(GL10未使用){
float[]scaleCircle=新浮点[16];
浮动温度系数=1.0f*mRadius;
//重画背景色
GLES20.glClear(GLES20.GLU颜色缓冲位);
//设置相机位置(视图矩阵)
setLookAtM(viewMatrix,0,0,-3,0f,0f,0f,0f,1.0f,0.0f);
//计算投影和视图变换
多重矩阵(vPMatrix,0,projectionMatrix,0,viewMatrix,0);
//这里的问题是,缩放时,我的圆平移在X轴上。我的目标是尝试在缩放时将其保持在原位。Y轴没有问题
矩阵setIdentityM(scaleMatrix,0);
scaleM(scaleMatrix,0,mRadius,mRadius,0);
如果(mRadius!=1f)
矩阵translateM(标度矩阵,0,-(1+(mRadius/2)),0,0);
多重矩阵(scaleCircle,0,vPMatrix,0,scaleMatrix,0);
mCircle.draw(scaleCircle);
}
...
mRadius在我的主要活动中使用缩放手势进行更改

私有类ScaleListener
扩展ScaleGestureDetector.SimpleOnScaleGestureListener{
@凌驾
公共布尔标度(scalegestruedetector检测器){
renderer.mRadius*=detector.getScaleActor();
//不要让对象变得太小或太大。
renderer.mRadius=Math.max(0.1f,Math.min(renderer.mRadius,2.0f));
使无效();
返回true;
}
}
我正在试图找出如何使用Matrix.translateM方法的方程式来保持圆居中。它似乎只在X轴上移动,而不是在y轴或z轴上移动。我要解决这个问题的最接近方法是:

Matrix.translateM(scaleMatrix,0,mRadius-1,0,0);
它将圆保持在帧内,并在某个点后反转圆的运动,但我需要它保持静止