【发布时间】:2011-11-16 13:27:28
【问题描述】:
我将不胜感激以下方面的帮助。我正在尝试在 OpenGL ES 1.1 中为 iPhone 游戏渲染另一个对象顶部的环形。环本质上是两个圆之间的区别。
我为戒指本身准备了一个图形,中间是透明的。
我曾希望只创建一个圆圈,并将纹理应用到它上面。纹理是占据纹理全尺寸的环的图片(即环的外侧接触纹理的四个边)。在所使用的图形中,圆环的中心是透明的。
它需要在中心是透明的,以让下面的对象显示出来。环渲染正确,但在中心是一个实心黑色块,不透明。对于解决此问题的任何帮助,我将不胜感激。
我用来渲染圆圈的代码如下(根本没有优化:我会将坐标移动到适当的缓冲区等中以供以后的代码使用,但我这样编写它只是为了尝试让它工作。 ..)
if (!m_circleEffects.empty())
{
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
int segments = 360;
for (int i = 0; i < m_circleEffects.size(); i++)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(m_circleEffects[i].position.x, m_circleEffects[i].position.y, 0);
glBindTexture(GL_TEXTURE_2D, m_Texture);
float radius = 1.764706;
GLfloat circlePoints[segments * 3];
GLfloat textureCoords[segments * 2];
int circCount = 3;
int texCount = 2;
for (GLfloat i = 0; i < 360.0f; i += (360.0f / segments))
{
GLfloat pos1 = cosf(i * M_PI / 180);
GLfloat pos2 = sinf(i * M_PI / 180);
circlePoints[circCount] = pos1 * radius;
circlePoints[circCount+1] = pos2 * radius;
circlePoints[circCount+2] = (float)z + 5.0f;
circCount += 3;
textureCoords[texCount] = pos1 * 0.5 + 0.5;
textureCoords[texCount+1] = pos2 * 0.5 + 0.5;
texCount += 2;
}
glVertexPointer(3, GL_FLOAT, 0, circlePoints);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_FAN, 0, segments);
}
m_circleEffects.clear();
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
我一直在尝试创建一个环而不是一个圆圈,但我还没有做到这一点。
我想最好的方法实际上不是创建一个圆,而是一个环,然后也获得等效的纹理坐标。我还在试验圆环的宽度,但是,圆环的半径很可能是整个圆的 1/4 宽度。
仍然是 OpenGL 的菜鸟,并试图绕开它。提前感谢任何可能有帮助的指针/sn-ps。
谢谢。
【问题讨论】:
标签: iphone opengl-es textures geometry