Буду признателен за помощь в следующем. Я пытаюсь отобразить форму кольца поверх другого объекта в 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 и пытаюсь обернуть голову вокруг него. Заранее благодарим за любые указатели / фрагменты, которые могут помочь.
Спасибо.