程序员三大浪漫之一

我写博客吧,好像就正经不起来。总会夹杂点杂七杂八的东西。

先说正题吧。

所谓程序员三大浪漫嘛,编译原理,图形学,操作系统(不是我说的,逃

这次说的是图形学。

我好想有个坏毛病,发现个什么好玩的,自己其实根本不懂就喜欢拽着人乱说。

最过分的一次是表彰大会上大礼堂给全学院人讲信息安全(当时到底怎么想的简直不要脸

所以还是继续不要脸一次。

如果现在有人问我,怎样开始喜欢上编程,写点什么项目可以获得最大的成就感。答案肯定是写光线追踪。

唉,自己过去对图像以及显卡的了解真是太 Naive 了……简直等于什么都没有啊。

先上文

用 JavaScript 玩转计算机图形学(一)光线追踪入门

光线追踪的js实现,总共500行代码不到,循序渐进。

最神奇的地方在于,超简单的原理带来了超乎想象的效果。

如果有一点 3D 软件的使用经验和游戏开发经验的话,原理非常直白(当然还要懂点数学和物理,我这种渣水平就够)

但是效果实在是,出人意料。光看图感觉不到,自己敲完代码跑出来,太神奇了(或者是我太无知了 = =)

上图,为了帮助理解,自己改了 3x SSAA ,抗锯齿效果杠杠。

(下图分别是 1x,2x,3x, 反射都是3次追踪。为什么没有 4x ?因为 4x 跑了5分钟然后浏览器跪了……)

附上改的渣代码,确实就是 super-simpling 而已。

function rayTraceReflection(scene, camera, maxReflect) {

        scene.initialize();
        camera.initialize();

        var ssaa = 1; //抗锯齿等级
        var rawPixels = new Array();
        for (var i = 0; i < h * ssaa; i++) {
            rawPixels[i] = new Array();
        }

        for (var y = 0; y < h * ssaa; y++) {
            var sy = 1 - y / (h * ssaa);
            for (var x = 0; x < w * ssaa; x++) {
                var sx = x / (w * ssaa);
                var ray = camera.generateRay(sx, sy);
                rawPixels[y][x] = rayTraceRecursive(scene, ray, maxReflect);
            }
        }

        var i = 0;
        for (var y = 0; y < h * ssaa; y += ssaa) {
            for (var x = 0; x < w * ssaa; x += ssaa) {
                var color = Color.black;
                for (var yi = 0; yi < ssaa; yi++) {
                    for (var xi = 0; xi < ssaa; xi++) {
                        color = color.add(rawPixels[y + yi][x + xi])
                    };
                };
                pixels[i++] = color.r / (ssaa * ssaa) * 255;
                pixels[i++] = color.g / (ssaa * ssaa) * 255;
                pixels[i++] = color.b / (ssaa * ssaa) * 255;
                pixels[i++] = 255;
            }
        }
        ctx.putImageData(imgdata, 0, 0);
    }

接下来是希望实现正交相机,融合光线,用其他语言(比如C井)实现玩玩这样……

期待什么年代游戏可以 real-time ray tracing ,那会是怎样一番光景啊……(看看现在 tone tracing 的效果都已经如此惊艳了)

说到游戏,不得不提下一个话题。

Ori And The Blind Forest

这个游戏跟 ray tracing 没什么关系,这是一个2D游戏。

与其说游戏,不如说是艺术。第一眼看上去以为是个设计作品,类似可交互动画这样。

结果分分钟打脸,手残党被虐哭……

分分钟成为自己最喜欢的游戏。

和我一起呐喊,软人希!

(Steam平台有售,强烈推荐体验。这个主题只说了这么几句不是没话说,恰是因为实在有太多话说了)

这就是本周的Sean Talk,我们下周见!(设么鬼……什么时候有这个系列了,不要说得好像要开每周专栏了一样好吧><)

完了,书单又多了一本,PBRT……

再写这些你让我怎么好意思再说这是个技术博客啊

说来也奇怪,听听歌就像写日志了。

下午在K最后点了 君の知らない物語

#Region 我是强行插入的一段
君の知らない物語这个词好难打……物語 这个词用微软日语输入法一直打不出来……怒换,本来准备换搜狗但是发现……好像根本没这个东西,只好换了百度,结果还是打不出来……最后才发现是自己把读音一直弄错了,物是もの(mono) 語是がたり(gatari)= = (微软日语输入法:怪我咯)
#EndRegion

到底还是没放,回来在随便看看(比如达音科出了DN2000J 口水|||* *|||)好久没听歌了,就想放一下君の知らない物語(已经可以熟练的打出来了= =)结果发现有MV就好奇的点进去了,本来以为应该是动画ED,结果竟然是真人……还是剧情……还是狗血……真是吓到了。太毁了!星空约会是多么美好的桥段,就这么毁了你让我以后怎么直视,哦不,直听这首啊啊啊!!!

附带最新花式虐狗大赛冠军问题

今天本来想去看速度与激情7啊,结果约了一天都没人约 – – 不想自己去(傲娇脸)所以就不去啦。自己看! 开了三个页面:十冷、霍比特人3:五军之战、星际穿越。下了星际穿越。现在是时候看看了……我为什么一直有等一个东西火过去了再看的习惯呢……真奇怪。

PS4挺好玩的……虽然坑啊坑,每天高呼索尼大法好然后用姨夫当桌面应该保佑一下没有Bug吧……

哦,代码方面啊…… 这方面的内容我总觉得自己看看就行了一直懒得写啊……

要说么,最近就是被函数式各种虐成狗(咦,从各方面说不本来就是狗么)从Clojure到Haskell(搜狗竟然有这个词……)各种被虐,感觉各门函数式之间的关联部分都很多,比如来自于Prolog的Erlang,你说有各种模式匹配列表推断生成也就算了吧,为什么Haskell里面也是各种列表推断生成,Currying还算好理解,但是真写起代码来,真是一片凌乱,好无力啊……我还是去看图形学吧……

唔……十点了……感觉电影看不了了

家里终于重新有网了T T