GLSceneViewer1.Buffer.GetPickedObject (x, y)를 사용하여 선택 데모 당 GLViewerMouseDown 이벤트에서 GLscene 개체를 선택했습니다. 개체를 선택하고 마우스 왼쪽 단추로 색을 변경 한 다음 다른 마우스 왼쪽 단추로 선택을 취소하고 다른 개체를 선택하면 선택이 취소됩니다. TGLSceneObject는 IsPicked : boolean 속성을 필요로합니다. GLScene을 수정하는 것으로 누군가가 이것을 알면 서늘할 것입니다. 여기에 내가 작성한 코드가 있지만 일종의 작품은 아닙니다. SetSelected (Selected, SelectedColor)는 선택된 객체의 색상을 변경합니다.GLScene picking
procedure TForm32.GLSceneViewer1MouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
var
Selected : TGLSceneObject;
AButton : TGLMouseButton;
begin
AButton := TGLMouseButton(Button);
// if an object is picked...
Selected := (GLSceneViewer1.Buffer.GetPickedObject(x, y) as TGLSceneObject);
case AButton of
mbLeft:
begin
if(Selected <> UnSelected) then
begin
if(Assigned(Selected)) then
begin
SetSelected(Selected, SelectedColor);
StatusBar1.Panels[0].Text := 'Selected';
UnSelected := Selected;
end
else
if(not Assigned(Selected)) then
begin
UnSelected.Material.FrontProperties.Emission.Color:= clrBlack;
UnSelected.Material.FrontProperties.Ambient.Color := clrGray20;
UnSelected.Material.FrontProperties.Diffuse.Color := clrGray80;
StatusBar1.Panels[0].Text := 'Unselected';
UnSelected := Selected;
end;
end;
end;
end;
end;
나에게이 쉬울 것 :
procedure TForm32.GLSceneViewer1MouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
var
Selected : TGLSceneObject;
begin
Selected := (GLSceneViewer1.Buffer.GetPickedObject(x, y) as TGLSceneObject);
if(not Selected.IsPicked) then
SetSelected(Selected, SelectedColor)
else
SetSelected(Selected, UnSelectedColor);
end;