× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
RenderTexture のインスタンスを作る
texture->begin(); node->visit(); texture->end(); RenderTextureは、「ノード」を描画する。「画面」を描画するわけではない。 描画したい「ノード」(以降、ターゲットノードと呼ぶ)を、通常のdrawと同様に行うだけ。 だから、ターゲットノードに、setPosition()が入っていると、その分描画がずれてしまう。 これをRenderTextureのメソッドで修正するのは、ちょっと考え方が違うし、やりにくい (setVirtualViewport()で変更できるが。後述) 簡単な対処として、 描画前にターゲットノードにsetPosition(0,0)を行い、 描画が終わってから元の座標を再代入することが考えられる…(A) 少しスマートな方法として、ターゲットノードは、その上にダミーノードを作り、 ダミーノードにsetPosition()をしておき、描画したいノードそのものにはsetPosition()しないのが良いと思われる…(B) が、このやり方でも問題が。 renderするとなぜか、ノードが画面(親ノードではない)の左下隅に移動してしまうという問題が起きた 原因は詳しく追っていないが、 想像できるのは OpenGLのビューポート指定が(0,0,w,h)の形であり、 これだと画面の左下を切り取って描画する形になっている。 それに合わせるため、ノードを画面左下に配置して描画しているということだろうか 実際、上記の(A)の時は、この問題が起きていない。描画後にsetPosition()をしているからだろうか。 結局、 「ターゲットノードと同じものをもう一度作り、それを描画する」 という形に落ち着いた。一番無駄な形に… RenderTexture.cpp
PR |
|