void specialKeys(int key, int x, int y)//key由系统自动识别获取
{
/*
判断:x值以正方形最左边为基准;y值以正方形最上边为基准;
blockX、blockY值不能赋值于常量——因为vVerts四个点是动态变化的(SpecialKeys也会随之被动态调用);
*/
GLfloat blockX = vVerts[0];
GLfloat blockY = vVerts[10];
GLfloat stepSize = 0.025;
if (key == GLUT_KEY_UP) {
blockY += stepSize;
}
if (key == GLUT_KEY_DOWN) {
blockY -= stepSize;
}
if (key == GLUT_KEY_LEFT) {
blockX -= stepSize;
}
if (key == GLUT_KEY_RIGHT) {
blockX += stepSize;
}
//触碰到窗口边界处理
if (blockX < -1.0) {
blockX = -1.0;
}
if (blockX > (1.0-blockSize*2)) {
blockX = 1.0-blockSize*2;
}
if (blockY > 1.0) {
blockY = 1.0;
}
if (blockY < -1.0+blockSize*2) {
blockY = -1.0+blockSize*2;
}
//正方形四个顶点坐标动态赋值
vVerts[0] = blockX;
vVerts[1] = blockY-blockSize*2;
vVerts[3] = blockX+blockSize*2;
vVerts[4] = blockY-blockSize*2;
vVerts[6] = blockX+blockSize*2;
vVerts[7] = blockY;
vVerts[9] = blockX;
vVerts[10] = blockY;
triangleBatch.CopyVertexData3f(vVerts);
glutPostRedisplay();
}