OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换
/* reference http://nehe.gamedev.net/article/using_gluunproject/16013/ */#include <windows.h> // windows系统要加这个。因为下面2个头文件的一些宏是在这个文件中定义的 #include <gl/Gl.h> #include <gl/glut.h> //这两个头文件在OpenGL程序中几乎必加。 #include <cstdio> //标准输入输出,用来打印坐标 //<<<<<<<<<<<<<<<<<<<<<<< myInit >>>>>>>>>>>>>>>>>>>> 初始化 void myInit(void) {glClearColor(0.0,0.0,0.0,0.0); // 设置背景色:黑色。 glShadeModel(GL_SMOOTH); // 设置着色模式,可选GL_SMOOTH(默认)或GL_FLAT。采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。 } //<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>> 绘制 void myDisplay(void) {glEnable(GL_DEPTH_TEST); //开启深度测试glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); // 将屏幕清除为背景色glColor3f(1.0f, 0.0f, 0.0f); // 绘制颜色:红色 glLoadIdentity();gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0 ,1.0, 0.0); //设置eye,相机位置,和向上up向量,可调不同参数来观察会有什么变化glScalef(1.0, 2.0, 1.0); //表示y坐标值扩大两倍,这样原本方的物体就变成长的了。 glutSolidSphere(1.0, 30, 50); //cube的边长 glFlush(); // send all output to display 把数据从缓冲区弄到屏幕上 }//<<<<<<<<<<<<<<<<<<<<<<<< reshape >>>>>>>>>>>>>>>>> 视图变换 void myReshape(int w, int h) {glViewport(0, 0, (GLsizei) w, (GLsizei) h); //设置视口大小 glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0); //将当前矩阵与一个透视矩阵相乘,把当前矩阵转变成透视矩阵 glMatrixMode(GL_MODELVIEW); }//<<<<<<<<<<<<<<<<<<<<<<<< GetOGLPos >>>>>>>>>>>>>>>>> 由屏幕坐标得到OpenGL坐标 void GetOGLPos(int x, int y) {GLint viewport[4];GLdouble modelview[16];GLdouble projection[16];GLfloat winX, winY, winZ;GLdouble posX, posY, posZ;glGetDoublev( GL_MODELVIEW_MATRIX, modelview );glGetDoublev( GL_PROJECTION_MATRIX, projection );glGetIntegerv( GL_VIEWPORT, viewport );winX = (float)x;winY = (float)viewport[3] - (float)y;glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ );gluUnProject( winX, winY, winZ, modelview, projection, viewport, &posX, &posY, &posZ);//return CVector3(posX, posY, posZ);printf("x:%f y:%f z:%f\n",posX, posY, posZ);return;}//<<<<<<<<<<<<<<<<<<<<<<<< reshape >>>>>>>>>>>>>>>>> 鼠标点击 void myMouse(int button, int state, int x, int y) {if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)GetOGLPos(x,y);}//<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>> void main(int argc, char** argv) {glutInit(&argc, argv); // ***对GLUT进行初始化glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA |GLUT_DEPTH); // ***set display mode,单缓冲/双缓冲,颜色索引模式,深度等glutInitWindowSize(480,480); // ***设置窗口大小glutInitWindowPosition(100, 150); // ***设置窗口位置glutCreateWindow("my cube attempt"); // ***创建窗口 myInit(); glutDisplayFunc(myDisplay); // 显示事件回调函数glutReshapeFunc(myReshape); //当窗口改变时的回调函数glutMouseFunc(myMouse); //当鼠标交互时的回调函数glutMainLoop(); // ***启动程序,检测事件并进行处理 }
转载于:https://www.cnblogs.com/difei/p/3718966.html
OpenGL学习笔记3 —— 绘制3D物体、鼠标交互、反向变换相关推荐
- OpenGL 学习笔记(3)绘制几何物体
几何物体可以用点来描述,我们可以通过OpenGL的api来了解一下 几何图形类型 其中以glBegin开始,glEnd结束 下图是采用不同类型的图形效果 为了熟悉上诉图形,下面来对每种图形进行测试 建 ...
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...
- OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7888 ...
- OpenGL学习笔记(一)绘制点线面及多面体
OpenGL学习笔记(一)绘制点线面及多面体 绘制点线面 #include <iostream> #include <GL/GLUT.h> #define PI 3.14159 ...
- 【OpenGL学习笔记⑥】——3D变换【旋转的正方体 实现地月系统 旋转+平移+缩放】
✈️ 文章目录 零. 成果预览图 一.3D立方体的顶点数组 二.纹理旋转 三.纹理缩放 四.画n个3D图形 五.轨道的数学公式 六.深度缓冲(Z 缓冲) 七.完整代码 八.参考附录: 神器的正方体 ☁ ...
- 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】
✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...
- Unity学习笔记:Unity 3D 飞机大战
Unity学习笔记:Unity 3D 飞机大战 1.打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体 然后创建C#脚本,挂载到飞机上. 2.给飞机创建子弹,让子弹成为预制体 ...
- OPENGL学习笔记之八
OPENGL学习笔记之八 2017/11/15 阅读材料来自learnopengl.com以及learnopengl-cn.github.io 我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将 ...
- OpenGL学习笔记:矩阵变换
文章目录 缩放 glm矩阵表示 glm缩放矩阵实现 位移 齐次坐标 glm位移矩阵实现 旋转 沿x轴旋转 沿y轴旋转 沿z轴旋转 沿任意轴旋转 glm旋转矩阵实现 矩阵的组合 glm矩阵组合使用 接上 ...
最新文章
- CAMB输出保留小数位数问题
- 计算机科学家 成就,25年来的最高成就!MIT科学家让计算机提供创意,可自动设计机器人形态...
- matplotlib 横坐标少了一个点_比 matplotlib 效率高十倍的数据可视化神器
- 机器学习入门02-朴素贝叶斯原理和java实现
- 串口数据字节位的理解
- 何恺明一作,刷新7项检测分割任务,无监督预训练完胜有监督
- 软件工程:可行性研究
- 全国统计用区划代码和城乡划分代码-70w数据
- 微信apk微信直接用手机默认浏览器打开 IOS跳转App Store(苹果商店)打开
- 智能电子后视镜MFC01-LCD 高配版规格书(AI-CMS)
- CSS 边框四个角效果
- 阿里云账号注册流程(新手教程)
- JavaWeb:HTML
- vue 给某个div设置回到顶部
- 《Wireshark数据包分析实战(第2版)》目录—导读
- [PyQt5]基本控件24 - 时间日期编辑框QDateTimeEdit
- VBA多条件选择及自动填表及计算汇报
- 静默升级linux,Firefox 10 正式发布 支持静默升级功能
- 产品经理相关资源整理
- ITSM流程管理:如何有效实施
热门文章
- SAP MM T-code MD04的使用,是有前提的!
- 领英2017报告:机器学习、大数据工程师成为最热门的新兴职业
- 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南...
- 《中国基础研究竞争力报告2020》发布,6图表速览报告核心结论
- AI产业链分布图曝光:1040个玩家,BAT率先步入应用
- 2019与下一个十年:我们将要放弃的和将要拥抱的
- 清华发布《人工智能AI芯片研究报告》,一文读懂人才技术趋势
- 生物科技发展与人类命运共同体塑造
- 去了两家外包公司,颠覆了我的认知!
- 漫画:什么是 “抽象工厂模式” ?