簡體   English   中英

OpenGL如何渲染其三角形?

[英]How does OpenGL render its triangles?

我需要一種無需使用OpenGL即可渲染像素完美三角形的算法。

在哪里可以獲得像OpenGL這樣的算法? 最好是單線程。

它必須像OpenGL那樣做,因為OpenGL不會在共享邊的兩個三角形上留下間隙或重疊像素。 Scanline方法會導致這些錯誤: http : //joshbeam.com/articles/triangle_rasterization/ 我也嘗試了這種半空間算法: http : //devmaster.net/forums/topic/1145-advanced-rasterization/但我無法使其工作(亂碼)。

  • OpenGL是如何做到的? 它的工作量如此之大,以至於我應該忘掉它,而改用(buggy)scanline方法嗎?

  • 在哪里可以找到算法?

我希望使用C ++解決方案,但語言不是問題。

OpenGL使用基於scanline的方法,就像Alan和您的文章鏈接中提到的那樣。 但是,管理差距並不是數學准確性的問題。 您需要為三角形邊緣上的像素附加約定。 OpenGL使用的約定與Direct3D使用的約定相同。 它被稱為“左上”,我見過的最好的解釋是在此MSDN柵格化規則文章上

典型的OpenGL實現將使用scanline / rasterization方法與您的第一個鏈接大致相同。 避免出現間隙和重疊的關鍵是要對數學非常小心,以免舍入誤差的不確定性。

如果您將像素視為屏幕上具有某個有限面積的正方形,則可能會出現重疊,因為相鄰的三角形通常會同時重疊像素。 但是,相反,如果您將像素視為正方形中心的無限小點,則可以保證沒有間隙或重疊。

您還需要定點整數數學的算術確定性,而不是浮點數學的舍入誤差。 每個光柵化掃描線的左端從大於或等於起始掃描值的第一個像素開始。 光柵化掃描線的右端在第一個像素嚴格小於結束掃描值之前的那一端結束。

看一下OpenMesa ,它是OpenGL規范的開源實現。 目前,它最多支持OpenGL 3.0。

暫無
暫無

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

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