我正在尝试在我的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?
答案 0 :(得分:8)
OpenGL不是一个场景图,它只是一个更复杂的绘图API。您可以随时更改视口和变换参数,而无需更改到目前为止绘制的像素。因此,只需切换到屏幕空间坐标系并使用它绘制叠加层就很容易。