Почему при уменьшении размера объекта в OpenGL ES объект становится легче? - PullRequest
4 голосов
/ 26 мая 2009

Почему при уменьшении (равномерном) уменьшении объекта в OpenGL ES 1.x объект становится светлее?

Было бы более разумно быть темнее, потому что не уменьшают ли нормали и темнее ли объект? Но по какой-то причине объект становится светлее. Когда я масштабируюсь, объект становится темнее. На мой взгляд, все должно быть наоборот.

Пожалуйста, не предлагайте использовать GL_NORMALIZE и т. Д. Мне просто любопытно, почему реализация OpenGL так работает.

Ответы [ 3 ]

7 голосов
/ 26 мая 2009

Простой вопрос, сложный ответ. Вот соответствующая выдержка из Красной книги:

Преобразование нормалей

Нормальные векторы не преобразуются в так же, как вершины или положение векторы. Математически лучше думать о нормальных векторах не как векторы, но как плоскости, перпендикулярные к этим векторам. Затем правила преобразования для нормальных векторы описываются правила преобразования для перпендикуляра самолеты. Однородная плоскость обозначается по вектору строки (a, b, c, d), где по крайней мере один из a, b, c или d является отлична от нуля. Если q ненулевое вещественное число, то (a, b, c, d) и (qa, qb, qc, qd) представляют одну и ту же плоскость. точка (x, y, z, w) T находится на плоскости (a, b, c, d) если ax + by + cz + dw = 0. (Если w = 1, это стандартное описание евклидовой плоскости.) Для (a, b, c, d) для представления евклидова самолет, по крайней мере один из a, b или c должен быть ненулевым. Если они все равны нулю, то (0, 0, 0, d) представляет собой «плоскость при бесконечность ", которая содержит все «указывает на бесконечность».

Если p - однородная плоскость, а v - однородная вершина, то утверждение "V лежит на плоскости р" написано математически как pv = 0, где pv нормальное матричное умножение. Если М неособое преобразование вершин (то есть матрица 4 × 4, которая имеет обратная M-1), тогда pv = 0 эквивалентно pM-1Mv = 0, поэтому Mv лежит на самолете ПМ-1. Таким образом, pM-1 является изображение плоскости под вершиной трансформация М.

Если вам нравится думать о нормальных векторах как векторы, а не как самолеты перпендикулярно им, пусть v и n будут векторы такие, что v перпендикулярно к п. Тогда nTv = 0. Таким образом, для произвольное неособое преобразование M, nTM-1Mv = 0, что означает, что nTM-1 это транспонирование преобразованного нормальный вектор. Таким образом, преобразованный нормальный вектор равен (M-1) T n. В других слова, нормальные векторы преобразуются с помощью обратной транспонирования преобразование, которое трансформирует точки. Уф!

Короче говоря, позиции и нормали не преобразуются одинаково. Как объяснено в предыдущем тексте, нормальная матрица преобразования равна (M-1) T . Масштабирование от M до sM приведет к (M-1) T / s : чем меньше масштабный коэффициент, тем больше преобразованная нормаль ... Вот и мы!

0 голосов
/ 07 декабря 2010

ответ в контексте opengl здесь, http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall/

см. № 16. это дает всю историю.

0 голосов
/ 26 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...