
CG&OpenGL&Shader
文章平均质量分 89
图形学算法和OpenGL编程和Shader编程
keneyr
一个兴趣广泛/想成为大佬 且 未遂的二道小贩子
展开
-
Polyline Simplification(多线段简化/离散采样)
本文参考自:https://www.codeproject.com/Articles/114797/Polyline-Simplification前言在计算几何中,经常我们会碰到需要简化输入Polyline的场景。多段线(Polyline)简化算法可以帮助我们减少Polyline的点数,从而降低输入规模。对多段线简化算法,通常的做法是在一定的近似精度下,删除一些点或者边。在计算机图形学中,当多段线分辨率高于显示分辨率时,多个顶点和边很可能映射到单个像素上,这意味着计算机将花费一些额外的资源去绘制不可见的转载 2021-03-29 15:39:32 · 1478 阅读 · 0 评论 -
UnityShader--01_intro to Shaders
主要是参考了youtube系列教程,b站有链接:https://www.bilibili.com/video/av22607806一个外国小哥讲的,这里对一些重点知识和代码做下笔记,也当做新手讲解了。------------------------------------------------------------------------------------------------...原创 2019-02-28 23:52:51 · 290 阅读 · 0 评论 -
角度和弧度之间的转换
在编程中,我们经常会用到角度或者弧度,但是往往我们所得到的不是角度就是弧度,需要转换一下才能用到,这里我总结了角度和弧度之间的转换,1、转换方法:角度转弧度 π/180×角度弧度变角度 180/π×弧度例:角度转弧度//其中a是最开始的角度,现在将它转换成弧度制a// 4 * atan(1.0)就是我们用到的圆周率π,不管角度还是弧度,都是double型void CBa...转载 2020-01-07 14:55:19 · 7082 阅读 · 0 评论 -
仿射变换 Affine transformation
这个太重要了,我得再研究研究。并争取搞个code出来。这篇先来理论。本文属转载。变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:其中第三个的仿射变换就是我们这节要讨论的。仿射变换(Affine Transformation)Affine ...转载 2019-09-26 00:21:02 · 1719 阅读 · 0 评论 -
如何判断两个向量之间谁是谁的逆时针,谁是谁的顺时针
判断两个向量之间夹角是顺时针还是逆时针利用平面向量的叉乘现在,a是一个向量,b是一个向量。a = (x1,y1) b = (x2,y2)a×b = x1y2 - x2y1若结果为正,则向量b在a的逆时针方向否则,b在a的顺时针方向若结果为0,则a与b共线注:两向量之间夹角以小于180度计算...原创 2019-05-18 22:39:53 · 3670 阅读 · 0 评论 -
理解2D三角剖分
作为一个野生新手。可能理解会有许多不正之处。如果大佬们看到了还请一定多多批评啊!虽然本博可能讲的不甚专业,但是对于新手说,应该比较容易入门吧。因为我也是新手的视角来理解这个东西的。三角剖分什么是三角剖分?其实就是把离散集合剖分成不均匀的三角网格,直观的表示就是:你看,我们把这些离散的点用三角网格串起来了,现在它们就是有关系的点了,甚至可能牵一发而动全身。那么三角剖分专业性的...原创 2019-05-18 17:25:37 · 3998 阅读 · 0 评论 -
OpenGL生成窗口,鼠标点击位置和显示位置有偏移
在用OpenGL生成窗口以后,想鼠标点击哪里,哪里就生成一个点。但是第一次运行程序的时候,发现鼠标点击哪里,会在另一个地方生成点,总之就是有偏差。后来调这个函数里面的参数,发现和参数有关。就是不要让这个函数里的width和height超过你的屏幕大小。超过了就会出现偏差。我之前的参数1280*960,我的屏幕大小是:所以别超就行了。另外还有,这两个参数要一致。...原创 2019-05-11 16:11:30 · 2241 阅读 · 0 评论 -
OpenGL+cmake+vs2015+win10
之前写过一篇博客配置OpenGL,但是是直接拿网上下载的人家整理好的dll文件,我都忘了那些文件到底是什么版本的了。为了一劳永逸,希望自己能够编译得到适合自己平台的文件,因此就去OpenGL官网:告诉我用FreeGLUT,因为GLUT都已经20年不支持了。那太好了,之前我装的就是GLUT。可以编译新的了。似乎要翻墙。自己想办法下载去吧。不过很奇怪啊。这个下载下来是ta...原创 2019-05-10 16:03:37 · 1171 阅读 · 0 评论 -
初识贝塞尔曲线
老早就听说过大名鼎鼎的贝塞尔曲线------Bézier curve,今天就来一探究竟!贝塞尔曲线是应用在二维图形的数学曲线。贝塞尔曲线由线段与节点组成,节点是可拖动的支点,线段是可伸缩的橡皮筋,PS中的钢笔工具能画出来那么漂亮的曲线,就是因为数学家发明了贝塞尔曲线啊!(数学大佬赛高!)下图就是PS画出来的曲线。曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的...原创 2019-03-12 21:24:23 · 1783 阅读 · 1 评论 -
三维空间的绕轴旋转变换
最近在看文献的时候看到作者有用到三维绕轴变换。我看了好久都没摸清他的矩阵是怎么得到的。待我提笔一画,妈呀,果然这脑子是废了,这么easy的问题都他么的解不出来。既然脑子废了那手还是勤劳点把。叹气。唉,,猪生艰难。。。我只想过吃完就睡睡完就吃的生活啊!为什么要这么torture我。咳,言归正传。首先出一个清晰的问题让你知道这个博客是在讲什么?如下,这是一个三维坐标(没错就是右手坐标系),然后...转载 2019-03-09 10:02:42 · 19174 阅读 · 0 评论 -
OpenGL-- projection Matrix 翻译
原博客英文版地址:http://www.songho.ca/opengl/gl_projectionmatrix.html---------------------------------------------------------------------------------------------------------------------------------------...翻译 2019-02-20 16:17:53 · 473 阅读 · 0 评论 -
理解Matrix4x4.MultiplyPoint()
好奇这个函数底层是怎么实现的。所以就是浏览了一些参考文献,然后做了个小实验。现记录如下。其中也有一些问题没有解决。。先来看Unity Manualpublic Vector3 MultiplyPoint(Vector3 point);DescriptionTransforms a position by this matrix (generic).Returns a positio...原创 2019-02-20 17:12:48 · 5690 阅读 · 0 评论 -
图形学初步--裁剪算法之Liang-Barsky算法
一、概念裁剪是CG中许多重要问题的基础,裁剪最典型的用途是确定场景中或画面中位于给定区域之内的部分。由于在一个典型的场景之中,需要对大量的点、线段进行裁剪,因此裁剪算法的效率十分重要。关于裁剪有一些很常见的算法,比如说Cohen-Sutherland线段细分裁剪算法、中点分割算法、Cyrus-Beck算法、Liang-Barsky算法。这篇文章重点讲Liang-Barsky算法。剩下的那些...原创 2018-11-09 08:27:06 · 27263 阅读 · 8 评论 -
图形学初步--------种子填充算法
上篇博文讲到了填充算法的扫描线填充,这篇博文讲解另一大算法思路----------种子填充。一、概念种子填充算法假设在多边形或区域内部至少有一个像素是已知的。然后设法找到区域内所有其他像素,并对它们进行填充。区域可以用内部定义或边界定义。如果是内部定义,那么,区域内部所有像素具有同一种颜色或值,而区域外的所有像素具有另一种颜色或值,如下图:如果是边界定义,那么区域边界上所有像素...原创 2018-11-05 21:48:19 · 45489 阅读 · 15 评论 -
图形学初步----------多边形填充算法
参考博文:https://blog.youkuaiyun.com/xiaowei_cqu/article/details/7693985https://blog.youkuaiyun.com/xiaowei_cqu/article/details/7712451https://blog.youkuaiyun.com/wodownload2/article/details/52154207https://blog.cs...原创 2018-11-05 14:24:12 · 27323 阅读 · 7 评论 -
vs2013配置OpenGL+简单案例分析
一、安装我的系统是win10 64位,用的是visual studio2013,vs装在了E盘下面。--------------------------------------------------------------------------------------------------------------------------------------------------...原创 2018-11-02 00:37:32 · 5588 阅读 · 4 评论 -
图形学初步------圆生成Bresenham算法
上一篇讲完了直线最简单的生成算法,这篇我们讲圆的生成算法,这些都是比较basic&easy的思路和code,并且一定能实现,因为博主我也在学习中~除了直线的光栅化研究,还有很多曲线光栅化研究,比如说:圆、椭圆、抛物线、双曲线等圆锥曲线的光栅化。其中,Bresenham算法是一种最简单最有效的方法。我们先看下图:怎么画圆呢?如果是一个像素一个像素的去算,是不是太不符合工科生的思维...原创 2018-11-01 17:51:24 · 11349 阅读 · 7 评论 -
图形学初步---------直线生成算法DDA
近来偶然的需要,学习了一下图形学的基础。下面记录一下关于直线生成算法DDA的理解。基础知识:在计算机中,直线的显示并不是连续的,而是离散的点,这是由光栅化的本质决定的。我们可以把屏幕理解为阴极射线管光栅显示器,这个显示器是由离散可发光的有线区域单元(像素)组成的矩阵。确定最佳逼近某直线的像素的过程通常叫做光栅化。对于水平线、垂直线以及45°线,选择哪些光栅元素是显而易见的,而对于其他方...原创 2018-11-01 15:03:48 · 23664 阅读 · 7 评论 -
glPixelStorei
对齐像素字节函数:glPixelStorei。glPixelStorei(GL_UNPACK_ALIGNMENT,1)控制的是所读取数据的对齐方式,默认4字节对齐,即一行的图像数据字节数必须是4的整数倍,即读取数据时,读取4个字节用来渲染一行,之后读取4字节数据用来渲染第二行。对RGB 3字节像素而言,若一行10个像素,即30个字节,在4字节对齐模式下,OpenGL会读取32个字节的数据,若不...原创 2019-10-24 17:07:46 · 2314 阅读 · 0 评论 -
OpenGLUV纹理映射
注释:本博不具有普遍性,只是针对个人理解。前提是我已经生成了自己的网格,然后准备把纹理UV映射到网格上。在Init()里, //读取图片,后续绑定纹理 unsigned char *data = stbi_load(Config::img_path_raw.c_str(), &width, &height, &nrChannels, 0); gl...原创 2019-10-21 14:41:01 · 1283 阅读 · 0 评论 -
二维旋转矩阵公式推导
这篇博文来推导一下旋转矩阵。首先来假设 OP1旋转到了OP2,逆时针矩阵推导。当然也有顺时针矩阵推导。然后有没有什么办法可以不考虑顺时针逆时针?这里我考虑了一下OP1和OP2不相等的情况因为先求的sin(theta),如果是逆时针,theta就是正值,如果是顺时针,theta就是负值。之前我的想法,求theta,是先根据三角形的边长求夹角的公式求的cos(theta)...原创 2019-10-15 21:13:14 · 16205 阅读 · 3 评论 -
点到线段的距离
之前编程上有个小错误,应该算点到线段的距离,结果算成了点到直线的距离,导致bug。今天就来记载一下,这两个的数学上的区别和代码上的差异。点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线段最短距离时需要考虑参考点在沿线段方向的投影点是否在线段上,若在线段上才可采用点到直线距离公式,如图1所示。具体算法主要有以下三种:1、方法——经典算法该算法直接...原创 2019-10-11 10:08:00 · 13998 阅读 · 4 评论 -
OpenGL动画
本文依然属转载。终于到本博主想要学习的核心内容了,顿时精神抖擞。今天要讲的是动画制作——可能是各位都很喜欢的。除了讲授知识外,我们还会让昨天那个“太阳、地球和月亮”天体图画动起来。缓和一下枯燥的气氛。本次课程,我们将进入激动人心的计算机动画世界。想必大家都知道电影和动画的工作原理吧?是的,快速的把看似连续的画面一幅幅的呈现在人们面前。一旦每秒钟呈现的画面超过24幅,人们就会错以为它是...转载 2019-09-24 14:06:20 · 3985 阅读 · 2 评论 -
OpenGL三维变换
本文依然属转载。在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能是X轴向右,Y轴向上,Z轴垂直屏幕。这些限制给我们的绘图带来了很多不便。我们生活在一个三维的世界——如果要观察一个物体,我们可以:1、从不同的位置去观察它。(视图变换)2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)3、如果把物体画下来...转载 2019-09-24 13:26:54 · 2140 阅读 · 0 评论 -
OpenGL颜色
本文依然属于转载。本次学习的是颜色的选择。终于要走出黑白的世界了~~OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。1. RGBA颜色RGBA模式中,每一个像素会保存以下数据:R值(红色分...转载 2019-09-24 13:18:05 · 466 阅读 · 0 评论 -
OpenGL基础绘制
本文依然属于转载。本文将会介绍使用OpenGL进行点,线,三角形乃至多边形的绘制。下图是采用不同类型的图形效果一、点点”是一切的基础。 OpenGL提供了一系列函数指定一个点。它们都以glVertex开头,后面跟一个数字和1~2个字母。例如:glVertex2dglVertex2fglVertex3fglVertex3fv数字表示参数的个...转载 2019-09-24 13:11:24 · 4178 阅读 · 1 评论 -
OpenGL使用GLUT进行显示窗口管理
之前写过一片博客:OpenGL+vs2013配置,里面用的是后来又写OpenGL,配置的是freeglut,freeglut可以把glut给代替了所以本文用这个freeglut再次写一个显示窗口管理的例子,以加深理解。本文要转载一个大佬写的,主要是为了后续理解OpenGL怎么搞定动画做铺垫的。1.在VS2013中建立一个OpenGL工程选择File->New->...转载 2019-09-24 12:53:43 · 1182 阅读 · 0 评论