Im not sure what you mean by "Can we used glTexImage3D to perform rendering?" glTexImage3D is used to load 3D texture data to a texture buffer object. You can not read and write to the same memory in a shader (that would create lock issues). However what you can do is to double buffer:
Read from texture1 and write to texture2 and before the next frame you swap the bindings of the textures so that you read from texture2 and write to texture1.
Just to clarify: if you want to preform your writing operations in the fragment shader (meaning you want to write a value for each fragment of your projected primitive) then you would render-to-texture using an FBO (sounds like this is what you are looking for).
However if you only want to write values per vertex i.e. capture the output values of your vertex shader then you would use transform feedback.