OpenGL学习及使用
文章平均质量分 92
1.基于openGL的3D图形显示及绘制,
2.QT结合openGL,实现3D图形绘制.
章之京
不管你经历了什么,那都是在收获与成长,也许过程是喜怒悲哀。
展开
-
openGL 着色器原理说明
在OpenGL/OpenGL ES中, 我们开发者一般编写的是顶点着色器和片元着色器。转载 2023-04-30 22:08:57 · 608 阅读 · 1 评论 -
从0开始的OpenGL学习(十)-GLSL语言及语法
本文主要解决两个问题:GLSL基本语法介绍在前面第四讲中我们简单提及了GLSL语言,但是没有太深入,对于我们学习及后面编写的openGL GLSL来说,有些吃力,所以这里单独写一篇来介绍GLSL语言.1. GLSL 编程概念顶点着色器 与 片元着色器一个着色器程序分为两大部分,即 “顶点着色器” 与 “片元着色器” 简单来说,前者多用于模型构建,后者用于在光栅化时表现出更多细节,一个着色器程序必须同时包含这两部分,程序会先通过 “顶点着色器” 处理再交与 “片元着色器” 渲染细节。举原创 2021-03-15 01:31:49 · 2268 阅读 · 0 评论 -
从0开始的OpenGL学习(十七)-加载模型
本文主要解决一个问题:如何在OpenGL中加载模型?引言学到现在,我们把盒子兄弟折磨得死去活来,虽说弄出了一些效果,但也总是感觉有点不给力,换个时髦的说法就是:用户体验不好。在实际的图形应用中,会有很多复杂并且有趣的模型,比我们的盒子强太多。但是,由于太复杂,我们不可能手动定义模型的顶点坐标、法线和纹理坐标等值。我们希望的是,直接把模型导入到应用中使用,把创建模型的工作交给专业的建模师去做。他们有很高端的工具,例如3DS Max、Maya等等。这些3D建模工具十分强大,不仅可以创建模型,还能进行转载 2021-03-06 12:50:43 · 5140 阅读 · 5 评论 -
从0开始的OpenGL学习(九)-FPS摄像机
本文主要解决一个问题:如何创建一个FPS摄像机?1.引言在前一章中,我们讨论了观察矩阵以及如何使用变换矩阵移动场景(虽然仅仅是往后移了一点点)。本章中,我们要创建一个类似FPS的摄像机,它可以移动,可以转头,可以变焦(狙击枪里开放大镜效果)。在这章中,你会看到观察空间变换的内部原理键盘操纵摄像机前后左右移动的方法鼠标操纵摄像机上下左右转动的方法实现变焦的方式将摄像机功能封装成类(该死,好久没这么有创造性的封装一个类了,码农当太久脑子都秀逗了。)2.观察(摄像机)空间就像前一章说转载 2021-03-05 20:49:37 · 633 阅读 · 0 评论 -
从0开始的OpenGL学习(八)-显示3D立方体
本文主要解决的问题是:如何在OpenGL中显示一个3D盒子?欢迎来到3D世界!学了这么多东西,还只能画一些三角形和矩形,是不是感觉特别憋屈?“我是来学3D的,为啥到现在还都是2D的图片???”想必你已经在心里抱怨过很多次了。不过不用担心,从这一章开始,我们就正式进入3D世界啦,因为在本章我们会显示一个3D盒子(没准还不止一个哦!)!坐标系统想想在现实世界中,我们怎样能看到一样东西,比如说就是我们常用的电脑?首先,电脑会在工厂中叮叮当当地装配起来,然后,通过飞机火车汽车之类的东西,将它送到我们手转载 2021-03-05 19:39:47 · 1120 阅读 · 0 评论 -
从0开始的OpenGL学习(七)-转换
本章主要解决这个问题:如何对物体进行位置变换?想要操作物体的位置,我们就要使用数学工具对其位置进行计算。先来看看回顾一下需要用到的基本数学知识:向量在最初的定义中,向量就是用来表示方向的。向量包括大小和方向两个要素。你可以把向量想象成在藏宝图上的箭头指示:向左走10米,然后,往北走3米,再然后,往右走5米。这个左右南北就是方向,10米就是向量的大小。理论上,向量可以是任意维数的,不过我们不关心这个,我们关心的是我们最最常用的2到4维向量。2维向量表示平面上的方向,3维向量表示3D世界里的方向。转载 2021-03-04 23:12:19 · 338 阅读 · 1 评论 -
从0开始的OpenGL学习(六)-显示不同的纹理
本文主要解决2个问题:不同格式的图片,如何作为纹理使用(png、bmp)?两张纹理如何进行融合操作,并且通过融合因子去调整显示效果?一、不同格式的图片,如何作为纹理使用(png、bmp)?1.1 png格式不管三七二十一,直接把图片替换掉,看看效果。嗯?这诡异的显示是啥?第一反应,某些参数设置出错,尤其是glTexImage2D函数。直接瞄准参数GL_RGB,png图片有度的信息,所以格式应该设置为GL_RGBA才对。想明白了,马上修改试试。不出所料!1.2 bmp格式还是那转载 2021-03-04 15:34:21 · 628 阅读 · 1 评论 -
从0开始的OpenGL学习(五)-纹理
本文主要解决一个问题:在OpenGL中如何使用纹理?一、什么是纹理?纹理,英文是texture,中文可以翻译成纹理、纹理图、纹理映射等等一堆东西。不过不管翻译成啥,讲的都是一个东西。我们通常说的纹理,指的是一张二维的图片,把它像贴纸一样贴在什么东西上面,让那个东西看起来像我们贴纸所要表现的东西那样。举例来说,假如我们想绘制一面砖墙,我们该怎么办?根据我们已经掌握的知识来看,我们需要用成千上万的点来模拟它的颜色,我的天,这要搞到猴年马月才能搞出来?显然不现实!于是聪明的程序员们想出了一个好方法,就转载 2021-03-04 14:58:32 · 1132 阅读 · 2 评论 -
从0开始的OpenGL学习(四)-着色器类
本文主要解决两个问题:1、着色器和应用、着色器之间是如何进行数据传递的?2、如何封装一个着色器类?一、开胃小菜GLSL先来点开胃菜,扯两句GLSL。之前我们就用过GLSL搞了个顶点着色器和片元着色器,也算是对它不陌生了。语法上,它和C语言十分类似,所以使用起来的时候感觉还是很友好的(笔者是学C语言出生的,吼吼)。不说太多关于语法、操作符、数据类型这些废话,学了一门语言之后,所有的语言都会往自己熟悉的方向去用,学一门新语言的时候最讨厌的就是先看语法,烦透了。我们直接从关键点着手!1、着色器代码的转载 2021-03-03 20:17:04 · 520 阅读 · 1 评论 -
从0开始的OpenGL学习(三)-元素缓存对象
本文主要解决以下两个问题:1、如何使用元素缓存对象来显示一个矩形?2、如何用不同的方式显示两个三角形?首先,对之前一章中显示三角形的方式搞了一些科学研究_:前一章中,指定顶点属性的格式是用这样的方式:glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);3 * sizeof(float)表示了数组两个元素之间的跨度,而函数说明上写着,如果元素是紧密排列的,也可以使用0来做参数,达到一样的效果。转载 2021-03-03 18:50:34 · 375 阅读 · 1 评论 -
从0开始的OpenGL学习(二)-渲染三角形
本文主要解决一个问题:如何渲染一个三角形?本章中,会有大量的新名词和解释,大量的函数出现,建议找个安静的地方慢慢啃这块骨头。首先,先从直觉上来想想要渲染一个三角形我们需要做些什么?大概需要这三个步骤:定义三个顶点。将三个顶点的边两两相连。将内部的区域涂成一种或几种颜色。我们就从这几个方面来画出我们的三角形一、顶点在OpenGL中,所有的顶点都是三维空间内的顶点,不过这不是问题,我们可以把深度定义为0来保证其在一个平面上。于是,我们定义三个点:(-0.5, 0.5, 0.0),(0.5转载 2021-03-03 17:40:46 · 785 阅读 · 1 评论 -
从0开始的OpenGL学习(一)-创建OpenGL窗口
为啥学习openGL,因为在开发QT 3D场景时,看见官方有个boxes的demo,想学习一下.本文主要解决两个问题:OpenGL到底是什么鬼?如何创建一个使用OpenGL的窗口?1、OpenGL到底是什么鬼?笔者也算是一个入门的C++程序员了,一下决心要学习OpenGL之后就直接上谷歌搜了OpenGL的官网(当然这是要翻越万里长城的),想下一个API就上手。然而在官网上溜了一大圈,楞是没找到一个下载API的地方,倒是在各种显卡厂商的官网上都转了一圈,灰头土脸。在网上找了很多资料之后,终于.原创 2021-03-03 17:04:52 · 1137 阅读 · 2 评论 -
从0开始的OpenGL学习(目录)
转载:https://www.jianshu.com/p/6bda18e953f6随着文章写的越来越多,觉得是时候整理一个目录了,于是就有了这一篇文章1.初窥门径一、创建一个使用OpenGL的窗口二、渲染一个简单的三角形三、用不同的方式绘制三角形四、使用着色器五、使用纹理六、使用不同格式的纹理图与纹理融合七、坐标变换八、显示一个3D盒子九、一个FPS摄像机十、复习2.光照十一、基本光照原理与模拟十二、使用材质控制光照效果十三、光照贴图十四、三种光源模型十五、为场景添加多个转载 2021-03-03 16:02:55 · 644 阅读 · 1 评论