我试图移动object
输出不正确。
X向相反方向移动,Y比原始坐标更远。
这是我的代码,用于取出规范化的x和y 。
@Override
public boolean onTouch(View v, MotionEvent event) {
requestRender();
float normalisedX=(event.getX()/getWidth())*2.0f -1.0f;
float normalisedY=(event.getY()/getHeight())*-2.0f+1.0f;
mRender.setXY(normalisedX, normalisedY);
return true;
}
Matrix用于渲染以移动对象。这是代码
@Override
public void onDrawFrame(GL10 gl) {
glClear(GL_COLOR_BUFFER_BIT);
float[] scratch = new float[16];
setLookAtM(mViewMatrix, 0, 0, 0, -2, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
setIdentityM(mMoveMatrix, 0);
translateM(mMoveMatrix, 0, x, y, 0);
multiplyMM(scratch, 0, mMVPMatrix, 0, mMoveMatrix, 0);
table.draw(mMVPMatrix, tableTextureObj);
userMallet.draw(scratch, userMalletTextureObj);
}
以下是要绘制的目标代码: -
public void draw(float[] matrix, int texture)
{
if (ShaderProgram.validateProgram(mProgram))
{
glUseProgram(mProgram);
aPositionHandle=glGetAttribLocation(mProgram, "a_Position");
uMatrixHandle=glGetUniformLocation(mProgram, "u_Matrix");
aTextureCoordinateHandle=glGetAttribLocation(mProgram, "a_TextureCoordinates");
//shader
vColorHandle=glGetUniformLocation(mProgram, "v_Color");
vertexBuffer.position(0);
glVertexAttribPointer(aPositionHandle, COORDS_PER_VERTEX, GL_FLOAT, false, STRIDE, vertexBuffer);
glEnableVertexAttribArray(aPositionHandle);
vertexBuffer.position(0);
vertexBuffer.position(COORDS_PER_VERTEX);
glVertexAttribPointer(aTextureCoordinateHandle, TEXTURE_COORDINATES_COMPONENT_COUNT, GL_FLOAT, false, STRIDE, vertexBuffer);
glEnableVertexAttribArray(aTextureCoordinateHandle);
vertexBuffer.position(0);
uTexureUnitHandle=glGetUniformLocation(mProgram, "u_TextureUnit");
glUniformMatrix4fv(uMatrixHandle, 1, false, matrix, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture);
glUniform1i(uTexureUnitHandle, 0);
glDrawArrays(GL_TRIANGLE_FAN, 0, outerVertexCount);
}
}
请告诉我我做错了所以我可以解决这个问题。