2013-03-21 6 views
2

У меня есть GLKViewController, встроенный в обычный контроллер представления, отображающий вращающуюся трехмерную модель одного из продуктов моей компании. Я использую тот же код в другом приложении, чтобы отобразить другую модель, и у меня нет проблем с этим.Затенение различное на устройстве и симуляторе

По какой-то причине, когда я запускаю свое текущее приложение на симуляторе, я получаю совершенно гладкое затенение, как и ожидалось, но когда я запускаю устройство (я тестировал как iPad 3, так и iPad 4), я получаю то, что похоже, является затенением клеток, как если бы значения освещенности были более дискретными.

Настоящая путаница в том, что это происходит только при работе на устройстве и только в этой конкретной модели, а не с другими, которые я использовал.

Running in the simulator Running on the device

Есть известная ошибка в GLSL, что может вызвать это поведение?

EDIT

Интересно, что во время моей отладки, если я изменю

gl_FragColor = vec4(ambientColor.rgb + diffuseReflection + specularReflection, 1.0); 

в

gl_FragColor = vec4(diffuseReflection, 1.0); 

Я получаю желаемый результат, но когда я выход каждого компонента, то остальные компоненты отображаются только как черные, что не должно вызывать такого странного поведения затенения.

+2

Такая специфичность для конкретного устройства в моем опыте обычно исходит от точных артефактов. Используете ли вы низкие или средние значения в этих расчетах? Что произойдет, если вы поправитесь с повышением до следующего уровня точности? Другая вещь, которую я видел, вызывает черные пиксели - это ошибки в шейдере, такие как деления на ноль или переполнение. Они иногда обрабатываются в Simulator, а не на устройстве. –

+0

@BradLarson Я использовал много переменных lowp в шейдерах, но изменение их в highp не разрешило проблему. –

+0

@BradLarson. Как я могу проверить наличие/0 и переполнение? есть только одно подразделение во всем моем вычислении шейдеров (ослабление света) –

ответ

0

Вы проверили имена файлов ваших вершин и фрагментарных шейдеров?

Если у вас есть файл с именем: «vertexShader.vert» и попробуйте его с помощью «VertexShader.vert» (отметьте капитализацию), это будет работать на Simulator, но не на устройстве.

+0

Это определенно компиляция и использование правильных шейдеров. Если бы это была полная проблема шейдера, я предполагаю, что это будет проблема со всеми моими моделями, а не только с этой –

Смежные вопросы