Как рисовать на одном 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", но не для всех зрителей сцены.