三维茶壶

来源:互联网 发布:java md5 32大加密 编辑:程序博客网 时间:2024/04/27 23:06
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdlib.h>  #include <GL/glut.h>  #include<iostream>#pragma comment(lib, "glut32.lib")  using namespace std;GLfloat roate = 0.0;// set rote of roate设置旋转速率GLfloat rote = 0.0;//设置旋转角度GLfloat anglex = 0.0;//X 轴旋转GLfloat angley = 0.0;//Y 轴旋转GLfloat anglez = 0.0;//Z 轴旋转GLint WinW = 300;GLint WinH = 300;GLfloat oldx;//当左键按下时记录鼠标坐标  GLfloat oldy;void init(void){    glClearColor(1.0, 1.0, 1.0, 1.0); //背景黑色  }void display(void){    glClear(GL_COLOR_BUFFER_BIT);    glColor3f(1.0, 0.0, 0.0); //画笔红色    glLoadIdentity();  //加载单位矩阵      gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);    glRotatef(rote, 0.0f, 1.0f, 0.0f);    glRotatef(anglex,1.0,0.0,0.0);    glRotatef(angley,0.0,1.0,0.0);    glRotatef(anglez,0.0,0.0,1.0);    glutWireTeapot(2);    rote += roate;    //glRotatef(angle, 0.0, 1.0, 0.0);    //angle += 1.0f;    glutSwapBuffers();}void reshape(int w, int h){    glViewport(0, 0, (GLsizei)w, (GLsizei)h);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(60.0, (GLfloat)w / (GLfloat)h, 1.0, 20.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);}void mouse(int button, int state, int x, int y){    if (button == GLUT_LEFT_BUTTON)    {        if (state == GLUT_DOWN)        {            roate = 0;            rote = 0;            oldx = x;//当左键按下时记录鼠标坐标              oldy = y;            cout << "left" << endl;        }           }    if (button == GLUT_RIGHT_BUTTON)    {        if (state == GLUT_DOWN)        {            roate += 1.0f;            cout << "right" << endl;        }       }}void motion(int x, int y){    GLint deltax = oldx - x;    GLint deltay = oldy - y;    anglex  += 360 * (GLfloat)deltax / (GLfloat)WinW;//根据屏幕上鼠标滑动的距离来设置旋转的角度      angley += 360 * (GLfloat)deltay / (GLfloat)WinH;    anglez += 360 * (GLfloat)deltay / (GLfloat)WinH;    oldx = x;//记录此时的鼠标坐标,更新鼠标坐标      oldy = y;//若是没有这两句语句,滑动是旋转会变得不可控      glutPostRedisplay();    glutPostRedisplay();}int main(int argc, char** argv){    glutInit(&argc, argv);    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);    glutInitWindowSize(600, 600);    glutInitWindowPosition(100, 100);    glutCreateWindow(argv[0]);    init();    glutDisplayFunc(display);    glutReshapeFunc(reshape);    glutMouseFunc(mouse);    glutMotionFunc(motion);    glutIdleFunc(display);    glutMainLoop();    return 0;}

这里写图片描述


// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#ifdef __APPLE__#include <GLUT/glut.h>#else#include <GL/glut.h>#endif#include <stdlib.h>double angle = 0.0;void initialize(){    glClearColor(1.0,1.0,1.0,0.0);    //设置光照    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };    const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };    const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };    const GLfloat high_shininess[] = { 100.0f };    glEnable(GL_CULL_FACE);    glCullFace(GL_BACK);    glEnable(GL_DEPTH_TEST);    glDepthFunc(GL_LESS);    glEnable(GL_LIGHT0);    glEnable(GL_NORMALIZE);    glEnable(GL_COLOR_MATERIAL);    glEnable(GL_LIGHTING);    glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);    glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);    glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);    glLightfv(GL_LIGHT0, GL_POSITION, light_position);    glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);    glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);    glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);    glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);}static void resize(int width, int height){    //指定视口    glViewport(0, 0, width, height);    //投影变换---平截头体    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(40.0,(GLdouble)width/(GLdouble)height,0.1,10000.0);}static void display(void){    //视图变换,指定相机    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();    gluLookAt(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0);    //模型变换    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glColor3f(1.0,0.0,0.0);    glPushMatrix();    glRotatef(angle,0.0,1.0,0.0);    glutSolidTeapot(1.0);    glPopMatrix();    glutSwapBuffers();}static void key(unsigned char key, int x, int y){    switch (key)    {    case 27 :    case 'q':        exit(0);        break;    case '+':        angle++;        break;    case '-':        angle--;        break;    }    glutPostRedisplay();}/* Program entry point */int main(int argc, char *argv[]){    glutInit(&argc, argv);    glutInitWindowSize(640,480);    glutInitWindowPosition(10,10);    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);    glutCreateWindow("GLUT Shapes");    initialize();    glutReshapeFunc(resize);    glutDisplayFunc(display);    glutKeyboardFunc(key);    glutMainLoop();    return EXIT_SUCCESS;}

这里写图片描述

原创粉丝点击