![](https://img-blog.csdnimg.cn/bbdb2f2c3e404be894706d3244e76aa7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OpenGL实战
主要是在利用OpenGL学习图形学过程中的一些尝试和总结
别看着我笑了
这个作者很懒,什么都没留下…
展开
-
在OpenGL中创建一个球体动画,使球体在窗口内做自由落体运动,并在撞击地面后能够返回原来高度
这是计算机图形学基础的一道单元练习题,看题的时候觉得没什么,写出来才发现其中大有门道,其中有几个值得关注的地方:首先如果你是以窗口底部为地面的话,你会发现小球在第二次下落时无法回弹,这就很恶心了,做了很多无谓的尝试查了一些资料最后也只是找到了一个合适的位置让小球可以一直下落和回弹。还有一个细节就是我初始化小球y坐标为9.0001,而其回弹的最高位置是9.0,如果初始化小球y坐标也是9.0,小...2020-04-21 16:09:06 · 3239 阅读 · 0 评论 -
NateRobinTutors下载地址以及其具体用法
链接:https://pan.baidu.com/s/1X_3MJUiLHNtsfEab_GMomg提取码:k976其中包括:(1)讲课中用的所有的例子程序的代码;(2)NateRobinTutors-win32 demo(3)freeglut 和glew的针对vs2010和vs2015的配置类库。大家可以忽略1、3,只下这个2即可。NateRobinTutor真的是太舒服了,这个...原创 2020-03-05 00:09:01 · 514 阅读 · 1 评论 -
OpenGL交互式连续折线的绘制
没什么难的,都是调用OpenGL的API函数去实现即可,却也有一些小的细节处理:flag:用来标记是否开始交互,因为所有折线(直线段)的第一个端点和最后一个端点都是仅被一条直线占有,而中间的端点因为绘制的是连续折线,都是被两条直线共同占有,这在交互时设定端点坐标和重绘是有一个小细节。看代码中有注释。功能:左键点击选择端点,鼠标移动控制线的斜率,再次点击第二个端点画线,右击可以清除上一次画...原创 2020-04-07 15:28:27 · 1568 阅读 · 0 评论 -
学习unity后再用OpenGL去做坦克大战
因为在学完GitHub上的learnOpenGL之后一直没有再写过比较综合性的程序,正好前一阵用unity实现了一个比较完整的坦克大战,现在再用OpenGL从底层开始做一个。做之前觉得So easy,做的过程才知道引擎真香还有之前学的渲染都忘光了。有关游戏的总结:1.我希望的游戏功能:开始页面:选择关卡、开始游戏、读取以前存档、退出暂停页面:重新开始本关卡、存档、退出游戏中:移动、射击、催回和被摧毁、分数,还有一些被摧毁后产生的道具(细节很多,后面一一记录)2.遇到的一些细节的问题:(1)原创 2020-07-05 21:51:18 · 1096 阅读 · 5 评论 -
error: C1189: #error: OpenGL header already included, remove this include, glad already provides it
在使用OpenGL时,用到glad头文件时可能会遇到这种错误:error: C1189: #error: OpenGL header already included, remove this include, glad already provides it.原因是#include <glad/glad.h>位置不当。#include <glad/glad.h>必须放在所有头文件之前,不管在哪里,不管在.h还是.cpp;...原创 2020-06-05 21:30:50 · 7547 阅读 · 7 评论 -
用Assimp模型加载库加载一个Crytek的游戏孤岛危机(Crysis)中的原版纳米装(Nanosuit)
用这个例子来对GitHub上的LearnOpenGL教程前四个单元用到的所有自定义或者引入的各种头文件和资源进行一个总结,不得不说这个教程简直太美妙了。这个模型是来自对GitHub上的LearnOpenGL的一个例子:准备工作:用的是OpenGL和glfw,glfw安装配置可见:https://blog.csdn.net/derbi123123/article/details/104...原创 2020-04-27 12:43:49 · 1928 阅读 · 0 评论 -
用stb_image.h轻松地加载图片到程序中(比如纹理)
stb_image.h是Sean Barrett的一个非常流行的单头文件图像加载库,它能够加载大部分流行的文件格式,并且能够很简单得整合到你的工程之中。stb_image.h可以在https://github.com/nothings/stb下载。解压后找到stb_image.h加入你的工程,并另创建一个新的C++文件,输入以下代码:#define STB_IMAGE_IMPLEMENTA...原创 2020-04-19 09:50:05 · 11330 阅读 · 3 评论 -
OpenGL中各种变换的原理以及对应的OpenGL函数
先看看上周学了什么?1.OpenGL的默认坐标系、默认视点位置、单位:(1)右手坐标系(2)默认视点在原点,也就是屏幕中央,说白了屏幕中央就是你的眼睛,你在向屏幕里面看。(3)OpenGL中并无绝对单位,只有相对大小!!!相对于视椎体大小来设定物体大小。 这句话对于理解OpenGL函数参数以及参数的赋值极为重要。2.OpenGL中变换的四个步骤及其相关的OpenGL函数:(1)几何变...原创 2020-03-05 00:46:25 · 1718 阅读 · 1 评论 -
OpenGL分别用点和折线模式实现正弦和余弦曲线的绘制
点就是直接用vertex,折线就用GL_LINE_STRIP的模式其次就是正弦和余弦曲线用程序表示就是:先看看用点画的-π到π区间的正弦曲线 //用点画正弦曲线 glColor3f(1.0,0.0,0.0); glTranslatef(250,250,0); glBegin(GL_POINTS); for(float x=-PI ; x<PI ; x+=2*PI/180){ ...原创 2020-04-01 21:51:04 · 2403 阅读 · 0 评论 -
我们自己的着色器类(为了不每次使用shader都搞那么多代码用来配置各种东西)
在https://blog.csdn.net/derbi123123/article/details/105566292中我总结了glfw+shader的程序框架,在https://blog.csdn.net/derbi123123/article/details/105566505中我总结了freeglut+shader的程序框架。然而:编写、编译、管理着色器是件麻烦事。其实下面的类也就是对在...原创 2020-04-17 10:22:05 · 931 阅读 · 0 评论 -
OpenGL程序框架以及具体细节
学计算机图形学的慕课听的那些概念是云里雾里,自己在百度搜来搜去发现还是自己结合官方的说明和代码去看可能更容易理解他画图的一个具体流程,那些开篇让人头大的概念性问题还是留在敲键盘的过程中去慢慢体会。因为听了好几天课,做周末的作业发现对整个程序的主体部分的理解还不是很清晰,所以写个博客来总结一下(我发现把东西写下来远比在脑子里想半天要来的快)。因为所有OpenGL的程序也就是那么几个步骤,所以主要总结...原创 2020-03-02 22:19:59 · 1303 阅读 · 0 评论 -
OpenGL实线、虚线、点划线的绘制(16进制与2进制的巧妙结合)
说明:实线很简单,指定两个顶点画出来就行了,关键在于用虚线、点划线绘制直线,很有意思重要的函数:glEnable(GL_LINE_STIPPLE);//打开画线模式glLineStipple(GLint factor,GLushort pattern);//建立画线的模式factor参数充当倍数,结合pattern和代码理解,比如factor为2时代表pattern中每位在一行中充当两...原创 2020-03-31 18:15:01 · 4998 阅读 · 0 评论 -
通过消砖块的游戏对OpenGL(glfw)、图形学、游戏编程的一个小的总结
对GitHub上的learnOpenGL教程的学习已经接近尾声了,可以说这个教程完美的衔接了平时教学中一直用的旧OpenGL渲染的方式和现在流行的OpenGL,这个消砖块游戏也是教程最后的一个实战,内容很简洁但是包含了OpenGL几乎所有最基础的内容,下面也会逐一提及到,这里主要就是对这些最基础内容的总结和回顾。用到的素材和全部代码我都上传到了我的资源中:源码及素材(在审核中)这是几个不同地图的效果:下面我们来看看几个关键的地方:游戏中涉及到OpenGL渲染中最基础的地方游戏中精灵的加载:显原创 2020-05-23 21:50:49 · 1276 阅读 · 3 评论 -
freeglut+shader的程序框架
最近学图形学学到了shader,刚开始接触简直要吐了,但是看过几个例子程序后逐渐习惯了,也体会到用shader要远比正常绘制香很多,尤其是当数据过大时,但是他有一套繁琐的机制,在看过很多不同教程后我总结了一套程序框架,重点还是在于shader的配置。关于glew:它提供了所有扩展功能函数的接口,在freeglut中使用shader必须要用glew。使用glewInit(); 进行初始化,具体...原创 2020-04-16 20:49:27 · 551 阅读 · 0 评论 -
使用IrrKlang音频库在OpenGL的工程中实现音乐的播放
最近学完learnOpenGL后在做一些小游戏,但OpenGL的API本身并未提供音乐的接口函数,所以我们采用一个外部的IrrKlang音频库。下载地址:选择一个最新的版本下载即可。简介:IrrKlang是一个可以播放WAV,MP3,OGG和FLAC文件的高级二维和三维(Windows,Mac OS X,Linux)声音引擎和音频库。它还有一些可以自由调整的音频效果,如混响、延迟和失真。3D音频意味着音频源可以有一个3D位置,然后根据相机到音频源的位置衰减音量,使其在一个3D世界里显得自然(想想3D原创 2020-05-26 11:10:05 · 2023 阅读 · 1 评论 -
glfw+shader的程序框架
最近学图形学学到了shader,刚开始接触简直要吐了,但是看过几个例子程序后逐渐习惯了,也体会到用shader要远比正常绘制香很多,尤其是当数据过大时,但是他有一套繁琐的机制,在看过很多不同教程后我总结了一套程序框架,重点还是在于shader的配置。关于shader的函数(都是自己封装的):void setShaders(void);其中有对shader的基本配置链接等等超全的集合。void...原创 2020-04-16 20:42:28 · 534 阅读 · 0 评论 -
opencv + vs通用配置方法
最近的作业用到了opencv,但是给的虚拟机我用不了,只能自己配置。因为以前配置过opengl的库,经历了各种艰难险阻,现在我已经可以自动屏蔽掉网上那些垃圾配置方案,这里并不会说具体版本的配置,但如果这样配置无论什么版本一定能用,并且不会像其他博客说的那样还要一步步配置项目属性恶心自己。这里我用的是vs2010,所以只能用vc10的,所以我下载的是OpenCV2.4.10。开始进行配置:(以我这个版本为例,其他类似)1.安装opencv;2.添加环境变量:opencv安装路径下\opencv\bu原创 2020-11-01 17:56:17 · 502 阅读 · 0 评论 -
构建GLFW详细全过程
因为要学计算机图形学,所以要搭建 OpenGL 环境,而GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口。它允许用户创建OpenGL上下文,定义窗口参数以及处理用户输入。不过我吐了,我还在vs2010上配置的,配置了两次还是不行,一次是无法调用,一次出来了一堆未定义。第三次我写这个博客记录每一步看看到底哪一步有问题。。。。。。1.构建 GLFW:(1)...原创 2020-02-17 01:01:40 · 3845 阅读 · 0 评论 -
OpenGL结合书中画苍蝇对位图的思考——镂空效果的实现以及利用位图实现用黑白相间的棋盘图案填充多边形
原理及重要函数说明其实在画虚线和点划线时就已经利用16进制的每位来代表线段的一部分是开还是关(转换为二进制后也就是1画,0不画),这里的道理类似,只不过因为是绘制平面所以规则更多,但原理和画线一样。所谓镂空,不就是舍弃一部分不画来达到更好的效果吗。用到的重要函数:(1)glEnable(GL_POLYGON_STIPPLE);启用多边形填充模式顾名思义,POLYGON是多边形,STIPPL...原创 2020-04-01 21:17:21 · 1203 阅读 · 0 评论 -
用OpenGL的字符函数在屏幕上写OpenGL
在OpenGL实用程序工具包中包含了一些预定义的字符库,用来显示点阵和矢量字符。函数 void glutBitmapCharacter(void *font,int character);显示一个GLUT位图字符。用函数glutBitmapCharacter 显示字符时,是将当前的光栅位置作为字符的左下角点,函数执行后,点阵字符装入刷新缓冲存储器,当前的光栅位置会在x坐标方向上获得一个字符宽度的...原创 2020-04-01 22:08:05 · 2169 阅读 · 0 评论 -
关于聚光灯各种衰减系数的尝试体会聚光灯的效果
这是计算机图形学基础的课后题:编制OpenGL程序,显示包含一个球体和正四面体,使用有衰减的聚光灯进行光照,球面和正四面体具有不同的材质,分别调整球面和正四面体的材质属性,以及聚光灯的衰减系数(包括沿光线路径和聚光灯光锥体内的衰减),观察结果。OpenGL给的光照的相关函数真的多,分类非常细,需要根据光照计算公式以及函数说明去尝试并体会不同光照打在不同材质的物体上的效果。可以通过改变其中的参数...原创 2020-04-21 21:35:44 · 1342 阅读 · 0 评论 -
用上周的作业:画一个太阳、地球、月亮的运动模型来剖析OpenGL中变换乃至整个绘制的秘密
下面是上周的作业的要求:基本功能: 完成一个初步的太阳系程序。 场景中有三个球体,一个表示太阳,一个表示地球,一个表示月亮; 地球不停地绕太阳旋转,月亮绕地球旋转。 进一步扩展功能(选作下面的1项或几项功能): 如果地球有两个月亮呢? 画上轨道线; 让轨道倾斜; 提示: 画球体的函数: glutWireSphere(1.0, 20, 16); 如何让物体不停运动呢?vo...原创 2020-03-05 00:45:58 · 3243 阅读 · 0 评论 -
写一个自己的加载、绑定、设置纹理应用方式的函数
我用的stb_image.h加载图片到程序中,它下载地址和配置方式可见https://blog.csdn.net/derbi123123/article/details/105610298加载、绑定、设置纹理应用方式的函数:unsigned int loadTexture(char const * path){ //纹理也是使用ID引用的。让我们来创建一个 //glGenTextures...原创 2020-04-25 22:21:28 · 251 阅读 · 0 评论 -
通过一块半透明(Alpha值为0.5)的蓝色玻璃观察一个红色茶壶表面的效果
程序是很简单,但是不写确实发现不了其中的问题(其实是没认真复习忘了这个常识),既然是通过一块半透明(Alpha值为0.5)的蓝色玻璃观察一个红色茶壶表面的效果,所以蓝色玻璃在前,茶壶在后,所以我先画了一个蓝色的正方形,透明度为0.5,再画了一个茶壶,然后就成下面这样了。为什么蓝色玻璃不透明?因为在混合起来实现半透明效果时必须从远到近画,这很难以理解,不过仔细想想深度缓存的原理,其实就是让我们人...原创 2020-04-22 20:05:03 · 1030 阅读 · 0 评论 -
用OpenGL绘制的三维场景的简单机器人
这是慕课上的计算机图形学的作业,作业要求是:具体要求:(1)构建一个三维场景:可利用glut提供的各种简单形体来搭建;或者读入别的模型来构成场景。加入光照效果。(2)用键盘操纵一个物体(如一艘飞船,或一个机器人)在三维场景中漫游。视点可以放在物体上,或跟随物体;可利用gluLookAt( )函数来实现对视点的控制。撰写的作业文档中包括:(1)程序功能的描述,效果请附图;(2)论...原创 2020-03-25 15:50:19 · 9879 阅读 · 4 评论 -
右键菜单实现直线、折线、矩形的橡皮筋绘制技术
今天学习了OpenGL的菜单功能,主要涉及到的函数有:(1)glutCreateMenu(ProcessMenu);菜单注册函数参数:void ProcessMenu(int value);value是用户选择菜单项的id值(2)glutAddMenuEntry(char *name,GLint value);向菜单中添加菜单项的函数参数:name为菜单项名称,value是用户选择菜单项的...原创 2020-03-30 16:09:48 · 1433 阅读 · 0 评论 -
GLM数学库的配置,比之前的 SOIL2 配置简单多了,还更好用。
GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。关于版本的问题,有一个重点:GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(对角元素为1,其它元素为0)。如果你使用的是0.9.9或0.9.9以上的版本,你需要将所有的矩阵初始化改为 ...原创 2020-04-19 10:36:45 · 888 阅读 · 0 评论 -
利用OpenGL的多视区分别在4个视区内显示空间四面体的透视投影图、主视图、俯视图、侧视图
1原创 2020-04-19 22:57:18 · 4500 阅读 · 10 评论 -
OpenGL中投影变换、视口变换的原理以及对应的OpenGL函数
这篇是因为上一篇已经写太多了,而且几何变换和这两者也没有太大关系,所以分开来写,这篇主要总结投影变换、视口变换的原理以及对应的OpenGL函数。...原创 2020-03-05 00:46:16 · 2051 阅读 · 0 评论 -
Assimp模型加载库下载、编译、配置全过程
最近学完图形学基础后在老师的推荐下去看GitHub上的learnOpenGL教程,讲的挺好的,因为总用自己设置的那些顶点画不出来什么有意思的东西,所以需要从外部导入模型,教程中用的就是Assimp模型加载库。Assimp是Open Asset Import Library(开放的资产导入库)的缩写。Assimp能够导入很多种不同的模型文件格式(并也能够导出部分的格式),它会将所有的模型数据加载至...原创 2020-04-27 12:42:21 · 10207 阅读 · 4 评论 -
OpenGL利用鼠标、键盘分别实现那些绘图软件中的橡皮筋技术
橡皮筋技术:如果大家用绘图软件画过直线,你就会发现选中那些直线、椭圆、矩形画图工具后,在画布上单击拖动就能画出我们所需尺寸的对应图形,十分方便,这就是所谓的橡皮筋技术。实现橡皮筋技术的关键函数:当然是鼠标响应函数了,OpenGL提供了以下几种响应鼠标事件的函数:鼠标按下或者松开的响应函数:glutMouseFunc(MousePlot);参数MousePlot是对应的回调函数,可以随...原创 2020-03-27 17:45:22 · 2642 阅读 · 0 评论 -
我们自己的摄像机类(在OpenGL中造一个摄像机)
在学图形学时,我们都是通过把场景中的所有物体向z轴负方向移动来模拟出摄像头的感觉,但那样的话我们模拟摄像机移动时其实也只能移动物体,当然我们还可以用glLookAt改变对应参数来模拟摄像机移动会更真实一些。但我们如果要应用到着色器中只用glLookAt很不方便,比如我们经常要计算镜面反射光就需要视线方向,而且OpenGL本身没有摄像机的概念,但我们可以通过摄像机向后移动来模拟出摄像机,产生一种我...原创 2020-04-25 21:53:57 · 652 阅读 · 1 评论