iPhone OpenGL-ES: прекращение движения источника света - PullRequest
0 голосов
/ 28 января 2011

Я следовал руководству по освещению и настроил источник освещения для своего вращающегося куба (вращается при взаимодействии пользователя с 3 осями)

Однако что бы я ни делал, я не могудержите источник света в правильном положении, он вращается вместе с кубом.Поэтому, если я поверну куб, одна часть будет гореть, а одна - нет.

Я делаю немало манипуляций с матрицей.Я попытался сбросить матрицу и затем применить источник света, я попытался glLoadIdentity(), чтобы восстановить вид.

Я просто не могу держать это в покое.

static const Vertex3D light0Position[] = {{0.0, 10.0, 10.0}};
glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position); 

// Calculate light vector so it points at the object
static const Vertex3D objectPoint[] = {{8.0, 8.0, -4.0}};
const Vertex3D lightVector = Vector3DMakeWithStartAndEndPoints(light0Position[0], objectPoint[0]);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, (GLfloat *)&lightVector);

1 Ответ

1 голос
/ 29 января 2011

Положение и направление прожектора, которые вы указываете для OpenGL ES, преобразуются текущей матрицей вида модели во время вызова glLightfv и применяются к вершине после того, как она была преобразована матрицей вида модели во время вызовите glDrawArrays / glDrawElements. Ни один из них не принимает во внимание состояние проекционной матрицы.

Чтобы мы могли понять, как ваши преобразования могут идти не так, вам нужно точно указать, когда вы применяете преобразования вашего объекта / мира / камеры к матрице вида модели, и где спецификация и рисование свойств света происходит относительно это.

...