簡體   English   中英

如何在OpenGL中繪制不同大小的點精靈?

[英]How to draw point sprites of different sizes in OpenGL?

我正在制作一個使用點精靈的小型OpenGL Mac應用程序。 我正在使用頂點數組繪制它們,並且我想使用類似的“數組”函數為它們提供所有不同的大小。

在OpenGL ES中,有一個名為GL_POINT_SIZE_ARRAY_OES的客戶端狀態,以及一個對應的函數glPointSizePointerOES()可以完全滿足我的要求,但是我似乎找不到標准OpenGL中的等效項。

OpenGL是否以任何方式支持此功能?

OpenGL不支持此Apple擴展,但是您可以通過其他方式進行操作:

對於固定管道:(OpenGL 1.4及更高版本)

您需要設置點參數:

float attenuation[3] = {0.0f, 1.0f, 0.0f};    
glPointParameterfvEXT(GL_POINT_DISTANCE_ATTENUATION, attenuation);

glPointParameterfEXT(GL_POINT_SIZE_MIN, 1.0f);
glPointParameterfEXT(GL_POINT_SIZE_MAX, 128.0f);

glEnable(GL_POINT_SPRITE);

OpenGL將以這種方式為您計算點大小

着色器

以下是使用着色器進行渲染的一些信息: http : //en.wikibooks.org/wiki/OpenGL_Programming/Scientific_OpenGL_Tutorial_01

為了擴展芬的答案,固定功能的OpenGL管道無法完全滿足您的要求。 它可以做隨着Z距離增加而變小的“透視”點,僅此而已。

對於每個頂點上的任意點大小,您需要一個自定義頂點着色器以設置每個頂點的大小。 將點大小作為屬性數組(重復使用曲面法線或tex坐標,或使用自己的屬性索引)或在紋理貼圖中傳遞,例如將一維紋理的寬度等於點數組的大小。 Fen引用的着色器代碼示例使用紋理貼圖技術。

如果通過“ OpenGL是否支持此功能”,則表示“絕對可以在OpenGL中執行類似的操作”。

使用着色器。 傳遞一個表示您的點大小的一維通用頂點屬性。 然后在您的頂點着色器中,將該點大小設置為頂點着色器的gl_PointSize輸出。 這真的很簡單。

如果您的意思是“固定功能OpenGL是否支持此功能”,否。

暫無
暫無

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

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