在OpenGL 中不使用gluSphere() 繪製球體
許多OpenGL 教程都專注於繪製立方體,讓用戶尋找替代方法來創建球體。雖然 gluSphere() 是一個方便的函數,但了解基礎數學以根據需要自訂和修改球體是有益的。
一種方法是從柏拉圖立體開始,例如具有三角形面的八面體。透過遞歸地將這些三角形分割成更小的三角形,您可以建立一組點,當這些點標準化為中心恆定距離時,它們開始類似於球體。
標準化是指調整點以保持之間的角度他們同時改變與參考點的距離。考慮一個 2D 範例:
[標記有距離的線段影像]
C 點相對於 A 和 B 在 12 個單位的距離處進行歸一化。標準化公式為:
function normalize(a, b, length): # Calculate new distances and create new point c return c
透過在具有指定參考點和距離的多個點上重複此過程,您可以建立位於圓弧上的點。
在 3D 中,這種技術可以擴展以創建一個球體。調整標準化函數以包含dz 分量,從而產生球形體積:
[3D 標準化多邊形的圖像]
隨著遞歸等級的增加,球體變得更平滑:
[第1 層和第3 層凸出八面體的圖像]
此技術類似於Epcot 球體的十二面體形狀,其中面向外凸出以創建更圓潤的外觀。
以上是如何在 OpenGL 中建立球體而不使用 gluSphere()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!