回答
在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
- 4. OpenGL纹理坐标问题
- 5. opengl对齐纹理坐标
- 6. 计算纹理坐标(的iOS /的OpenGL ES 2.0)
- 7. OpenGL ES iPhone纹理
- 8. OpenGL ES 2.0纹理
- 9. OpenGL 2.0 ES坐标
- 10. 如何在OpenGL ES 1.1中指定点精灵纹理坐标?
- 11. OpenGL ES纹理坐标映射和限制
- 12. OpenGL ES 2.0渲染到纹理坐标系
- 13. 如何确定UV纹理坐标n边多边形
- 14. 的OpenGL ES着色器多纹理
- 15. OpenGL ES的旋转纹理
- 16. 的OpenGL ES 2.0:在纹理
- 17. OpenGL ES中的坐标
- 18. Android的OpenGL ES没有绘制纹理
- 19. Android OpenGL ES 2.0多纹理和相机
- 20. OpenGL ES在多纹理中使用glColor4f
- 21. OpenGL ES 2.0渲染为多个纹理
- 22. 的OpenGL - 掩模具有多个纹理
- 23. Android上的OpenGL ES 1.1:Q纹理坐标没有任何效果
- 24. OpenGL的纹理坐标被歪斜
- 25. OpenGL ES渲染到纹理
- 26. OpenGL ES 2.0衍生纹理
- 27. 禁用opengl es纹理ios
- 28. opengl es 2.0纹理加载
- 29. OpenGL es 2.0 Android纹理
- 30. 设置OpenGL ES 2.0纹理
欢迎来到StackOverflow,我希望你阅读[FAQ](http://stackoverflow.com/faq#howtoask)。 –