Hello All,
I'm trying to use the FEEDBACK and CSG examples to create the intersection of two spheres.
See the images for the initial setup.
I cannot create and/or display the third mesh (CSG resultant).
I know I'm missing something but can't find the culprit. I'm not even sure the feedback calls are executed correctly. Guidance would be much appreciated. See code below for what I have.
thank you in advance and best regards
john
procedure TForm1.Button1Click(Sender: TObject);
var
mo1 : TMeshObject;
mo2 : TMeshObject;
mo3 : TMeshObject;
fg : TFGIndexTexCoordList;
begin
{ //hide the TGLDummyCube}
GLDummyCube1.Visible := false;
MeshObject1.Visible := false;
MeshObject1.Visible := false;
{ //Clear our GLFreeForm of any meshes }
GLFreeForm1.MeshObjects.Clear;
GLFreeForm2.MeshObjects.Clear;
GLFreeForm3.MeshObjects.Clear;
Hello All,
I'm trying to use the FEEDBACK and CSG examples to create the intersection of two spheres.
See the images for the initial setup.
I cannot create and/or display the third mesh (CSG resultant).
I know I'm missing something but can't find the culprit. I'm not even sure the feedback calls are executed correctly. Guidance would be much appreciated. See code below for what I have.
thank you in advance and best regards
john
procedure TForm1.Button1Click(Sender: TObject);
var
mo1 : TMeshObject;
mo2 : TMeshObject;
mo3 : TMeshObject;
fg : TFGIndexTexCoordList;
begin
{ //hide the TGLDummyCube}
GLDummyCube1.Visible := false;
MeshObject1.Visible := false;
MeshObject1.Visible := false;
{ //Clear our GLFreeForm of any meshes }
GLFreeForm1.MeshObjects.Clear;
GLFreeForm2.MeshObjects.Clear;
GLFreeForm3.MeshObjects.Clear;
GLFreeForm1.StructureChanged;
GLFreeForm2.StructureChanged;
GLFreeForm3.StructureChanged;
{// Set GLfeedback to active }
GLFeedback1.Active := true;
{ //MeshObject1 and GLFreeForm1}
MeshObject1.Visible := True;
GLSceneViewer1.Buffer.Render(GLFeedback1);
MeshObject1.Visible := false;
mo1 := TMeshObject.CreateOwned(GLFreeForm1.MeshObjects);
mo1.Mode := momTriangles;
fg := TFGIndexTexCoordList.CreateOwned(mo1.FaceGroups);
fg.Mode := fgmmTriangles;
GLFeedback1.BuildMeshFromBuffer(mo1.Vertices, mo1.Normals, nil, fg.TexCoords, fg.VertexIndices);
{// repeat for MeshObject2 and GLFreeForm2 }
MeshObject2.Visible := True;
GLSceneViewer1.Buffer.Render(GLFeedback1);
MeshObject2.Visible := false;
mo2 := TMeshObject.CreateOwned(GLFreeForm2.MeshObjects);
mo2.Mode := momTriangles;
fg := TFGIndexTexCoordList.CreateOwned(mo2.FaceGroups);
fg.Mode := fgmmTriangles;
GLFeedback1.BuildMeshFromBuffer(mo2.Vertices, mo2.Normals, nil, fg.TexCoords, fg.VertexIndices);
{// Deactivate the feedback object }
GLFeedback1.Active := False;
{// do the CSG operation }
if GLFreeForm3.MeshObjects.Count = 0 then
TMeshObject.CreateOwned(GLFreeForm3.MeshObjects).Mode := momFaceGroups;
mo3 := GLFreeForm3.MeshObjects[0];
CSG_Operation(GLFreeForm1.MeshObjects.Items[0], GLFreeForm2.MeshObjects.Items[0], CSG_Subtraction, mo3,'1','2');
GLFreeForm1.Material.PolygonMode := pmLines;
GLFreeForm2.Material.PolygonMode := pmLines;
GLFreeForm3.Material.PolygonMode := pmFill;
GLFreeForm3.Material.FrontProperties.Emission.Alpha := 1;
GLFreeForm3.Material.FrontProperties.Emission.Blue := 0;
GLFreeForm3.Material.FrontProperties.Emission.Green := 0;
GLFreeForm3.Material.FrontProperties.Emission.Red := 0;
{//show the results}
GLDummyCube1.Visible := true;
MeshObject1.Visible := true;
MeshObject1.Visible := true;
end;