代码思路
需要注意的是,本节不提供可以运行的代码,这里只是教大家如何把键盘鼠标的外设信息传递给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;
}
本文介绍如何使用OpenGL和GLUT库实现键盘鼠标控制纹理贴图的显示效果。通过具体示例代码展示了不同按键对应的不同纹理操作及鼠标左键触发旋转功能。
&spm=1001.2101.3001.5002&articleId=117384796&d=1&t=3&u=2049abf1a9894a49a154e05341560786)
1946

被折叠的 条评论
为什么被折叠?



