1.Render Target - Normal Texture looks just has r and g value , so where is blue ?.(I use Render Target pixel format A32B32G32R32F)
If you think about what blue stands fors, namely the direction component on the z-axis (or is it x in this case?), we can safely assure that "blue" in this case is negative ( < 0.0f), since said axis points away from the camera, models normals towards it. Also, your format is overkill for normals, just convert them to 0.0f -> 1.0f range an store them in X8R8G8B8-target. You will later on want to convert them back, which is easy as well.
//convert to 0.0f - 1.0f
out.vNrm.rgb = 0.5 * in.vNrm.rgb + 0.5;
//convert from 0.0f -1.0f
out.vNrm.rgb = 2.0* in.vNrm.rgb - 1.0;
2.Render Target - Position Texture looks really strange, what I think is position just like normal has 3 floats value, but why there is no
brightness change？（It looks really blue !）
In contrast to normals, which are at least in range from -1.0f to 1.0f, position ranges up to XXXXX.Xf, so the light gradient areas are the once that lie in displayable 0.0f - 1.0f range, everything else is clamped to maximum 1.0f. You can't display color values beyond 1.0f, that is.
3.The problem above is RenderMonkey's problem or my code error ?
Neighter, nor, its just how graphics work ;)
EDIT: Some pictures how my gbuffer looks like, from the actual app:
EDIT2: Actually, note that my g-buffer is in world space, not in view projection space, so that explains why it looks slightly different.
Now look at this picture, you should see a similar change when you turn the camera:
Edited by Juliean, 07 April 2013 - 05:27 AM.