4
我想要在我的OpenGL渲染场景上叠加图形。在OpenGL渲染上下文中叠加图形
我已经设法启动并运行,但FPS的下降太多了。
我目前使用GLScene结合Graphics32。
我所做的是将GLScene渲染上下文渲染为位图, 将该位图应用于TImageView32,并在TImage32中执行一些最终UI触摸。
我使用的渲染成位图的代码如下,这也降低了FPS是:
procedure RenderToBitmap;
var b: TBitmap;
begin
b:=TBitmap.Create;
b:=GLSceneViewer.Buffer.CreateSnapShotBitmap; //TGLSceneViewer
ImgVwr32.Bitmap.Assign(b); //TImageViewer32
b.Free;
end;
我已经尝试了一些其他的代码(见下文),这给了我一个实时渲染,但我不能 修改ImageViewer32的“位图”属性。换句话说:GLScene渲染上下文正在渲染,但我自己的图形没有渲染。 代码:
//The following line is put inside the FormCreate call
GLSceneViewer.Buffer.CreateRC(GetDC(ImgVwr32.Handle),false);
我怎样才能在渲染上下文的顶部适当覆盖图形,或复制渲染上下文输出,不失FPS?
有趣。我试图将四边形映射成1个单位的位置等于屏幕上的1个像素。你如何建议覆盖我的GUI?你有一些参考文章或什么? – xaid 2014-10-06 19:31:05
通常你会选择一个坐标系,使得范围[-1,1]覆盖整个视口。不要试图在OpenGL中思考像素,除了一些特殊情况下它没有意义,并且当你以像素为单位考虑时,准备弯曲你的大脑,因为它不是微不足道的。像素中心不是整数坐标,而是在视口中的x + 0.5处,对于纹理,坐标0和1指的是边界像素的外边缘,即纹理是否处于包裹模式中,正好在包裹纹理像素之间。 – datenwolf 2014-10-07 00:01:28
好的。那么我最有可能把我的脑子弯曲得足够大。这就是为什么我想在OpenGL渲染上下文中叠加2D图形的原因,但正如我在我的问题中所说的:如何在不丢失FPS的情况下高效地执行该操作? – xaid 2014-10-07 13:40:49