- 博客(72)
- 资源 (1)
- 收藏
- 关注
翻译 .NET 编码规范(一)
1、命名约定与规范注意:在本文档中使用了帕斯卡命名法(PascalCasing)与驼峰命名法(Camel Casing)。帕斯卡命名法 – 所有单词的首字母大写,其余的字母小写。实例:BackColor驼峰命名法 – 除第一个单词之外,所有单词的首字母大写,其余的字母小写。实例:backColor 1、 使用帕斯卡命名法为类命名 public cla
2015-09-23 22:17:06
1329
原创 图形绘制系统的体系结构总结
最初制作图形系统的目的是什么? 最初,制作专用图形系统的目的主要是为了把通用计算机从不间断刷新显示器的任务中解放出来。在主计算机与显示器之间增加的显示处理器模块,具有传统的体系结构,但增加了在显示器显示图元的指令。这样生成图像的指令可以在主计算机中集中存储,然后发送到显示处理器。这些指令可以作为显示列表存储到显示处理器自己的存储器中。然后,显示处理器会以足够的速率来重复的执行显示列表中的指令,从而
2015-08-03 22:25:05
2631
原创 成像系统总结
成像过程中的两个基本实体是? 在任何成像过程中都必须有两个基本的实体:对象和观察者。对象的独立性? 对象在空间中的存在是不依赖于任何图像生成过程和任何观察者的。对象的特殊性? 计算机图形学考虑的是合成的对象,我们通过指定各种图元(点、线、多边形)的空间位置来构造对象。光和图像的关系是怎样的? 如果没有光源,对象看起来是黑色的,图像里不会有任何可见的东西。如何构造一个成像模型? 为了构造一个
2015-07-30 22:17:48
1117
原创 图形系统总结
什么是光栅? 目前,所有的现代图形系统都是基于光栅的。在这样的图形系统中,我们在输出设备上看到的图像是一个由图形系统产生的图形元素组成的阵列,图形元素叫做像素(pixel),像素阵列被称为光栅(raster)。什么是帧缓存? 像素都保存在一个称为帧缓存(frame buffer)的存储区域中。帧缓存是图形系统的核心元素。帧缓存中像素的数目叫做分辨率(resolution),它决定了从图像中可以分
2015-07-29 23:08:24
1218
原创 Unity Surface Shader 示例分析
对于Unity中的表面着色器(Surface Shader),它的代码整体结构如下所示: Shader "name" { Properties { // 第一部分 } SubShader { // 第二部分 }
2015-01-31 20:39:38
3280
原创 OpenGL中的多重采样
OpenGL中的多重采样 抗锯齿处理的最大优点之一就是它能够使多边形的边缘更为平滑,使渲染效果显得更为逼真和自然。点和直线的抗锯齿处理是得到广泛支持的,但遗憾的是,对多边形的平滑处理并没有在所有平台上都得到实现。并且,即使在可以使用GL_POLYGON_SMOOTH的时候,对整个场景进行抗锯齿处理也没有想象中的那么方便。这是因为,抗锯齿处理是基于混合操作的,这就需要从前到后对所
2015-01-24 22:57:57
11713
原创 OpenGL中的颜色混合功能(二)——抗锯齿的处理
在OpenGL中,混合功能的另一个用途是抗锯齿的处理。在绝大多数情况下,一个渲染片段映射到计算机屏幕上的一个像素。因为这些像素都是正方形的,所以通常我们可以清晰的看到两种不同颜色的分界,它们就是我们通常所说的锯齿。锯齿的出现会让人觉得图像是不自然的,极为影响观感。这种锯齿现象是计算机所产生的图像的弱点,这对于我们的许多要求尽可能逼真的渲染任务,都带来了消极的影响。 为了消除图
2015-01-18 13:14:07
4530
原创 OpenGL中的颜色混合功能(一)
OpenGL中的颜色混合功能(一) 我们知道,材料属性和光照参数可以极大地增加图形的逼真度,但除此之外,我们在对现实世界进行建模时,有许多效果是通过混合颜色的方式实现的。透明的物体,像是玻璃水杯,在它后面发射过来的光会与透明物体的颜色混合在一起。这种透明在OpenGL中的实现方式,是通过首先绘制背景物体,然后把前景物体(比如水杯)与颜色缓冲区中已经存在的颜色进行混合而
2015-01-11 20:28:32
4948
原创 OpenGL中创建聚光灯的效果
OpenGL中创建聚光灯的效果 现在,我们使用如下的数组来指定一个光源的位置: // 指定光源位置的数组 GLfloat lightPos[] = {0.0f, 0.0f, 75.0f, 1.0f}; // 设置光源0的位置 glLightfv(GL_LIGHT0,GL_POSITION,ligh
2014-12-29 21:43:15
9324
1
原创 OpenGL中设置光照的镜面反射效果
OpenGL中设置光照的镜面反射效果 在上一篇笔记中,我们记述了光线的方向与多边形表面的角度计算关系,除此之外,我们还有光源的位置需要指定。我们在ChangeSize函数的内部指定光源的位置: // 指定光源的位置 GLfloat lightPos[] = {-50.0f, 50.0f, 100.0f, 1.0f}; glLightf
2014-12-14 16:45:29
8493
原创 OpenGL中启用光照前的准备——指定法线
OpenGL中启用光照前的准备——指定法线 我们在使用光源时,除了强度和颜色之外,还需要指定光源的位置和方向,并且这些光源的位置和方向将会极大地影响场景的外观。 OpenGL至少支持8种独立的光源。当我们指定一个光源时,便要告诉OpenGL这个光源的位置以及它的照射方向。光源经常向四周照射,但也可以向一个方向照射。无论在哪种情况下,对于我们所绘制的任何物
2014-12-07 08:21:33
7301
原创 在OpenGL中给场景添加光照
在OpenGL中给场景添加光照 为了在OpenGL中使用光照计算,我们需要调用glEnable方法,并用GL_LIGHTING作为参数。这个调用告诉OpenGL在确定场景中每个顶点的颜色时使用光照参数和材料属性。当然,如果我们没有指定任何光照参数和材料属性,那么物体仍将会保持为黑暗的无光照状态。 // 启用光照 glEnable(GL_LIG
2014-11-25 22:15:20
14079
原创 OpenGL中的光照与材料
OpenGL中的光照与材料 在OpenGL光照模型中,除非一个物体自己会发光,否则它将受到3种不同类型的光的照射,这3种不同类型的光分别是:环境光(ambient)、散射光(diffuse)和镜面光(specular)。作为现实世界中光照的抽象,这3种类型的光允许我们模拟和控制光照在物体表面上所产生的效果。 环境光(ambient) 环境光并
2014-11-23 10:29:24
3139
原创 写在项目即将收官时的反思
写在项目即将收官时的反思 原来反思,也不是一件容易的事。反思的过程,需要用心去回忆,去思考,需要以一个旁观者的身份,来审视自己的所作所为。不仅如此,更要从思想上挣脱自身的牢笼,认识到自己的缺陷,所谓不破不立。 双11的购物狂潮刚刚过去。由于这段时间实在是太忙了,以至于商家的活动,网页上的宣传,这些似乎与自己都没有多大关系。每天从早到晚,都在代码的陪伴下度过,累并充实着。最近,
2014-11-19 21:42:46
1823
原创 Unity客户端通信测试问题处理(二)
Unity客户端通信测试问题处理(二)在客户端的通信测试过程中,场景加载的问题给自己带来了不小的麻烦。因为消息的解析方法在单独的监听线程中调用,这也就意味着无法在消息的解析方法中调用Unity自身的API了。本来是打算在接收到场景切换的消息后,直接在解析方法中调用协同程序StartCoroutine,来实现场景的异步加载,可是现在一旦调用就会提示以下错误:
2014-11-13 20:54:00
4502
原创 Unity客户端通信测试问题处理(一)
Unity客户端通信测试问题处理(一) 最近在测试程序的通信模块时,遇到了一个问题:Unity的API函数只能在主线程中调用,而作为客户端程序,我单独启用了一个监听线程来接收服务端发送的消息,消息接收后的解析函数也由该线程一并调用。那么问题来了,在解析函数之中,我将不能调用Unity的任何API函数。 之前因为没有意识到这个问题,许多处理都是直接放在
2014-11-09 13:51:15
2638
原创 一个摄像机控制类的总结
一个摄像机控制类的总结实现功能: 通过鼠标的操纵,控制摄像机环绕模型对象旋转,从而进行对模型对象的观察。 设计思路: 首先根据摄像机的当前方位,计算它应该到达的目标方位; 然后通过插值运算,将摄像机逐帧移动到该目标方位。 过程描述:1、 计算摄像机的目标方位。 先计算摄像机本地坐标系轴向与
2014-07-31 21:43:46
2179
原创 最近一个项目中关于NGUI部分的总结
最近一个项目中关于NGUI部分的总结 在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作。在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累。 1、NGUI图集的使用。空调项目是第一个自己正儿八经的制作完整图集的项目,感受颇深。在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量。
2014-07-30 22:22:41
4017
原创 C#中值类型和引用类型的区别浅记
C#中值类型和引用类型的区别浅记 在C#中,变量的类型分为两种,分别是值类型和引用类型。 值类型的变量直接存储值,说得更具体一些,就是值类型变量在内存中直接存储它们自身的值,如代码所示, int x = 2; 值类型变量x,在内存中的某处直接存储了它自身的值:2。 引用类型的
2014-07-09 23:20:29
1493
原创 C# 中堆与栈的浅记
C# 中堆与栈的浅记 什么是堆和栈? 简言之,堆和栈是驻留在内存中的区域,它们的作用是帮助我们执行代码。在.Net Framework 环境下,当我们的代码执行时,内存中的堆和栈便存储了这些代码,并包含了代码执行所需要的全部信息。 这样说来还是有些抽象,那么,在堆和栈中究竟都保存了些什么呢?概括说来就是四类数据:
2014-06-30 22:36:28
1319
原创 Unity SurfaceShader 编程起步
UnitySurfaceShader 编程起步 在14年年初的时候,曾经给自己定下了今年要实现的三个目标,其中之一就是学会编写自己的Shader,并能够投入到实际的项目应用之中。现在,转眼间日历已经翻到了6月份,而自己关于Shader的学习,还停留在三天打鱼两天晒网的零碎学习状态,自己心里很是着急。平时的工作任务多,挤掉了自己的学习时间是一方面。但更重要的,还是因为
2014-06-16 22:22:06
1551
原创 一次难忘的项目经历
一次难忘的项目经历 ——记自己的一些反思与总结 从上一篇总结到现在,已经快两个月的时间了。在这一月有余的时间里,自己参与制作的项目又完成了一个。每一次项目的开始与结束,都会让自己的内心极度的不
2014-06-08 18:08:56
4106
原创 OpenGL中的投影使用
OpenGL中的投影使用 在OpenGL中,投影矩阵指定了可视区域的大小和形状。对于正投影与透视投影这两种不同的投影类型,它们分别有各自的用途。 正投影 它适用于2D图形,如文本、建筑绘图等。在它的应用场合,我们希望在屏幕上展示准确的物体大小和度量。 透视投影 它使用透视除法,对距离观察者较远的物体
2014-05-18 17:29:38
7151
原创 OpenGL中的空间变换
OpenGL中的空间变换 在使用OpenGL的三维虚拟程序中,当我们指定了模型的顶点之后,在屏幕上显示它们之前,一共会发生3种类型的变换:视图变换、模型变换、投影变换。 视图变换:指定观察者(摄像机)的位置; 模型变换:在场景中移动物体; 投影变换:改变可视区域的大小; 视口变换:这是一种伪
2014-05-13 22:43:20
3024
原创 OpenGL中的缓冲区
OpenGL中的缓冲区颜色缓冲区 OpenGL在绘制图元时,先是在一个缓冲区中完成渲染,然后再把渲染结果交换到屏幕上。我们把这两个缓冲区称为前颜色缓冲区(屏幕)和后颜色缓冲区。在默认情况下,OpenGL命令是在后颜色缓冲区进行渲染的。当然,也可以直接在前颜色缓冲区中进行渲染。 若要在前颜色缓冲区中进行渲染,第一种方法是直接告诉OpenGL希望在前
2014-05-07 22:06:27
12428
原创 在3D空间中绘制四边形
在3D空间中绘制四边形四边形 GL_QUADS OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形。 注意,在使用四边形时,必需记住一个重要规则:一个四边形的四个角必须位于同一个平面中(不存在弯曲的四边形)。如图所示 四边形带 GL_QUAD_STRIP 该图元指定一个连
2014-05-06 22:49:23
4648
原创 近期做项目的一些反思与总结
近期做项目的一些反思与总结 项目进行到现在,已经接近尾声了。在整个项目的制作过程中,自己既有进步的地方,也有暴露出严重问题的地方。让自己感到格外高兴地,是在这个项目阶段,自己真正体会到了面向对象程序设计(OOP)所带来的好处:清晰的类间关系、模块化的划分,抽象化的基类、面对变化所派生出的子类,它们组成了程序整体上的结构,使用起来真的是十分的舒服。但是,与此同时自己也遇到
2014-04-14 22:49:26
2651
原创 在3D空间中绘制三角形
在3D空间中绘制三角形 在OpenGL中,要绘制一个实心的表面,仅仅靠点和线是不够的,还需要使用多边形。多边形是一种闭合的形状,可以用当前选择的颜色进行填充(也可以选择不填充),它是OpenGL中所有实心物体的组成基础。 最简单的多边形是三角形,它只有三条边。图元GL_TRIANGLES通过连接三个顶点,绘制三角形。三角形 GL_
2014-04-13 21:16:01
4346
原创 在3D空间中绘制直线
在3D空间中绘制直线图元 GL_LINES : 指定两个顶点,在它们之间绘制一条直线。如果为GL_LINES指定了奇数个顶点,那么最后一个顶点会被忽略。 图元 GL_LINE_STRIP : 线带,它允许指定一个顶点列表,并绘制一条经过所有这些顶点的连续的线。 图元 GL_LINE_LOOP: 线环,它与线带非常类似,
2014-04-11 22:25:24
4126
原创 使用OpenGL和GLUT,结合双缓冲区生成动画
使用OpenGL和GLUT,结合双缓冲区生成动画 双缓冲区的特性,允许在一个屏幕之外的缓冲区中执行绘图代码,然后使用一条交换命令把完成绘制的图形立即显示在屏幕上。 双缓冲模式的用途: 1、 使用双缓冲,可以合成一幅图像,并在完成之后再显示。用户绝不会看到一幅不完整的图像,因为图像只有在完全完成之后才会在屏幕上显示。 2、
2014-04-08 23:54:39
5623
原创 使用OpenGL绘制一个矩形,并在窗口大小改变时保持它的形状
使用OpenGL绘制一个矩形,并在窗口大小改变时保持它的形状 每当窗口的大小改变时,视口和裁剪区域必须重新定义,以适应新的窗口大小。只有这样,才能够使窗口中显示的图像保持原来的形状,而不发生扭曲。 1、 定义视口(窗口内部的渲染区域) void glViewport(GLint x, GLint y, GLsizei widt
2014-04-08 06:41:54
18789
原创 第一个OpenGL程序
第一个OpenGL程序自己针对OpenGL的学习,主要是以《OpenGL超级宝典》为主线进行的。这样做虽然会受限于作者的创作思路,针对性不够强,但是也有系统、循序渐进的好处。毕竟,编程就像练功,要步步为营,持之以恒,不可急于求成。在这里留下些痕迹,也算是对自己的督促。OpenGL是一种功能强大、精巧复杂的3D图形API。它是图形硬件的软件接口。我们使用GLUT函数库编写第一个OpenGL程
2014-04-06 23:03:48
2130
原创 3D编程的相关基础知识(二)
3D编程的相关基础知识(二)管线:它用于描述一种过程,该过程可能涉及两个或更多个独特的阶段或步骤。OpenGL的渲染管线简化图OpenGL命令缓冲区:当应用程序进行OpenGL API函数调用时,这些命令被放置在一个命令缓冲区中。最终,这个缓冲区中会填满API 调用命令、顶点数据、纹理数据之类的东西。当缓冲区被刷新时,命令和数据就会被传递给管线的下一个阶
2014-04-04 06:31:35
1578
原创 3D编程的相关基础知识(一)
3D编程的相关基础知识(一)1、 渲染:对一个三维物体进行几何描述,并且把它转换为屏幕上的一幅图像,这个过程就叫渲染。2、 纹理贴图:通过一副图像向一个多边形提供额外细节的技巧称为纹理贴图。我们所提供的图像称为纹理,纹理中每个单独的元素称为纹理单元(或纹理像素,texel)。3、 过滤(filtering):在一个物体的表面上拉伸或压缩纹理单元(纹理像素)的过
2014-04-03 22:16:55
3491
原创 基于平均法线实现顶点网格变形控制的总结
基于平均法线实现顶点网格变形控制的总结 顶点网格的变形功能,这在Unity官方商店的技术展示Demo中有一个案例。自己就是在这个案例的基础上进行的学习。案例中的功能全部都是用JS实现的,自己依样画葫芦,改成了C#,并对其中一些核心代码的工作原理进行了分析与学习,最终形成了这篇总结。其中的不正之处欢迎大家批评指出。 看到文章的标题,我们可能会想,要完成网格模型的变
2014-03-31 07:09:37
8249
1
原创 基于射线检测的物体坐标调整之思路总结
基于射线检测的物体坐标调整之思路总结PS : 自己想来想去,起了这么个标题,读起来总有些别扭: )起因: 在使用鼠标拖动物体移动时,如果在物体的移动方向(X、Y、Z)上不加任何限制,那么拖动物体的效果是较为不可控的,比方说,设想一个场景,我们需要通过拖动工具来处理物体的表面(擦拭、打磨等),若不加任何移动方向的限制,就有可能会出现工具穿透物体的现象,无法与它操作的表
2014-03-27 23:06:47
2807
原创 Unity中Awake与Start函数的调用情况总结
Unity中Awake与Start函数的调用情况总结 在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率。比较懒,所以就没有上图,欢迎大家的批评指正: )1、 Awake函
2014-03-23 08:00:03
19514
2
原创 Unity中基于高度图的地形系统总结
Unity中基于高度图的地形系统总结一、高度图 什么是高度图?从狭义上来理解,高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值,这些灰度值代表了不同的高度:像素的灰度值越大,表示对应的高度越高;像素的灰度值越小,表示对应的高度越低。从编程的角度来理解,高度图是一个二维数组。因为从高度图映射到一个地形,需要创建一个与高度图大小相同的顶点网格,所谓大小相同指的是
2014-03-16 08:29:36
19340
原创 Git的基本操作
Git的基本操作一、初次运行Git前的配置 一般在新的系统上,我们都需要先配置下自己的Git工作环境。配置工作只需进行一次,以后升级时还会沿用现在的配置。如果需要,你随时可以用相同的命令修改已有的配置。 首先要配置的是你个人的用户名称和电子邮件地址: gitconfig –global user.name “Haohan_Meng”
2014-02-13 21:23:43
2786
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人