2013-06-18 86 views
1

我有以下代碼:檢查是否FLOAT3通過邊界

(voxelCoord.x < 0 || 
voxelCoord.y < 0 || voxelCoord.z < 0 || voxelCoord.x > 1 
|| voxelCoord.y > 1 || voxelCoord.z > 1) 

不過,我想應該是可以優化這一點。我認爲使用min和max會讓我回頭,是否有像鉗子這樣的解決方案,讓我檢查邊界是否通過了?

例如;會

夾(voxelCoord,FLOAT3(0),FLOAT3(1))!= voxelCoord

工作?

+0

你可以做壓裂(voxelCoord)!= voxelCoord,但它不會正確計算1。 – Jessy

回答

1

任何(voxelCoord < 0 || voxelCoord> 1)

更加簡潔,並編譯成2少D3D-IL指令比你寫的是什麼。驅動程序編譯器在優化它們之後是否更加優化取決於其他因素(無論硬件是基於矢量的還是基於標量的)。

+1

我試過GLSL的等價物, PVRShaderEditor告訴我它等於比clamp和!= combo更多的指令。 – Jessy

+0

是的,我想你可能是對的。如果您感興趣的是< 0 and > 1,那麼通過使用飽和而非鉗制,給編譯器帶來最好的機會,因爲飽和通常是硬件在某些指令中可以免費使用的修飾符。它可能很好地發現夾子在0和1之間,無論如何都使用飽和,但無論如何也不能傷害它。 –