涂鸦空间

智慧本身就是好的,有一天我们都会死去,追求智慧的道路还会有人在走着,死掉以后的事我看不到,但在我活着的时候,想到这件事,心里就很高兴。 ——王小波

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
xukunn1226的公告
欢迎爱好图形的朋友交流经验。 致力于Skeleton Animation, Real-time rendering, 3D engine的研究。 msn:xukunn1226@hotmail.com email:xukunn1226@gmail.com
文章分类
常去看看^_^
Advanced Graphics Programming Techiques using OpenGL(RSS)
CodeSampler
developer.nvidia(RSS)
FLIPCODE
Game Programing Wiki
NaturalMotion
Nutty's OGL
Pointer blog
存档

原创  对glClipPlane平面方程参数的求解 收藏

    glClipPlane对裁剪frustum还是很管用的,可进一步定义视图体的范围。裁剪平面由方程Ax+By+Cz+D=0确定。所有满足[A B C D]M-1[Xe Ye Ze We]T>0的人眼坐标[Xe Ye Ze We]的点都位于该平面定义的半空间中,而该半空间以外的所有点都被裁剪掉——摘自Redbook。

    在我之前写的reflection就可以用此函数裁剪掉穿过floor的物体,那时还不知道如何确定方程的参数,现在有法子了呵呵。声明,网上找的。

void findPlane(GLfloat plane[4], CVector3D& p1, CVector3D& p2, CVector3D& p3)
{

/* Need 2 vectors to find cross product. */
 CVector3D vec1, vec2;
 vec1.SetValue(p2.dx-p1.dx, p2.dy-p1.dy, p2.dz-p1.dz);
 vec2.SetValue(p3.dx-p1.dx, p3.dy-p1.dy, p3.dz-p1.dz);

/* find cross product to get A, B, and C of plane equation */

 plane[A] = vec1.dy * vec2.dz - vec1.dz * vec2.dy;
 plane[B] = -(vec1.dx * vec2.dz - vec1.dz * vec2.dx);
 plane[C] = vec1.dx * vec2.dy - vec1.dy * vec2.dx;
 plane[D] = -(plane[0]*p1.dx + plane[1]*p1.dy + plane[2]*p1.dz);

发表于 @ 2006年05月25日 00:43:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:对Reflection的一点改进 | 新一篇:Planar Shadow

  • 发表评论
  • 评论内容:
  •  
Copyright © xukunn1226
Powered by CSDN Blog