以前推荐过一篇 z-buffer/stencil-buffer 的介绍,不过当时没有细看文章中 planar shadow 的实现(其实是看见太多公式就头痛)。
http://kasicass.blog.163.com/blog/static/39561920082444616423http://www.csie.ntu.edu.tw/~r89004/hive/shadow/page_1.html今天照着做了一遍,看起来似乎还像个样子。下面大概说说其中的过程:
V 是空间的一点,所以是 <Vx, Vy, Vz, 1>
L 是光的方向,所以是 <Lx, Ly, Lz, 0>。(参见前一篇 blog,为啥 w = 1 or 0>)
P 是平面的一般方程,所以是 <a, b, c, d>。(ax + by + cz + d = 0)
把 k 的方程带入 V + kL 这个公式,就可以得到最后说的变换矩阵。程序上把这个变换矩阵设置上去,再绘制一遍物体即可:
glPushMatrix();
glDisable(GL_LIGHTING);
glMatrixMode(GL_MODELVIEW);
glMultMatrixf(m);
k_glutSolidSphere(1.0, 20, 16);
glEnable(GL_LIGHTING);
glPopMatrix();
:-) 发个图自我陶醉下~ 图形学我是超级入门级,大虾看到不要笑~
评论