heyuchang666的专栏

私信 关注
heyuchang666
码龄7年
  • 1,345,265
    被访问量
  • 459
    原创文章
  • 1,540
    作者排名
  • 655
    粉丝数量
  • 于 2014-07-24 加入CSDN
获得成就
  • 获得336次点赞
  • 内容获得118次评论
  • 获得994次收藏
荣誉勋章
兴趣领域
  • #前端
    #前端框架
TA的专栏
  • Unity开发学习之路
    46篇
  • Lua语言开发
    96篇
  • 游戏开发
    3篇
  • Android开发之路
    37篇
  • 数据结构和算法
    14篇
  • c/c++学习之路
    37篇
  • C#语言开发之路
    31篇
  • 渲染和计算机图形学
    118篇
  • untiy ShaderLab学习之路
    40篇
  • OpenGL开发之路
    17篇
  • 设计模式学习之路
    27篇
  • android新手开发
    29篇
  • android高级开发
    8篇
  • android动画
    1篇
  • java开发知识
    6篇
  • 黑马程序员—ios新手开发知识
    29篇
  • Unity3D
    46篇
  • ios高级开发
  • 3D技术
  • 3级网络技术
    3篇
  • 2级C语言
  • c/c++
    39篇
  • 美工
    3篇
  • c#
    65篇
  • Java
    5篇
  • Lua开发
    88篇
  • 算法数据结构
    27篇
  • 编译原理
  • 操作系统
    1篇
  • 数据库
    2篇
  • 计算机基础知识
    6篇
  • 计算机图形学
    106篇
  • OpenGL
    18篇
  • 面试题
    1篇
  • 软件工程
    8篇
  • 设计模式
    33篇
  • 软件测试
    2篇
  • 架构师
    4篇
  • 编程源代码
    21篇
  • 数据结构
  • untiy 3d ShaderLab
    41篇
  • 游戏引擎开发
    4篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Unity_UGUI VertexHelper

图形学的基础知识:1、所有的渲染对象都是由网格(Mesh)构成,Mesh的绘制单位是图元(点、线、三角形)。意思也就是说所有的游戏对象都是在绘制一些点、线、三角形的集合。2、顶点数据中最主要的是位置,颜色,纹理坐标,法线等。也就是说顶点中保存着其位置、颜色、纹理坐标、法线信息等。3、贴纹理是指,将一张纹理(可以称为图片),根据纹理坐标,贴在模型上面。就好比同一个模型人,穿上了不同的衣服。纹理坐标指的是根据坐标将图片信息覆盖在Mesh表面,就相当于,柚子就贴在手腕处,裤子就贴在腿上。UGUI提供了
原创
188阅读
0评论
0点赞
发布博客于 8 月前

屏幕显示模式ScreenOrientation

描述屏幕方向,目前,这仅适用于移动设备。下面是官方API截图:Portrait 竖屏PortraitUpsideDown 竖屏 上下颠倒。LandscapeLeft 横屏从逆时针旋转LandscapeRight 横屏从顺时针旋转AutoRotation 自动旋转unity 设置屏幕旋转只允许竖屏:Portrait √Portrait Upside Down √Landscape Right ×Lan...
原创
117阅读
0评论
0点赞
发布博客于 8 月前
伽玛校正
发布Blink于 1 年前
OpenGL函数_ glColor函数颜色
发布Blink于 1 年前
计算机图形学(四)几何变换_5_三维空间的几何变换_1_三维平移
发布Blink于 1 年前
untiy 3d ShaderLab_第9章_2_球体阴影(一) 平行光对球体的投影
发布Blink于 1 年前
lua中的sort排序 反自反性 非对称性 传递性
发布Blink于 1 年前
C#值类型和引用类型
发布Blink于 1 年前
判断两个时间戳是否同一周
发布Blink于 1 年前
lua 计算身份证校验
发布Blink于 1 年前
C#值类型和引用类型
发布Blink于 1 年前
游戏特效有哪些制作的分类
发布Blink于 1 年前
判断是否时同一天
发布Blink于 1 年前
lua 计算身份证校验
发布Blink于 1 年前

据说发美女,可以涨粉网图走一波

发布Blink于 1 年前
二叉树总结创建,遍历_heyuchang666的专栏-CSDN博客
发布Blink于 1 年前
固定渲染管线与可编程渲染管线
发布Blink于 1 年前

lua 计算身份证校验

身份证最后一位是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;2、将这17位数字和系数相乘的结果相加;3、用加出来和除以11,看余数是多少;4、余数只可能有0 1 2 3 4 5 ...
原创
699阅读
1评论
1点赞
发布博客于 1 年前

判断两个时间戳是否同一周

---@param stampA number---@param stampB numberfunction ModelTime.isBetweenOneWeek(stampA, stampB) --两个日期的差值与较晚日期的weekDay(周中天数)之和是否小于7 --diff为较早日期减去较晚日期的差值 local diff = 0 --取得较晚的日期 ...
原创
553阅读
0评论
0点赞
发布博客于 1 年前

微信开通公众号 每日发一篇编程精文 自己搞着玩,不盈利

原创
156阅读
0评论
2点赞
发布博客于 1 年前

判断是否时同一天

---判断是否时同一天---@param stampA number---@param stampB number---@param resetInfo table|nil {[hour]=5, [min]=0, [seconds]=0, } @重置时间---@return booleanfunction ModelTime.isSameDay(stampA, stampB, rese...
原创
381阅读
0评论
1点赞
发布博客于 1 年前

游戏特效有哪些制作的分类

游戏特效制作方法非常灵活,但大多数特效都要依靠游戏引擎的粒子系统。由于游戏公司引擎的不定性,相应的特效编辑器也不同,这就决定了游戏特效制作的不定性。 但所有特效都有其共同的特点?特效是由二维或三维软件制作成的,然后将相应的贴图赋予三维软件的面或体,由程序实现贴图颜色变化、形态转变或者运动。按照制作方法的不同,将游戏特效划分为三种,所有的特效形式是由这三种方法的一种或多种的相互结合。  由于资源...
转载
3069阅读
3评论
2点赞
发布博客于 2 年前

C#值类型和引用类型

值类型和引用类型1、简单比较  值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。  值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。引用类型(reference type):string 和 ...
转载
787阅读
0评论
2点赞
发布博客于 3 年前

SubShader的Tag RenderType类型

SubShader的TagShader "ShaderLab Tutorials/TestShader" { SubShader { Tags { "Queue"="Geometry+10" "RenderType"="Opaque" } //... }}SubShader内部可以有标签(Tags)的定义。Tag指定了这个SubShader...
转载
1134阅读
0评论
0点赞
发布博客于 3 年前

函数重载 和 模版template

假设,需要设计一个从3个数中找最大值的函数,C语言中需要根据类型定义3个函数:int max1(int a, int b, int c);float max2(float a, float b, float c);long max3(long a, long b, long c);C语言规定在同一作用域中不能有同名的函数,因此3个函数名字不同,C++中用允许同一函数名定义多个函数,这些函数的参...
原创
373阅读
0评论
0点赞
发布博客于 3 年前

#define和const的区别

在C语言中常用#define命令来定义符号常量:#define PI 3.14159实际上,只是在预编译时进行字符置换,把程序中出现的字符串PI全部换成3.14159。在预编译之后,程序中不再有PI这个标识符。PI不是变量,没有类型,不占用存储单元,而且容易出错,如:int a = 1;b = 2;#define PI 3.14159#define R a + bcout << ...
原创
1332阅读
0评论
2点赞
发布博客于 3 年前

lua数据结构之table的内部实现

一、table结构1、Table结构体首先了解一下table结构的组成结构,table是存放在GCObject里的。结构如下:typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means tagmethod(p) is not present */ lu_byte lsizenode; /* 以2的...
转载
1051阅读
0评论
0点赞
发布博客于 3 年前

进程和线程关系及区别

1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
转载
173阅读
0评论
0点赞
发布博客于 3 年前

lua中的sort排序 反自反性 非对称性 传递性

ua中对table的排序一般是用lua自带的table.sort()函数排序,一般不采用自己写的排序的方式,以下来说一说table.sort()排序和在工作中遇到的问题 1.排序的方式table.sort(tbl,function(a,b) return a > bend)以上是一个简单的例子,得到的效果是对于待排序的数据的一个升序,你这样认为就是错了
转载
742阅读
0评论
1点赞
发布博客于 3 年前

ComInterfaceType

using System;namespace System.Runtime.InteropServices{ [ComVisible (true)] [Serializable] public enum ComInterfaceType { InterfaceIsDual, InterfaceIsIUnknown, InterfaceIsIDispatch }}
转载
679阅读
0评论
0点赞
发布博客于 3 年前

C#中ICollection介绍

ICollection 接口是 System.Collections 命名空间中类的基接口,ICollection 接口扩展 IEnumerable,IDictionary 和 IList 则是扩展 ICollection 的更为专用的接口。如果 IDictionary 接口和 IList 接口都不能满足所需集合的要求,则从 ICollection 接口派生新集合类以提高灵活性。IColl
转载
8663阅读
0评论
4点赞
发布博客于 3 年前

OpenGL---实例 球体 画圆锥

用OpenGL 的接口直接创出对应的实心球,圆锥体,圆环
转载
11425阅读
0评论
1点赞
发布博客于 4 年前

虚数的意义

这就是虚数乘法的物理意义:改变旋转角度。将实数轴看作横轴,虚数轴看作纵轴,就构成了一个二维平面。旋转到某一个角度的任何正实数,必然唯一对应这个平面中的某个点。只要确定横坐标和纵坐标,比如( 1 , i ),就可以确定某个实数的旋转量(45度)。数学家用一种特殊的表示方法,表示这个二维坐标:用 + 号把横坐标和纵坐标连接起来。比如,把 ( 1 , i ) 表示成 1 + i 。这种表示方法就叫做复数(complex number),其中 1 称为实数部,i 称为虚数部。
转载
852阅读
0评论
2点赞
发布博客于 4 年前

游戏开发基础数据结构

据我所接触到的国内游戏公司,包括我们自己公司在内,游戏数据大都是基于 excel 这种二维表来表达的。我把它称为 csv 模式。这种模式的特点是,基础数据结构基于若干张二维表,每张表有不确定的行数,但每行有固定了列数。用它做基础数据结构的缺陷是很明显的,比如它很难表达树状层级结构。这往往就依赖做一个中间层,规范一些使用格式,在其上模拟出复杂数据结构。
转载
699阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_5_三维空间的几何变换_1_三维平移

在三维空间中,对象的平移通过平移定义该对象的各个点然后在新位置重建该对象而实现。对于由一组多边形表面表示的对象,可以将各个表面的顶点进行平移如下图,然后重新显示新位置的面。
原创
4087阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_5_三维空间的几何变换

当我们讨论xy平面上的二维旋转时,只需考虑沿着垂直于xy平面的坐标轴进行旋转;而在三维空间中,可能选择空间的任意方向作为旋转轴方向。大多数图形软件将三维旋转作为绕三个坐标轴的二维旋转的复合而进行处理。另一种解决方案则是用户根据给定轴的方向和旋转角度建立一个总的旋转矩阵。
原创
1456阅读
0评论
1点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换_5_其他二维变换_2_错切

错切(shear)是一种使对象形状发生变化的变换,经过错切的对象好像是由已经相互滑动的内部夹层组成。两种常用的错切变换是移动x坐标值的错切和移动Y坐标值的错切。相对于x轴的x方向错切由下列变换矩阵1产生:该矩阵将坐标位置转换成可以将任意实数赋给错切参数shx。然后将坐标位置(x, y)水平地移动与其到x轴(y = 0)的距离(Y值)成正比的量。例如,设置shx为2,
原创
3620阅读
0评论
1点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换_5_其他二维变换_1_反射

大多数图形软件包中包含了类似平移、旋转和缩放这些基本变换。有些软件包还提供一些对某些应用有用的其他变换。反射和错切是这样的两个变换。 产生对象镜像的变换称为反射(reflection)。对于一个二维反射而言,其反射镜像通过将对象绕反射轴旋转180°而生成。我们可以在xy平面内或垂直于xy平面选择反射轴(axis of reflection)。当反射轴是xy平面内的一条直线时,绕这个轴的旋转路径在垂直于xy平面的平面中;而对于垂直于xy平面的反射轴,旋转路径在xy平面内。下面举出一些普通反射的
原创
2837阅读
0评论
1点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换_4_二维刚体变换

如果一个变换矩阵仅包含平移和旋转参数,则它是一个刚体变换矩阵(rigid-body transforma-tion matrix)。二维刚体变换矩阵的一般形式为矩阵1:其中,4个元素rjk是多重旋转项,元素trx和try是平移项。坐标位置的刚体变化有时也称为刚体运动(rigid_motion)变换。变换后坐标位置的所有角度和距离都不变化。此外矩阵1具有其左上角的2x2矩阵是一正交矩阵(orthogonal matrix)的特性。这说明,假如将子矩阵的每一行(或每一列)作为一个向量,那么两个行向量(rxx,
原创
2639阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换_3_通用二维复合变换和计算效率

因此,实际上变换坐标位置仅需完成4次乘法和4次加法。一旦把单个矩阵连接起来计算出复合矩阵的元素值,这就是任何变换序列所需计算的最大数目。假如没有合并,那么每次都要使用一个单独的变换,则计算的数目将大大增加。因此,变换操作的有效实现是先形成变换矩阵,合并所有变换序列,然后用等式2计算变换的坐标。在并行系统上,使用等式1的复合变换矩阵而直接进行矩阵相乘也可以有相同的效果。 由于旋转计算需要对每个变换点进行三角求值和多次乘法,因而在旋转变换中的计算效率就成为十分重要问题。在动画及其他包含许多重复
原创
1444阅读
0评论
0点赞
发布博客于 4 年前

Lua内置库的实现(一)_string模块

Lua的string库相较其它许多动态语言的string库来说,可谓短小精悍。不到千行C代码就实现了一个简单使用的字符串模式匹配模块。虽然功能上比正则表达式有所欠缺,但考虑到代码体积和功能比,这应该是一个相当漂亮的平衡(C 语言社区中常用的正则表达式库PCRE的个头整体比lua的实现还要大好几倍)。若需要更强大的字符串处理功能,Lua的作者之一Roberto给出了一个比正则表达式更强大的选择LPEG 6。有这一轻一重两大利器,在Lua社区中,很少有人再用正则表达式了。string模块实现在lstrlib.c
原创
1713阅读
0评论
0点赞
发布博客于 4 年前

C#常用函数表

1、DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=currentTime.Month; 1.4 取当前日 int 日=currentTime.Day; 1.5 取当前时 int 时=currentTime.Hour;
转载
530阅读
0评论
0点赞
发布博客于 4 年前

OpenGL函数_ glColor函数颜色

在OpenGl中设置颜色,一般可以使用glColor3f()。从函数名字就可以看出,它的参数应该有三个,类型是float型的。另外一点是它的参数值的范围是[0.0,1.0]一般的,可以将这三个参数值视为颜色的成分。0.0 -- > 不使用颜色成分;1.0 -- > 使用颜色的最大值
原创
5297阅读
1评论
2点赞
发布博客于 4 年前

Lua内置库的实现(一)_math模块(二)_math模块API实现

math模块内的各个数学函数的实现中规中矩,就是使用的Lua手册里给出的API来实现的。 Lua的扩展方式是编写一个原型为int lua_CFunction (lua_State *L)的函数。L对于使用者来说,不必关心其内部结构。实际上,公开API定义所在的lua. h中也没有lua_State的结构定义。对于一个用C编写的系统,模块化设计的重点在于接口的简洁和稳定。数据结构的细节和内存布局最好能藏在实现层面,Lua的API设计在这方面做了一个很好的示范。这个函数通常不会也不建议被C程序的其它部分直接调用
原创
1411阅读
0评论
0点赞
发布博客于 4 年前

OpenGL单缓冲与双缓冲的区别

单缓冲,实际上就是将所有的绘图指令在窗口上执行,就是直接在窗口上绘图,这样的绘图效率是比较慢的,如果使用单缓冲,而电脑比较慢,你回到屏幕的闪烁。 双缓冲,实际上的绘图指令是在一个缓冲区完成,这里的绘图非常的快,在绘图指令完成之后,再通过交换指令把完成的图形立即显示在屏幕上,这就避免了出现绘图的不完整,同时效率很高。一般用OpenGL绘图都是用双缓冲,单缓冲一般只用于显示单独的一副非动态的图像
转载
3189阅读
0评论
0点赞
发布博客于 4 年前

OpenGL函数_ gl.glenable()详细介绍

glEnable 用于启用各种功能。功能由参数决定。与glDisable相对应。glDisable是用来关闭的。两个函数参数取值是一至的。参数说明:void glEnable(GLenum cap)GLenum 是unsigned int 类型cap 是一个取值。由值决定启用的功能键。各种功能请看参数cap的取值表
转载
8628阅读
0评论
7点赞
发布博客于 4 年前

OpenGL---GLUT教程(二) GLUT初始化

Void glutInit(int*argc,char**argv);//初始化Void glutInitWindowPositon(int x,int y);//窗口位置(它默认的是屏幕左上角),X: 距离屏幕左边的像素数。Y:距离屏幕上边的像素数,默认值都是-1。Void glutInitWindowSize(int width,int height); //设置窗口大小Void glutInitDisplayMode(unsighed int mode); // 定义显示方式Int glutC
原创
1055阅读
0评论
0点赞
发布博客于 4 年前

OpenGL_GLUT(一)_vs2013中配置gult库

GLUT 代表OpenGL Utility Tookit。Mark J.Kilgard 为了使OpenGL应用程序结构能够真正独立于窗口系统构思了GLUT库。感谢GLUT,使我们可以写程序而不必去学关于X windows或者微软自己的窗口系统。Kilgard在X windows上应用这个库,后来Nate Robins把它扩展到微软的窗口系统。
原创
969阅读
0评论
0点赞
发布博客于 4 年前

opengl库中gl glu glut glaux的区别

OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库。gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库。gl中包含了最基本的3D函数,而glu似乎对gl的辅助,如果算数好,不用glu的情况下,也是可以做出同样的效果。glut是基本的窗口界面,如果不喜欢用glut可以用MFC和Win32窗口等代替,但是glut是跨平台的,这就保证了我们编出的程序是跨平台的,如果用MFC或者Win32只能在windows操作系统上使用。选择OpenGL的一个很大原因就是因为它的跨
转载
1172阅读
0评论
0点赞
发布博客于 4 年前

Lua内置库的实现(一)_math模块(一)_从math模块看Lua的模块注册机制

Lua5.2自带了几个库,实现了一般应用最基本的需求。这些库的实现仅仅使用了Lua官方手册中提到的API,对Lua核心部分的代码几乎没有依赖,所以最易于阅读。阅读这些库的实现,也可以加深对Lua API的印象,方便我们自己扩展Lua。 注意:在看这个之前要先了解Lua和C之间的交换数据的机制,因为Lua和C之间交互有2个问题:1.动态和静态类型系统的不匹配,2.自动和手动内存管理的不一致。(Lua 与C调用点击连接) 数学库是最简单的一个。它导入了若干数学函数,和两个常量pi与huge。下
原创
1283阅读
0评论
0点赞
发布博客于 4 年前

Lua内嵌库概念

作为嵌入式语言,其实完全可以不提供任何库及函数。全部由宿主系统注入到State中即可。也的确有许多系统是这么用的。但Lua的官方版本还是提供了不少必要的库。尤其是一些基础函数如pairs,error,setmetatable,type等等,完成了语言的一些基本特性,几乎很难不使用。 而coroutine,string,table,math等等库,也很常用。Lua提供了一套简洁的方案,允许你自由加载你需要的部分,以控制最终执行文件的体积和内存的占用量。主动加载这些内建库进入lua_State
原创
805阅读
0评论
0点赞
发布博客于 4 年前

Lua代码翻译及预编译字节码

Lua在早期几乎都是被用来嵌入到其它系统中使用,所以源代码通常被编译成动态库或静态库被宿主系统加载或链接。但随着Lua的第三方库越来越丰富,人们开始倾向于把Lua作为一门独立语言来使用。Lua的官方版本里也提供了一个简单的独立解析器,便是lua.c所实现的这个。并有luac.c实现了一个简单的字节码编译器,可以预编译文本的Lua源程序。
原创
4365阅读
0评论
0点赞
发布博客于 4 年前

Lua代码风格

Lua使用Clean C[5](Clean C是标准C/C++的一个子集。它只包含了C语言中一些必要特性。这样方便把Lua发布到更多的可能对C语言支持不完整的平台上。比如,对于没有 ctype.h 的C语言编译环境,Lua提供了 lctype.c 实现了一些兼容函数。)编写的源代码模块划分清晰,大部分模块被分解在不同的 .c 文件中实现,以同名的.h文件描述模块导出的接口。比如,lstring.c实现了Lua虚拟机中字符串池的相关功能,而这部分的内部接口则在lstring.h中描述。
原创
786阅读
0评论
0点赞
发布博客于 4 年前

Lua 源文件划分

从官网下载到Lua 的源代码后,展开压缩包,会发现源代码文件全部放在src子目录下。这些文件根据实现功能的不同,可以分为四部分。1.虚拟机运转的核心功能2.源代码解析以及预编译字节码3.内嵌库4.可执行的解析器,字节码编译器
原创
575阅读
0评论
0点赞
发布博客于 4 年前

C/C++ typedef用法

typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
转载
509阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换_2_矩阵合并特性

因此,依靠变换的描述次序,既可以使用从左到右(前乘),也可以使用从右到左(后乘)的结合分组来求矩阵乘积。有些图形软件包要求变换按应用的次序描述。 在这种情况下,先引入变换M1,然后M2,最后M3。在每一个连续的变换子程序被调用时,其矩阵从左边与前面的矩阵乘积合并。而另一些图形系统是后乘矩阵,因此该变换序列按相反次序引入;最后引入的变换(本例中是M1)是最先应用的,而第一个被调用的变换(此时是M3)是最后应用的。
原创
1491阅读
0评论
0点赞
发布博客于 4 年前

模板与泛型的区别

泛型和模板都提供支持参数化类型的语言功能。但是,它们是不同的,有不同的用途。本主题提供了一个概述的许多差异。泛型是通用的,直到它们在运行时类型取代。模板是专门在编译的时候,所以他们不仍然在运行时的参数化类型。特别是公共语言运行库支持仿制药在MSIL。由于运行时知道仿制药,具体类型可以被取代时,泛型类型的引用程序集包含一个泛型类型。相比之下,模板,解决成普通类型在编译时产生的类型可能不会专门在其他组件中。 专门在两个不同的组件与同类型参数的泛型是相同的类型。专门在两个不同的组件与同类型参数的模板被认为是由运行
转载
2783阅读
2评论
0点赞
发布博客于 4 年前

c++关键字之:volatile

volatile 是“易变的”、“不稳定”的意思。volatile是 c++ 的一个关键字,用来解决在“共享”环境下容易出现的读取错误的问题。在单任务的环境中,一个函数体内部,如果在两次读取变量的值之间的语句没有对变量的值进行修改,那么编译器就会设法对可执行代码进行优化。由于访问寄存器的速度要快过RAM(从RAM中读取变量的值到寄存器),以后只要变量的值没有改变,就一直从寄存器中读取变量的值,而不对RAM进行访问。
转载
598阅读
0评论
0点赞
发布博客于 4 年前

C++ STL 详细总结

从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术;从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式
转载
683阅读
0评论
0点赞
发布博客于 4 年前

用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案,M<=5,N<2^31,输出答案mod p的结果

我们以M=3为例进行讲解。假设我们把这个矩形横着放在电脑屏幕上,从右往左一列一列地进行填充。其中前n-2列已经填满了,第n-1列参差不齐。现在我们要做的事情是把第n-1列也填满,将状态转移到第n列上去。由于第n-1列的状态不一样(有8种不同的状态),因此我们需要分情况进行讨论。
转载
5968阅读
2评论
3点赞
发布博客于 4 年前

计算机图形学(四)几何变换_4_二维复合变换(上)

利用矩阵表达式,可以通过计算单个变换的矩阵乘积,将任意的变换序列组成复合变换矩阵(compsite transformation matrix)。形成变换矩阵的乘积经常称为矩阵的合并(concatenation)或复合(compsistion)。由于一个坐标位置用齐次列矩阵表示,我们必须用表达任一变换次序的矩阵前乘该列矩阵。由于场景中许多位置用相同的顺序变换,先将所有变换矩阵相乘形成一个复合矩阵将是高效率的方法。因此,如果我们要对点位置P经行两次变换,变换后的位置将用下式计算。只有相对于坐标原点缩放的缩放
原创
3231阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_3_矩阵逆变换

旋转角的负值生成顺时针方向的旋转,因而当任何旋转矩阵和其逆旋转矩阵相乘时生成单位矩阵。由于旋转角符号的变化仅影响sin函数,因此该逆矩阵可以通过交换行和列来获得。即我们可以做任何旋转矩阵R的转置矩阵来得到它的逆矩阵(R-1= RT)。 将缩放系数用其倒数取代就得到了缩放变换的逆矩阵。对以坐标系原点为中心,缩放参数为Sx和Sy的二维缩放,其逆变换矩阵为
原创
3542阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_2_矩阵表示_2_二维矩阵

图形软件中的一种替代方法是在旋转子程序中为基准坐标提供另外的参数。然后,包含基准点参数的旋转子程序建立一个不需要引入一系列变换函数的通用旋转矩阵。 缩放操作S(sx,sy)是方程中以sx和sy参数为3*3矩阵。多数情况下,我们可以缩放矩阵表示成S。有些软件包尽可能有些软件包仅提供如方程所示的以坐标系原点为中心的缩放函数。在这种情况下,以另一参考点为中心的缩放变换通过一系列变换操作来处理。然而,有些系统也包括通用的缩放子程序,可以指定点为中心的缩放构造齐次函数。
原创
3070阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)几何变换_2_矩阵表示_1_矩阵表示和齐次坐标

如果将2x2矩阵表达式扩充为3x3矩阵,就可以把二维几何变换的乘法和平移项组合成单一矩阵表示。这时将变换矩阵的第三列用于平移项,而所有的变换公式可表达为矩阵乘法。但为了这样操作,必须解释二维坐标位置到三元向量的矩阵表示。标准的实现技术是将二维坐标位置表示(x,y)扩充到三维表示(xh,yh, h),称为齐次坐标(homogeneous coordinate),这里的齐次参数(homogeneous parameter)h是一个非零值
原创
3633阅读
0评论
1点赞
发布博客于 4 年前

C#中关于String类型的常用方法

Equals(string value)返回一个BOOL型,比较是否相等,和"=="类似Compareto(string value)判断大小,大返回1 小返回-1 相等返回0IndexOf(string value)在当前字符串里找到这个字符,从第一个开始找,找到就返回第一次找到所在的索引,如果找不到返回-1例: 1123 如果找1的话 返回0
原创
2688阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(四)_几何变换_1_基本的二维几何变换(三)_缩放

改变一个对象的大小,可使用缩放(scaling)变换。一个简单的二维缩放操作可通过将缩放系数(scaling factor)Sx 和 Sy与对象坐标位置(x, y)相乘而得: 在缩放公式中包含固定点的坐标,类似于在旋转公式中包含基准点的坐标。我们可以建立一个其元素为方程(5.14)中常数项的列向量,然后将这个列向量加到等式(5.12)中的乘积S*P上。下一节将讨论仅包含矩阵乘法的变换方程的矩阵形式。 多边形的缩放可以通过将变换方程(5.14)应用于每个顶点,然后利用变换后的顶点重
原创
6956阅读
0评论
1点赞
发布博客于 4 年前

计算机图形学(四)_几何变换_1_基本的二维几何变换(二)_旋转

类似于平移,旋转是一种不变形地移动对象的刚体变换,对象上的所有点旋转相同的角度。线段的旋转可以通过将旋转方程5用于每个线段端点,并重新绘制新端点间的线段而得到。多边形的旋转则是将每个顶点旋转指定的旋转角,并使用新的顶点来生成多边形而实现旋转。曲线的旋转通过定位定义的点并重新绘制曲线而完成。例如圆或椭圆,可以通过将中心位置沿指定旋转角对着的弧移动而绕非中心轴旋转。椭圆可通过旋转其长轴和短轴来实现绕其中心位置的旋转。
原创
6201阅读
0评论
4点赞
发布博客于 4 年前

计算机图形学(四)_几何变换_1_基本的二维几何变换(一)

几何变换有时也称为建模变换(modeling transformation ),但有些图形系统将两者区分开来。建模变换一般用于构造场景或给出由多个部分组合而成的复杂对象的层次式描述等。例如,一架飞机由机翼、机尾、机身、发动机和其他部分组成,每一部分又可描述成第二级组合体,如此等等,在层次结构中逐层往下描述。因此,该飞机可用那些部件及附属于每个部件的“建模”变换来描述,这些变换指出那些部件如何适用于整个飞机的设计。另一方面,几何变换能用来描述动画序列中对象在场景中可以怎样移动或简单地从另一角度来观察它们。因此
原创
2093阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_章节总结(下)

glutInitDisplayMode 选择颜色模式,GLUT_RGB或GLUT_INDEXglColor* 指定一个RGB或RGBA颜色glIndex* 用颜色表索引指定一个颜色glutSetColor(index, r, g, b); 将一个颜色装入一个颜色表位置glEnable(GL_BLEND); 激活颜色调和glBlendFunc(sFact, dFact); 指定颜色调和因子glEnableClientState 激活OpenGL颜色数组设施(GL_COLOR_ARRAY); g
原创
790阅读
1评论
0点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_章节总结(上)

由于扫描转换是光栅系统的一个数字化过程,因此显示图元有阶梯效应。这是由于将坐标值取整到像素位置造成的信息低取样所形成的。我们可通过应用调整像素强度的反走样过程来改善光栅图元的外貌。过取样是一种实现反走样的方法。即将每一像素看作为子像素的组合并计算每一子像素的强度及所有子像素的平均值。我们还可按子像素的位置来确定其贡献权值,给中心以最高权值。另一种选择是,进行区域取样并确定一个屏幕像素的区域覆盖百分比,然后设定与该百分比成比例的像素亮度。另一种反走样方法是构造能移动像素位置的硬件配置。
原创
1193阅读
0评论
0点赞
发布博客于 4 年前

固定渲染管线与可编程渲染管线

1.固定渲染管线与可编程渲染管线的区别: 1)、固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。 2)、顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分。
原创
514阅读
0评论
0点赞
发布博客于 4 年前

引擎开发_ 碰撞检测_GJK 算法详细介绍

和SAT(分离轴定理)算法一样,GJK算法也只对凸体有效。 GJK算法的优势是:通过support函数(后面会详细讲述),从而支持任何凸体形状之间的碰撞检测;相比SAT算法,你不需要一些额外的操作,比如增加特殊的代码和算法处理曲面形状。 GJK是一个迭代算法,但是如果事先给出穿透/分离向量,则它的收敛会很快,可以在常量时间内完成。在3D环境中,GJK可以取代SAT算法。GJK算法的最初目的是计算两个凸体之间的距离,在两个物体穿透深度比较小的情况下,可用它判定物体之间的碰撞。它也可以和别的算法相结合,用
转载
9024阅读
0评论
5点赞
发布博客于 4 年前

C++ Null 指针

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。NULL 指针是一个定义在标准库中的值为零的常量。
原创
558阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_17_ OpenGL属性组

属性和其他状态参数按属性组(attribute group)进行组织。每一组包括相关的状态参数集合。例如,点属性组(point-attribute group)包括了大小和点的平滑(反走样)参数,而线属性组(line-attribute group)包括了宽度、模板状态、模板图案、模板重复计数及线段光滑状态等。类似地,多边形属性组(polygon-attribute group)包括了11种多边形参数,如填充模式、前向面标志及多边形平滑状态。因为颜色是所有图元所共有的一个属性,所以它有单独的属性组。而有些参
原创
624阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_16_ 反走样_8_OpenGL反走样函数

使用下列函数可激活OpenGL的反走样子程序:glEnable (primitiveType); 其中参数primitiveType被赋以符号常量GL_POINT_SMOOTH, GL_LINE_SMOOTH或GL POLYGON SMOOTH。假定我们用RGBA模式指定颜色,则同样需要激活OpenGL颜色调和操作。glEnable (GL_BLEND);接下来,通过下列函数使用颜
原创
513阅读
0评论
0点赞
发布博客于 4 年前

#ifndef/#define/#endif使用详解

“头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用”。但是是否能理解“被重复引用”是什么意思?是不能在不同的两个文件中使用include来包含这个头文件吗?如果头文件被重复引用了,会产生什么后果?是不是所有的头文件中都要加入#ifndef/#define/#endif 这些代码?
转载
288阅读
0评论
0点赞
发布博客于 4 年前

C++引用作为函数参数

引用很容易与指针混淆,它们之间有三个主要的不同:1.不存在空引用。引用必须连接到一块合法的内存。2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。3.引用必须在创建时被初始化。指针可以在任何时间被初始化。
原创
3868阅读
0评论
4点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_16_ 反走样_7_区域边界的反走样

区域边界的反走样  直线的反走样概念也可以用于区域的边界,从而消除其锯齿形的外貌。我们可以将这种程序加加入到扫描线算法中,在生成区域时来平滑区域轮廓。假如系统具有允许像素重定位的功能,那么就可以将边界像素位置调整到更靠近区域边界来实现对区域边界的平滑处理。其他方法则是根据边界内像素区域的百分比来调整每个边界位置上的像素亮度。在图4.53中,位置(x,y)上的像素有大约一半的区域在多边形边界内。因此,
原创
1022阅读
0评论
0点赞
发布博客于 4 年前

计算机图形学(三)_图元的属性_16_ 反走样_6_直线亮度差的校正

为了减轻阶梯状效应,对直线进行反走样也为如图4.52所示的另一种光栅效果提供了校正。使用相同数目像素所绘制的两条线,对角线还是比水平线长√2倍。例如,当水平线的长度为10 cm时,对角线的长度超过14cm。这导致的视觉效果是对角线显得比水平线要暗,因为对角线以更低的单位长度亮度进行显示。画线算法通过按照每条线的斜率来调整其亮度,就可以对这种效果进行校正。水平和垂直线将以最低的亮度显示,而45度线则以最高亮度显示。一旦将反走样将技术应用于显示,就可以自动校正亮度。当考虑直线段的有限宽度时,可以把整体线段显示亮
原创
685阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_16_ 反走样_5_过滤技术和像素移相

对直线进行反走样的更精确的方法是采用过滤技术(filtering technique )。这种方法类似于应用加权的像素掩模,只是假设一个连续的加权表面(或过滤函数)覆盖像素。图4.50给出了矩形、圆锥和高斯过滤函数的例子。应用过滤函数的方法类似于应用加权掩模,但过滤函数是集成像素曲面来得到加权的平均亮度。为了减少计算量,经常使用查表法来得到整数值。
原创
669阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_16_ 反走样_4_直线短的区域取样

具有屏幕网格坐标(10, 20)的像素中约90%已由直线区域所覆盖,那么该像素的亮度就设置为最大亮度的90%;类似地,在(10, 21)的像素亮度设置为最大亮度的15%。估计像素覆盖区域的方法请参见图的过取样例子。在直线边界内,子像素的总数近似等于覆盖区域,并且这种估计结果的精度,可以通过采用更细的子像素网格而得到提高。对于彩色显示,则计算被不同颜色区域所覆盖的像素区域,并且将各覆盖区域的平均颜色作为最后的像素颜色。
原创
655阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_16_ 反走样_3_子像素的加权掩模

过取样算法经常在实现时将更大的权值赋给接近于像素区域中心的子像素,因为我们希望这些子像素在确定像素的整体亮度中可以实现更重要的作用。图4.49给出了3x3像素部分所采用的加权方案。其中,中心子像素的加权是角子像素的4倍,是其他像素的2倍。然后对9个子像素的每个网格所讨一算出的亮度进行平均。因此,中心子像素的加权系数为1/4,顶部和底部及两侧子像素的加权系数为1/8,而角子像素的加权系数为1/16。指定子像素的相对重要性的数值数组有时称为加权掩模(weighting mask)。也可以为较大的子像素网格建立类
原创
706阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_16_ 反走样_2_直线段的过取样

通过对有限宽线段进子示过取样,鉴别内部子像素比起简单地确定沿线路径的子像素需要更多的计算。我们同样要考虑相对于线路径的线边界的定位。这种定位取决于直线的斜率。对于45度的直线,线路径在多边形区域的中央;但对于水平线或垂直线,都要求线路径是多边形的边界之一。例如,经过网格坐标(10,20)的水平线将由水平网格线 y = 20和 y = 21表示为多边形边界。类似地,表示通过(10. 20)垂直线的多边形,具有沿网格线x = 10和x = 11的垂直边界。对于具有斜率|m| < 1的直线段,可以适当地将数学线路
原创
1264阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_16_ 反走样_1_产生的原因

由于取样过程将物体上的坐标点数字化为离散的整数像素位置,因此光栅算法生成的图元显示具有锯齿形或阶梯状外观。这种由于低频取样(不充分取样)而造成的信息失真称为走样(aliasing )。可以使用校正不充分取样过程的反走样(antialiasing)方法来改善所显示的光栅线的外观。解决方法:过取样(supersampling ),区域取样(area sampling,像素移相(pixelphasing )
原创
688阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_15_ 字符属性

我们也可以通过缩放字符的整体尺寸(高度和宽度)或者仅缩放字符高度或宽度来调整文本大小。字符大小(高度)则由打印机和排字机以磅(point)为单位进行指定,其中1磅是0.035146厘米(或0.013837英寸、大约1/72英寸)。例如,本书的文本是10磅字体。磅值计量指定了字符体的大小(参见图4.35),但具有相同磅数的不同字体,按其字体设计的不同而具有不同的字符大小。在指定大小的一种字体中,所有字符的底线(bottomline)和顶线(topline)间的距离是相同的,但字符体的宽度可能不同。在成比例间距
原创
1051阅读
0评论
1点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_3_球体阴影(三) 点光源对球体的投影

如图所示,淡黄色的是阴影的淡入淡出,淡紫色的是点光源的阴影。在接受阴影的Shader 中计算了平行光和点光源两种阴影
原创
1257阅读
0评论
0点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_2_球体阴影(二) 阴影的淡入/淡出

在上一节的例子中,我们仅仅判断了是否能看到光源,其实不仅仅能判断是否可以看到光源,当我们看不到光源时,还可以计算出此时点距离光亮地带的远近程度,等价于到阴影中心的远近程度,这样就可计算一个带浓淡变化的阴影里,而这是在一般的阴影实现算法中比较难以做到的。
原创
655阅读
0评论
0点赞
发布博客于 5 年前

Unity中MonoDevelop字体颜色的修改

用MonoDevelop开发Unity时,可以适当调一下颜色保护下视力。[Tools]->[Options]->[Text Editor]->[Syntax Highlighting] ,可以选择默认的几种,也可以自己设置,自己设置的话需要,先New一个新的之后再进行编辑,例如我新建的取名为style:comments 注释,line comments 行注释,block comments 块注释,doc comments doc注释comments tags 注释标签,想要改一般注释的话,可以改l
原创
5310阅读
0评论
1点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_2_球体阴影(一) 平行光对球体的投影

然后,当我们需要计算一个点是否在球体的投影区域时,我们需要知道这个点到灯光的方向,到球体中心的方向以及距离,然后根据这两个方向的夹角,通过相似三角形的计算,考察透过这个方向在球体的此半径内能不能看到光源,如果可以,此点就不处于阴影之中,否则此点将被标记在阴影中。这个完整操作是在SphereShadow_l.shader中完成的,其完整代码如下:
原创
1161阅读
0评论
0点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_1_平面阴影(三) 点光源对平面的投影

这个方法还有一个显而易见的问题,那就是物体本身是立体的,不是一个平面,因此这个计算前后的点的距离是包括物体本身厚度的,这个厚度就会表现在阴影上。要解决这个问题,我们可以先把物体变换到灯光空间,使用_World2Light矩阵沿着灯光方向把物体压扁,然后投射物体,这样计算出来的阴影衰减就不会包括物体的厚度了。
原创
1148阅读
0评论
0点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_1_平面阴影(二) 点光源对平面的投影

点光源也是类似的,对于通过使用WorldSpaceLightDir()方法来计算光源方向
原创
1119阅读
0评论
0点赞
发布博客于 5 年前

untiy 3d ShaderLab_第9章_1_平面阴影(一)

在此Shader中,我们首先使用固定管线对物体做了一个简单的照明。在计算阴影的ForwardBase中,首先使用一个可以叠加阴影的混合模式,然后使用z偏移保证出来的阴影在接受平面之上。_World2Ground和_Ground2World分别是我们自定义的两个进出阴影接受平面矩阵。在具体计算中,首先将光源方向和投影物体的顶点都转换到接受平面的空间,在它们都处于同一个空间后,通过简单的三角形近似算法,来计算投影物体顶点沿光线投射后在接受平面上的新位置。因为这是一个Build In的Unity Plane,所以
原创
995阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_14_ OpenGL填充区属性函数(下)

填充多边形的另一种方法是使用纹理。这将生成仿真木材、砖、纹钢(brushed ateel )或某些其他材料外貌的图案。也可以如线图元中的那样得到多边形内部的插值颜色。为此,我们对多边形的顶点赋以不同颜色。插值填充用来为各种光照条件下的着色表面生成真实感显示。作为插值填充的例子,下面的程序段将蓝色、红色和绿色分别赋给一个三角形的三个顶点。多边形填充就是在三个顶点间的颜色插值。
原创
1876阅读
0评论
0点赞
发布博客于 5 年前

掩模

光栅线算法通过绘制像素段来显示线型属性。对于各种划线、点线和点划线样式,画线程序沿线路径输出一些连续像素段。在每两个实心段之间有一个给定长度的空白间隔段,段长度和中间空白段的像素数目可用像素掩模(pixel mask)指定。像素掩模是包含数字0和1的字符串,用来指出沿线路径需要绘制哪些位置。例如,掩模11111000可用来显示划线长度为5个像素和间隔空白段为3个像素的虚线。与1对应的像素位置赋以当前颜色,而与0对应的像素位置显示背景色。
原创
2629阅读
1评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_14_ OpenGL填充区属性函数(上)

多边形填充图案一直显示到包括多边形的边。因此,填充区中没有边界线,除非特别指定要显示边界线。除了为多边形内部指定一个填充图案,还有其他多个的选项。一个选项是显示一个空心多边形,其中仅生成边而没有内部颜色或图案。空心多边形与显示一个封闭多边形图元等价。另一选项是只显示多边形顶点而没有内部填充且没有边。同样,我们也可以为多边形填充区的前向面和后向面指定不同的属性。
原创
1110阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_13_ 不规则边界区域的填充方法

区域填充的另一种方法是从区域的一个内部点开始,由内向外逐点绘制直到边界。这对如绘画程序生成的有不规则边界的填充区域是很有用的技术。一般来说,这些方法要求输人待填充区域中的一个起始位置,以及关于边界或内部的颜色信息。 我们可以使用单一颜色或一个颜色图案来填充不规则区域。对于图案填充来说,如9节讨论的那样重叠一个颜色掩模。在处理区域中的每一个像素时,其颜色由对应的重叠掩模中的值来确定。
原创
5952阅读
0评论
0点赞
发布博客于 5 年前

UV Mapping(UV贴图)

当映射一个2D纹理到一个3D模型上,要设定循环模式(平铺方式)。这就是三维建模程序中,被称为UV贴图。在Unity,可以使用Materials缩放移动纹理。缩放法线和地形细节贴图尤其有用。"UV"这里是指u,v纹理贴图坐标的简称(它和空间模型的X, Y, Z轴是类似的)。 它定义了图片上每个点的位置的信息。这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置。 UV就是将图像上每一个点精确对应到模型物体的表面. 在点与点之间的间隙位置由软件进行图像光滑插值处理。这就是所谓的UV贴图。
原创
16282阅读
1评论
2点赞
发布博客于 5 年前

伽玛校正

所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。计算机绘图领域惯以此屏幕输出电压与对应亮度的转换关系曲线,称为伽玛曲线(Gamma Curve)。
转载
1206阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_12_ 曲线边界区域的扫描线填充

由于曲线边界的区域用非线性方程描述,其扫描线填充比多边形扫描线填充需要更多的时间。我们可以使用10节中的通用方法,但边界交点计算用曲线方程完成。并且其边界的斜率不断地改变,因而不能直接使用直线段边可以使用的增量方法。 对于像圆和椭圆这样的简单曲线,可以像凸多边形一样直接应用扫描线填充。每一条与圆或椭圆相交的扫描线仅有两个边界交点。我们可以使用中点方法中的增量计算来确定沿圆或椭圆边界的这两个交点。然后,简单地在一个交点到另一个之间的水平像素段内进行填充。利用四分象限区间(对于圆为八分象限)的对
原创
1533阅读
0评论
0点赞
发布博客于 5 年前

计算机图形学(三)_图元的属性_11_ 凸多边形的扫描线填充

在将扫描线填充过程应用于凸多边形时,每一屏幕扫描线上的内部段将不会多于一个。因此,只要在发现与边界有两个交点时才处理该扫描线穿过多边形的内部段。
原创
2080阅读
0评论
0点赞
发布博客于 5 年前