
Graphics
文章平均质量分 82
SixDayCoder
渣校的渣渣
展开
-
[转]透视矩阵
原文地址透视矩阵详解1.概述投影变换完成的是如何将三维模型显示到二维视口上,这是一个三维到二维的过程。你可以将投影变换看作是调整照相机的焦距,它模拟了为照相机选择镜头的过程。投影变换是所有变换中最复杂的一个。2.视锥体(View Frustum)视锥体是一个三维体,他的位置和摄像机相关,视锥体的形状决定了模型如何从camera space投影到屏幕上。最常见的投影类型-透视投影,使得离摄像机近的物体转载 2017-01-24 16:04:08 · 1801 阅读 · 0 评论 -
法线贴图和切线空间
Normal Maping法线贴图是一种特殊的texture,法线贴图中每个像素存储的不是rgb颜色值,而是该片元的法向量。 法向量可以决定物体表面的凹凸情况,使用法线贴图可以在几乎不增加性能消耗的情况下,使得渲染出来的物体更有凹凸感,看起来更为真实。图1: 法线贴图的使用非常方便,只需要当做平常的texture一样对它进行采样,采样的值作为normal而非rgb。 下面是一个简原创 2018-01-10 11:58:39 · 9439 阅读 · 1 评论 -
使用Visual Studio一劳永逸式配置OpenGL开发环境(GLFW3+GLAD)
引子OpenGL版本众多,需要引入额外的第三方库才能很好的满足我们平时渲染的需求,对于刚开始学习的同学们比较麻烦。 我也多次遇到很多落后的配置教程,浪费了时间不说,也会自己技术和现代OpenGL的技术脱节。 在当前的时间点(2018年),学习OpenGL如果还从glBegin()和glEnd()那一套就太落伍了,这个教程是为了示范如何配置OpenGL3.3以上的环境。 另外推荐学习Ope原创 2018-01-15 19:42:33 · 9679 阅读 · 4 评论 -
[Modern OpenGL]谈谈VAO、VBO、IBO
OpenGL中的VAO、VBO、IBO刚开始学习OpenGL的时候可能会对VAO、VBO、IBO的概念有些模糊,只是记得这些术语和API。 理清概念才能更好的使用这些API,下面我们花20分钟的时间谈谈这些术语。VBO : Vertex Buffer Object,顶点缓冲对象。这里的Object和面向对象编程没有太大关系,他俩之间最沾边的就是合理的使用了抽象这一概念。 我们都知道所有的顶点原创 2018-01-02 15:11:17 · 3790 阅读 · 1 评论 -
[译]齐次坐标系
原文地址问题:两条平行直线可以相交在欧氏几何中,同一平面的两条直线是不可能相交的,这是大家都熟悉的常识。但是,在一个透视空间中,这是不正确的。 上图的铁路随着距离我们的视线越来越远,它们变得越狭长。最终,视线中的两条平行线在无限远处的一点相交了。欧式几何非常适合描述我们的2D/3D几何空间,但是不足以来描述透视空间了。(实际上,欧式几何是透视几何的子集)。在笛卡尔坐标系中,一个二维坐标可以用(x,翻译 2017-09-29 18:25:07 · 938 阅读 · 0 评论 -
基本光照
Phong光照模型现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的,所以我们使用数学和物理工具来简化和描述现实世界的光照,使得最终呈现的效果尽可能的接近现实。其中,我们最常用的一种称为Phong(冯氏)光照模型。Phong光照模型使用环境光(ambient),漫反射光(diffuse),高光反射(specular)三个分量来描述一个被光照射的物体的光照颜色。原创 2017-09-11 16:22:17 · 553 阅读 · 0 评论 -
透明物体的渲染
概述一般来说,我们使用Alpha Test(透明度测试)或者Alpha Blend(透明度混合)来实现透明效果,其中Alpha Blend(之后简称)Blend可以实现真正的半透明效果。无论哪种实现方式,我们都需要关闭透明物体的深度写入(禁止ZWrite)。为什么要关闭透明物体的深度写入?设想一种情况,假设半透明物体A在不透明物体B的前面。如果开启了深度写入,那么由于A在B的前面,ZBuffer中存原创 2017-09-26 11:35:01 · 3096 阅读 · 1 评论 -
固定管道软件渲染器
缘起童年时候“丰富”的玩游戏的经验让我顺便对计算机产生了浓厚的兴趣。 不像贴吧十几岁就开始写引擎的大神们,我对游戏开发是一窍不通的。 而我巧不巧的又是一个偏执的人,总认为所谓的“内功不深厚”是做不好一件事情。游戏开发的内功大概有很多,可是我想计算机图形学作为游戏开发的内功应该不会有人介意吧? 本科期间,并没有任何课程是和计算机图形学的,网上的课程大都是用OpenGL或者DirectX来讲解,原原创 2017-09-05 16:34:28 · 504 阅读 · 0 评论 -
渲染管线——视图坐标与相机模型
3D游戏中的所有物体都是围绕着3D相机渲染的,这表明我们仅仅把物体转换到世界坐标系是不够的,还需要设定一个抽象的相机,来观察我们整个3D世界。UVN相机模型相机很像是模拟人的眼睛:其中视平面就是类似人的视网膜,我们在现实生活中看到的物体最终会被我们的大脑“渲染”到我们的视网膜上面。 所有位于近裁剪面和远裁剪面这个椎体(称为视椎体,视椎体描述了视空间)内的物体可以被我们观察到,且距离我们越远看到的物原创 2017-05-22 16:39:50 · 3014 阅读 · 0 评论 -
渲染管线—局部坐标到世界坐标的转换
局部坐标和世界坐标世界坐标是指3D空间的坐标系统,当我们制作模型时,并不清楚模型所在的世界的坐标系统是如何规定的,都是使用局部坐标系来建立模型。这样模型制作人员只需要负责好建立自己的模型即可。转换原理我们假设使用Model类来抽象一个物体class Model{ Vector3D Position;//物体的在局部坐标系的位置 Vector3D WordPosition;//物体在世原创 2017-05-22 14:45:31 · 3750 阅读 · 2 评论 -
渲染管线——光栅化之Bresenham绘线算法
在完成了渲染管线的几何阶段之后,我们得到了三维物体在屏幕上的二维坐标,接下来,我们将进行光栅化操作。光栅化计算机屏幕是由点阵构成的,这些点阵称为像素。显然,这些像素是离散的,我们是不可能精确的绘制出绝对意义平滑的直线。所谓的光栅化,就是将图形填充到像素格上。 这里又分为线框模式的填充和实心填充。 所谓线框模式的填充,就是只描绘出三维物体的外边框。 实心的填充,即根据结点的各种几何信息,填充在像原创 2017-05-25 14:43:55 · 2385 阅读 · 0 评论 -
渲染管线——透视投影变换
综述透视投影变换是渲染管线几何阶段最难理解的地方,实际上,透视投影变换这个过程是要分解成好几个子过程的,它的目的是把物体的三维视图坐标变换为可以在屏幕上描绘出来的二维屏幕坐标。 现在理清一下渲染管线几何阶段的过程:可以看出,透视投影变换被分解为了三个子过程 1.齐次裁剪变换 : 在该过程中主要是通过Camrea、远近平面、宽高比、视角等信息求出投影变换矩阵,并对结点进行变换,变换后结点在齐次裁剪原创 2020-08-15 15:30:21 · 2887 阅读 · 0 评论 -
渲染管线——背面消隐
什么是背面消隐我们使用三角网格描述物体,在物体被转换到视空间之后,下一步就将被转换到屏幕坐标。 背面消隐指的是删除背向视点(相机的观察点)的多边形。算法原理基本的背面消隐算法数学原理很简单: (1)要求所有的三角形按照统一的方式(顺时针或者逆时针)排列顶点,这很重要,因为关系到平面法向量的计算。 (2)根据三角形的顶点信息计算该三角形的外法向量。 (3)使用观察向量(观察向量是指相机点到三角原创 2017-05-23 10:42:28 · 4112 阅读 · 0 评论 -
[趣味算法]如何判断一个点是在三角形的内部还是外部?
问题描述问题描述:判断二维平面上一个点P是在三角形ABC的内部还是外部。前辈们给我们总结了许多办法,这里我给出一个比较直观也比较简单的办法。 在讲这个办法之前,我们先看另一个问题。如果给定一条线段AB和点C,能否判断出来C和AB的位置关系呢? 这里的位置关系是指C是在线段AB上,还是在AB的左边,又或者是在AB的右边呢? 也许我们对左边还是右边的定义不明确,给一个图体会一下:...原创 2018-04-02 17:16:55 · 13006 阅读 · 8 评论