簡體   English   中英

Java中的深度緩沖和多邊形填充

[英]Depth buffering and polygon filling in Java

我有點好奇是否可以用Java2D編寫一個簡單的引擎來渲染3D立方體。 到目前為止,我的嘗試令我感到驚訝,並取得了成功。 到目前為止,多維數據集看起來還不錯: 在此處輸入圖片說明

但是,正如您所看到的,我嚴重缺乏深度測試。 我完全迷失了如何在Java2D中進行深度測試。 根據我的發現,您可以通過將每個多邊形渲染到位圖然后針對可能與之沖突的每個其他像素測試每個像素來進行處理。 這是我迷路的地方。

我具有多邊形的每個頂點所需的深度值,但沒有每個像素的深度值。 這可能是讓Java2D使用fillPolygon(Polygon p)方法為我填充每個多邊形的副作用。 因此,這使我相信,如果我使用fillPolygon(..)方法渲染多邊形,則無法進行深度測試。 我的第一個問題是:我可以在仍然懶惰的同時做z緩沖,讓Java繪制像素嗎?

如果不是,那么我的下一個問題是:如何在世界上自己渲染多邊形? 我的意思是,我非常了解如何將像素存儲在位圖中,然后將其渲染為圖像。 我想知道如何獲取每個多邊形的四個頂點並適當地渲染它們。

給定三角形(或任何多邊形),您當然可以在任何像素位置計算z值,但我認為您不能告訴Java函數fillPolygon(Polygon p)僅繪制通過深度測試的多邊形像素,除非您的庫具有某些功能,也需要使用模板遮罩。 如果不是,則需要編寫自己的光柵化器。 這篇舊論文提出了一種出色而簡單的光柵化算法,適用於當今的並行硬件。

這完全取決於您想了解的更多信息。

  • 如果要實現Z緩沖,則需要執行柵格化步驟,該步驟目前由Java2D完成。 一個好的起點可以是渲染的掃描線算法。
  • 如果您對隱藏表面的去除和剔除更感興趣,則可以從背面剔除開始

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM