如何使用GLCanvas在单个GLSceneViewer上绘图,而不是在所有观看者上绘图?

时间:2015-06-04 03:47:47

标签: delphi opengl glscene

我通常在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绘图可以提供快速的速度。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,在玩了GLSceneViewer之后我想出了怎么做:不要在GLDirectOpenGL1的 onRender 事件上画线,你应该在 PostRender 事件上绘制线条。一个必要的GLSceneViewer,所以代码看起来应该是这样的:

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”名称绘制,但不适用于场景的所有观看者。