最初に、実際に試した事はないです。
というか、最近Unityを触っていないです。
まず、Unity抜きで話をします。
もしかすると質問者さんはOpenGLに理解があるようなので、無用かもしれませんが、一応。
OpenGLでは、描画結果を「フレームバッファ」という場所に描きこみます。
通常これは画面に表示するものですが、FrameBufferObjectというものを作成してバインドする事により、オフスクリーン描画を行う事ができます。(今回は関係ないので、詳細説明はパス)
更に、フレームバッファの描画結果を、glCopyTexImage2Dなどの関数を使ってテクスチャにコピーしたり、glReadPixels関数を使ってピクセルイメージをCPUに取ってくる事ができます。
さて、ここからがUnityの話です。
先程も言ったとおり、自分の憶測なのであしからず。
UnityでOpenGLを使っているならば、描画結果はフレームバッファに書かれるはずなので、上で書いたとおりにやればUnityの描画結果をテクスチャなりピクセルイメージなりにできる気がします。
具体的には、
- Cameraにスクリプトを付加し、MonoBehaviour.OnPostRenderで、ネイティブプラグイン(DLL)の関数を呼ぶ。
- 呼ばれたネイティブプラグインの関数の中で、フレームバッファの内容を、glCopyTexImage2Dを呼んでテクスチャにコピーするなり、glReadPixelsを呼んでCPUにイメージをコピーするなりする。
- 後は、煮るなり焼くなり醤油をかけておいしくいただくなり、お好きなように。
でできるんじゃないかな、と思っています。
とりあえず試してみてはいかがでしょうか。
と書きつつUnityのマニュアルを眺めていたら、なんかそれっぽいものを見つけたので、それも書いておきます。
(というか、こっちのほうがいいかも。)
- 上記と同じように、OnPostRenderで描画を終えた後に、Texture2D.ReadPielsを呼んで描画結果をテクスチャにコピー。
- Texture.GetNativeTexturePtrを呼んで、OpenGLのテクスチャ名を取得。
(一般的に、OpenGLで「テクスチャ名」とはglGenTexturesで作成されたテクスチャオブジェクトを指すはずなので、この値でOpenGLのテクスチャとして扱えると思う)
3. ネイティブプラグインの関数に値を渡し、後は煮るなり(以下略)
もちろん、こちらの方法も試していないので、あしからず。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。