opengl视点变换

- -实验课咯

#include <gl\glut.h>    

#include <gl\GLU.h>
#include <gl\GL.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int PI=3.1415926 ;
int www=666, hhh=666;

GLfloat speed = 2 ,rx,ry,rz,dx=3,dy,dz;
//speed为位移速度,dx,dy,dz为视点位置变化量

void dis()//绘制图形
{
    //added!!! below 3 lines
       glMatrixMode (GL_PROJECTION);  
       glLoadIdentity ();  
       gluPerspective(60.0, (GLfloat) www/(GLfloat) hhh, 1.0, 20.0);  


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode( GL_MODELVIEW );
    glEnable(GL_DEPTH_TEST);
    glLoadIdentity();

    gluLookAt(dx,dy,dz, 0, 0, 0, 0, 1, 0);
    //初始化视点在(3,0,0),目标(0,0,0),上方向为y轴正方向

    glColor3f(0.0,1.0,0.4);    
    glutWireTeapot(1);//绘制茶壶在原点

    glutSwapBuffers();
}




void keyboard (unsigned char key, int x, int y)//定义键盘操作
{
    switch ( key )
    {
        //控制位移的键
        case 'u': case 'U':
            dx+=speed;
            break;
        case 'j': case 'J':
            dx-=speed;
            break;    
        case 'i': case 'I':
            dy-=speed;
            break;
        case 'k': case 'K':
            dy+=speed;
            break;
        case 'o': case 'O':
            dz+=speed;
            break;
        case 'l': case 'L':
            dz-=speed;
            break;

    }
    glutPostRedisplay();
}
int main(int argc, char *argv[])
{

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE);
    glutInitWindowSize(www, hhh);
    glutCreateWindow("teapot");

    glutDisplayFunc(dis);

    glutKeyboardFunc(keyboard);//键盘改变视点

    glutMainLoop();
    return 0;
}



猜你喜欢

转载自blog.csdn.net/ajvys18/article/details/80485899