Как рисовать на одном GLSceneViewer, используя GLCanvas, но не на всех зрителях?

Я обычно использую TGLCanvas на GLDirectOpenGL1Render, чтобы рисовать линии следующим образом:

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 ответ

Решение

Хорошо, после игры с GLSceneViewer я понял, как это сделать: вместо рисования линий на событии onRender GLDirectOpenGL1, вы должны рисовать линии на событии 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", но не для всех зрителей сцены.

Другие вопросы по тегам