Вы просто сдвигаете диапазон на <-1.0,+1.0>
, так что
если у вас есть цветовые каналы в диапазоне <0.0,1.0>
// a)
nx=(2.0*r)-1.0
ny=(2.0*g)-1.0
nz=(2.0*b)-1.0
or:
// b)
nx=2.0*(r-0.5)
ny=2.0*(g-0.5)
nz=2.0*(b-0.5)
если у вас 8 бит на канал, то диапазон равен <0,255>
nx=(float(r)/127.5)-1.0
ny=(float(g)/127.5)-1.0
nz=(float(b)/127.5)-1.0
Если вы посмотрите на изображение карты нормалей, вы должны увидеть голубоватые цвета, потому что нейтральный normal=(0,0,1)
, направленный вверх от плоской грани, кодируется как color=(r=0.5,g=0.5,b=1.0)
, как здесь:
а>
также посмотрите здесь: сопоставление нормалей пошло ужасно неправильно, где нормаль вычисляется из такой текстуры в GLSL strong> методом #1b:
const vec4 v05=vec4(0.5,0.5,0.5,0.5);
texture2D(txr_normal,pixel_txr.st)-v05)*2.0;
Также (r,g,b)
можно сопоставить с (nz,ny,nx)
вместо (nx,ny,nz)
, в этом случае просто поменяйте местами r,b
(вместо этого карта нормалей становится красноватой)
person
Spektre
schedule
19.12.2015