我從不同網格變量的.x文件中加載多個網格。 現在我想計算我加載的所有網格(以及正在顯示的網格)的邊界球體。請指導我如何實現這一點。 是否可以將VertexBuffers附加到一個變量中並使用該變量計算boundingSphere? (如果是的話,他們如何vertexBuffers加入收集) 否則你會建議什麼替代!? Thankx如何跨多個網格計算邊界框/球面(C#)
2
A
回答
0
我有一個想法,我會做的是,我將確定每一個網格對象的中心,然後通過使用上述信息,確定網格對象的集合的中心......
2
它令人驚訝地容易做到這一點:
你需要,首先,平均所有的頂點。這給你的中心位置。
這是在C如下完成++(對不起我的C#是很生疏,但它應該給你的一個想法):
D3DXVECTOR3 avgPos;
const rcpNum = 1.0f/(float)numVerts; // Do this here as divides are far more epxensive than multiplies.
int count = 0;
while(count < numVerts)
{
// Instead of adding everything up and then dividing by the number (which could lead
// to overflows) I'll divide by the number as I go along. The result is the same.
avgPos.x += vert[count].pos.x * rcpNum;
avgPos.y += vert[count].pos.y * rcpNum;
avgPos.z += vert[count].pos.z * rcpNum;
count++;
}
現在,你需要去通過每一個VERT制定出這VERT是最遠遠離中心點。
像這樣的工作(在C++):
float maxSqDist = 0.0f;
int count = 0;
while(count < numVerts)
{
D3DXVECTOR3 diff = avgPos - vert[count].pos;
// Note we may as well use the square length as the sqrt is very expensive and the
// maximum square length will ALSO be the maximum length and yet we only need to
// do one sqrt this way :)
const float sqDist = D3DXVec3LengthSq(diff);
if (sqDist > maxSqDist)
{
maxSqDist = sqDist;
}
count++;
}
const float radius = sqrtf(maxSqDist);
而且你現在有你的中心位置(avgPos)和您的半徑(半徑),因此,你需要定義邊界的所有信息領域。
相關問題
- 1. 在Python中計算三維網格的邊界球形
- 2. OpenLayers如何計算邊界框座標?
- 3. 如何計算邊界框區域?
- 4. 如何計算邊界框的中心?
- 5. 計算OpenStreetMap的邊界框
- 6. 如何計算邊界
- 7. 如何計算地球上自相交多邊形的面積
- 8. 如何基於4個曲面邊緣計算網格?
- 9. 計算邊界多個元素silverlight
- 10. 計算多個多邊形之間共享邊界的長度
- 11. 如何累積3D三角形網格的邊緣?在c C++中計算網格邊緣的算法?
- 12. 處理多邊形的多邊形算法,處理跨邊界的多邊形
- 13. 計算邊界框的頂點
- 14. 使用Javascript計算邊界框
- 15. 計算Tensorflow中的邊界框重疊
- 16. 計算GDI +繪圖的邊界框
- 17. 計算邊界框中的交點
- 18. 如何檢索三個js中的邊界框的網格?
- 19. 如何計算SciPy邊界的微分?
- 20. HTML:如何計算佈局邊界
- 21. 如何計算小部件邊界?
- 22. 如何檢查網格上的多個邊界
- 23. java網格邊界
- 24. 當存在邊界框時,計算ImageJ中形狀的面積
- 25. 覆蓋父格的邊框與子跨度的邊界
- 26. 如何計算谷歌地球多邊形像素大小
- 27. 如何跨多個系統跨越用戶界面
- 28. 面向邊界框vs定向邊界框相交測試(c/C++)
- 29. 跨表的多個計算
- 30. 在三角形多邊形網格中計算一個洞