`
sogotobj
  • 浏览: 646570 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ZBuffer裁剪planar shadow

 
阅读更多

适当的操作ZBuffer可以巧妙的完成一些任务,比如我要在擂台的边缘裁剪人的影子。擂台的特点是边缘之外的地方比较低。将影子埋在擂台表面下一点点, 先绘制擂台,然后改变z test func,改为greater,并关闭z write,然后绘制影子,因为影子是在擂台下面的,这样从擂台上方看,影子具有比擂台表面更大的z值,opengl中z值大意味着离camera远,按 照正常的z测试方法,GL_LESS或GL_LEQUAL通过测试,这样影子应该画不出来,而如果将z test func设为GL_GREATER,离camera远的影子反而绘制在擂台表面上了。而在擂台的边缘,因为擂台外的像素会比影子更低,影子的z会比较小, 不能通过GL_GREATER的测试,这样擂台边缘外的影子片段就不能绘制了,也就达到了裁剪的目的。同时由于绘制影子时关闭了z write,影子的z值不会被写入,也就意味着影子之后绘制的东西能挡住影子,比如人总能踩住影子。之后恢复正常的z test并打开z write,绘制人和其他物体。
当然这个方法也并不完美,比如镜头前的物体会挡住影子,影子会浮在擂台后比较高的物体上,比如墙。我的影子是简单的平面阴影,设备没有模板缓冲,这么做似乎已经是可以达到的最好结果了。

分享到:
评论

相关推荐

    扫描线zbuffer

    扫描线ZBuffer算法是计算机图形学中的一个关键技术,用于实现3D图形的隐藏面消除。这个算法在渲染三维场景时至关重要,因为它可以确保我们看到的是物体的可见表面,而不是被其他表面遮挡的部分。在Java环境下,我们...

    Zbuffer扫描线消隐算法

    在项目文件中,"bin"通常包含编译后的可执行程序,而"SL_Z_buffer"可能是一个源代码文件夹,包含了实现Zbuffer算法的C++源文件,例如`main.cpp`、`zbuffer.h`等,其中`main.cpp`是主程序入口,`zbuffer.h`可能定义了...

    图像空间的消隐算法Zbuffer扫描线PPT教案.pptx

    "图像空间的消隐算法Zbuffer扫描线PPT教案" 本次课程主要讲解了图像空间的消隐算法,特别是Zbuffer扫描线算法。消隐算法是计算机图形学中一种重要的技术,用于解决三维物体的可见性问题。 消隐算法的分类可以分为...

    ZBuffer扫描线

    ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线 ZBuffer 扫描线

    扫描线Zbuffer算法

    扫描线Zbuffer算法是一种在计算机图形学中广泛使用的深度缓冲技术,用于解决多边形重叠时的绘制问题。Zbuffer,也称为深度缓冲区,是每个像素在三维空间中的深度值(Z值)存储的地方。这个算法的核心思想是通过比较...

    zbuffer算法消隐

    在计算机图形学中,"zbuffer算法消隐"是一种用于处理3D图形渲染时物体深度关系的技术,确保近处的物体遮挡住远处的物体,从而产生真实的视觉效果。这一技术由James H. Wingate和David C. Evans在1974年提出,也被...

    扫描线ZBuffer算法

    实现扫描线ZBuffer算法,光照计算,纹理坐标计算,矩阵变换。 共两个模型。 杯子 在CscanLineZBView::buidCup()中生成。 是用一条基线绕一条轴旋转生成。含有1400个四边形 带孔立方块 是用CAD建模中学的半边结构和...

    matlab_扫描线Zbuffer算法_包围盒

    扫描线Zbuffer算法 1。算出模型的包围盒。 2.每条扫描线打点时并不是包围盒内整条线打点,而是先搜索需要刷新的范围, 只是该范围内打点。 (One scan line Zbuffer algorithm. Calculate the model bounding box. 2...

    Z-Buffer消隐算法的Matlab实现

    Z-Buffer消隐算法是计算机图形学中的一个重要技术,用于解决多边形渲染时的遮挡问题。在3D场景中,多个物体可能会相互重叠,Z-Buffer算法通过为每个像素分配一个深度值(Z值)来决定哪个物体应该位于前面。在Matlab...

    zbuffer 3D投影.zip

    在“zbuffer 3D投影.zip”这个压缩包中,包含的资源可能是一个用于演示或教学3D投影,特别是z-buffer消隐算法的应用。z-buffer,又称为深度缓冲,是计算机图形学中解决多边形遮挡问题的一种方法。 首先,我们要理解...

    扫描线Zbuffer示例

    整个项目只有一个cpp,里面包含obj读取,结果保存为bmp,扫描线Z缓存算法实现等部分,一共339行。但请注意,算法实现上我是在课本提供思路上做了很大的简化,整个算法实现过程只用到一个结构体。

    计算机图形学(MFC)-ZBuffer算法进行立方体填充

    在3D图形渲染中,ZBuffer算法,也被称为深度缓冲算法,是解决多边形遮挡问题的关键技术之一。本资源是关于使用MFC(Microsoft Foundation Classes)库在C++环境下实现ZBuffer算法,用于立方体的填充。 ZBuffer算法...

    zbuffer算法计算机图形学

    zbuffer算法计算机图形学

    Z-Buffer消隐算法C#实现

    Z-Buffer消隐算法,又称为深度缓冲算法,是计算机图形学中用于处理多边形遮挡问题的一种重要方法。在3D图形渲染过程中,当多个几何物体在同一个视点下重叠时,如何正确地确定哪些部分是可见的,哪些部分被遮挡,就是...

    《Programming Role Playing Games with DirectX》第二版chap 2的ZBuffer代码

    《Programming Role Playing Games with DirectX》第二版中的"chap 2的ZBuffer代码"涉及的是图形渲染中的深度缓冲技术,这是游戏编程中一个至关重要的概念,特别是在3D角色扮演游戏中。深度缓冲,也被称为Z缓冲或者Z...

    三维面消隐 ZBUFFER实现

    这是边学习图形学边做的...Z-Buffer算法实现面消隐,线性插值纹理映射。执行Debug下的程序,打开Debug/girl下的.obj文件,就可以看到效果了。F1键切换渲染方式,w、s、a、d移动,上下左右旋转。想下载的请不吝赐教。

    计算机图形学 z-buffer

    z-buffer算法的核心思想是为每个像素维护一个额外的缓冲区,即z-buffer,用来存储像素的深度值(z坐标)。当一个新的像素需要被绘制时,系统会比较当前像素的z值与z-buffer中的值。如果当前像素更靠近观察者(z值更...

    Z-BUFFER算法实现

    利用OPENGL绘制立方体 Z-BUFFER算法实现 可用鼠标和键盘控制立方体旋转

    zbuffer算法常用于3维图形的消隐,以及布尔运算,vc编的。 (1).rar

    《深入理解ZBuffer算法及其在3D图形处理中的应用》 ZBuffer算法,又称为深度缓冲算法,是计算机图形学领域中一种常见的三维图形消隐技术。它在三维图形渲染过程中扮演着至关重要的角色,通过比较像素的深度值来决定...

Global site tag (gtag.js) - Google Analytics