首页 > 其他分享 >[OpenGL]环境搭建以及OpenGL初识

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

时间:2023-06-11 16:32:06浏览次数:44  
标签:glVertex2f OpenGL 0.5 初识 BIT GL ES 搭建


想往游戏行业发展的话,经常被提及到的就是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

代码如下:

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

//画图函数
void myDisplay(void)
{
	//清除函数
	glClear(GL_COLOR_BUFFER_BIT);//masks是bit位的,用于标示要被清除的缓冲区。 这个参数有四种:GL_COLOR_BUFFER_BIT,  GL_DEPTHBUFFER_BIT,GL_ACCUM_BUFFER_BIT  和 GL_STENCIL_BUFFER_BIT。//(颜色缓冲,深度缓冲,累加器缓冲,模板缓冲?)
	/*GL_COLOR_BUFFER_BIT
		Indicates the buffers currently enabled for color writing.     指出缓冲区当前可用于写入颜色
	GL_DEPTH_BUFFER_BIT
		Indicates the depth buffer.                                                   指出是深度缓冲区
	GL_ACCUM_BUFFER_BIT
		Indicates the accumulation buffer.                                       指出累加缓冲区
	GL_STENCIL_BUFFER_BIT
		Indicates the stencil buffer.                                                  指出模板缓冲区*/

	//绘制一个矩形,四个参数标示了位于对角线(左上角)上的两个点的横、纵坐标。
	//glRectf(0, 0, 0.5f, 0.5f);
	glRectf(0.5, 0.5, 1, 1);
	glRectf(0,0,-0.5f,0.5f);

	//绘制四个点
	glBegin(GL_POINTS);
	glVertex2f(0.0f,0.0f);
	glVertex2f(0.5f,0.0f);
	glVertex2f(0.0f,-0.5f);
	glVertex2f(0.5f,-0.5f);
	glEnd();

	//绘制两条线
	glBegin(GL_LINES);
	glVertex2f(-1,0.0f);
	glVertex2f(-0.5f,0.0f);
	glVertex2f(-0.75f,0);
	glVertex2f(-0.75f,-0.5f);
	glVertex2f(-0.75f,-0.5f);
	glVertex2f(-0.85f,-0.4f);
	glEnd();


	//保证前面的OpenGL命令会立即执行(而不会让他们在缓冲区等待)
	glFlush(); //glFlush()清空缓冲区,将指令送往缓硬件立即执行,但是它是将命令传送完毕之后立即返回,不会等待指令执行完毕。当调用glFlush时,物体会一个一个地出现在屏幕上。
	//glFinish(); //将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回。glFinish通常会带来性能上的损失,GPU和CPU并行性能丧失。Direct3D不支持Finish的概念。

}
int main(int argc, char *argv[])
{
	//对GLUT进行初始化,必须在其他GLUT之前调用一次,格式比较死板,一般就照着写一次即可。
	glutInit(&argc, argv);

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

	//新建窗口在屏幕中的位置
	glutInitWindowPosition(100, 100);

	//初始化默认的大小
	glutInitWindowSize(400, 400);

	//根据前面的信息创建窗口,参数为窗口的标题。注意:这里窗口创建后并不会立马显示到屏幕上,需要执行glutMainLoop()才会显示到屏幕上
	glutCreateWindow("Hello OpenGL-Create By 丁小未");

	//设置一个函数,当需要进行画图时候,这个函数就会被调用
	glutDisplayFunc(&myDisplay); 

	//进行消息循环,理解为可以显示窗口
	glutMainLoop();

	return 0;
}

效果图:


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


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


欢迎关注我的围脖

Unity QQ群:375151422

====================== 相互学习,共同进步 ===================





标签:glVertex2f,OpenGL,0.5,初识,BIT,GL,ES,搭建
From: https://blog.51cto.com/dingxiaowei/6458189

相关文章

  • 图床搭建
    简介图床(ImageHostingService)是一种在线服务,用于存储和托管图像。它允许用户将图像上传到服务器,并生成一个可供访问的唯一链接。这些链接可以在需要时在网页、论坛、社交媒体或其他地方共享图像。图床服务通常提供以下功能和优势:存储和托管图像:图床服务提供了存储和托管图像......
  • hexo gitee搭建博客问题
    下载hexonpminstall-ghexo-cli出现Error:EPERM:operationnotpermitted错误删除C:\Users{你的用户文件夹}/目录中的.npmrc文件,一般为隐藏以管理员身份运行打开cmd下载依赖Error:EPERM:operationnotpermitted,open'D:\nodejs\soft\node_cache_cacache\tmp......
  • Hexo+github搭建个人博客
    所以呢一直想自己搭一个有自己个性域名的博客。。昨晚花了一点时间用Hexo+github搭好了,地址是https://xwj-scarf.github.io/逼格瞬间上了一个档次有没有。。前期工作下载node.js和git,安装hexo在nodejs.org/en/ 上下载安装Node.js,一路下一步就好了下载完成后在cmd输入node-v,就能......
  • 初识同步锁
    我们知道,锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的......
  • linux环境下使用压缩包、docker、docker-compose搭建nacos集群
    本篇文章介绍如何在linux系统上安装nacos和搭建集群,本文章使用的是centos7系统。本机搭建nacos1、准备工作Nacos依赖 Java需要三台linux服务器,条件有限的可以安装虚拟机,内存有限那就只需要安装一台虚拟机,然后开启不同端口就可以,所以最低的条件是你需要安装一个centos7版本的虚拟......
  • Python+OpenGL使用Cohen-Sutherland算法实现直线裁剪
    问题描述:编写Python程序,使用OpenGL实现用于直线裁剪的Cohen-Sutherland算法。运行程序,绘制一个矩形表示裁剪窗口,然后通过鼠标单击和移动来绘制直线,鼠标抬起时对刚刚绘制的直线进行裁剪,显示最终落在裁剪窗口中的部分。关于Cohen-Sutherland算法请自行查阅资料。准备工作:安装和配置Py......
  • 从零玩转系列之微信支付实战基础框架搭建
    一、前言halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端)在此之前已经更新了微信支付开篇、微信支付安全......
  • Net Core环境搭建Hangfire项目
    添加相关代码配置。1.因hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices,简单配置如下:varconnection=Configuration["ConnectionsStrings"];//数据库链接配置services.AddHangfire(x=>x.UseSqlServerStorage(connection));如果需要配置详细......
  • 投票活动小程序开发搭建
    由于小程序是基于微信开发者工具编写的,因此我先介绍一下需要使用的工具和技术:-微信开发者工具:用于开发、调试和发布小程序。-小程序云开发:用于存储数据和进行后端逻辑处理。-uni-app框架:uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Androi......
  • 服务器内网可以打开外网打不开怎么办?网站搭建后打不开怎么办?
    开服或是做网站建设的朋友在搭建网站的时候有遇到搭建网站后打不开的情况吗?相信应该有挺多新手小白是会遇到的,今天我给大家分享一下搭建网站打不开的解决方法首先需要分2种情况,第一种是外网和服务器都是打不开的,这个是什么原因导致的呢?若是遇到外网和服务器都打不开搭建的网站,第一......