三维茶壶
来源:互联网 发布: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;}
阅读全文
0 0
- 三维茶壶
- 三维茶壶
- [实例]OpenGL绘制茶壶(光照、三维变换)
- 水晶茶壶
- 茶壶泡饮法
- glTranslatef_茶壶
- 茶壶旋转
- 茶壶里的风波?!?
- 挂在树上的茶壶
- Opengl光照(茶壶)
- 旋转的茶壶
- DirectX9 示例:绘制茶壶
- [OpenGL] 茶壶与光照
- [OpenGL]茶壶与纹理
- OpenGL绘制旋转茶壶
- 【WebGL】茶壶和光照
- 茶杯与茶壶(摘自故事会)
- 坎土曼和茶壶被人偷了
- Shell的条件判断结构
- Ubuntu 15.04 下编译Caffe2
- The requested list key 'list' could not be resolved as a collection/array/map/enumeration/iterator t
- PAT-A-1098. Insertion or Heap Sort (25)
- 1.2.1 Major Directories: BUILD
- 三维茶壶
- 增强手写数字样本(1)
- cookie的增删改查
- 1.2.1 重要目录:BUILD
- fast rcnn安装配置
- Appium 微信 webview 的自动化技术
- Moving Segments
- 2017第八届蓝桥杯决赛_希尔伯特曲线
- LeetCode:53. Maximum Subarray