Странное поведение с осветительными линиями в OpenGL ES 1.1 для iOS - PullRequest
1 голос
/ 30 июля 2011

Я пишу игру с 3D-графикой для iPad.Я использую множество каркасных поверхностей, нарисованных линиями.

До недавнего времени я всегда выключал освещение, когда рисую свои линии;Я полагал, что линии не имеют нормалей, поэтому освещение не будет работать.Просто для забавы я попытался включить освещение, чтобы нарисовать свои линии, просто чтобы посмотреть, что произойдет, и я получил некоторые удивительные результаты.

Линии нарисованы белым и выглядят белыми при выключенном освещении, однако они поворачиваютсяокрашивается при включении освещения.В частности, линии меняются на цвет последнего врага, который появится на экране.Я также получаю эффект затухания белого, который, как мне кажется, как-то связан с положением источника света.

Сначала я подумал, что моя функция glColor4f настроена на цвет самого последнего врага, который былнарисован, но у меня определенно установлен белый цвет, и, кроме того, он рисуется белым при выключенном освещении.

Вот код, который рисует линии:

-(void)drawWireFrameWithData:(GLSurfaceData*)bufferData
{
    glPushMatrix();

    glDisableClientState(GL_NORMAL_ARRAY);
    //glDisable(GL_LIGHTING);

    glTranslatef(self.centrex, self.centrey, self.centrez);

    glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

    glBindBuffer(GL_ARRAY_BUFFER, bufferData.vertexBuffer);
    glVertexPointer(3, GL_FLOAT, 3 * sizeof(GLfloat), 0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferData.lineIndexBuffer);

    glDrawElements(GL_LINES, bufferData.lineIndexCount, GL_UNSIGNED_SHORT, 0);

    glEnableClientState(GL_NORMAL_ARRAY);
    //glEnable(GL_LIGHTING);

    glPopMatrix();
}

1 Ответ

0 голосов
/ 09 августа 2011

хорошо, я разобрался.

glColor4f используется для установки выключенного цвета.Когда освещение включено, OpenGL использует свойства материала объекта для установки цвета.Свойства материала были заданы свойствами материала врагов, когда я рисовал линии, все, что мне нужно было сделать, это установить для линий.

...