我可以使用下面的代码来使用OpenGLES缩放和平移正方形。但我不确定如何计算翻译和比例因子。例如,使用下面的OpenGL坐标系图片和Matrix.translateM(mViewMatrix, 0, .5f, 0, 0);
,我希望广场在屏幕右侧的中间绘制,而是从中心向左侧绘制。但是Matrix.translateM(mViewMatrix, 0, 0, .5f, 0);
确实将屏幕中间的正方形从中心转换。
我如何翻译和缩放以便以编程方式将N
正方形并排水平填充到屏幕顶部?
@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);
}
答案 0 :(得分:0)
我不确定为什么你需要翻译和缩放来填充一排方格。要在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);
}
}
我不完全确定这样的东西是不是你想要的东西,但它似乎得到了你想要的一排方格的结果。