回答
在OpenGL ES 2中,您仍然使用着色器。所以你完全可以使用任何你喜歡的紋理座標。剛剛介紹的第二紋理cooridnate對附加屬性和委派這對片段着色器,通常使用:
...
attribute vec2 texCoord0;
attribute vec2 texCoord1;
varying vec2 vTexCoord0;
varying vec2 vTexCoord1;
void main()
{
...
vTexCoord0 = texCoord0;
vTexCoord1 = texCoord1;
}
而在片段着色器使用相應的座標來訪問紋理:
...
uniform sampler2D tex0;
uniform sampler2D tex1;
...
varying vec2 vTexCoord0;
varying vec2 vTexCoord1;
void main()
{
... = texture2D(tex0, vTexCoord0);
... = texture2D(tex1, vTexCoord1);
}
當然,您需要爲這個新屬性提供數據(使用glVertexAttribPointer
)。但是,如果所有這些對你來說聽起來都非常陌生,那麼你應該深入研究一下GLSL着色器,或者實際使用OpenGL ES 1.在這種情況下,你應該重申你的問題,我會更新我的答案。
編輯:根據您對OpenGL ES 1的更新,情況有點不同。我假設你已經知道如何使用單個紋理併爲此指定紋理座標,否則在深入研究多紋理之前應該從那裏開始。
隨着glActiveTexture(GL_TEXTUREi)
你可以激活ith紋理單元。以下與紋理狀態有關的所有操作僅涉及第i個紋理單元(如glBindTexture
,還包括glTexEnv
和gl(En/Dis)able(GL_TEXTURE_2D)
)。
用於指定紋理座標,你還是使用glTexCoordPointer
功能,與單紋理,但glCientActiveTexture(GL_TEXTUREi)
可以選擇紋理單元向glTexCoordPointer
和glEnableClientAttrib(GL_TEXTURE_COORD_ARRAY)
以下呼叫是指哪些。
因此,這將是這樣的:
//bind and enable textures
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, <second texture>);
glTexEnv(<texture environment for second texture>); //maybe, if needed
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, <first texture>);
glTexEnv(<texture environment for first texture>); //maybe, if needed
glEnable(GL_TEXTURE_2D);
//set texture coordinates
glClientActiveTexture(GL_TEXTURE1);
glTexCoordPointer(<texCoords for second texture>);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glTexCoordPointer(<texCoords for first texture>);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//other arrays, like glVertexPointer, ...
glDrawArrays(...)/glDrawElements(...);
//disable arrays
glClientActiveTexture(GL_TEXTURE1);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
//disable textures
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);
我設定的參數爲第二個紋理之前,首先質地的原因才讓它們設置後,我們結束了紋理單元0活躍。我想我已經看到駕駛員在繪圖時出現問題,而另一個單元比單元0活躍。在結尾處保留一個或多或少乾淨的狀態總是一個好主意,這意味着默認的紋理單元(GL_TEXTURE0
)處於活動狀態,否則不關心多紋理的代碼可能會出現問題。
編輯:如果使用即時模式(glBegin/glEnd
),而不是頂點數組,然後你不使用glTexCoordPointer
,當然。在這種情況下,當然你也不需要glClientAttribTexture
。您只需使用glMultiTexCoord(GL_TEXTUREi, ...)
以及適當的紋理單元(GL_TEXTURE0
,GL_TEXTURE1
,...)而不是glTexCoord(...)
。但是,如果我得到正確的通知,無論如何,OpenGL ES並不具備即時模式。
- 1. opengl es 2.0紋理座標
- 2. OpenGL ES 2.0中具有不同紋理座標的兩個紋理
- 3. OpenGL ES 2.0中具有不同紋理的許多對象
- 4. 紋理座標的OpenGL
- 5. UV貼圖的OpenGL-ES紋理加載問題
- 6. OpenGL ES紋理不渲染
- 7. opengl對齊紋理座標
- 8. OpenGL紋理座標問題
- 9. OpenGL紋理貼圖座標
- 10. OpenGL ES 2.0紋理
- 11. OpenGL ES iPhone紋理
- 12. 計算紋理座標(的iOS /的OpenGL ES 2.0)
- 13. OpenGL不正確的紋理座標只有多紋理四邊形
- 14. OpenGL 2.0 ES座標
- 15. OpenGL ES紋理座標映射和限制
- 16. 如何在OpenGL ES 1.1中指定點精靈紋理座標?
- 17. OpenGL ES 2.0渲染到紋理座標系
- 18. 如何確定UV紋理座標n邊多邊形
- 19. 負載多紋理的OpenGL ES 2.0
- 20. 的OpenGL ES着色器多紋理
- 21. 紋理採樣不正確的UV座標
- 22. 的OpenGL ES:避免紋理
- 23. 的OpenGL ES 2.0:在紋理
- 24. OpenGL ES的旋轉紋理
- 25. 有人有在每張臉上具有不同紋理的立方體的代碼示例? (OpenGL ES 1)
- 26. OpenGL ES 1.1 2D紋理紋理iPhone
- 27. three.js:具有紋理座標的BufferGeometry
- 28. Android的OpenGL ES沒有繪製紋理
- 29. OpenGL ES中的座標
- 30. OpenGL ES的怪座標
歡迎來到StackOverflow,我希望你閱讀[FAQ](http://stackoverflow.com/faq#howtoask)。 –