gluLookAtをglLoadMatrixで置き換えてみる

レンダラにカメラ位置を渡すのに便利なように、カメラの位置を行列で保持することにした。

もともと、

gluLookAt(pos[0], pos[1], pos[2], target[0], target[1], target[2], up[0], up[1], up[2])

としていたのを

大間違いしていたことが判明。以下、直しました(5/15)
glGetFloat(GL_MODELVIEW_MATRIX)で見ながら直したので多分大丈夫w

z=normalize(pos-target)
x=normalize(numpy.cross(up, z))
y=normalize(numpy.cross(z, x))
distance=norm(target-pos)
m=numpy.array((
  (x[0], y[0], z[0], 0),
  (x[1], y[1], z[1], 0),
  (x[2], y[2], z[2], 0),
  (0, 0, -distance, 1.0),
), 'f')
glLoadMatrixf(m)

でほぼ同等。
OpenGLの行列の並びが列・行なのに注意しる。