2016-09-28 141 views
0

我想製作一些AR東西。我通過一些教程的幾個步驟走像OpenGL ES 2.0中的着色器Android

我使用的OpenGL ES 2.0。特別是在第一篇教程中,他們爲片段和頂點着色器實現了一些GLSL着色器代碼。然後他們編譯它。

我是否需要爲我想用OpenGL繪製的每個原始對象實現這樣的代碼?或者,我可以重用着色器代碼來繪製不同類型的形狀和相同類型形狀的不同實例嗎?

此外:我只能重用着色器代碼,或者我也可以重用編譯着色器程序嗎?

回答

1

對幾種幾何形狀重複使用相同的着色器是提高性能的常用方法,因爲它們將被視爲單次繪製調用。 如果設置着色器(glUseProgram),它將可用於任何數量的後續調用。

該教程是非常基本的,你應該把着色器代碼抽象成更面向對象的方法。 例如:

public class Material{ 
    String mVertexShaderCode; 
    String mFragmentShaderCode; 
    int mProgram; 

    void initialize(){ 
     // do loadShader and attachShader here 
    } 

    void draw(){ 
    GLES20.glUseProgram(mProgram); 
    // do more draw stuff 
    } 
} 

也許這使得它更容易包裝你的頭周圍,你可以如何使用和重複使用的着色器代碼。

回答後續問題;是的,你可以重用兩者。限制是如果您也重用編譯的着色器,則不能使用不同的着色器特定屬性。在您開始使用它們時,這些限制會變得很明顯。

+0

是的,謝謝。這就是我想要做的。但是我仍然不明白的是這個'Material'類會是什麼?它是否代表特定的幾何對象?或者它畫幾個幾何對象? – unlimited101

+0

它可以做。你(我)通常做的是將其附加到幾何對象。當想要繪製幾何圖形時,着色器(程序)被設置並且網格被繪製,然後將其緩衝區注入到着色器中。如果您有多個對象使用相同的材​​質實例(並因此使用着色器),則不需要更改它們之間的材質。 – reden

相關問題