如何使用 GLCanvas 在单个 GLSceneViewer 上绘制而不是在所有查看器上绘制?

How to draw on a single GLSceneViewer using GLCanvas but not on all viewers?

我通常在 GLDirectOpenGL1Render 上使用 TGLCanvas 来绘制这样的线条:

uses
  GLCanvas,
  GLRenderContextInfo
{...}

procedure TForm1.GLDirectOpenGL1Render(Sender: TObject;
  var rci: TRenderContextInfo);
var
   glc: TGLCanvas;
begin
  glc:=TGLCanvas.Create(GLSceneViewerL.Width, GLSceneViewerL.Height);
  with glc do
  begin
    //Drawing lines here
    Line(0, 0, 10, 20);
    Line(10, 20, 30, 30);
    {...}
  end;
  glc.Free;
end;

但在当前项目中,我有不止一个 GLSceneViewer 和不同的相机,我只需要在一个 GLSceneViewer 上画线,而不需要在所有其他场景查看器上画线。速度快的 OpenGl 绘图是首选。有什么想法吗?

好的,在玩弄了 GLSceneViewer 之后我想出了如何去做:而不是在 GLDirectOpenGL1 的 onRender 事件上画线,你应该在 上画线必要的 GLSceneViewer 的 PostRender 事件,因此代码应如下所示:

procedure TForm1.GLSceneViewerL(Sender: TObject);
var
   glc : TGLCanvas;
begin
    glc:=TGLCanvas.Create(GLSceneViewerL.Width, GLSceneViewerL.Height);
    with glc do
    begin
      //Drawing lines here
      Line(0, 0, 10, 20);
      Line(10, 20, 30, 30);
      {...}
    end;
    glc.Free;
end;

就是这样,线条将专门绘制在具有 "GLSceneViewerL" 名称的查看器上,而不是场景中的所有查看器。