2014-05-08 59 views
0

如何將紋理添加到Java Open GL中的對象(特別是對於AndAR)...我的代碼出了什麼問題?我讀了一些例子,但總是相同的,只有一個「黑色矩形」或紋理綁定在背景上......我怎樣才能將它綁定到我的矩形?JOGL - 將紋理添加到對象 - 僅黑色對象

這裏是我的代碼:

int[] textureIDs = new int[1]; 
    gl.glEnable(GL10.GL_TEXTURE_2D); 

    gl.glGenTextures(1, textureIDs, 0); 
    //load the textures into the graphics memory 


    Bitmap bm = BitmapFactory.decodeResource(CustomActivity.context.getResources(), R.drawable.icon); 

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureIDs[0]); 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bm,0); 
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 




    GLUT.glutSolidBox(gl,200.0f,100.0f,10.0f); 
+0

你不需要GLUT來畫一個簡單的平行六面體,皮爾斯的答案是正確的。我寧願創建一個VBO來存儲頂點和紋理座標,並調用glBindBuffer + glDrawArrays或glDrawElements來繪製它。 – gouessej

回答

1

對於texturinh有一個有用的效果,則需要質地coordianates它告訴GL其紋理的部分將被映射到基元的哪些部分。由於您使用的是固定功能流水線,有兩種選擇:

  1. 供應幾何圖元每頂點紋理座標,或
  2. 使用自動紋理座標生成。

GLUT對象從不提供任何紋理座標。這意味着OpenGL將爲每個頂點使用當前設置的紋理座標。這將導致只有單個特定的紋理位置被反覆採樣 - 它不一定是黑色的,但是您的對象將被均勻着色。

您可能會想要去選項2,然後自動紋理座標生成,這是由`glTexGen()功能家族控制。但是,可用的紋理座標生成模式都不適合紋理立方體。

所以唯一真正的解決方案是手動指定立方體頂點並指定有用的紋理座標。你從來沒有指定你想要的映射。紋理是一個矩形圖像,您可以將它映射到每張臉上,我們可能希望將圖像的不同子矩形映射到每一面 - 並且您必須告訴GL如何映射它,它不能猜測只是因爲你繪製了6張臉並啓用了紋理。

或紋理綁定在背景上。

當需要繪製非紋理時,需要再次禁用紋理。