共5页: 上一页 1 2 3 4 5 下一页 
摘要: 为了完美解析GLSL源码,获取其中的信息(都有哪些in/out/uniform等),我决定做个GLSL编译器的前端。本文介绍基于虎书实现LALR(1)分析,并生成GLSL编译器前端代码(C#)的过程。阅读全文
posted @ 2016-04-16 00:05 BIT祝威 阅读(813) 评论(4) 编辑
摘要: 为了获取CSharpShadingLanguage的token流,我设计了一个瘫痪的文法。 这当然不能进行语法分析,但是足以进行词法分析。 在使用过程中发现CGCompiler有几个bug,在此记录并fix掉。阅读全文
posted @ 2016-02-23 13:12 BIT祝威 阅读(201) 评论(0) 编辑
摘要: 您可以在下图的例子中观察血条类型的模型是如何实现的。此demo顺便加上了后面要介绍的血条型文字(teapot)和UI文字(Hello Label!)。在StringModel的基础上,只需借助IUILayout机制即可实现opengl里的标签控件。阅读全文
posted @ 2016-02-22 11:17 BIT祝威 阅读(775) 评论(2) 编辑
摘要: 在处理光照效果等问题时,模型的顶点的法线是必不可少的数据。但是法线并不直接显示在模型上,也没有别的办法可以直观地看到。如果法线计算错了,那是非常难以排查的。所以我就想用geometry shader来渲染出模型的法线。如下图的白色针状部分,就是这个teapot的法线。为了便于区分,针尖部分是顶点位置,较粗的针头部分则是法线的方向。从这个图中可以看到,我做的这个teapot的法线是很有问题的。怪不得之前拿它试验光照效果时会有一些诡异的现象。阅读全文
posted @ 2016-02-16 01:09 BIT祝威 阅读(795) 评论(0) 编辑
摘要: 漫反射(diffuse reflection)是粗糙表面的反射效果。理论上的粗糙表面,对各个方向的反射效果都完全相同。本篇就分别实现点光源(point light)和平行光源(directional light)照射到粗糙表面时产生的漫反射效果。这个示例是CSharpGL的一部分(https://github.com/bitzhuwei/CSharpGL)阅读全文
posted @ 2016-02-12 15:18 BIT祝威 阅读(729) 评论(10) 编辑
摘要: 上一篇制作了CSSL。CSSL和Renderer配合,就定义了一个渲染OpenGL元素的完整流程。本篇用T4模板来帮助开发者自动生成这个简单的代码框架。本篇使用T4模板生成多个代码文件,其方法是通用的。阅读全文
posted @ 2016-02-01 22:06 BIT祝威 阅读(245) 评论(2) 编辑
摘要: 本项目的目的:使开发者可以直接用C#书写GLSL代码。 现在编写GLSL的shader程序时,并没有什么好的开发环境。智能提示、代码补全、自动排版都没有。 GLSL是类似C语言的。几乎所有的GLSL里出现的语法形式都可以用C#以相同的方式写出来。那么用C#来写"GLSL代码",之后再自动转换为纯粹的GLSL代码,岂非一大快事?! 在本项目定义的类型基础上,你就可以直接用C#来写GLSL代码了。 C#版的GLSL,以后就称为CSSL(C# Shader Language)。阅读全文
posted @ 2016-01-30 18:12 BIT祝威 阅读(976) 评论(7) 编辑
摘要: 本文很简单,只说明如何用shader实现叠加两个纹理的效果。另外,最近CSharpGL对渲染框架做了修改,清理一些别扭的内容(DoRender()前后的事件都去掉了,明确了Renderer的概念)。本文顺带也成了对新框架的一个应用过程的例子。阅读全文
posted @ 2016-01-24 13:03 BIT祝威 阅读(657) 评论(0) 编辑
摘要: 本篇介绍了一个OBJ文件解析器、渲染器和IModel接口的设计思想。这个OBJ解析器是CSharpGL的一部分,CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL)阅读全文
posted @ 2016-01-18 14:40 BIT祝威 阅读(811) 评论(4) 编辑
摘要: 阅读全文
posted @ 2015-12-27 17:10 BIT祝威 阅读(904) 评论(0) 编辑
摘要: 在legacy OpenGL中,渲染图形是用glVertex()之类的方式实现的。 在modern OpenGL中,则是用VAO和VBO来存储图形信息以备渲染的。 VBO(Vertex Buffer Object)是用来存储顶点属性的对象。VBO就像一个定长的数组(SomeType[] vbo = new SomeType[100];),只不过是存贮于GPU内存里。我们在编码时可以通过一个代表它的指针来操作它。 VAO(Vertex Array Object)是用来管理VBO的渲染流程的。简单地说,就是让VAO看一次各个VBO是如何完成一次渲染工作的,VAO就记住了这个过程。以后就可以仅借助VAO来完成渲染过程。这就减少了DrawCall。 如果你没有使用过modern OpenGL,没有使用过VBO,那么现在看下文是无意义的。你可阅读全文
posted @ 2015-12-16 04:02 BIT祝威 阅读(683) 评论(1) 编辑
摘要: 阅读全文
posted @ 2015-10-11 16:14 BIT祝威 阅读(1630) 评论(4) 编辑
摘要: 所有的GC算法都是跟踪回收和引用计数的结合,两者相互独立,对其中一方进行改善的技术之中必然存在对另一方的改善技术,而其结果只是两种的结合阅读全文
posted @ 2015-09-29 01:00 BIT祝威 阅读(272) 评论(4) 编辑
摘要: 学习使用IUILayout接口及其机制,以实现在OpenGL中绘制UI元素。 以SimpleUIAxis为例演示如何使用IUILayout。元素的UI布局是一个很实用的功能。所以我尽早地为其写了此篇说明。有什么问题请留言。阅读全文
posted @ 2015-09-24 17:40 BIT祝威 阅读(1438) 评论(0) 编辑
摘要: 我重新设计实现了一个*.3ds文件的解析器,它能解析的Chunk类型更多,且容易扩展。以后需要解析更多类型的Chunk时比较简单。这个3DS解析器是CSharpGL的一部分,CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL) 本文所用的3ds文件您可以在此(http://www.cgrealm.org/d/downpage.php?n=2&id=15764::1326768548)下载,由于文件比较大我就不上传了。阅读全文
posted @ 2015-09-12 01:13 BIT祝威 阅读(1764) 评论(9) 编辑
摘要: 主要内容 描述在OpenGL中Camera的概念和用处。 设计一个Camera以及操控Camera的SatelliteRotator。 以PyramidElement为例演示如何使用Camera和SatelliteRotator。阅读全文
posted @ 2015-09-10 22:18 BIT祝威 阅读(481) 评论(0) 编辑
摘要: 第一阶段:资本家用手里的钱买来设备、原材料,雇来一批工人,或者说,完成G—W这个流通行为。第二阶段:工人在资本家指挥下进行生产,将设备、原材料的价值和劳动力创造的价值转化到商品中。第三阶段:资本家出售商品,重新得到钱。(此时资本家手里的钱增多了)或者说,经历W—G这个流通行为。货币在上述的过程中不断地运行,这个过程就称为货币的资本循环。阅读全文
posted @ 2015-09-10 01:37 BIT祝威 阅读(908) 评论(0) 编辑
摘要: 我制作了一个CSharpGL.vsix插件,安装后可以使用模板项目来体会CSharpGL的用法。CSharpGL.vsix提供了一个示例项目,便于OpenGL初学者入门。原本我想把CSharpGL.vsix上传到visualstudiogallery,结果试了多少次都失败了。 您可以在(http://files.cnblogs.com/files/bitzhuwei/CSharpGL.vsix.rar)下载之。阅读全文
posted @ 2015-09-08 02:17 BIT祝威 阅读(1061) 评论(4) 编辑
摘要: 阅读全文
posted @ 2015-09-04 14:44 BIT祝威 阅读(398) 评论(0) 编辑
摘要: 在资本主义社会里,一个阶级享有自由时间,是由于群众的全部生活时间都转化为劳动时间了。 资本按其本质来说,它是对无酬劳动的支配权。一切剩余价值,不论它后来从利润、利息、地租等等哪种特殊形式上得以表现,实质上都是无酬劳动时间的体现。因而,资本自行增殖的秘密归结为一句话,就是:资本对别人的一定数量的无酬劳动的占有和支配权。阅读全文
posted @ 2015-09-04 14:42 BIT祝威 阅读(537) 评论(0) 编辑
摘要: 我正在读李睿编译武汉出版社出版的马克思著作《资本论》。我在大学期间参加了工商管理双学位课程,其中关于经济学部分的学习让我觉得太胡扯。最近有时间研读《资本论》,就目前的感受来说,《资本论》的观点是以科学的态度研究得来的。 所以我打算阅读全文
posted @ 2015-09-04 14:41 BIT祝威 阅读(482) 评论(0) 编辑
摘要: 关键就是一句话,矩阵的本质就是线性方程式,两者是一一对应关系。如果从线性方程式的角度,理解矩阵乘法就毫无难度。阅读全文
posted @ 2015-09-02 15:14 BIT祝威 阅读(1670) 评论(0) 编辑
摘要: 描述在OpenGL中绘制场景的思路。 设计场景元素的抽象基类SceneELementBase。 以PyramidElement为例演示SceneELementBase的用法。本篇是写起来最有难度的一篇。本篇所实现的类型、接口,都是在上一篇的基础上设计的。上一篇里讲的渲染过程,隐含着本篇的设计方案的前提条件。 本篇里的类型、接口都有各自的一套辅助类型构成一套实现某种功能的机制。但愿这不太复杂难用。我已经用Demo详细演示了各个功能是如何实现的。阅读全文
posted @ 2015-09-01 15:39 BIT祝威 阅读(829) 评论(0) 编辑
摘要: 本篇分别用legacy OpenGL和modern OpenGL实现了一个渲染四面体的例子。例子虽简单,但是包含了OpenGL渲染的整个编码过程。今后我们的工作都是基于这个基本流程进行的,只不过在各个方面进行强化,增加新的功能。用legacy OpenGL的步骤相对modern OpenGL而言是十分简单的。而想用modern OpenGL渲染时,我们编写了Shader、ShaderProgram、mat4、vec3、UnmanagedArray阅读全文
posted @ 2015-08-31 17:59 BIT祝威 阅读(3379) 评论(4) 编辑
摘要: CSharpGL是我受到SharpGL的启发,在整理了SharpGL,GLM,SharpFont等开源库的基础上,做的一个新的C#版OpenGL库,希望它能做到易学易用,简化OpenGL开发,减少低级错误,帮助初学者更快地由入门到精通。 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入(https://github.com/bitzhuwei/CSharpGL)阅读全文
posted @ 2015-08-29 21:11 BIT祝威 阅读(9060) 评论(49) 编辑
摘要: 本文介绍了矩阵与perspective/ortho两种投影方式的参数相互转换的代码。阅读全文
posted @ 2015-08-27 00:38 BIT祝威 阅读(1519) 评论(0) 编辑
摘要: 本篇我们介绍用PointSprite绘制文字,这可以只用1个点绘制文字,并确保文字始终面相窗口。用PointSprite绘制的文字,其大小范围有限,本篇提供的Demo中,Max Row Width最大只有256。现在能够绘制少量的文字,为其指定的位置的过程与为一个点指定位置的过程是相同的,所以此方式的应用范围还是比较广的。阅读全文
posted @ 2015-08-26 18:00 BIT祝威 阅读(984) 评论(0) 编辑
摘要: 有了贴图,绘制文字和绘制普通纹理的过程是一样的。我们需要用glTexImage2D设定纹理,然后用GLSL+VBO设置一个长方形,把纹理的某个字形所占据的位置贴到长方形上,就可以绘制一个字符。连续设置多个长方形,就可以显示字符串了。 当然,用legacy opengl里的glVertex和glTexCoord来设置长方形和贴图也可以,不过本文推荐用modern opengl的GLSL+VBO的方式来实现。阅读全文
posted @ 2015-08-15 16:31 BIT祝威 阅读(903) 评论(0) 编辑
摘要: 最近需要用OpenGL绘制文字,这是个很费时费力的事。一般的思路就是解析TTF文件从而得到字形的贴图,然后通过OpenGL绘制贴图的方式显示文字。 本篇记录了解析TTF文件并把所有字形安排到一张大贴图上的过程。阅读全文
posted @ 2015-08-07 17:30 BIT祝威 阅读(2279) 评论(3) 编辑
摘要: 在C#里,有时候我需要能够申请一个很大的数组、使用之、然后立即释放其占用的内存。 由于在C#里提供的int[] array = new int[1000000];这样的数组,其内存释放很难由程序员完全控制,在申请一个大数组后,程序可能会变得很慢。 所有我设计了这样一个非托管的数组类型: 无unsafe, 可接收任何struct类型作为泛型参数, 可随时释放内存,UnmanagedArray使用方式十分简单,就像一个普通的数组一样阅读全文
posted @ 2015-07-25 14:58 BIT祝威 阅读(1253) 评论(4) 编辑
摘要: 最近所做的多文件数据库是受(C#实现文件数据库)的启发。后来又发现了(LiteDB),看到了单文件数据库和分页、索引、查询语句等的实现方式,大受启发。不过我仍旧认为LiteDB使用起来有些不顺畅,它的代码组织也不敢完全苟同。所以,我重新设计了一个小型的单文件数据库SharpFileDB: 无需配置服务器。 无需SQL。 100%纯C#开发的一个不到50KB的DLL。 支持事务ACID。 写入失败后可恢复(日志模式)。 可存储任意继承了Table且具有[Serializable]特性的类型(相当于关系数据库的Table)。类型数目不限。 可存储System.Drawing.Image等大型对象。 单文件存储,只要你的硬盘空间够大,理论上能支持的最大长度为long.MaxValue = 92233阅读全文
posted @ 2015-07-11 20:06 BIT祝威 阅读(1352) 评论(8) 编辑
摘要: 在项目中,我们常常有统计代码行数的需要,但是如果不利用第三方工具的话,面对一个项目(甚至一个工程或解决方案中若干个项目)中成百上千的代码文件,实在有一种力不从心的感觉。 我们期望能够用最简单的方法完成这些重要却细微的需求。下面我给大家介绍一种无需借助第三方工具,无需复杂操作,无需人工统计计算的方法解决这个问题。阅读全文
posted @ 2015-07-08 14:18 BIT祝威 阅读(3745) 评论(0) 编辑
摘要: 我需要找一个能够在同一文件中序列化多个对象,并且能随机进行反序列化的工具。随机反序列化的意思是,假设我在文件里依次序列化存储了a、b、c三种不同类型的对象,那么我可以通过Stream.Seek(,);或者Stream.Position来仅仅反序列化b。当然,这可能需要一些其它的数据结构辅助我找到Stream.Seek(,);或者Stream.Position所需的参数。 我找到了BinaryFormatter、SoapFormatter、XmlSerializer和BinaryReader这几个类型,都是.NET Framework内置的。但是它们并非都能胜任但文件数据库的序列化工具。阅读全文
posted @ 2015-06-25 14:43 BIT祝威 阅读(1106) 评论(8) 编辑
摘要: 我们在Visual Studio上开发OpenGL ES项目时,避免不了写Shader。这时在vs里直接编辑shader就会显得很方便。但是vs默认是不支持GLSL的语法着色的,我们只好自己动手创造。最简单的实现自定义语法着色的方法就是创建一个VSIX插件包,我们只需要安装Visual Studio SDK,使用内置的模版就可以构建一个插件项目。阅读全文
posted @ 2015-06-24 09:31 BIT祝威 阅读(1491) 评论(6) 编辑
摘要: 我决定做一个以支持小型应用(万人级别)为目标的数据库。既然是小型的数据库,那么最好不要依赖其它驱动、工具包,免得拖泥带水难以实施。完全用C#编写成DLL,易学易用。支持CRUD(增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete))。不使用SQL,客观原因我不擅长SQL,主观原因我不喜欢SQL,情景原因没有必要。直接用文本文件或二进制文件存储数据。简单来说,就是纯C#、小型、无SQL。此类库就命名为SharpFileDB。阅读全文
posted @ 2015-06-22 02:04 BIT祝威 阅读(2931) 评论(11) 编辑
摘要: I've decided to write a micro database library that spports 10 thousand level applications. It's better not to rely on other drives or tools in case of high difficulty in deployment. After all, it's a small database for a small application. It's a DLL from totally C# codes. It's easy for reading and using. It supports CRUD of course. It doesn't use any SQL. I'm阅读全文
posted @ 2015-06-22 02:03 BIT祝威 阅读(303) 评论(0) 编辑
摘要: 最近参考了园友的自动生成目录的方法,我增加了能够自动生成三级目录的JS代码。把上述JS代码复制到“页脚Html代码”里。在写博客的时候,给每个章节的标题设置“标题1”或“标题2”或“标题3”格式。然后一切就绪,欣赏效果吧。这里有个例子(http://www.cnblogs.com/bitzhuwei/p/from_relay_to_tiny_CPU.html)。阅读全文
posted @ 2015-06-21 01:43 BIT祝威 阅读(929) 评论(4) 编辑
摘要: 最近偶然发现了《Java谜题》,很有意思,于是转到C#上研究一下。本篇是关于表达式的一些内容:奇数性(负数的取模运算)找零时刻(小数精度)长整除(溢出)初级问题(1与l)十六进制的趣事(隐式负数)多重转型(不要做这么含混不清的事)互换内容(不要使用'高端'技巧)Dos Equis(请给(?:)以相同的类型)半斤(谨慎使用复合赋值操作符)八两(C#里无需关心此问题)阅读全文
posted @ 2015-06-20 04:07 BIT祝威 阅读(845) 评论(0) 编辑
摘要: 最近做了一个用Unity3D动态演示堆排序过程的程序。堆排序(Heap sort) 堆排序总是建立这样一个二叉树:其父结点总大于其子结点。 首先建堆。 每轮将根结点与最后一个结点互换,然后对剩余部分建堆。您可以在此下载安卓APK。阅读全文
posted @ 2015-06-17 12:27 BIT祝威 阅读(1908) 评论(0) 编辑
摘要: 在上一篇里我给出了重制的坦克舰队效果图和试玩程序。本篇介绍一下玩家坦克和敌方坦克碰撞问题。原版里,玩家与其它坦克碰撞时,玩家与对方都不能移动;而敌方坦克之间相互碰撞时,是无视碰撞直接穿透的。坦克舰队里的坦克移动方式是以格为单位的,每次移动都会移动完整的1个单位。阅读全文
posted @ 2015-06-13 15:49 BIT祝威 阅读(1097) 评论(9) 编辑
共5页: 上一页 1 2 3 4 5 下一页 

Large Visitor Globe

Flag Counter
Flag Counter