crsib написал(а):Вы зарегистрированны на gamedev. Если не ошибаюсь, как Fantom09.
Действительно, зарегистрировался 2 дня назад, исключительно по причине упоминания моей статьи и мой темы DL.
Сомневаюсь что я в ближайшее время еще что-то там напишу, потому считайте что этого аккаунта нет и я там не зарегистрирован.
"большая часть населения Вашего форума"
Я не большая часть, что же касается тем - я начал заниматься OGL примерно пол года назад, потому не стоит удивляться что в темах 2-3 месячной давности написан бред. Сейчас количество информации, получаемой мною, ежедневно увеличивается по экспоненте, потому тут каждый день на счету, а 3 месяца - это всеравно что в прошлом веке, потому просьба вести диалог исходя из сегодняшнего.
Теперь по теме:
"Утверждения 1, 2, 3 не верны"
В формулах действительно есть ошибки (мне лень было выводить формулы для описания бредовых вариантов), но я вас не просил написать что это бред - я вас просил рассказать что же именно возвращает gl_FragCoord.z/gl_FragCoord.w и как из этого получить расстояние от объекта до точки наблюдения, вы же опять ушли от ответа.
Что же касается вариантов - можно было бы догадаться, мы здесь не на литературном форуме и вы, надеюсь, не DungeonLords, чтоб разжевывать каждое слово, потому воспринимаю это либо как стёб либо как уклонение от ответа.
Хорошо, перефразирую еще раз:
Что же касается первого выражения - вы будете оспаривать теорему пифагора? И будете утверждать что расстояние между точками вычисляется по другим формулам? Заметьте - я не написал знак присвоить, я написал знак равенства (знака эквивалентно здесь нет).
Тоесть gl_FragCoord.z/gl_FragCoord.w является искомым решением (расстоянием от фрагмента до точки наблюдения).
Второй вариант -
Steps3D написал(а):Только если я не ошибаюсь в 5) это будет расстояние вдоль оси Oz
Относился к этому утверждению, действительно, там нужно было бы записать gl_FragCoord.z/gl_FragCoord.w==Z-ZNear(или просто Z?), но до этого можно было бы догадаться исходя из описания. В этом случае, прежде чем определить расстояние до точки наблюдения (у нас ведь имеется лишь координата Z, а координаты X,Y у нас все еще оконные) нам придется выполнить обратную процедуру, тоесть домножить на w, после чего домножить на обратную проекционную матрицу (модельную и видовую трансформацию можно не производить, так как по условию камера находится в координатах (0,0,0)). И лишь после получения этих координат мы будем иметь право вычислить расстояние до точки наблюдения.
Третий пункт - если из точки наблюдения провести отрезок к объекту (в точку x,y,z), то он пересечет плоскость z=zNear в точках Xnear,Ynear,Znear, в этом случае, если (обращаю внимание на то, что я предлагаю варианты а не утверждаю) gl_FragCoord.z/gl_FragCoord.w есть ничем иным как расстоянием между точками A(x,y,z) и B(Xnear,Ynear,Znear), то расстояние до точки наблюдения будет вычисляться как:
Distance=sqrt(Xnear^2+Ynear^2+Znear^2)+gl_FragCoord.z/gl_FragCoord.w
Надеюсь так будет понятнее о чем я говорил, если нет - не стесняйтесь, спрашивайте.
Так же напоминаю - есть еще Ваш вариант, где я Вам предлагаю записать так как это будет правильно.
"На всякий случай уберем элемент шаманства"
Не стоило. Я вот тоже так предполагал, что FragCoord.z есть ни что иное как координата z после применения перспективной матрицы, пока не прочитал что об этом написано в спецификации GLSL, теперь мне требуется аргументы по существеннее матриц трансформации, и я очень надеюсь получить их от вас.
Отредактировано Fantom (2009-11-15 01:45:39)