#include <stdlib.h>
#include <GL/glut.h>
#include<iostream>
using namespace std;
GLfloat roate = 0.0;// set rote of roate ying yu bu hao  bu zhuang le 设置旋转速率
GLfloat rote = 0.0;//shezhi旋转角度
GLfloat anglex = 0.0;//X 轴旋转
GLfloat angley = 0.0;//Y 轴旋转
GLfloat anglez = 0.0;//Z 轴旋转
GLint WinW = 400;
GLint WinH = 400;
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;
}

OpenGL:画个水壶相关推荐

  1. opengl画圆柱体、圆锥等并使用四元数旋转

    opengl画圆锥和圆柱体 具体资源欢迎下载:https://download.csdn.net/download/qq_32563773/13077923 画圆锥 如要画出想画的立方体,必须计算出来 ...

  2. OpenGL画三角形

    目录 OpenGL窗口 OpenGL三角形 OpenGL画圆 OpenGL窗口 [代码总览] glfw初始化.配置.创建窗口 glad初始化 渲染循环,检测输入并给窗口涂颜色 清理操作 // 渲染循环 ...

  3. 平移计算机图形学代码注释,求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢...

    求代码注释:计算机图形学的OpenGL画四面体.高手来吧.争取每句都注释下.谢谢 答案:3  信息版本:手机版 解决时间 2018-12-20 05:00 已解决 2018-12-20 01:58 求 ...

  4. OpenGL 画出雷达动态扫描效果(二) 非底图

    OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...

  5. 使用OpenGL画出四边形不完整的解决

    记录一个使用OpenGL做实验时遇到的小坑. 问题描述: 想要使用OpenGL画一个正方体,效果如下: 其实现方式是通过三维坐标分别画出它的每个面 于是我们使用以下代码来画出一个正方形平面: glBe ...

  6. OpenGL画太阳系

    分享一个OpenGL画太阳系的代码. #include <GL/glut.h> #include <GL/SOIL.h> #include <stdio.h> #i ...

  7. OpenGL 画圆球

    OpenGL 画圆球 只需要两个点,然后使用GL_TRIANGLE_STRIP(按顺序依次组成三角形)方式画三角形就可以了 从上至下,一圈一圈往下计算 球面点计算公式 // x=x0+r sinθco ...

  8. OpenGL 画荷花

    本文参考 基于OpenGL的荷花开放过程模拟_刘金定 (这是百度文库的链接,读者可自己搜索) 我们在这里会实现简单的OpenGL画莲花过程,并实现简单的莲花绽放过程,对学习OpenGL和3D数学有着极 ...

  9. Opengl画衣服1

    学习自 http://www.linuxidc.com/Linux/2013-02/78959p3.htm OpenGL画衣服 左键右键功能可以 继续添加菜单功能 // Homework.cpp : ...

最新文章

  1. python入门基础代码图-【01】Python基础入门 (全)
  2. java 排队任务_android实现排队任务
  3. 无root权限新建git仓库进行多人协同工作
  4. ubuntu server 10.04 LTS(64位)装不了花生壳的解决方法
  5. 【视频】vue组件之props属性
  6. 【转】前端精选文摘:BFC 神奇背后的原理
  7. apache的斜杠问题
  8. 【Flink】FLink 提交报错 instead of minReplication (=1). There are 3 datanode(s) running and 3 node(s) are
  9. SpringCloud工作笔记041---com.fasterxml.jackson.databind.ObjectMapper的使用
  10. win下编译TNN安卓库(静态或者动态) + android studio ndk调用
  11. 古体字与简体字对照表_古代汉语必备简化字与繁体字对照表
  12. 正睿OI DAY14 (ks=null)
  13. 想考华为HCIA,但不知道选择什么方向,点进来~
  14. Halcon识别激光雕刻二维码_ZCTMV
  15. IllegalStateException: Failed to introspect annotated methods on class org.springframework.boot.web.
  16. linux使用certbot,如何自动续期~
  17. dwc3并不是一种数据传输协议,你错了
  18. ubuntu开机报错/dev/nume0n1p2:clean解决方案
  19. 互联网IT 校招与内推:软实力的技巧
  20. python 路边停车

热门文章

  1. Apache Jmeter 压测入门
  2. Spring Boot2.x 整合quartz集群
  3. 快速构建网站或移动端页面:关于Bootstrap的学习笔记
  4. 机器学习SVD【二】
  5. Swift解决【闭包引起的循环强引用】
  6. 光伏“转化效率之王”IBC电池有多牛?
  7. jQuery之ajax错误调试分析
  8. Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete .
  9. mongo(四)索引
  10. 非使用FindControl方法找到深层嵌套的控件