![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenGL探索职路
文章平均质量分 65
爱喝牛奶的红狐狸
这个作者很懒,什么都没留下…
展开
-
OpenGL 光照练习
前言光照射到物体表面,经过反射到达人眼,使得人们可以看清楚这花花世界。实际上,在计算机中模拟自然光是不现实的,大多数情况下,实现光照效果使用的是光照模型。现在最常见的光照模型被称为“ADS”模型。光照模型所谓“ADS”模型,是将光照到物体表面所产生的反射分为三类:环境光反射,漫反射和镜面反射。环境光反射:影响场景中所有的物体漫反射:根据光的入射角度调整物体的亮度镜面反射:展示物体的光泽镜面反射在光照射到光滑表面上发生,且只能在特定角度观察到;而漫反射在光照射到粗糙表面上发生,可以在各个角原创 2020-08-24 19:57:48 · 290 阅读 · 0 评论 -
OpenGL矩阵堆栈
前言回顾OpenGL在同一场景绘制不同模型的过程。同一场景不同模型在单个场景中绘制不同的简单模型,可以为每个模型分别使用单独的缓冲区,如果有需要(如涉及复杂光照或者对象由不同图元组成等情况),还可以设置不同的着色器程序进行渲染。这些简单模型之间没有内在联系,因此只需要通过模型矩阵改变其在场景中的位置,然后按“流程”输出即可。一种更加复杂的情况是分层模型。分层模型由多个简单模型组装而成,且这些简单模型之间存在一定的内在联系。行星系统一个典型的例子——地球围着太阳转,月球围着地球转。分层模型中较难解决的原创 2020-08-14 15:34:35 · 733 阅读 · 0 评论 -
OpenGL绘制简单模型(回顾)
前言回顾OpenGL绘制简单模型:3D立方体。(今天又学到了一丢丢markdown用法,居然可以用html进行图片排版)缓冲区和顶点属性要想绘制一个对象,需要将该对象的顶点数据发送给顶点着色器。通常要把顶点数据在C++端放入一个缓冲区(所谓的VBO),并将该缓冲区和着色器中声明的顶点属性相关联。例如:以绘制一个三维空间立方体传递数据为例。GLuint vao,vbo;glGenVertexArrays(1,&vao); //管理顶点缓冲对象,必须有glBindVertexArray(va原创 2020-08-09 17:16:03 · 2009 阅读 · 0 评论 -
OpenGL 基本环境搭建
前言练习使用Markdown编辑器,回顾OpenGL基本环境的建立。OpenGL渲染程序从文件中读取数据(顶点、纹理等)并载入到缓冲区中,然后将数据发送给GLSL,经过顶点着色器、曲面细分着色器(可选)、几何着色器(可选)、片段着色器,最终发送到屏幕上进行绘制。在顶点着色器中,程序“按顶点”处理数据;在几何着色器中,程序“按图元”处理数据;在片段着色器中,程序“按像素”处理数据。以前忽视的地方:在调用glfwDrawArrays()函数时,管线中的GLSL代码才开始执行。C++/OpenGL先将数据原创 2020-08-05 11:17:49 · 157 阅读 · 0 评论 -
OpenGL LookAt函数理解
前言:记录OpenGL学习过程中的一些知识点,以个人理解为主。LookAt函数将顶点的世界空间坐标转换为观察空间坐标,实际上是以相机为原点重新定义的三维空间。glm::mat4 LookAt(glm::vec3 pos, glm::vec3 target, glm::vec3 up)函数接受三个参数,相机位置pos,目标位置target以及相机上向量up。工作流程是:glm::vec3 zaxis = normalize(pos-target)指向观察空间正Z轴方向,glm::vec3 xax原创 2020-07-26 09:54:36 · 6326 阅读 · 2 评论