Java 如何在OpenGLES 2.0中平移和缩放对象
我可以使用下面的代码使用OpenGLES缩放和转换正方形。但我不知道如何计算平移和比例因子。例如,使用OpenGL坐标系和Matrix.TranslatemViewMatrix的下图,0,5f,0,0;我希望正方形画在屏幕右侧的一半,但它是从中间画到左侧的一半。然而,矩阵,0,0,5f,0;将正方形从屏幕中央向上平移一半 我将如何平移和缩放,以编程方式并排画N个正方形,水平填充屏幕顶部Java 如何在OpenGLES 2.0中平移和缩放对象,java,android,opengl-es,Java,Android,Opengl Es,我可以使用下面的代码使用OpenGLES缩放和转换正方形。但我不知道如何计算平移和比例因子。例如,使用OpenGL坐标系和Matrix.TranslatemViewMatrix的下图,0,5f,0,0;我希望正方形画在屏幕右侧的一半,但它是从中间画到左侧的一半。然而,矩阵,0,0,5f,0;将正方形从屏幕中央向上平移一半 我将如何平移和缩放,以编程方式并排画N个正方形,水平填充屏幕顶部 @Override public void onDrawFrame(GL10 unused) { /
@Override
public void onDrawFrame(GL10 unused) {
// Draw background color
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
// Set the camera position (View matrix)
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
// Translate by some amount
// Matrix.translateM(mViewMatrix, 0, ?, ?, 0);
// Scale by some amount
// Matrix.scaleM(mViewMatrix, 0, ?, ?, 1);
// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
// Draw square
mSquare.draw(mMVPMatrix);
}
我不知道为什么需要平移和缩放来填充一排正方形。要在openGL ES中以编程方式获得一行正方形,我只需要在需要的地方初始化一组正方形。我的一个项目中经过编辑的片段如下所示:
public void onSurfaceCreated(GL10 unused, EGLConfig config){
GLES20.glClearColor(bgr, bgg, bgb, bga);
float z=0.0f;
float y=0.0f;
for(float i=(-worldwidth);i<worldwidth;i+=(cellwidth)){
square=new Square(i,y,z);
cellvec.addElement(square);
}
}
public void onDrawFrame(GL10 unused) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
for(int i=0;i<cellvec.size();i++){
cellvec.elementAt(i).draw(mMVPMatrix);
}
}
我不完全确定这样的东西是否是你想要的,但它似乎得到了你想要的一排正方形的结果。在眼睛空间,+Z向观众移动。你有eyeZ as-3,所以你实际上是在观察平面的另一边向后看。这就是为什么x轴平移似乎朝着错误的方向移动,而y轴平移却没有。看一看。是的,它可能有点令人困惑……啊,这就解释了问题的这一部分。非常感谢。