Category Archives: ヾ(•ω•`)o

暴力调整Oculus Rift的瞳距设置

A ruthless way to modify your Oculus Rift’s IPD (Interpupillary Distance)

TL;DR: Pictures say it all.

IPD (interpupillary distance) is basically the distance between the center of your two eyeballs. The average value is 63mm~65mm, which Oculus Rift DK is designed for(64mm). If yours is too wide or narrow beyond that you’ll notice how the image in Rift doesn’t focus too well horizontally, which is uncomfortable and may lead to sickness.

My IPD is extremely wide, 72mm (please, I’m still handsome). After a while’s use I knew this is not something I can just ignore so I did some research. The problem turned out to be pretty common, this post shows plastic adapters user bwhill designed to adjust the IPD to specified value. But he’s only selling 3D-printed products not sharing or selling the blueprint and it’s too much of a wait to ship to china. So I penned a few lines and plugged in my heat knife, it’s not pretty but it had the job done.

Continue reading

Time offset for particle instance animation in Maya

所以我觉得这应该是一个很基本的功能,动画的instance很自然的想要动作随机一些,不然效果差很多,跟做广播体操似的。上面的视频里设了3个稍微不同的开始时间,懂我意思吧。
因为instancer只是把你加入列表里的虫子模型调整位置显示,无法直接偏移时间,所以思路是copy多个虫子,逐个调整时间后把它们随机附着在粒子上。 Continue reading

把Kinect扫描的点云数据导入Maya | Import Kinect point cloud to Maya

I used Skanect to scan my room down. The .ply file generated is like this:

0.614557 -0.0194625 -0.305274 -0.127814 -0.551592 0.824263 100 113 96
0.614418 -0.019946 -0.305417 -0.127814 -0.551592 0.824263 98 111 96
0.61429 0.00103368 -0.303381 0.0386538 -0.603242 0.796621 104 107 95

Continue reading

Use Kinect LiDAR for camera matchmoving in PFTrack | 用Kinect的激光测距来帮助PFTrack的摄影机反求

So yea I got the idea becaues I wanted to deploy some close-up shots in my small project, but close-ups are always a pain to matchmove according to my experience. We know that this device’s resolution is quite limited, so does it work?

Couldn’t find anybody done the same thing using this low cost toy on Internet, or at least they didn’t post it. So here you go, the result turns out neat and I’m really happy with it. Notice at the end of the clip, the shot is pretty close and it worked fine. Video:


Youtube
Continue reading

PHP折腾笔记

Finally have a multi-language plugin installed, which Can’t be run without a fancy switching button. I photoshopped an old school pink neon sign, with color picked from Drive =D 多语言达成!所以没有一个漂亮的切换图标怎么行?做了一个old school的粉色霓虹灯, 色彩取的 Drive 上的=D Continue reading

Geotrack test footage 20120822_headcrab


局部地区看不到请点 渣豆链接

PFTrack随便弄张人脸的model摁上去track一下,10分钟就弄出上面这个,好方便。粗糙点没怎么调,“观众能吃粗粮”。
感觉对于模糊一下再偏点位置造的假影子来说.. 这个效果令人过于满意了。
技术前期又完成一个,还有我看看.. 58个events? ಠ_ಠ

[METAL] Funk Metal Riff 芬克金属riff

播放选原画质,声音同步好点儿

廉价Cort + EMG81/85
Line6 Toneport UX1
EQ 5/3/9 PRE 9
E调布鲁斯

pain is no shit to me
even when the world is not the same one anymore
because something lasts

播放选原画质,声音同步好点儿

廉价Cort + EMG81/85
Line6 Toneport UX1
EQ 5/3/9 PRE 9
E调布鲁斯

pain is no shit to me
even when the world is not the same one anymore
because something lasts

[指南] 怎样将Team Fortress 2/Source游戏中的模型导入到3ds Max中

实在是太想用Sentry Gun,折腾了七八个小时终于搞定了, 本文教你怎样通过繁复..的步骤最终达到如图的效果:

怎么样? 反正我是哭了

中间绕的弯路不谈, 说下过程,可能啰嗦点,因为此文不只是写给你看的,也是我自己为了记录…实在不想万一忘掉还要重新摸索。(4个月后的update:这种技术果然一辈子只会用一次!哭了!
这个帖子总结的也很好。

用到的软件:

上面那篇文章里还提到了个解压VPK的工具,可能是因为隔的时间比较久现在不这么压缩了,我是没用到。

提取和反编译MDL文件

MDL就是游戏中使用的模型文件,是编译成ANSI码存放的(大概是读取速度的原因)。找到你游戏所在的gcf(盗版可能就没有gcf吧,直接放目录里?不太清楚),用GCFScape打开,如果你不知道模型在哪/该用什么模型,建议下载Source SDK用自带的“Module Viewer”到处看看。Module Viewer不会告诉你它打开的是哪个gcf文件,因为(我仔细看了下大概是这样)Viewer展示的是所有gcf的汇总。所以在Viewer里确定目标以后再找还略略麻烦点,Sentry Gun的模型在team fortress 2 materials.gcf里的 \tf\models\buildables\sentry1.mdl ,把同目录下所有以 <sentry1.> 打头的文件提出来,再用MDLDecompiler选取mdl反编译成零部件,这种反编译好方便,按下按钮就搞定了… 骗你的,肯定会出现各种各样的错误,请参见这个贴子这个贴子这个贴子

完成后得到一堆SMD文件,其中最大的那个是我们要的,其他的是一些动画什么,还没看,也可以导入的。

导入3ds Max

用上面的3ds .SMD Importer就好了,要注意的是在我写此文的时候,2012版本的(至少是64位)不能用,我装了个2010导入再导出给2012。虽然wunderboy.org写的插件2012可用,但是我没法导入材质,官网上说暂时不能导入动画但是骨头和材质都行,我不知道。

点导入会提示选材质,这个材质在哪里呢… 用Wunderboy.org提供的Source MDL Texture Info可以方便的找到路径,把材质文件(vtf格式)提出来和模型放一起,再下载上面的3ds Max用来读取vtf的插件,就ok了~ 🙂实在是太想用Sentry Gun,折腾了七八个小时终于搞定了, 本文教你怎样通过繁复..的步骤最终达到如图的效果:

中间绕的弯路不谈, 说下过程,可能啰嗦点,因为此文不只是写给你看的,也是我自己为了记录…实在不想万一忘掉还要重新摸索。(4个月后的update:这种技术果然一辈子只会用一次
这个帖子总结的也很好。

用到的软件:

上面那篇文章里还提到了个解压VPK的工具,可能是因为隔的时间比较久现在不这么压缩了,我是没用到。

提取和反编译MDL文件

MDL就是游戏中使用的模型文件,是编译成ANSI码存放的(大概是读取速度的原因)。找到你游戏所在的gcf(盗版可能就没有gcf吧,直接放目录里?不太清楚),用GCFScape打开,如果你不知道模型在哪/该用什么模型,建议下载Source SDK用自带的“Module Viewer”到处看看。Module Viewer不会告诉你它打开的是哪个gcf文件,因为(我仔细看了下大概是这样)Viewer展示的是所有gcf的汇总。所以在Viewer里确定目标以后再找还略略麻烦点,Sentry Gun的模型在team fortress 2 materials.gcf里的 \tf\models\buildables\sentry1.mdl ,把同目录下所有以 <sentry1.> 打头的文件提出来,再用MDLDecompiler选取mdl反编译成零部件,这种反编译好方便,按下按钮就搞定了… 骗你的,肯定会出现各种各样的错误,请参见这个贴子这个贴子这个贴子

完成后得到一堆SMD文件,其中最大的那个是我们要的,其他的是一些动画什么,还没看,也可以导入的。

导入3ds Max

用上面的3ds .SMD Importer就好了,要注意的是在我写此文的时候,2012版本的(至少是64位)不能用,我装了个2010导入再导出给2012。虽然wunderboy.org写的插件2012可用,但是我没法导入材质,官网上说暂时不能导入动画但是骨头和材质都行,我不知道。

点导入会提示选材质,这个材质在哪里呢… 用Wunderboy.org提供的Source MDL Texture Info可以方便的找到路径,把材质文件(vtf格式)提出来和模型放一起,再下载上面的3ds Max用来读取vtf的插件,就ok了~ 🙂

Minecraft 1.8.1 CraftBukkit 建服

因为1.8的bukkit还没有推荐使用版本所以官网首页上下不到,所以要到这里下个最新能用的版本:
http://ci.bukkit.org/job/dev-CraftBukkit/

所谓“最新能用版本”就是左边列表里带蓝色泡泡的最新一个。
下载放到服务器目录(建个文件夹),新建文本文档输入:

@ECHO OFF
IF /I “%PROCESSOR_ARCHITECTURE:~-2%”==”64” “%ProgramFiles(x86)%\Java\jre6\bin\java.exe” -Xincgc -Xmx1024M -jar “%~dp0craftbukkit-0.0.1-snapshot.jar”
IF /I “%PROCESSOR_ARCHITECTURE:~-2%”==”86” java -Xincgc -Xmx1024M -jar “%~dp0craftbukkit-0.0.1-snapshot.jar”
PAUSE

保存,后缀名改成.bat,运行。
等载入完以后关掉…因为大家都是用的盗版所以要改个东西,这个微妙的东西在 [服务器目录]/server.properties 里,记事本打开这个文件,有一行

online-mode=false

false改成true就可以了,重新就可以用客户端进了。
插件列表点这里 竟然没有按population排列的选项啊囧…

Selinux prevents httpd from accessing home directory

I tried to share files via httpd(Apache originally), however it wouldn’t work, saying 403 forbidden.
Apparently we need to set options to permit httpd to follow symbolic links. In /etc/httpd/conf/httpd.conf, ensure there is text below:

(Under <Directory “/var/www/html”>, there should be)
Options Indexes FollowSymLinks MultiViews

But the problem remained. After quite a while I noticed there were some Selinux alerts saying “SELinux is preventing the http daemon from reading users’ home directories.”

Then I disabled selinux(command “setenforce 0” to make it sleep temporarily) and it worked. As Selinux is a kernel-level security mechanism on your system, not a some antivirus or firewall software thing, it may not be wise to throw it away. Check Joshua Brindle (an SELinux developer) ‘s  comments on disabling SELinux here, which states clearly that applications should be fixed to work with SELinux, rather than disabling the OS security mechanism.

So what I do is:

1. According to Selinux log(you can generate it with command “sealert -a /var/log/audit/audit.log”, run “setsebool -P httpd_enable_homedirs on” to enable the literal option(this command takes 20 secs to be done I don’t know why).
2. Still doesn’t work, after some googling I found this, run “chcon -t httpd_user_content_t /home/Viaxl/Music -R” to authorize world rx permissions to apache access (recursively) .

Now they all work right. I found this kind of multi-layer protection, though very complex, is really handful. In this case I only permit http daemon(as a “Target” of Selinux’s conception) to access my Music folder, and this can’t be done precisely by chmod or something.

Linux访问Windows共享 && mplayer播放网络文件

mplayer播放网络文件会顿/卡/lag的情况

大笔记本上装的固态硬盘空间严重紧张,一般都是用小本下电影,小本在学校接了个24寸液晶电视看电影很给力,但是在家还是用大本的屏幕看吧… 实现起来一直困扰我的问题是我最爱用的播放器mplayer在放网络上的文件时会卡,隔一会顿一下,跟tm iPad似的(iPad放除了苹果本来支持的意外的格式–即用第三方解码器–总是会卡,怀疑是苹果故意这么干的…没研究过瞎说的)。之前是放弃用mplayer今天心情好Google了一下,发现有 -cache 这个参数,就是缓存啦,加上 -cache 8192 果断就不卡了。也不能怪我没看那八百页的manual…

本来就想说这,但既然提了我就把容易遇上的问题说全乎了吧,方便出现各种问题Google进来的同学们。(改了一下标题)

怎么mount windows的NTFS分区

需要注意的是之前用来接口NTFS格式的samba现在已经不用了,现在用一个叫cifs的东西… CIFS: Common Internet File System,看名字就知道比什么叫“桑巴”的牛逼 🙂
具体实现为:

mkdir /mnt/[dicname]
mount -t cifs -o username=uuuuuuu,password=xxxxxxx //192.168.1.100/[sharename] /mnt/[dicname]

然后关于mplayer字幕的问题

mplayer的字母乱码(或者下划线)上次也让我蛋疼过一次,好不容易弄明白时隔半年我又忘了又蛋疼了一次。
关键点在于… -font后面写的字体不是字体的路径,不是 /usr/share/fonts/xx..xx ,而是字体的名字,比如 -font “WenQuanYi Zen Hei” (由 fc-list 列出)。可能之前的版本是路径吧Google全写的路径…
有三个需要填的 -sub [字幕路径] -sub [字幕编码] -font [字体名称],如下:

mplayer *CD1* -sub 1.gbk.srt -subcp gbk -font “WenQuanYi Zen Hei” -cache 8192

-cache作用见文首。并不用像很多地方说的要把字幕文件通过 iconv 转成cp936格式,只要-subcp写对了就行。
貌似可以在 ~/.mplayer/config 中设置来不用每次都打一长串,但是我不敢在没有配置文件的情况下再忘掉这怎么工作的了 = =

[METAL] 能量金属Rhythm

第一次录音,开心~:)
视频先放优酷的…音质太渣了
面瘫是因为NG太多次麻木了…

吉他 Cort X6,换了拾音器 EMG81/85,双摇改单摇 (焊了几个硬币在里面…现在使用很稳定)
效果器 Line6 UX1
To those who are interested in my equipments:
Cort X6 replaced with two EMG 81/85 pick-ups
Effects is Line6 UX1

Network Programming Using Internet Sockets

Socket网络编程略窥一二.. 网络原理课的课程设计

完全是看这篇文章学的, 貌似有中文版但是我点不进去
就不说两句了, 底层的东西, 全是细节, 非要概括的话可以引用原文第五章的小标题来描述这个过程

5.1. getaddrinfo()—Prepare to launch!
5.2. socket()—Get the File Descriptor!
5.3. bind()—What port am I on?
5.4. connect()—Hey, you!
5.5. listen()—Will somebody please call me?
5.6. accept()—”Thank you for calling port 3490.”
5.7. send() and recv()—Talk to me, baby!
5.8. sendto() and recvfrom()—Talk to me, DGRAM-style
5.9. close() and shutdown()—Get outta my face!

我的代码, 这是linux的, windows有点小不一样, 我不知道 :): Continue reading

Google music进不了的解决办法

这两天一直用不了以为是Google服务器又出问题了(之前也有过,以为是.cn服务器挂掉了)。表现为点开播放器只有广告在飘上面打不开,专辑封面图出不来。但是换了代理封面图能出了,播放器由于不是天朝IP没法点。所以怀疑是路由被某众所周知的东西污染导致访问不了。

看了页面源码找到三个地址
1)*.top100.cn/*
2)*.googleusercontent.com/*
3)*.googleusercontent.cn/*
而播放器是放在(3)里的,把(3)地址挂进代理就能用了。

引申:
我把123全放代理里(美国IP)也能正常播放,说明Google检测IP的机制很不严,所以在国外也只要把google.cn挂上天朝代理就能播放了吧~ 没试
在天朝用cloud伤不起啊…

[ACM] POJ 3274 Gold Balanced Lineup 解题报告, 对数组Hash

算法很简单, 就是记录各个feature的累积和数组, 数组稍作处理, 只要能够比较 [让能够相减得出答案的两个数组] 的”形状”.
比如

111      111      000
110      221<=    110
111      332      110
010      342      120
001      342      120
100      443<=    110
010      453      120

中间一列的221和443的”形状”一样, 也就是相减能得到答案, 所以稍作处理都减去最右边的数即可, 方便比较.
问题是者离散化以后也有100000的数据怎么记录, 好吧我开始用的二叉树后来发现想错了..
无耻的Google以后发现对数组Hash的方法.. 很汗颜 太洋气了.. 跑2xxMS

代码:
Continue reading