关闭

[置顶] Lua实现angle角

Lua自己实现angle角...
阅读(1325) 评论(0)

[置顶] Lua实现计算 UTF8 字符串的长度,每一个中文算一个字符

Lua实现计算 UTF8 字符串的长度,每一个中文算一个字符...
阅读(3398) 评论(1)

[置顶] 升级Unity5-----Unity5灯光烘焙与Unity4 灯光烘焙实际应用中的差别

Skybox:会直接影响你的环境光 Ambient Source:环境源,这里选 的skybox Ambient Intensity: 环境光的强度值,也就是环境光的亮度值 Reflection Source:反射源,这是Unity4.X里没有的。烘焙后会在场景文件的同名文件夹中多出一个名为 LightmapSnapshot的文件。 Realtime Resolution:实时分辨率,这个物体所产生的GI对其它物体的影响程度,值越大影响越大。...
阅读(3386) 评论(0)

[置顶] 计算机图形学(三)_图元的属性_3_OpenGL颜色函数(下)

该数组的前三个元素指定一个RGB颜色值,接下来的三个元素指定一个顶点坐标(x, y, z),这样交错下去直到最后。将offset设定为相邻颜色或顶点值之间的字节数,即两者均为6 * sizeof(GLint)。颜色值从交错数组的第一个元素即hueAndPt[0]开始,顶点值从第四个元素即hueAndPt[3]开始。 因为一个场景通常包括若干个对象,每个对象有多个平表面,OpenGL提供一个可以一次性指定所有顶点和颜色数组及其他类型信息的函数。如果我们要将上例中的颜色和顶点值改为浮点数,则需按...
阅读(2217) 评论(0)

[置顶] 计算机图形学(三)_图元的属性_3_OpenGL颜色函数(上)

变量表中的第一个参数指示正在使用单个帧缓存,第二个参数设定RGB模式,即默认模式。我们可以用GLUT_RGB或GLUT_RGBA之一来选择颜色模型。如果要用指向颜色表的索引来指定颜色,则用OpenGL常量GLUT_INDEX取代GLUT_RGB。 OpenGL的RGB和RGBA颜色模型...
阅读(3016) 评论(0)

[置顶] 计算机图形学(三)_图元的属性_2_颜色和灰度

最左边一位控制红枪,中间位控制绿枪,而最右边的一位控制蓝枪。在帧缓存中增加一些位可增加可选择的颜色数量。每像素有6位时,每支枪可用2位来控制。这可使三支颜色枪的每支得到4个不同强度的控制,而使每个屏幕像素有64种颜色可选用。随着提供的颜色数量的增加,帧缓存的容量要求也增加。1024 x 1024分辨率的全彩色(每像素24位)RGB系统需要3 MB的帧缓存容量。...
阅读(2152) 评论(0)

[置顶] 计算机图形学(三)_图元的属性_1_OpenGL状态变量

属性值和其他参数设置由定义当前OpenGL状态的独立函数指定。OpenGL中的状态变量有颜色和其他图元属性、当前矩阵模式、模型观察矩阵的元素、缓存当前位置和场景光照效果参数等。所有OpenGL参数都有默认值,它们在被指定新值前保持不变并发挥作用。任何时候我们都可以查询系统的状态参数的当前值。本章后面几节中只讨论输出图元的属性设定,后面几章将会涉及其他参数。...
阅读(2074) 评论(0)

[置顶] Lua自己实现string.split功能

Lua自己实现string.split功能 split函数是编程语言中使用的函数,是指返回一个下标从零开始的一维数组,它包含指定数目的子字符串...
阅读(4132) 评论(0)

[置顶] 计算机图形学(二)输出图元_20_章节总结_程序展示_饼图

饼图用来给出整体中各部分的分布比例。使用中点圆算法子程序来构造一个饼图。例子中的值用于确定扇形的数量和大小,该程序的输出请参见图3.69。...
阅读(1860) 评论(0)

[置顶] Unity渲染路径 Rendering Paths_2_Forward Rendering 正向渲染

正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。 根据影响物体的光源的不同,正向渲染路径用单个或多个通道来渲染物体。在正向渲染中,光源本身也会根据他们的设置和强度受到不同的对待。...
阅读(2638) 评论(0)

[置顶] Unity渲染路径 Rendering Paths介绍

Unity支持不同的渲染路径。应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影。 项目所使用的渲染路径在Player Settings选择。此外,可以为每个摄像机重写(不同摄像机可以是不同的设置)。如果图形卡不能处理选定的渲染路径,Unity将自动使用一个较低保真度的设置。因此,在GPU上不能处理延迟照明(Deferred Lighting),将使用正向渲染(Forward Rendering )。如果不支持正向渲染(Forwa...
阅读(1532) 评论(0)

[置顶] 计算机图形学(二)输出图元_18_显示列表_3_删除 OpenGL 显示表

删除 OpenGL 显示表参数startID给出最前面的显示表标识,而参数nLists给出要删除的显示表总数...
阅读(3129) 评论(0)

[置顶] untiy 3d ShaderLab_第8章_3_ 单光贴图和Forward 渲染路径

在单光照贴图的情况下,Camera的RenderingPath为VertexLit时,有一个不理想的地方就是被烘焙过的静态物体,默认的材质不会受到实时光照的影响。当然,可以通过提供自定义的材质改变这一行为,但是很麻烦。在RenderingPath为Forward时,这种麻烦就不会存在了,经过烘焙物体,Unity的默认材质会继续受到实时Pixel光源的影响。首先我们可以注意到,相比于VertexLit模式下,烘焙过的物体,默认材质不再受到实时光源的影响,我们在Forward模式下的黄色实时Pixel光源仍对烘...
阅读(3571) 评论(0)

[置顶] 计算机图形学(二)输出图元_18_显示列表_2_执行OpenGL显示表

要执行的显示表数量赋给参数nLists,而参数listIDArray是显示表标识的数组。一般而言,listIDArray可包含任意多的元素,而无效的标识会被忽略。同样,listIDArray中的元素可指定为多种数据格式,而参数arrayDataType用来指出数据类型,例如GL_BYTE,GL_INT,GL_FLOAT, GL_3_BYTES或GL_4_ BYTES。显示表标识通过将listIDArray中一个元素的值与offsetValue的整数值相加而得。offsetValue的默认值为0。 这...
阅读(3195) 评论(0)

[置顶] 计算机图形学(二)输出图元_18_显示列表_1_创建和命名OpenGL显示表

把对象描述成一个命名的语句序列(或任何其他的命令集)并存储起来既方便又高效。在OpenGL中使用称为显示表(display list)的结构可以做到这一点。一旦建立了显示表,就可以用不同的显示操作来多次引用该表。在网格中,描述图形的显示表存放在服务器中,以避免每次显示场景时都要传送表中的命令。我们可以为以后的执行来建立并存储显示表,或指定表中的命令立即执行。显示表对层次式建模特别有用,因为一个复杂的对象可以用一组简单的对象来描述。...
阅读(3089) 评论(0)

[置顶] 计算机图形学(二)输出图元_17_图形分割

有的图形软件包中提供了子程序,描述由多个命名部分组合而成的图形并管理每一部分。使用这些函数可以创建、编辑、删除或移动图形的一个组成部分。我们也可使用图形软件的这个功能来进行层次式建模(以后会说到),其中一个对象可以用包括一定层次的子对象的树结构方式来描述。 图形子部分的名称有多种说法。有些图形软件包称它们为结构(structure ),另一些则称为段( segment)或对象(object)。同样,在不同的图形软件包中允许的对子部分的操作也不相同。例如,建模软件包提供很多描述和管理图形元素的操...
阅读(2823) 评论(0)

[置顶] 计算机图形学(二)输出图元_16_字符函数

这里参数font用GLUT符号常量赋值,用来指定一特定字型集,参数character赋以ASCII编码或其他要显示的字符。这样,要显示大写的"A",可以使用ASCII编码65或指定为‘A’。同样,编码66与‘B’等效,编码97与小写字符‘a’等效,编码98与‘b’等效,依次类推。固定宽度或比例间隔字体都可以使用。可用GLUT_BITMAP_8_Y_13或GLUT_BITMAP_9_BY_15来选择一种固定宽度字体并确定其参数。也可GLUT_BITMAP_TIMES_ROMAN_10或GLUT_BITMAP_...
阅读(3349) 评论(2)

[置顶] 计算机图形学(二)输出图元_14_OpenGL像素阵列函数_1_位图函数

OpenGL中有两个函数可用于定义矩形阵列的形状或图案。一个是位图,另一个是像素图。OpenGL也提供若干的函数用于存储、复制及管理像素值阵列。函数中的参数width和height分别给出阵列bitShape的列数和行数。bitShape的每一元素赋值为0或1。值为1表示对应像素用前面设定的颜色显示;否则,对应像素不受该位图影响。(作为一个选项,可使用1表示将指定颜色与存储在刷新缓存中对应位置的颜色值相结合。)参数x0和y0定义了矩形阵列“原点”的位置。原点位置指定为bitShape的左下角,而x0和y0可...
阅读(4704) 评论(0)

[置顶] 计算机图形学(二)输出图元_12_OpenGL顶点数组

为了简化这些问题,OpenGL提供了一种机制来减少处理坐标信息的函数调用数量。使用顶点数组(vertex array ),可以利用很少的函数调用来安排场景的描述信息。步骤如下: 1.引用函数glEnableClientState (GL_VERTEX_ARRAY)激活OpenGL的顶点数组特性。 2.使用函数glVertexPointer指定顶点坐标的位置和数据格式。 3.使用子程序如glDrawElements显示场景,该子程序可处理多个图元而仅需少量的函数调用。...
阅读(4545) 评论(0)

[置顶] 计算机图形学(二)输出图元_11_OpenGL多边形填充区函数(下)

多数图形软件包使用逼近平面片来显示曲面。这是因为平面方程是线性的,而处理线性方程比二次或其他类曲线方程快得多。因此OpenGL和其他图形软件包提供多边形图元来实施曲面的逼近。对象用多边形网络来建模,而几何和属性信息的数据库按处理多边形面片的目标来建立。在OpenGL中,可用于此目的的图元有三角形带(triangle strip )、三角形扇形(triangle fan)和四边形 带(quad strip )。高性能图形系统使用快速多边形硬件绘制,使得显示速度达到每秒形成百万以上的多边形(通常为三角形),包括...
阅读(4584) 评论(0)

[置顶] 计算机图形学(二)输出图元_11_OpenGL多边形填充区函数(上)

描述填充多边形的OpenGL过程与描述点和折线类似,但有一个例外。函数glVertex用来输入多边形的一个顶点坐标,而完整的多边形用从glBegin到glEnd之间的一组顶点来描述。但有另外一个函数可以用来显示具有完全不同格式的矩形。 默认时多边形内部显示为单色,由当前颜色设定确定其颜色。作为选项(下面的内容中叙述),可以用图案填充多边形且显示多边形的边作为内部填充的边界。函数glBegin中指定多边形填充区的变量可使用6个不同的符号常量。这6个基本常量可用来显示单一填充多边形、一组不相连的...
阅读(5368) 评论(0)

[置顶] 计算机图形学(二)输出图元_10_多边形填充区_4_多边形表

场景中的对象一般用一组多边形面片来描述。实际上,图形软件包经常提供以多边形网格形式描述表面形状的函数。对每一个对象的描述包括指定多边形面片的几何信息和其他表面参数(如颜色、透明性及光反射特性)。在输入每个多边形的信息时,数据放进一些表格中等待后续处理、显示和场景的对象管理。这些多边形数据表分成两组来组织:几何数据表和属性数据表。几何数据表包含顶点坐标和标识多边形面片空间方向的参数。对象的属性信息包含指定对象的透明程度及其表面的反射性能和纹理特征。...
阅读(4265) 评论(0)

[置顶] 计算机图形学(二)输出图元_10_多边形填充区_3_内-外测试

各种图形处理经常需要鉴别对象的内部区域。识别简单对象如凸多边形、圆或椭圆的内部通常是一件很容易的事情。但有时我们必须处理较复杂的对象。例如,我们可能描述一个图3.46所示的有相交边的复杂填充区。在该形状中,xy平面上哪一部分为对象边界的“内部”、哪一部分为“外部”并不总是一目了然的。奇偶规则和非零环绕规则是识别平面图形内部区域的两种常用方法。...
阅读(3916) 评论(2)

[置顶] 计算机图形学(二)输出图元_10_多边形填充区_2_分割凹多边形

接着按多边形边界顺序计算连续的边向量的叉积。如果有些叉积的z分量为正而另一些为负,则多边形为凹多边形;否则,多边形为凸多边形。这意味着不存在三个连续的顶点共线,即不存在连续两个边向量其叉积为0。如果所有顶点共线,则得到一个退化多边形(一条线段)。我们可以通过逆时针方向处理边向量来应用向量方法。如果有一个叉积的z分量为负值(如图3.43所示),那么多边形为凹且可沿叉积中第一边向量的直线进行切割。下面的例子给出了分割凹多边形的这一方法。...
阅读(4174) 评论(0)

[置顶] untiy 3d ShaderLab_第8章_2_在效果和性能间进行权衡

Resolution 分辨率: 每世界单位中光照图分辨率的大小。因此当设置分辨率为50的一个10单位乘以10单位的平面将产生一张500*500像素的光照贴图。 Scale In Lightmap 光照图比率: (只作用于可渲染网格)特别大的数值将分配给可渲染网格更大的分辨率。最终分辨率比例(光照图缩放)*(物体世界坐标空间所占面积)*全局分辨率烘培设置)如果设置为0物体将不被烘培。(但是它依旧对其他的物体有影响) Quality 质量: 高质量(比较好的效果)和低质量(计算速度快)的预设值。它们将影响最终聚...
阅读(3415) 评论(1)

[置顶] 计算机图形学(二)输出图元_7_并行曲线算法

在曲线生成中使用的并行方法类似于显示线段中使用的方法。我们既可采用顺序算法按曲线分段分配处理器,也可以提出其他方法将处理器分配给屏幕的不同区域。 显示圆的并行中点方法是,将45°到90°的圆弧分成等长子圆弧,并给每段子圆弧配置一个处理器。然后类似于并行Bresenham画线算法,需要对每个处理器建立初始y值并确定参数pk的值。接着计算整个子圆弧的像素位置,并通过对称性得到其他八分圆中的位置。同样,并行椭圆中点算法将第一象限内的椭圆弧分割成等长弧,并将这些弧分配给各个处理器,在其他象限中的像素位置可由...
阅读(3337) 评论(0)

[置顶] 计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线

许多曲线函数在对象建模、动画轨迹的描述、数据和函数的图形化以及其他图形应用中是十分有用的。常见的曲线包括圆锥曲线、三角和指数函数、概率分布、通用多项式和样条函数。这些曲线的显示可采用类似于前面讨论的圆和椭圆函数来生成。沿曲线轨迹的位置可直接从表达式y =f (x)或参数方程中得到。此外,还可以使用增量中点算法绘制用隐式函数f(x,y) = 0描述的曲线。 显示一指定的曲线函数的简单方法是使用直线段来逼近曲线。这时,对于要得到沿曲线轨迹的等距线段的端点位置,则可以使用参数表达式。也可以按曲线的斜率选择...
阅读(3356) 评论(0)

[置顶] untiy 3d ShaderLab_第7章_ Forward渲染路径_2_Forward渲染路径下的重要光源

这种情形的存在原因,是Unity为FowardAdd Pass准备的光源数据在再次轮回到为FowardBase准备数据时Unity未及时清除的结果。Unity出于性能方面的考虑,因为毕竟在CPU和GPU之间频繁传递数据是很耗资源的一件事情。 7.2.5 Forward渲染路径下的Pixel光源小结 至此我们可以总结,在LightMode = ForwardBase,LightMode=FowardAdd的Pass内,_WorldSapceLightPos0只会含有Pixel光源。在ForwardB...
阅读(4099) 评论(0)

[置顶] untiy 3d ShaderLab_第6章_VertexLit渲染路径_3_顶点照明和Unity存放光源的第二种方式

同样,如果你乐意,可以打开Lab 2chaos场景,就像刚刚检测unity 4LightPos[X,Y,Z]0时一样,你会看到默认材质中最后一个Forward Pass执行过后的未清除的光源数据,如图6.6所示。由此可见,_WorldSpaceLightPos0和_LightColor0中不包含为Vertex Pass准备的数据。...
阅读(4405) 评论(0)

[置顶] untiy 3d ShaderLab_第6章_VertexLit渲染路径_2_顶点照明和Unity存放光源的第一种方式

我们在unity 4LightPos[X,Y,Z]0中看到了数据,而且如果是在Forward的渲染路径下,如果我们改变光源的状态,比如从Pixel光源变为Vertex光源,即从点光源变为平行光,unity_4LightPos[X,Y,Z]0都会有相应的改变。但是不要误会,这并不是Unity为Vertex的Pass中的unity_4LightPos[X,Y,Z]0提供的数据,而是最后一个ForwardPass渲染过后遗留的未及时清除的无效数据。 所以结论就是,在LightMode = Vertex...
阅读(4100) 评论(0)

[置顶] untiy 3d ShaderLab_第6章_VertexLit渲染路径_1_顶点照明

顾名思义,逐顶点计算的Vertex Light就是基于物体的每一个顶点进行光的照明计算,然后根据顶点的光照信息对面片土的像素光照进行线性插值,这个线性插值操作是通过GPU的硬件来完成的,速度不是一般的快,因此这部分的消耗可以不用考虑。所以Vertex Lighting的效果和效率与物体的网格密度有密切关系,网格细分大,计算结果就比较贴近实物,但是GPU计算消耗就也相应地增加。...
阅读(2848) 评论(0)

[置顶] Lua_第27章 User-Defined Types in C

Userdata Metatables 访问面向对象的数据 到目前为止我们使用的 userdata 称为 full userdata。Lua 还提供了另一种 userdata: light userdata。一个 light userdatum 是一个表示 C 指针的值(也就是一个 void *类型的值)。由于它 是一个值,我们不能创建他们(同样的,我们也不能创建一个数字)。可以使用函数 lua_pushlightuserdata 将一个 light userdatum 入栈:...
阅读(2967) 评论(0)

[置顶] untiy 3d ShaderLab_第5章_第一个被执行的Pass_2_3个渲染路径之外

我们现在可以编译并运行看看了。先把Camera切换到VertexLit模式下,如图所示,在针对Deferred和Forward渲染路径设计的Shader中,因为不能在VertexLit模式下执行,所以Always Pass也没有被执行。而在针对VertexLit渲染路径的Shader中,Always Pass的执行和在代码中的位置有关系,在代码中靠前,则先执行,然后被混合模式为Blend One One的Vertex Pass中输出的红色混合,输出为黄色;在代码中靠后,则后执行,其混合模式为Blend On...
阅读(4374) 评论(0)

[置顶] untiy 3d ShaderLab_第5章_第一个被执行的Pass_1_不同LightMode 被选择的顺序

我们可以总结出,Unity在Deferred渲染路径下,则会寻找可在Deferred渲染模式下的Pass然后返回,并不会执行其他渲染路径下的Pass,但是如果找不到Deferred状态下的Pass,则会再寻找Forward模式下的Pass并执行,然后返回,如果Forward模式下的Pass依然没有找到,则会寻找VertexLit模式下的Pass并执行。在Forward渲染路径下,会优先寻找Forward模式下可渲染的Pass,如果找不到,才会寻找 VertexLit模式下可渲染的Pass。...
阅读(4062) 评论(0)

[置顶] untiy 3d ShaderLab_第4章_基本的光照模型

对于粗糙物体表面的某一点,其亮度应该和入射光线与该点的垂直程度相关,也就是入射光线与此点法线的夹角相关。在上面的高光计算方式中,我们确确实实计算了一次入射光线的反射,然后考察此反射光线进入视野的程度。还有一种更简单、更易于调节的方法是使用入射光线和视线的中间平均值,即半角向量,然后使用此半角向量和法线计算出一个和视角相关的高光,此种高光计算方式即为BlinnPhong。...
阅读(3366) 评论(0)

[置顶] Lua_第26章撰写 C 函数的技巧

26.1 数组操作 26.2 字符串处理 26.3 在 C 函数中保存状态 The Registry References Upvalues Lua 全局变量可以存放任何类型的 Lua 值,并且每一个独立的状态都有他 自己独立的全局变量集。然而,并不是在所有情况下,这种方法都是令人满意地解决方案,因为 Lua 代码可能会修改这些全局变量,危及 C 数据的完整性。为了避免这个问题, Lua 提供了一个独立的被称为 registry 的表,C 代码可以自由使用,但 Lua 代码不能访问他。...
阅读(3590) 评论(0)

[置顶] 计算机图形学(二)输出图元_6_OpenGL曲线函数_4_中点椭圆算法(下)

假设已经在整数屏幕坐标中给定rx,ry和椭圆中心,在中点椭圆算法中我们仅需增量的整数运算来确定决策参数的值。增量r2y 、r2x和2r2yx和2r2xy仅需在程序的开始求值一次。中点椭圆算法可以概括为下列步骤:...
阅读(3411) 评论(0)

[置顶] Lua_第24章 扩展你的程序

作为配置语言是 LUA的一个重要应用。在这个章节里,我们举例说明如何用 LUA 设 置一个程序。让我们用一个简单的例子开始然后展开到更复杂的应用中。 首先,让我们想象一下一个简单的配置情节:你的 C程序(程序名为 PP)有一个 窗口界面并且可以让用户指定窗口的初始大小。显然,类似这样简单的应用,有多种解决方法比使用LUA更简单,比如环境变量或者存有变量值的文件。但,即使是用一个 简单的文本文件,你也不知道如何去解析。所以,最后决定采用一个 LUA 配置文件(这就是 LUA 程序中的纯文本文件)...
阅读(3328) 评论(0)

[置顶] 计算机图形学(二)输出图元_3_画线算法_2_DDA算法

数字微分分析仪(digital differential analyzer, DDA)方法是一种线段扫描转换算法,基于使用等式(3.4)或等式(3.5)计算的&x或&y。在一个坐标轴上以单位间隔对线段取样,从而确定另一个坐标轴上最靠近线路径的对应整数值。首先考虑如图3.6所示的具有正斜率的线段。例如,如果斜率小于等于1,则以单位x间隔(&x = 1)取样,并逐个计算每一个y值:下标k取整数值,从第一个点1开始递增直至最后端点。由于m可以是0与1之间的任意实数,所以计算出的y值必须取整。对于具有大于l的正斜率...
阅读(4475) 评论(0)

[置顶] 计算机图形学(二)输出图元_3_画线算法_1_直线方程

场景中的直线段由其两端点的坐标位置来定义。要在光栅监视器上显示一线段,图形系统必须先将两端点投影到整数屏幕坐标,并确定离两端点间的直线路径最近的像素位置。接下来将颜色值装人帧缓存相应的像素坐标处。视频控制器从帧缓存读出写入的颜色值并绘制屏幕像素。这一过程将一线段数字化为一组离散的整数位置。一般而言,这些位置是实际线路径的近似。例如,计算出的线位置(10.48, 20.51)转换为像素位置(10, 21)。坐标值舍入到整数,引起除水平和垂直以外所有线段的阶梯效应(“锯齿形”),如图3.5所示。光栅线段特有的阶...
阅读(3348) 评论(0)

[置顶] 计算机图形学(一) 视频显示设备_1_CRT原理

图形系统一般使用视频显示器作为其基本的输出设备。大部分视频监视器的操作是基于标准的 阴极射线管 (cathode-ray tube ,CRT) 设计的,但是也已经出现了其他 一些技术,并且固态监视器终究要占据主导地位 。 图2.2 给出了 CRT 的基本工作原理 。由电子枪发射出的电子束(阴极射线)通过聚焦系统和偏 转系统,射向涂覆有荧光层的屏幕上的指定位置 。在电子束轰击的每个位置,荧 光层都会产生 一个 小亮点。由于荧光层发射的光会很快衰减,因此必须采用某种方法来保持屏幕图像 。...
阅读(2140) 评论(1)

[置顶] Unity中Json创建,解析

我用的是LitJson.dll,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 Json创建中writer.WriteObjectStart ();就等同于“{”,writer.WriteObjectEnd ()就等同于“}”,最后要转换成string型,json = writer...
阅读(3034) 评论(3)

[置顶] Unity中数据库建立与读写详情

两个类,DbAccess和TestDB TestDB类测试,创建数据库,创建数据表,插入数据,更新数据,删除数据,查询数据...
阅读(3473) 评论(1)

[置顶] 八大排序算法图文动态 讲解

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。本文将依次介绍上述八大排序算法。动态图形象介绍。...
阅读(1986) 评论(0)

[置顶] OpenGL: 渲染管线理论详解

学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解。首先要知道几个OpenGL的术语: 渲染(rendering):计算机根据模型(model)创建图像的过程。 模型(model):根据几何图元创建的物体(object)。 几何图元:包括点、直线和多边形等,它是通过顶点(vertex)指定的。 最终完成了渲染的图像是由在屏幕上绘制的像素组成的。在内存中,和像素有关的信息(如像素的颜色)组织成位平面的形式,位平面是一块内存区域,保存了屏幕上每个像素的一个位的信息。...
阅读(1366) 评论(0)

[置顶] 数据结构(全)

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。 数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据...
阅读(1372) 评论(0)

[置顶] 基础Shader

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组 合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设 置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,将材质赋予合适的 renderer(渲染器)来进行渲染(输出)了。...
阅读(1013) 评论(1)

[置顶] 二叉树总结创建,遍历

二叉树作为树的一种,是一种重要的数据结构,二叉树中的面试题比较常见的题型大概有下面几个:创建一颗二叉树(先序,中序,后序)、遍历一颗二叉树(先序,中序,后序和层次遍历)、求二叉树中叶子节点的个数、求二叉树的高度、求二叉树中两个节点的最近公共祖先、打印和为某一值的全部路径、求某一节点是否在一个树中等等。...
阅读(1129) 评论(0)

[置顶] Unity3D面试题(全)

第一部分 1.请简述值类型与引用类型的区别 2.C#中所有引用类型的基类是什么 3.请简述ArrayList和List的主要区别 4.请简述GC(垃圾回收)产生的原因,并描述如何避免? 5.请描述Interface与抽象类之间的不同 6.下列代码在运行中会产生几个临时对象? 7.下列代码在运行中会发生什么问题?如何避免? 8.请简述关键字Sealed用在类声明和函数声明时的作用...
阅读(1870) 评论(0)

[置顶] Unity3D游戏开发-模仿项目一 第一人称角色射击(有源代码)

第一人称射击类游戏,FPS(First-person Shooter), 严格来说第一人称射击游戏属于ACT类游戏的一个分支,但和RTS类游戏一样,由于其在世界上的迅速风靡,使之发展成了一个单独的类型。 英文名:FPS (First-person Shooter)第一人称视角射击游戏顾名思义就是以玩家的主观视角来进行射击游戏。玩家们不再像别的游戏一样操纵屏幕中的虚拟人物来进行游戏,而是身临其...
阅读(4929) 评论(9)

OpenGL---实例 球体 画圆锥

用OpenGL 的接口直接创出对应的实心球,圆锥体,圆环...
阅读(859) 评论(0)

虚数的意义

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

游戏开发基础数据结构

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

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

在三维空间中,对象的平移通过平移定义该对象的各个点然后在新位置重建该对象而实现。对于由一组多边形表面表示的对象,可以将各个表面的顶点进行平移如下图,然后重新显示新位置的面。...
阅读(569) 评论(0)

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

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

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

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

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

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

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

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

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

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

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

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

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; ...
阅读(342) 评论(0)

OpenGL函数_ glColor函数颜色

在OpenGl中设置颜色,一般可以使用glColor3f()。从函数名字就可以看出,它的参数应该有三个,类型是float型的。另外一点是它的参数值的范围是[0.0,1.0]一般的,可以将这三个参数值视为颜色的成分。0.0 -- > 不使用颜色成分;1.0 -- > 使用颜色的最大值...
阅读(636) 评论(0)

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

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

OpenGL单缓冲与双缓冲的区别

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

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

glEnable 用于启用各种功能。功能由参数决定。与glDisable相对应。glDisable是用来关闭的。两个函数参数取值是一至的。 参数说明:void glEnable(GLenum cap) GLenum 是unsigned int 类型 cap 是一个取值。由值决定启用的功能键。各种功能请看参数cap的取值表...
阅读(954) 评论(0)

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...
阅读(606) 评论(0)

OpenGL_GLUT(一)_vs2013中配置gult库

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

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的一个很大原因就是因为它的跨...
阅读(657) 评论(0)

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

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

Lua内嵌库概念

作为嵌入式语言,其实完全可以不提供任何库及函数。全部由宿主系统注入到State中即可。也的确有许多系统是这么用的。但Lua的官方版本还是提供了不少必要的库。尤其是一些基础函数如pairs,error,setmetatable,type等等,完成了语言的一些基本特性,几乎很难不使用。 而coroutine,string,table,math等等库,也很常用。Lua提供了一套简洁的方案,允许你自由加载你需要的部分,以控制最终执行文件的体积和内存的占用量。主动加载这些内建库进入lua_State...
阅读(476) 评论(0)
495条 共25页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:633678次
    • 积分:10776
    • 等级:
    • 排名:第1658名
    • 原创:453篇
    • 转载:41篇
    • 译文:1篇
    • 评论:48条
    博客专栏
    最新评论