[OpenGL]环境搭建以及OpenGL初识

简介:

想往游戏行业发展的话,经常被提及到的就是OpenGL和DirectX,这两者听起来感觉是一门挺高深的技术,今天我也开始摸索学习OpenGL,那么OpenGL到底是什么?它和DirectX有什么区别和联系?

OpenGL初识

OpenGL只是一套图形函数库

DirectX包含图形、声音、输入、网络等模块。

但就图形而论,DirectX的图形库性能不如OpenGL,OpenGL稳定,可以跨平台使用,DirectX只支持Windows平台,所以OpenGL还是有它的优势!OpenGL ES是OpenGL的嵌入设备版本,为了适合潜入设备性能要求较高,从而OpenGL ES删减了一些低性能的操作方式。

OpenGL的优越性:


  • 与C语言紧密结合

  • 强大的可移植性

  • 套性能的图形渲染


官网:http://www.opengl.org/

OpenGL ES 1.X 和OpenGL ES 2.X的区别:


OpenGL ES 1.X:

For fixed function hardware: OpenGL ES 1.1 is defined relative to the OpenGL 1.5 specification and emphasizes hardware acceleration of the API, but is fully backwards compatible with 1.0. It provides enhanced functionality, improved image quality and optimizations to increase performance while reducing memory bandwidth usage to save power. The OpenGL ES 1.1 Extension Pack is a collection of optional extensions added to OpenGL ES 1.1 that reduced variability and bring significant improvements in image quality and performance.


OpenGL ES 2.X:

For programmable hardware:OpenGL ES 2.0 is defined relative to the OpenGL 2.0 specification and emphasizes a programmable 3D graphics pipeline with the ability to create shader and program objects and the ability to write vertex and fragment shaders in the OpenGL ES Shading Language. OpenGL ES 2.0 does not support the fixed function transformation and fragment pipeline of OpenGL ES 1.x.


OpenGL环境搭建

1.下载OpenGL库文件,点击下载

2.glut.h放在了C:\Program Files\Windows Kits\8.0\Include\um\gl 目录下(通过在C盘搜索GL.h得来)

3.glut.lib和glut32.lib放到 E:\Microsoft Visual Studio 11.0\VC\lib

4.glut.dll和glut32.dll放到"C:\Windows\System32"

5.新建空白工程,随便.c或者.cpp

代码如下:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. #include <gl\glut.h> //包含OpenGL实用库,这是GLUT头文件好含<GL/gl.h>和<GL/glu.h>  

  2.   

  3. //画图函数  

  4. void myDisplay(void)  

  5. {  

  6.     //清除函数  

  7.     glClear(GL_COLOR_BUFFER_BIT);//masks是bit位的,用于标示要被清除的缓冲区。 这个参数有四种:GL_COLOR_BUFFER_BIT,  GL_DEPTHBUFFER_BIT,GL_ACCUM_BUFFER_BIT  和 GL_STENCIL_BUFFER_BIT。//(颜色缓冲,深度缓冲,累加器缓冲,模板缓冲?)  

  8.     /*GL_COLOR_BUFFER_BIT 

  9.         Indicates the buffers currently enabled for color writing.     指出缓冲区当前可用于写入颜色 

  10.     GL_DEPTH_BUFFER_BIT 

  11.         Indicates the depth buffer.                                                   指出是深度缓冲区 

  12.     GL_ACCUM_BUFFER_BIT 

  13.         Indicates the accumulation buffer.                                       指出累加缓冲区 

  14.     GL_STENCIL_BUFFER_BIT 

  15.         Indicates the stencil buffer.                                                  指出模板缓冲区*/  

  16.   

  17.     //绘制一个矩形,四个参数标示了位于对角线(左上角)上的两个点的横、纵坐标。  

  18.     //glRectf(0, 0, 0.5f, 0.5f);  

  19.     glRectf(0.5, 0.5, 1, 1);  

  20.     glRectf(0,0,-0.5f,0.5f);  

  21.   

  22.     //绘制四个点  

  23.     glBegin(GL_POINTS);  

  24.     glVertex2f(0.0f,0.0f);  

  25.     glVertex2f(0.5f,0.0f);  

  26.     glVertex2f(0.0f,-0.5f);  

  27.     glVertex2f(0.5f,-0.5f);  

  28.     glEnd();  

  29.   

  30.     //绘制两条线  

  31.     glBegin(GL_LINES);  

  32.     glVertex2f(-1,0.0f);  

  33.     glVertex2f(-0.5f,0.0f);  

  34.     glVertex2f(-0.75f,0);  

  35.     glVertex2f(-0.75f,-0.5f);  

  36.     glVertex2f(-0.75f,-0.5f);  

  37.     glVertex2f(-0.85f,-0.4f);  

  38.     glEnd();  

  39.   

  40.   

  41.     //保证前面的OpenGL命令会立即执行(而不会让他们在缓冲区等待)  

  42.     glFlush(); //glFlush()清空缓冲区,将指令送往缓硬件立即执行,但是它是将命令传送完毕之后立即返回,不会等待指令执行完毕。当调用glFlush时,物体会一个一个地出现在屏幕上。  

  43.     //glFinish(); //将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回。glFinish通常会带来性能上的损失,GPU和CPU并行性能丧失。Direct3D不支持Finish的概念。  

  44.   

  45. }  

  46. int main(int argc, char *argv[])  

  47. {  

  48.     //对GLUT进行初始化,必须在其他GLUT之前调用一次,格式比较死板,一般就照着写一次即可。  

  49.     glutInit(&argc, argv);  

  50.   

  51.     //设置显示方式,GLUT_RGB标示使用RGB颜色,GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)  

  52.     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);  

  53.   

  54.     //新建窗口在屏幕中的位置  

  55.     glutInitWindowPosition(100, 100);  

  56.   

  57.     //初始化默认的大小  

  58.     glutInitWindowSize(400, 400);  

  59.   

  60.     //根据前面的信息创建窗口,参数为窗口的标题。注意:这里窗口创建后并不会立马显示到屏幕上,需要执行glutMainLoop()才会显示到屏幕上  

  61.     glutCreateWindow("Hello OpenGL-Create By 丁小未");  

  62.   

  63.     //设置一个函数,当需要进行画图时候,这个函数就会被调用  

  64.     glutDisplayFunc(&myDisplay);   

  65.   

  66.     //进行消息循环,理解为可以显示窗口  

  67.     glutMainLoop();  

  68.   

  69.     return 0;  

  70. }  

效果图:



部分解释参考每行代码之后的注释。



欢迎关注我的围脖




















本文转蓬莱仙羽 51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1429146,如需转载请自行联系原作者

相关文章
OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
OpenGL学习笔记(一):环境搭建、三维空间坐标系理解以及OpenGL的基本使用
|
iOS开发 C++ MacOS
Mac环境下OpenGL环境搭建
1.在Xcode内新建一个项目;2.选macOS > APP;3.修改项目名;4.添加OpenGl.framework和GLUT.framework两个依赖库;5.需要的文件include文件包和libGLToos.a;6.新建C++文件 起名为main;7.signing & Capabilities 中证书改为 Sing to Run Locally;8. 记得在Build Settings 中的 Header Search Paths中增加include文件夹的路径;9.加入测试代码 编辑运行
211 0
Mac环境下OpenGL环境搭建
|
Ubuntu IDE Unix
一篇极度舒适的OpenGL_ES环境搭建(Ubuntu 18.04 LTS)
github传送门 目录 前言 PowerVR CMake环境 FreeImage CMakeLists.txt解析 源码 最后 前言 作为一个梦想成为游戏制作人的菜鸟程序员, 我终究没悬念地踏上了撰写shader的道路(手动滑稽).
1693 0
|
开发工具 数据安全/隐私保护 异构计算
OPENGL学习【一】VS2008开发OPENGL程序开发环境搭建
版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/79241439 1.VS2008工具自行在网上下载安装,现只提供VS2008开发工具中配置OPENGL环境的详细步骤。
1196 0
|
7月前
|
XML 小程序 Java
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
【Android App】三维投影OpenGL ES的讲解及着色器实现(附源码和演示 超详细)
132 0
|
缓存 C++
Opengl ES之FBO
Opengl ES连载系列
157 0
|
存储 编解码 算法
Opengl ES之LUT滤镜(上)
Opengl ES之连载系列
466 0
|
数据安全/隐私保护 开发者
OpenGL ES 多目标渲染(MRT)
Opengl ES连载系列
327 0
|
数据安全/隐私保护 索引
Opengl ES之纹理数组
Opengl ES连载系列
263 0