hi all,
i run my opengl code base on opengles 3.0 window version (opengles3-book-master.zip). i want to roate a texture (this is a needle),
my screen is 1920x720, my needle image is 160x40, when rotate 0 degree the needle is showed normal,
but if rotate any degree which is larger than 0 degree, the needle texture size is not 160x40.
the following is my rotate code:
void rotateTexMvp(ESContext *esContext, GLint layer, GLint texId, GLfloat angle, stPos *pCenterPos)
{
stUserData *userData = esContext->userData;
ESMatrix perspective;
ESMatrix modelview;
ESMatrix view;
float aspect;
GLfloat center_x = coordinateTrans((GLfloat)pCenterPos->x / userData->winWidth, TEXTURE_TO_SCREEN);
GLfloat center_y = -1.0f * coordinateTrans((GLfloat)pCenterPos->y / userData->winHeight, TEXTURE_TO_SCREEN);
// Compute the window aspect ratio
aspect = (GLfloat)userData->winWidth / (GLfloat)userData->winHeight;
// Generate a perspective matrix with a 45 degree FOV
esMatrixLoadIdentity(&perspective);
//esPerspective(&perspective, 45.0f, aspect, 1.0f, 1.0f);
esFrustum(&perspective, -aspect, aspect, -1.0f, 1.0f, 1.0f, 1.0f);
// Generate a model view matrix to rotate/translate the cube
esMatrixLoadIdentity(&modelview);
// Translate away from the viewer
esTranslate(&modelview, center_x, center_y, 0.0);
// Rotate the texture around Z direction
esRotate(&modelview, -angle, 0.0, 0.0, 1.0);
// Translate away from the viewer
esTranslate(&modelview, -center_x, -center_y, 0.0);
esMatrixLookAt(&view,
0.0f, 0.0f, 1.0f, // eye position
0.0f, 0.0f, 0.0f, // objection position
0.0f, 1.0f, 0.0f); // eye up direction
esMatrixMultiply(&modelview, &modelview, &view);
// Compute the final MVP by multiplying the
// modevleiw and perspective matrices together
esMatrixMultiply(&userData->texMvpMatrix[layer][texId], &modelview, &perspective);
}
please help me to figure out how to keep the size of texture when rotating. thanks!