随笔-341  评论-2670  文章-0  trackbacks-0
 
     摘要: 关于这个问题实在没有一个特别好的方法,基本方法还是来源于对intel手册的观察。因为指令表是从手册上面复制出来的,但是上面又没有标明66H前缀,怎么办呢?人肉找规律。这里贴出了区分的代码(进对于之前挑选出来的绝大多数x86与x87指令)以及生成后的一个很有规则的文件以供参考。  阅读全文
posted @ 2009-02-16 21:53 陈梓瀚(vczh) 阅读(2357) | 评论 (1)编辑 收藏
     摘要: 完整的转换方法需要intel提供免费翻印下载的那本手册。手册过于精简,因此这里给出的例子用于辅助对手册进行理解。假设读者阅读过intel提供的手册,或其他相关资料。  阅读全文
posted @ 2009-02-15 23:45 陈梓瀚(vczh) 阅读(3631) | 评论 (5)编辑 收藏
     摘要: 为了节省工作量,我打开intel的手册,然后将那些框框里面的字符串复制到一个文本文件里面,最后写一个C++程序用正则表达式处理。流程如下(含代码和文件):  阅读全文
posted @ 2009-02-14 20:21 陈梓瀚(vczh) 阅读(3114) | 评论 (2)编辑 收藏
    JIT是just in time,一门包含了JIT的脚本引擎就是将脚本编译成机器码,让CPU而不是自己写的虚拟机运行。这样做有助于提供高速的运行环境、以及与C++更加方便的融合。这次计划所需要的任务如下:

    汇编器。汇编器指的是可以做如下转变的一个工具:机器码 <--> 汇编程序的数据结构 <--> 汇编程序文本表示。有了三个可以互相转换的结构之后,编译器可以在更高层的层面上开发,调试也变得更加容易。

    中间指令。由于x86的指令集过于复杂,并且以后可能会发生重大变更,因此有必要开发一个容易使用的、功能简洁但是强大的另一个指令集,提供中间指令到汇编的单向转换操作。这主要是用来解决x86指令互相之间操作不够统一、寄存器分配和更好的x86指令选择等问题,并且可以让以后的编译器更加容易开发。

    内存管理器。由于汇编是不处理内存申请释放等操作的,因此需要将内存管理器,连同垃圾收集器,一起封装成函数供汇编代码调用。这个内存管理器届时将使用C#和Java均验证过的多代收集方法。如果语言不直接操作指针的话,还能提供压缩操作。

    基本语言。基本语言拥有绝大多数的没有重复的必要的基础设施,并提供基本语言到中间指令的单向转换操作。

    脚本语言。当然基本语言如果足够强大的话也能变成一门脚本。这里指的脚本是类似DSL那样有特殊目的语言。编译器所需要的词法分析器可以大部分交给我开发的VL++2.0的Syngram负责,并且编译成基本语言。以后制作DSL将会变得非常简单。

    汇编器是体力活,因此我想了一个办法。Intel手册上的指令集的二进制码表还是写得相当有规律的,因此可以复制下来集中到一起(已完成),然后使用正则表达式进行第一步处理,将码表、语法和说明三部分分开成更加合理的格式,然后再用一个正则表达式进行处理,最后生成记载着翻译方法的C++代码。等这一部分完成之后,可能会给出相关的代码,并且解释x86在32位下的详细的指令格式。64位等购买新电脑并安装win7之后才开始,目前没有条件。
posted @ 2009-02-13 21:18 陈梓瀚(vczh) 阅读(2776) | 评论 (5)编辑 收藏
    使用这篇文章使用的相同的算法渲染的一张带有透明物体的图。图中的正方形板的下方有淡淡的黄色,球背后的阴影边缘是软的。由于没有优化的缘故,这幅图在2×1.5GHz的笔记本上渲染了一个半小时。

posted @ 2009-01-31 09:47 陈梓瀚(vczh) 阅读(3031) | 评论 (1)编辑 收藏
     摘要: 所谓的GI可以简单的理解为渲染一个像素的时候,就在那个像素的法向量位置渲染一个半球,统计并作为光源输入。现在使用一个比较粗糙的平行光在天空盒上的投影函数:f(t)=cos(t)*4/(1-cos(a)),其中a是光斑夹角的一半。GI花了好长时间,图如下:

  阅读全文
posted @ 2009-01-30 06:54 陈梓瀚(vczh) 阅读(2541) | 评论 (0)编辑 收藏
     摘要: 之前搞错了一个fresnel公式,实际上全透明物体的fresnel公式应当如下:

f=入射角
t=出射角,有sint=sinf/n
新的factor=(sin2(f-t)/sin2(f+t)+tan2(f-t)/tan2(f+t))/2,这样的话出现全反射的时候,factor=1。  阅读全文
posted @ 2009-01-28 00:27 陈梓瀚(vczh) 阅读(2183) | 评论 (0)编辑 收藏
     摘要: 由于之前的建模方法乱七八糟,现在使用一般的Fresnel方法为材质建模。这是一个处理折射和反射光比率的函数。计算方法如下:factor=bias+scale(1+I×N)^power,将factor剪裁之[0,1]范围内之后,折射光/反射光比率为factor/(1-factor)。bias、scale与power是材质参数,需直接指定。  阅读全文
posted @ 2009-01-24 09:55 陈梓瀚(vczh) 阅读(1765) | 评论 (0)编辑 收藏
     摘要: 明天得开始研究别人是怎么处理材质的了。目前使用的方法是(反射来源×反射基准)×折射比率+(光源×材质颜色)×(1-折射比率)+[(折射来源+底面反射)×衰减+(1-衰减)]×透明物体内部颜色减。等材质完全做完之后,目前的渲染算法就可以为GI服务了。最后是计算混合的代码:  阅读全文
posted @ 2009-01-22 06:02 陈梓瀚(vczh) 阅读(2198) | 评论 (2)编辑 收藏
     摘要: 由于一时找不到题目写,所以这两天就搞了一个简单的基于光线追踪的软件渲染器。准备花点时间做下去了。从昨天开始到现在实现的东西有反射、阴影、多光源、线性变换等。
  阅读全文
posted @ 2009-01-19 00:48 陈梓瀚(vczh) 阅读(4053) | 评论 (5)编辑 收藏
仅列出标题
共35页: First 19 20 21 22 23 24 25 26 27 Last