代码思路
需要注意的是,本节不提供可以运行的代码,这里只是教大家如何把键盘鼠标的外设信息传递给glut库并且控制相关的参数。
完整代码
void keyboard (unsigned char key, int x, int y)
{
switch (key) {
case 's':
case 'S':
glBindTexture(GL_TEXTURE_2D, texName[0]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 12, 44, subImageWidth,
subImageHeight, GL_RGBA,
GL_UNSIGNED_BYTE, subImage);
glutPostRedisplay();
break;
case 'a':
case 'A':
glBindTexture(GL_TEXTURE_2D, texName[1]);
glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,0,0,100,100,0);
glutPostRedisplay();
break;
case 'B':
case 'b':
glBindTexture(GL_TEXTURE_2D, texName[1]);
glCopyTexSubImage2D(GL_TEXTURE_2D,0,10,10,20,20,120,120);
glutPostRedisplay();
break;
case 'r':
case 'R':
glBindTexture(GL_TEXTURE_2D, texName[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth,
checkImageHeight, 0, GL_RGBA,
GL_UNSIGNED_BYTE, checkImage);
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}
void mouse(int button,int state,int x,int y)
{
switch(button)
{
case GLUT_LEFT_BUTTON:
if(GLUT_DOWN==state)
{
glutIdleFunc(rotate);
}else
{
//glutIdleFunc(0);
}
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 480);
glutInitWindowPosition(100, 100);
glutCreateWindow("纹理贴图");
glewInit();
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}