基于OpenGL的计算机图形学
文章平均质量分 63
AndyZzz~
这个作者很懒,什么都没留下…
展开
-
OpenGL入门保姆教程
点击跳转公众号文章原创 2020-09-27 22:00:38 · 130 阅读 · 0 评论 -
【计算机图形学-3】图形绘制系统(从顶点到片元)
这节课稍微理论,显得枯燥一点,但对于理解整个图形渲染管线有帮助,调到前面来讲。图形绘制流水线的基本实现策略从高层视角来说,图形绘制接收输入,产生输出,具体来说:以顶点和状态变量,即几何对象、属性和相机参数等作为输入,以位于帧缓存中的彩色像素阵列作为输出。作为一个基本的图形系统,需要完成的任务有:几何变化裁剪光照/明暗处理隐藏面消除图元光栅化后面会讲述这些任务。图形学的绘制流水线中,两个关键的要素就是几何图元和像素。根据选取的变量不同,图形绘制流水线分为两种实现策略:基于.原创 2021-01-25 14:32:22 · 1179 阅读 · 0 评论 -
【计算机图形学-6】光照与明暗绘制
通过前面的学习,我们已经能够显示出水彩一般的图形了,这章我们将目光投放在如何使我们的模型更加逼真,这就需要对模型进行明暗绘制。光线与材质曲面上某一点的颜色取决于光照和材质的多次作用。相互作用可分为三种:镜面反射:可能有一部分入射光线被吸收,但是所有反射出去的光线都沿着同一个方向,反射光线的方向服从入射角等于反射角这一规律漫反射:向各个方向散射的光线强度都相等折射:允许入射光线的一部分进入表面并且从对象的另一个位置再发射出去在计算机图形学中,光照模型分成全局光照模型和局部光照模型全局.原创 2021-01-25 14:32:13 · 1337 阅读 · 1 评论 -
【计算机图形学-1】概览
这一小节将对基础的计算机图形学做一个总览。计算机图形学是计算机学科当中研究图形的领域,会涉及物体建模、图像呈现、CV等内容,我们的关注点落在计算机图形学的基础领域,即如何建立起一个模型并将其呈现在我们的显示屏上,这就需要我们先从大体上了解图形在计算机的图形系统。图形系统的基本构成一般来说,显示图形所需要的数据通过输入设备输入,经过CPU处理之后,送往GPU进行渲染,图像在帧缓冲区形成,输出设备定期读取帧缓冲区,将图形渲染在屏幕上。图像的基本单元是像素,像素的阵列组成光栅。物理图像和合成图像.原创 2021-01-25 14:31:03 · 605 阅读 · 0 评论 -
【计算机图形学-4】几何对象和变换
这一章节讲述的主要是和模型有关的变换,我们需要先学习几何对象的一些基本性质,了解OpenGL中对几何对象建模的支持,然后学习几何对象的缩放/平移/旋转变换,所有的这些变换最终都可以归结为模型变换矩阵。几何对象实体几何对象主要指的是三维空间对象,包含点、线、面、体,图形学就是利用计算机对几何对象进行操作和显示的技术。OpenGL中,基本的几何要素包含:点标量向量线性代数在计算机图形学中占有重要一席地位,需要回顾的线代概念有:向量空间:线性空间,处理向量的数学系统,包含向量和标量点积.原创 2021-01-25 14:30:52 · 1128 阅读 · 0 评论 -
【计算机图形学-5】计算机观察
并不是有了模型就能呈现在屏幕上,计算机图形学中也需要有观察者,代替我们去观察模型,并最终将模型可视化地呈现在我们地屏幕上。经典视图平面几何投影:又叫二维投影,通俗理解为把高维地物体拍扁到二维平面上分类:透视投影所有的透视投影图都有一个特征:投影后尺寸会缩短这种尺寸的缩短使得透视投影图看起来比较自然,但是不能借助透视投影图测量尺寸主要用在建筑设计和动画制作等领域,这些应用领域要去生成看上去自然的图像在透视投影中,一个重要的概念就是灭点。在对象上的所有平行线(不平行于投影面)投影后交.原创 2021-01-25 14:30:43 · 669 阅读 · 1 评论 -
【计算机图形学-7】离散技术
缓存与图像程序中的图像以像素阵列表示:对于RGB图像,可以用GLubyte myimage [512] [512] [3]表示一个512*512的图像对于灰度图像,可以用GLubyte myimage [512] [512]表示一个512*512的图像OpenGL中不包含任何解析已有图像格式的函数与功能,图像就是内存中的存贮标准数据类型的数组纹理映射虽然图形显示卡可以每秒钟显示多达一千万个多边形,但这个速度并不能满足模拟任何现象的要求。即使是绘制一个简单的橘子,因为橘子上面有很多凹点,如果原创 2021-01-25 14:30:25 · 350 阅读 · 0 评论 -
【计算机图形学-8】层级建模方法
到目前为止,我们建立的模型,其实都是独立的,并没有内在的关联性。通过层级建模,我们可以实现更多精彩的模型联动效果。图符和实例我们之前建立了很多模型,包括:几何对象:物体的几何表示材质模型:反射系数等光源模型:光源颜色等虚拟照相机对于大多数图形API来说,采取最小完备的观点,即:只包含少数的基本图元让用户通过这些基本的图元来构建更复杂的对象,这些基本的图元就被称作图符在OpenGL应用程序中,必须通过几何变换把图符从建模标架变换到世界标架,得到一个实例实例变化把每个图符实例按.原创 2021-01-25 14:30:14 · 1724 阅读 · 0 评论 -
【计算机图形学-9】OpenGL程序实例分析1——绘制三角形
这一小节回顾一下基于C++的OpenGL Hello World程序代码。这一小节,我们要绘制LearnOpenGL上的一个三角形实例,基于OpenGL+GLEW+FreeGLUT。我们用代码加注释的形式进行走读。main.cpp文件:#include "Angel.h"#include <string>const int NUM_POINTS = 3;// 绑定数据都是右套路的,一般来说,就是:分配vao-绑定vao-分配vbo-绑定vbo-喂数据-读取着色器并使用-传数.原创 2021-01-25 14:30:01 · 793 阅读 · 0 评论 -
【计算机图形学-2】OpenGL图形编程总览
图形系统总览图形API处在应用接口和底层硬件的中间,负责:控制显卡的编程接口、计算与存储资源,输入显示内容,如三维场景/模型,生成输出图像。图形开发史两种主流图形API严格来讲,OpenGL并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现的,由OpenGL库的开发者自行决定。值得一提的是,2009年兴起的OpenGL 3.1并不向下兼容。在OpenGL 3.1以前,OpenGL使用原创 2021-01-25 14:29:52 · 785 阅读 · 0 评论 -
【计算机图形学-10】OpenGL程序实例分析2——模型自变换
这一小节,我们要实现模型的平移、缩放、旋转基础变换。实现一个模型类:TriMesh.h:#ifndef _TRI_MESH_H_#define _TRI_MESH_H_#include "Angel.h"#include <fstream>#include <sstream>#include <iostream>#include <vector>#include <string>// 三角面片中的顶点序列type.原创 2021-01-25 14:29:41 · 488 阅读 · 0 评论 -
【计算机图形学-11】OpenGL程序实例分析3——场景漫游 | 实现相机
本机将主要实现相机类.Camera.h:#ifndef _CAMERA_H_#define _CAMERA_H_#include "Angel.h"class Camera{public: Camera(); ~Camera(); mat4 lookAt(const vec4& eye, const vec4& at, const vec4& up); mat4 ortho(const GLfloat left, const GLfloat righ.原创 2021-01-25 14:29:26 · 1146 阅读 · 2 评论 -
【计算机图形学-11】OpenGL程序实例分析4——Phong着色
本小节实现Phong着色。Phong着色的核心是片元着色器的设置,如果将片元着色器的设置搬到顶点着色器中,则变成光滑着色。TriMesh.cpp:#include "TriMesh.h"// 一些基础颜色const vec3 basic_colors[8] = { vec3(1.0, 1.0, 1.0), // White vec3(1.0, 1.0, 0.0), // Yellow vec3(0.0, 1.0, 0.0), // Green vec3(0.0, 1.0, 1.0),.原创 2021-01-25 14:29:10 · 796 阅读 · 1 评论 -
【计算机图形学-12】OpenGL程序实例分析5——纹理映射
这部分将对纹理映射做分析,涉及到一些几何,但不会很难。TriMesh.cpp:#include "TriMesh.h"// 一些基础颜色const vec3 basic_colors[8] = { vec3(1.0, 1.0, 1.0), // White vec3(1.0, 1.0, 0.0), // Yellow vec3(0.0, 1.0, 0.0), // Green vec3(0.0, 1.0, 1.0), // Cyan vec3(1.0, 0.0, 1.0), // .原创 2021-01-25 14:28:47 · 845 阅读 · 0 评论 -
【计算机图形学-13】OpenGL程序实例分析6——层级建模之机械臂的实现
本节是OpenGL系列的最后一节,讲解层级建模的一个简单例子——机械臂的实现。修改过去系列TriMesh.cpp中getModelMatrix的方法:mat4 TriMesh::getModelMatrix( bool use_scale ) { mat4 parent_transform(1.0); // 获取 parent_transform if (parent != nullptr) { parent_transform = parent->getModelMatrix(fa.原创 2021-01-25 14:28:08 · 946 阅读 · 0 评论