首页 文章

DirectX,3D模型前面的光线不隐藏时

提问于
浏览
0

(C) Headers 几乎总结了一切;

如果3D空间中的某个点没有隐藏在其他东西后面,我想让一个光的纹理(或精灵,或其他)呈现在所有东西的前面 .

我怎么做?我可以通过在绘图过程中暂时禁用Zbuffer来渲染它,但我不知道如何检查该点是否被隐藏 .

我是否必须计算点和相机之间的某种碰撞?或者某种精灵设置会成功吗?

1 回答

  • 1

    如果我理解你的问题,你想要在3D空间中渲染2D图像 - 具有所有适当的深度缓冲 .

    我会使用“广告牌” . 只需在3D空间中渲染一个简单的四边形 - 确保它指向观察者 - 并将“光”纹理应用于它 . 你会想要启用alpha混合,否则你只会看到一个贴有图片的大方块 - 大概不是你想要的 .

    另一种方法 - 可能更多的工作,但提供更多的控制 - 将使用像素着色器手动渲染或不渲染后缓冲区上的每个像素 . 这种“混合”在Frank Luna的DirectX 9书中非常简单地解释 .

    对不起,我现在看到问题的关键在于计算可见性,而不是如何渲染广告牌 .

    如果您的场景足够简单,“手动计算可见性”可能只是比较测试点的摄像机与一个或两个其他对象的距离 .

    否则,我认为你的ZBuffer正确 . 手动计算测试点的深度(根据View Frustum的定义方式从0.0到1.0标准化),将其投影到屏幕空间并将该值与ZBuffer中的值进行比较(在相同的投影屏幕空间坐标处) . 如果您计算的深度值小于ZBuffer中的值,则它是可见的 .

    这确实是我能想到的唯一一种确定单个3D点可见性的通用方法 .

    希望有所帮助 .

相关问题