
《计算机图形学编程(使用OpenGL和C++)》笔记
文章平均质量分 93
精读OpenGL书籍,要点俱到!
itzyjr
Stay hungry,Stay foolish!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenGL必知必会——问题清单
目录✠OpenGL-2-图像管线✠OpenGL-3-数学基础✠OpenGL-2-图像管线glfwSwapBuffers的工作原理?为什么glfwSwapInterval函数参数是1而不是0?GLSL代码载入管线的流程?顶点着色器的特点是怎样的?顶点着色器执行成百上千次会阻塞吗?在代码层面,创建一个程序对象,需要调用依次调用哪6个函数?对于顶点数据,当准备将数据集发送给管线时,是以什么形式发送的?这些数据最后都被存入到什么对象中?对VAO的操作,是调用哪两个函数完成的?使用程序对象并绘制操原创 2021-08-08 21:13:17 · 492 阅读 · 0 评论 -
✠OpenGL-14-其他[重要]技术
目录雾复合、混合、透明度用户定义剪裁平面雾模拟雾的方法有很多种,从非常简单的模型到包含光散射效应的复杂模型。即使非常简单的方法也是有效的。有一种方法是基于物体距眼睛的距离将实际像素颜色与另一种颜色(“雾”的颜色通常是灰色或蓝灰色——也用于背景颜色)混合。下图说明了这个概念。眼睛(相机)显示在左侧,两个红色物体放置在视锥体中。圆柱体更靠近眼睛,所以它主要是原始颜色(红色);立方体远离眼睛,所以它主要是雾色。对于这个简单的实现,几乎所有的计算都可以在片段着色器中执行。下面程序显示了一个非常简单的雾算法原创 2021-08-08 14:25:45 · 577 阅读 · 0 评论 -
✠OpenGL-13-几何着色器
目录OpenGL中的逐个图元处理修改图元删除图元添加图元更改图元类型补充说明与曲面细分一样,几何着色器使程序员能够以顶点着色器中无法实现的方式操纵顶点组。在某些情况下,可以使用曲面细分着色器或者几何着色器完成同样的任务,因为它们的功能在某些方面重叠。几何着色器(Geometry Processor)是一个可编程单元,它对输入顶点的数据进行操作在顶点处理后组装的基本体,并输出形成输出的顶点序列原语。使用OpenGL着色语言编写并在此处理器上运行的编译单元是称为几何着色器。成功编译和链接一组几何着色器后,它原创 2021-08-04 00:54:17 · 1168 阅读 · 0 评论 -
✠OpenGL-12-曲面细分
目录OpenGL中的曲面细分贝塞尔曲面细分地形、高度图的细分术语 Tessellation(镶嵌)是指一大类设计活动,通常是指在平坦的表面上,用各种几何形状的瓷砖相邻排列以形成图案。曲面细分指的是生成并且操控大量三角形以渲染复杂的形状和表面,尤其是使用硬件进行渲染。OpenGL中的曲面细分OpenGL 对硬件曲面细分的支持,通过 3 个管线阶段提供:(1)曲面细分控制着色器;(2)曲面细分器(此阶段不可编程);(3)曲面细分评估着色器。曲面细分器(其全名是曲面细分图元生成器,或 TPG)是硬原创 2021-08-01 20:16:36 · 2661 阅读 · 0 评论 -
✠OpenGL-11-参数曲面
目录二次贝塞尔曲线三次贝塞尔曲线“贝塞尔曲线”和“贝塞尔曲面”,这些方法通常用于高效地对各种曲面 3D 物体进行建模。用它们可以生成任意精度的曲线。二次贝塞尔曲线二次贝塞尔曲线由一组参数方程定义, 方程组中使用 3 个控制点指定特定的曲线的形状,每个控制点都是 2D 空间中的一个点。针对各种 t 值收集大量的点 P(t),则会产生一条曲线,如上图所示。采样的 t 的参数值越多,生成的点 P(t)越多,得到的曲线则越平滑。现在可以导出二次贝塞尔曲线的分析定义。首先,我们注意到连接两个点 pa 和原创 2021-07-27 17:02:24 · 586 阅读 · 0 评论 -
✠OpenGL-10-增强表面细节
目录凹凸贴图法线贴图切线空间——TBN矩阵纹理加法线贴图高度贴图一个完整示例补充说明我们将探讨几种与实现凹凸表面相关的方法,通过使用光照效果,即使在实际对象模型表面平滑的情况下,也能使对象看起来具有逼真的表面纹理。我们将首先观察凹凸贴图和法线贴图,当直接为对象添加微小表面细节会使得计算代价过高时,它们可以为场景中的对象增加相当程度的真实感。我们还将研究通过高度贴图实际扰乱光滑表面中顶点的方法,这对于生成地形(和其他一些用途)非常有用。凹凸贴图如上图,如果我们想让一个物体看起来好像有凹凸(或皱纹,陨石原创 2021-07-27 01:01:41 · 626 阅读 · 0 评论 -
✠OpenGL-9-天空和背景
目录天空盒天空穹顶实现天空盒从头开始构建天空盒使用OpenGL立方体贴图分析矩阵中值的存储 及 mat4转mat3原理环境贴图关于reflect函数补充说明天空盒或天空穹顶提供了有效且相对简单的方法,用来生成令人信服的地平线景观。天空盒如何为地平线制作纹理?立方体有 6 个面,我们需要为这些面都添加纹理。一种方法是使用 6 个图像文件和 6 个纹理单元。另一种常见(且高效)的方式则是使用一个包含 6 个面的纹理的图像。使用纹理立方体贴图为立方体添加纹理需要指定适当的纹理坐标。下图展示了纹理原创 2021-07-24 05:34:04 · 3100 阅读 · 0 评论 -
✠OpenGL-8-阴影
目录投影阴影阴影体阴影贴图阴影贴图(第1轮)——从光源位置“绘制”物体阴影贴图(中间步骤)——将Z缓冲区复制到纹理阴影贴图(第2轮)——渲染带阴影的场景渲染的像素和阴影纹理中的值的深度比较背面剔除与阴影的区别阴影贴图示例投影阴影一种很适合在地平面上绘制阴影,又相对不需要太大计算代价的方法,叫作投影阴影(projective shadows)。给定一个位于(xL, yL, zL)的点光源、一个需要渲染的物体以及一个投射阴影的平面,可以通过生成一个变换矩阵,将物体上的点(xw, yw, zw)变换为相应阴原创 2021-07-22 00:18:23 · 1276 阅读 · 2 评论 -
✠OpenGL-7-光照
目录光照模型光源光照模型最常见的光照模型称为“ADS”模型:环境光反射(Ambient reflection)——模拟低级光照,影响场景中的所有物体。漫反射(Diffuse reflection)——根据光线的入射角度调整物体亮度。镜面反射(Specular reflection)——用以展示物体的光泽,通过在物体表面上,光线最直接反射到我们的眼睛的位置,策略性地放置适当大小的高光来实现。场景的绘制最终由片段着色器为屏幕上的每个像素输出颜色而实现。使用ADS光照模型需要指定由于像素的RGBA原创 2021-07-14 23:52:48 · 746 阅读 · 0 评论 -
✠OpenGL-6-3D模型
目录程序构建模型——构建一个球体OpenGL中的索引构建一个环面加载外部构建的模型补充说明程序构建模型——构建一个球体earth.jpg直接给出完整代码:Sphere.h#include <cmath>#include <vector>#include <glm\glm.hpp>class Sphere {private: int numVertices; std::vector<glm::vec3> vertices; std:原创 2021-07-10 23:48:18 · 552 阅读 · 1 评论 -
✠OpenGL-5-纹理贴图
目录加载纹理图像文件纹理坐标创建纹理对象构建纹理坐标将纹理坐标载入缓冲区在着色器中使用纹理:采样器变量和纹理单元纹理贴图:示例程序纹理贴图是在光栅化的模型表面上覆盖图像的技术。纹理贴图非常重要,因此硬件也为它提供了支持,使得它具备了实现实时的照片级真实感的超高性能。纹理单元是专为纹理设计的硬件组件,现代显卡通常带有数个纹理单元。加载纹理图像文件为了在 OpenGL/GLSL 中有效地完成纹理贴图,需要协调好以下几个不同的数据集和机制:用于保存纹理图像的纹理对象(在本章中我们仅考虑 2D 图像);原创 2021-07-09 19:09:45 · 2372 阅读 · 0 评论 -
✠OpenGL-4-管理3D图形数据
数据类型和函数名OpenGL的数据类型定义可以与其它语言一致,但建议在ANSI C下最好使用以下定义的数据类型:前缀数据类型相应C语言类型OpenGL类型b8-bit integersigned charGLbytes16-bit integershortGLshorti32-bit integerlongGLint, GLsizeif32-bit floating-pointfloatGLfloat, GLclampfd64-b原创 2021-07-06 20:24:54 · 1031 阅读 · 1 评论 -
✠OpenGL-3-数学基础
目录3D坐标系统点矩阵变换矩阵3D坐标系统3D图形学中几乎每个方面、每种效果——移动、缩放、透视、纹理、光照、阴影等都在很大程度上以数学方式实现。在OpenGL中的坐标系大体是右手坐标系。点3D空间中的点可以通过使用形如(2, 8, -3)的符号,列出X、Y、Z的值来表示。不过,如果用齐次坐标来表示点会更有用。在每个点的齐次坐标有4个值。即(X, Y, Z, W),其中W总是非零值,通常为1。因此我们会将之前的点表示为(2, 8, -3, 1)。齐次坐标将会使我们的图形学计算更高效。用来存储齐原创 2021-06-29 07:54:06 · 1741 阅读 · 2 评论 -
✠OpenGL-2-图像管线
目录第一个C++/OpengGL应用程序顶点着色器和片段着色器检测OpenGL和GLSL错误从文件读取GLSL源代码第一个C++/OpengGL应用程序#include <GL\glew.h>#include <GLFW\glfw3.h>#include <iostream>using namespace std;void init(GLFWwindow* window) {}void display(GLFWwindow* window, double原创 2021-06-28 01:42:42 · 1208 阅读 · 2 评论 -
✠OpenGL-1-入门
有些程序是用诸如C++或Java等标准编程语言编写的,并运行在CPU上;而另一些是用专用的着色器语言编写的,并直接运行在显卡(GPU)上。总的来说,你需要以下这些语言和库:◉C++开发环境◉OpenGL / GLSL◉窗口管理◉扩展库◉数学库◉纹理管理2.0版本中引入了OpenGL着色语言(GLSL),使得“着色器程序”可以在图形管线的各个阶段被安装和直接执行。3.1版本中移除了大量被弃用的功能,以强制使用着色器编程,而不是之前的老方法。窗口管理:OpenGL实际上并不..原创 2021-06-09 20:19:47 · 429 阅读 · 0 评论 -
✠OpenGL-Windows Visual Studio环境配置
《计算机图形学编程(使用OpenGL和C++)》环境配置文件-C++文档类资源-优快云下载《计算机图形学编程(使用OpenGL和C++)》环境配置文件更多下载资源、学习资料请访问优快云下载频道.https://download.youkuaiyun.com/download/itzyjr/85031937下载文件,解压到目录,如:打开VS2019,新建工程,Project -> Properties:VC++ Directories -> Include Directories,添加解.原创 2022-03-24 22:11:38 · 1570 阅读 · 0 评论