如何使用 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" 名称的查看器上,而不是场景中的所有查看器。
我通常在 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" 名称的查看器上,而不是场景中的所有查看器。