Я работаю над фронтальным рендером для 2D-движка с использованием ортографической проекции. Я хочу использовать буфер глубины, чтобы избежать перерисовки. У меня есть 16-битный буфер глубины, камера с Z = 100, смотрящая на Z = 0, zNear - 1, а zFar - 1000. Каждый визуализированный спрайт устанавливает свои координаты Z во все более удаленные значения, что позволяет тесту глубины пропустить рендеринг. все, что находится внизу.
Однако я знаю, что положение Z в конечном итоге со значениями буфера Z является нелинейным. Я хочу использовать полное разрешение 16-битного буфера глубины, т.е. разрешить 65536 уникальных значений. Поэтому для каждого отображаемого спрайта я хочу увеличить позицию Z до следующей позиции, чтобы она соответствовала следующему уникальному значению буфера глубины.
Другими словами, я хочу повернуть увеличивающийся индекс (0, 1, 2, 3 ...) спрайта, который рисуется, в соответствующую позицию Z для каждого спрайта, чтобы иметь уникальное значение буфера глубины. Я не уверен в математике за этим. Какой расчет для этого?
Заметьте, я работаю в WebGL (в основном OpenGL ES 2), и мне нужно поддерживать широкий спектр аппаратного обеспечения, поэтому, хотя такие расширения, как gl_FragDepth, могут сделать это проще, я не могу использовать его по соображениям совместимости.