關於 Direct3D 9的採用shader(vs+ps)的同時使用clipplane的問題

本文探讨了Direct3D中使用clipplane在固定功能管线与顶点着色器管线之间的差异。发现使用顶点着色器后,IDirect3DDevice9::SetClipPlane()无效,并介绍了如何在着色器中实现裁剪平面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

固定機能時代的Direct3D的使用上,clipplane的使用很簡單 只要在world空間中射一個或幾個clipplane的平面方程 即可實現裁剪

當使用頂點shader之後,發現出問題了,好像IDirect3DDevice9::SetClipPlane()根本無效。查sdk document一看,
「固定機能パイプラインが使われる場合、平面方程式はワールド空間にあると仮定される。プログラム可能なパイプラインが使われる場合、平面方程式はクリップ空間 (出力頂点と同じ空間) にあると仮定される。」
這是DX9 SDK日本語版的原文,就是講clipplane應該是基於射影空間的(想也是,world空間都由偶自己管理實現的)。按他講的去做搞一下平面變換,發現效果仍然不對,上網一查,bbs.gamedev.net就有複數個人提問跟偶一樣的問題,看來不光是偶的錯誤了。有人講geforce系列不支持 按照dx的document上講的標準應該可以正常工作的。搞了半天費了一晚上時間試來試去還不行。一想算了,自己用在ps中實現把,本來這個clip的固定機能在D3D10中就沒有了,採用shader實現本身也不費事,加一行判斷code就搞定了,也是大勢所趨。

總之能用shader實現的盡量用shader,不僅直接也是未來趨勢所向。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值