glut库画teapot

#include <iostream>
#include <windows.h>
#include <GL/freeglut.h>
using namespace std;

GLfloat G_fDistance = 3.0f;
GLfloat G_fAngle_Horizon = 0.0f;
GLfloat G_fAngle_Vertical = 0.0f;

void myInit(void);//初始化函数
void myReshape(GLsizei w, GLsizei h);//窗口变化重调函数
void display(void);//显示函数

void processSpecialKey(int key,int x,int y);//接受 上下左右 按键
void processNormalKey(unsigned char key, int x, int y);//接受键盘按键

int main(int argc,char* argv[]){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);//显示模式双缓存 RGBA色彩
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Teapot");

    myInit();//初始化
    glutReshapeFunc(myReshape);//窗口变化函数
    glutSpecialFunc(processSpecialKey);//接受上下左右回调
    glutKeyboardFunc(processNormalKey);//接受键盘字母
    glutDisplayFunc(display);//显示函数
    glutIdleFunc(display);//随时都进行调用能够及时响应

    glutMainLoop();//大循环
    return 0;
}

void myInit(void){
    glEnable(GL_DEPTH_TEST);
}

//窗口回调
void myReshape(GLsizei w,GLsizei h){
    glViewport(0, 0, w, h);//设定视区
    glMatrixMode(GL_PROJECTION);//透视方式确定
    glLoadIdentity();//载入单位矩阵
    gluPerspective(60.0, 1.0 * (GLfloat)w / (GLfloat)h, 1.0, 30.0);//设定范围
}

void display(void){
    glClearColor(0.0, 0.0, 0.0, 0.0);//清除屏幕颜色
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//屏幕颜色深度双缓冲清理

    glMatrixMode(GL_MODELVIEW);//设定模型矩阵?
    glLoadIdentity();//载入单位矩阵

    glTranslatef(0.0f, 0.0f, -G_fDistance);//拉远坐标系
    glRotatef(G_fAngle_Horizon, 0.0f, 1.0f, 0.0f);
    glRotatef(G_fAngle_Vertical, 1.0f, 0.0f, 0.0f);

    glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
    glBegin(GL_QUADS);
    glVertex3f(-1.0f, -1.0f, 0.0f);
    glVertex3f(1.0f, -1.0f, 0.0f);
    glVertex3f(1.0f, 1.0f, 0.0f);
    glVertex3f(-1.0f,1.0f, 0.0f);
    glEnd();

    glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
    glutWireTeapot(1.0);

    glutSwapBuffers();
}

void processSpecialKey(int key,int x,int y){
    switch(key){
        case GLUT_KEY_LEFT:
            G_fAngle_Horizon -= 5.0f;
            break;
        case GLUT_KEY_RIGHT:
            G_fAngle_Horizon += 5.0f;
            break;
        case GLUT_KEY_UP:
            G_fAngle_Vertical += 5.0f;
            break;
        case GLUT_KEY_DOWN:
            G_fAngle_Vertical -= 5.0f;
            break;
    }
}

void processNormalKey(unsigned char key,int x,int y){
    switch(key){
        case 97://a
            G_fDistance -= 0.3f;
            break;
        case 65:
            G_fDistance += 0.3f;
            break;
        case 27:
            exit(0);
            break;
    }
}

idlefunc加了才可以实时响应变化
平移旋转函数动的是坐标系
可以在响应函数里加一句redispost什么的也可以实时变化,就是每个都加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值