vs2013配置OpenGL+简单案例分析
一、安装
我的系统是win10 64位,用的是visual studio2013,vs装在了E盘下面。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
visual studio下载地址如下:
链接:https://pan.baidu.com/s/1K74efwL5rSyONF7VS1IRMQ
提取码:pb7k
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
安装过程我就不多说了,首先解压,然后按照说明文档做就行
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后下载OpenGL配置文件glut,下载链接如下:
链接:https://pan.baidu.com/s/1lkFYBpdrc0Ry3cYW_0h2Xw
提取码:i1b9
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是安装过程,打开glut文件夹,发现有5个文件:
1.把glut.h 复制到vs安装的目录下,如果你是默认安装,那么应该去C盘找,如果没有没有GL文件夹,自己创建
2.把glut.lib和glut32.lib复制到:
3.把glut.dll 和glut32.dll复制到 C:\Windows\SysWOW64下:
这时候已经ok啦。我们用vs创建项目吧!
1.在开始栏里找到visual studio 2013
2.打开visual stdio2013,新建--->项目
3.选择空项目
4.写测试文件
5.测试文件代码如下:
#include <GL\glut.h>void myDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glRectf(-0.5f, -0.5f, 0.5f, 0.5f); //画矩形glFlush();}int main(int argc, char *argv[]){//初始化glutInit(&argc, argv);//显示模式glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//窗口位置glutInitWindowPosition(100, 100);//窗口尺寸glutInitWindowSize(400, 400);//创建窗口,窗口标题为“FirstOpenGLProgram”glutCreateWindow("FirstOpenGLProgram");//绘制回掉函数glutDisplayFunc(&myDisplay);glutMainLoop();return 0;}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、简单代码分析
好了,基本步骤已经完成,接下来我们要阅读简单的代码并对OpenGL进行理解了:
我们要用opengl画一个cube,创建cube.cpp,代码如下
#include <windows.h>
#include <GL/glut.h>void init(void)
{glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);
}/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Anything you want to display on the screen, draw it here. * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Clear the screen. Set the current color to white.
* Draw the wire frame cube.
*/void display(void)
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0, 1.0, 1.0);glLoadIdentity(); /* clear the matrix *///--------------- you can define your own transformation-----------glTranslatef(0.0, 0.0, -5.0); /* viewing transformation */glScalef(1.0, 2.0, 1.0); /* modeling transformation *///---------------- you can draw something else here-----------glutWireCube(1.0); /* draw the cube */glFlush();
}/* Called when the window is first opened and whenever
* the window is reconfigured (moved or resized).
*/void reshape(int w, int h)
{/* define the projection */glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);glMatrixMode(GL_MODELVIEW); /* back to modelview matrix */glViewport(0, 0, w, h); /* define the viewport */
}/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, and handle input events.
*/int main(int argc, char** argv)
{glutInit(&argc, argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//define size and the relative positon of the applicaiton window on the displayglutInitWindowSize(500, 500);glutInitWindowPosition(100, 100);//init the defined window with "argv[1]" as topic showed on the top the windowglutCreateWindow(argv[0]);// opengl setupinit();//define callbacksglutDisplayFunc(display);glutReshapeFunc(reshape);//enter the loop for displayglutMainLoop();return 0;
}
运行结果如下:
下面说一下我对这个程序的理解,首先理解GLUT是个啥玩意儿,官网英文解释如下:
GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT makes it considerably easier to learn about and explore OpenGL programming. GLUT provides a portable API so you can write a single OpenGL program that works across all PC and workstation OS platforms.
GLUT is designed for constructing small to medium sized OpenGL programs. While GLUT is well-suited to learning OpenGL and developing simple OpenGL applications, GLUT is not a full-featured toolkit so large applications requiring sophisticated user interfaces are better off using native window system toolkits. GLUT is simple, easy, and small.
意思就是GLUT简单、轻便、快捷,能够在跨平台工作,比较适合初学者使用。但是GLUT并不会全能的,如果需要开发更加精致的OpenGL程序,实现更加完善的图形学画面,需要其他的工具包。
The toolkit supports:
- Multiple windows for OpenGL rendering
- Callback driven event processing
- Sophisticated input devices
- An 'idle' routine and timers
- A simple, cascading pop-up menu facility
- Utility routines to generate various solid and wire frame objects
- Support for bitmap and stroke fonts
- Miscellaneous window management functions
那么这个程序中调用的函数都有什么作用呢:
>>>>>>初始化函数
void glutInit(int* argc,char** argv)-------初始化GLUT库
void glutInitDisplayMode(unsigned int mode)--------设置图形显示模式
- GLUT_RGBA:当未指明GLUT-RGBA或GLUT-INDEX时,是默认使用的模式。表明欲建立RGBA模式的窗口。
- GLUT_RGB:与GLUT-RGBA作用相同。
- GLUT_INDEX:指明为颜色索引模式。
- GLUT_SINGLE:只使用单缓存
- GLUT_DOUBLE:使用双缓存。以避免把计算机作图的过程都表现出来,或者为了平滑地实现动画。
- GLUT_ACCUM:让窗口使用累加的缓存。
- GLUT_ALPHA:让颜色缓冲区使用alpha组件。
- GLUT_DEPTH:使用深度缓存。
- GLUT_STENCIL:使用模板缓存。
- GLUT_MULTISAMPLE:让窗口支持多例程。
- GLUT_STEREO:使窗口支持立体。
- GLUT_LUMINACE:luminance是亮度的意思。但是很遗憾,在多数OpenGL平台上,不被支持。
glutInitWindowSize(500, 500)--------设置程序要产生的窗口大小,以左上角为原点,以像素为单位
glutInitWindowPosition(100, 100)----------设置程序要产生的窗口位置,以左上角为原点,以像素为单位
>>>>>>窗口管理函数
int glutCreateWindow(char* name)---------产生一个顶层的窗口,name作为窗口的名字,也就是窗口标题栏显示的内容,返回值是生成窗口的标记符,可用函数glutGetWindow()加以引用。
>>>>>>>注册回调函数
void glutDisplayFunc(void (*func)(void) )--------为当前窗口设置显示回调函数
void glutReshapeFunc(void (*Func)(int width, int height) )----------指定当窗口的大小改变时调用的函数
>>>>>>>事件处理函数
void glutMainLoop(void)----------让 glut 程序进入事件循环。在一个glut程序中最多只能调用一次。一旦调用,会直到程序结束才返回
>>>>>>>自定义函数
init():
glClearColor()-------设置清除颜色
void glShadeModel(GLenum mode)--------指明使用哪种着色技术,可以取值GL_FLAT和GL_SMOOTH。默认取值是GL_SMOOTH, 在使用顶点数据绘制几何图形时,如果为每个顶点指定了顶点颜色,此时若使用GL_SMOOTH,每个顶点使用对应的顶点颜色来着色,而顶点之间的片元颜色则使用差值的方式来计算获得,结果就是渐变色;而若使用GL_FLAT,假设几何图形由n个三角形构成,则只会使用顶点颜色数组中最后n个颜色进行着色。 比如,左图是GL_SMOOTH着色,右图是GL_FLAT着色:
void display(void):
glClear(GL_COLOR_BUFFER_BIT)-----https://blog.csdn.net/shuaihj/article/details/7230138
glColor3f(1.0, 1.0, 1.0)------设置渲染颜色
glLoadIdentity()-------https://blog.csdn.net/shuaihj/article/details/7228265
glTranslatef(0.0, 0.0, -5.0)--------https://www.cnblogs.com/lihuiyy/archive/2011/11/10/2244317.html
glutWireCube()--------模型绘制函数
https://blog.csdn.net/augusdi/article/details/20546919
https://blog.csdn.net/yearafteryear/article/details/9174465
glflush()------https://blog.csdn.net/meegomeego/article/details/8594373
https://blog.csdn.net/xb554790401/article/details/38704493
void reshape(int w, int h):
glMatrixMode(GL_PROJECTION)------------https://blog.csdn.net/jiangdf/article/details/8460012
glFrustum()-----------https://blog.csdn.net/peng6662001/article/details/7082436
深深地觉得想要学好图形学,真的需要把计算机的原理等基础打的非常扎实。。。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上链接都是讲的比较清楚的blog,后续还会继续更新~
vs2013配置OpenGL+简单案例分析相关推荐
- 线程死锁问题以及简单案例分析
线程死锁问题以及简单案例分析 1. 什么是死锁? 1.1 概述 1.2. 业务场景--举例说明 2. 死锁例子 2.1 代码 2.2 效果 2.3 代码分析 3. 解决案例中死锁问题 4. 怎么避免线 ...
- led HAL简单案例分析
mr_raptor的专栏 专注Android系统,移动平台研究,ARM BSP开发,著有<深入浅出嵌入式底层软件开发>北航出版社 目录视图 摘要视图 订阅 CSDN Android客户端 ...
- ubuntu-hadoop配置安装-简单案例以及伪分布式搭建
文章目录 linux 下创建 hadoop用户 hadoop的安装与环境配置 先卸载原有的 JDK 安装hadoop和JDK 安装JDK 安装hadoop Standalone Operation 模 ...
- 45.JVM调优策略、常见问题:内存泄漏(年老代堆空间被占满、持久代被占满、堆栈溢出、线程堆栈满、系统内存被占满)优化方法:优化目标、优化GC步骤、优化总结;案例分析(公司系统参数、网上给的配置参数)
45.JVM调优策略 45.1.常见问题 45.1.1.内存泄漏 45.1.1.1.年老代堆空间被占满 45.1.1.2.持久代被占满 45.1.1.3.堆栈溢出 45.1.1.4.线程堆栈满 45. ...
- 网络工程师学习参考资料路由器配置案例分析
网络工程师学习参考资料路由器配置案例分析 2006-08-30 23:01:00 标签:配置 路由器 案例 网络工程师 [推送到技术圈] INTERNET共享资源的方式越来越多,就大多数而言,DDN专 ...
- Java培训总结:过滤器链的实现方法、配置和案例分析
今天小千给大家分享的是Java培训总结:过滤器链的实现方法.配置和案例分析. 过滤器能够对网站中的各种内容进行过滤(页面.Servlet.图片.文件),可以在网站内容请求和响应时进行一些操作,完成一些 ...
- win7·64bit+VS2013+opencv的简单配置
win7·64bit+VS2013+opencv的简单配置 win7x64 vs2013 opencv 如果你不需要: 在调试的时候看OpenCV的源代码: 添加新的功能支持,比如GPU. OpenC ...
- python 装机配置_Python实现自动装机功能案例分析
前言 提示:在管理服务器的过程中,发现有很多服务器在启动的过程中默认以PXE方式启动,这就导致我们无法将PXE装机程序放开到所有的交换机端口中,本文是以Python对dell服务器进行了一些控制,更多 ...
- 国内沪深股市的股票策略分析的简单案例
国内沪深股市的股票策略分析的简单案例 最近学习了一段时间的python,觉得用来做股票策略分析还是挺有趣的,因此参考网上的一些例子,以及tushare工具指南,编写了一个功能简单的股票策略分析程序,抛 ...
最新文章
- Spark源码阅读02-Spark核心原理之消息通信原理
- hdu1824 基础2sat
- 三甲医院需要部署哪些网络安全设备
- 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板
- Python练习-从小就背不下来的99乘法表
- as3 与 java_每天学一点Flash(48) As3.0 与 java 通信(1)
- 算法总结之 生成窗口的最大值数组
- 操作系统中的互斥锁与条件变量
- (转)JAVA泛型通配符T,E,K,V区别,T以及Class,Class的区别
- iOS ChildViewController与View
- 如何让你的Python程序支持多语言
- Modbus转Profinet网关连接英威腾Goodrive200A配置案例
- 吴恩达深度学习笔记——改善深层神经网络:超参数调整,正则化,最优化(Hyperparameter Tuning)
- 在哪里能学到计算机基础知识,电脑基础知识学习
- 如何使用手机软件将图片转换为文字
- echarts树状图怎么设置主节点和子节点的距离_教你秒懂CAD出图比例正确设置技巧...
- STM32初识及运用—GPIO
- VR旅游应用案例解析,世界那么大用VR去看看!
- 【BZOJ 4605】崂山白花蛇草水 替罪羊树套线段树
- 抖音上的战斗力测试软件,抖音战斗力测试-f2抖音战斗力测试app官方软件预约 v1.0-优盘手机站...
热门文章
- java的接口常用命名_Java命名和目录接口,Java Naming and Directory Interface,音标,读音,翻译,英文例句,英语词典...
- R语言ggplot2可视化:gganimate包transition_time函数创建动态散点图动画(gif)、shadow_wake函数配置动画的渐变效果(gradual falloff)拖尾效应
- nyoj-741-“数学家“ST
- 网工知识角|如何理解网络拓扑中的下一跳地址
- 在win10中安装caffe并配置MATLAB和Python接口(支持GPU加速)
- 15.内置函数,匿名函数
- git 简单命令使用
- JQ---h5页面上实现微信扫一扫功能
- 手写简单的HashMap(jdk1.7)
- 【项目管理】软件项目经理述职报告