反走样技术之一 —— Wu像素

DirectX为什么不提供基本的绘图方法?

电子书格式Adobe Acrobat的PDF为什么看上去效果比华康Dynadoc WDL文件和更糟糕的超星阅读器好?
在Photoshop里打的文本效果为什么比在Windows画笔里的字好得多?
请看老赫的独家分析...

以MS的能力,为DX写一堆标准的Bresenham直线,点,圆函数并不是问题。问题是这会招至真正的计算机图形高手程序员们的痛骂。因为Windows GDI的效果....大家如果用过Mac或者SGI就会发现Windows GDI绘图的效果简直是惨不忍睹。在图象算法研究方面,M$与Adobe,Ulead这类公司的基础相比简直就是小儿科 ,MS的DX开发小组发现既然不能满足挑剔的程序员,所以干脆来个完全撒手不管,缓冲区交给你们,DMA传送交给你们,你们这帮家伙自己捣鼓去吧!要是实在太笨就凑合用我们的GDI函数吧,咱们的DX和GDI相容,(如果你不怕慢和糟糕的质量).
你现在明白了计算机图象处理界的翘楚Adobe公司做的软件图形核心算法部分都是自己做的,连画文本也不用MS的DrawText,OutText一类,所以金山词霸无法直接拦截API来翻译Acrobat里的文本而要为Acrobat做个plugin才能翻译之。

好的,言归正传,要让文本,像素,直线看上去很棒,你要对他们做反走样(Anti- Alias),我们的目标是---没有锯齿(龋齿)...而对视频游戏和DEMO而言,各种复杂而高质量的插值都是不可忍受的(你应该不愿意15个FPS 的游戏变成Photoshop那样的0.05个FPS)

Wu像素技术

在DOS汇编DEMO时代,无数的编程好手用汇编书写一个个的星域程序,那时追求的目 标是程序小而高效,有很多很眩目的DEMO程序小得惊人,仅几十字节到几K字节,实在令现在的程序员们汗颜。但是我仔细观看了一下这些DEMO,大多数有 个缺陷:绘制的物体未进行反走样(AntiAlias),以至于看上去有些糟糕:这是由于当年的硬件限制造成的,你知道,在VGA 13H 256 index color模式下,如果不使用一个渐变的调色板,几乎没有可能做到Anti-Alias,现在随着16,24,32bit 图形卡的普及和RAM的降价,这不再是一个问题了。

下面我介绍一下非常易于编程且效果很令人满意的--------- Wu像素

Wu像素的绘制原理是:

1.绘制多个像素代替一个像素

2.理论点位置不一定在屏幕像素的正中,这个偏差是我们按偏差的比例来绘制多个像素来代替理论像素的根据。

3.绘制的多个像素灰度和要于原像素相等。

伪 C 语言代码如下:

SetWuPixel(float wx,float wy,BYTE wb)
{
    int x, y;
    float fx, fy;
    int btopleft, btopright, bbottomleft, bbottomright;
    x = int(wx); y = int(wy);
    fx = wx - x ;
    fy = wy - y ;
    btopleft = (1-fx) * (1-fy) * wb ;
    btopright = (fx) * (1-fy) * wb ;
    bbottomleft = (1-fx) * (fy) * wb ;
    bbottomright = (fx) * (fy) * wb ;
    putpixel(x,y,btopleft); putpixel(x+1,y,btopright); putpixel(x,y+1,bbottomleft );
    putpixel(x+1,y+1,bbottomright);
}

//--------------------------------------------------------------------------------

我相信,你除了实验我所说的是不是假话以外,不会真的用浮点来做描绘的。

真正使用的方法有定点算术和查表法。

写到这里,Wu技术已经基本阐述清楚了。本来就此作罢,但是又怕阅读者说本人是空话专家--只说不做,好的,花点时间做一把。

知道Hugo演示Wu像素也有个Star Field程序,但是我不愿意看这个老狐狸的代码,你知道,读老练的图形程序员写的代码是个痛苦的事,尤其没有说明文章时,因为那里面融入了大量洗练的优 化技术以至于可读性不太高,比如五花八门的定点优化,Pentiun指令优化,MMX优化,非正规的的LUT,把大量的乘法写成移位 (y*640--->y<<9+y<<7),很多技术能一眼看出名堂,很多不能,我决定完全自己化点时间写个Star Field,初步决定,它是可以由Player控制的,可以衍生出其他的图形FX的。于是一上午产生了这个:FireStar,

在使用这个程序的时候,我虽然知道这只不过是一些数据在我的联想商用机15寸显示器上的投影,但还是忍不住下意识的要按上下左右来躲闪迎面而来的行星。效果比M$的星空要好,可以控制飞行,但是还不够精彩??

反走样技术之一 —— Wu像素_第1张图片

速度感很棒的StarField!

那么请按下B(Blur),再按下 p(Palette)键,是否很惊讶,一下成了宇宙大爆炸?

反走样技术之一 —— Wu像素_第2张图片

Real Eye Candy!It's amazy!

(未注册的Snap-DX很讨厌啊!)

用法:

B:Toggle Blur
P:Toggle Mono/Color
W:Toggle WuPxiel
S(Swirl):Toggle Rotate
A: Speed Up
Z:Speed Down Up,Down,Left,Right(Direction)
R(Reset Stars)
Spacebar:Toggle Text Info

这个sample用了WuPixel+3D Particle,Stars是在3D空间向观察者运动的,还可以叠加环Z轴的旋转。

效果与老赫上一个3D Particle完全不同,(其实核心是一样的)

OK,被解释得已经很清楚了。如果遇到什么问题可以再商榷。

题外话:

写此文到半时,惊悉我国歼8-2被EP-3撞毁的事件,老赫为失踪的飞行员深感担心。在那么大的过载下,估计人已昏迷,再落水估计是凶多吉少。

从外部找原因就是米国太他妈的不象话了,从克林吨到现在的Bulls Shit,一个比一个逊,这个国家很快就要倒台由无产阶级当权了。

从内部找原因: 老赫清楚知道,我国的国防建设远未吸引到大批第一流的人才,和M国相比,国防科研投入的巨量差异和人才资源的欠缺的程度已经非常危险了!大量的人才已被待 遇优厚的外资,合资,私营公司吸引。大量的这些人对国家的强大基本上是没有直接作用的! 各位在校学生要国家富强最直接的就是投身国防建设,但是这里又引出一个问题:我一位学F-8II模拟器设计维护的同学,现在在部队,你想他应该是个 OpenGL/D3D图形高手吧?不对,他在用VB给处室写管理程序(和DAO,RDO,ADO这些M$搞的骗钱的烂东东打交道)。部队根本没有那么大量 的模拟器程序供你设计维护。 中国人其实择业的要求其实很低,绝对就主要是个钱的问题!

几年前,到中国搞核武器的某机构合作过,其人员待遇之低很令人担心。中老年专家面临知 识老化的问题,几乎完全不会计算机;青年技术人员也大都不会计算机,问大学学过C语言否?答曰忘记了。你知道的了,核科技这类和纯理论,数学公式和大量测 试数据打交道的人,需要顶级的物理数学和计算机高手,不懂计算机编程(哪怕一点点Fortran,Basic也不懂)是不能想象的!

你可能感兴趣的:(图形学)