@@ -213,6 +213,9 @@ int main()
213213 float metallic = 0 .2f ;
214214 float roughness = 0 .3f ;
215215
216+ // Apply modification algorithm
217+ bool ModifyModel = false ;
218+
216219 // openGL settings
217220 glEnable (GL_DEPTH_TEST);
218221 glEnable (GL_BLEND);
@@ -325,67 +328,37 @@ int main()
325328 if (ImGui::Button (" Original" ))
326329 {
327330 obj = objects.findObj (currObject); // search for the object requested
328- mesh.Rebuild (obj); // rebuild mesh based on object info
329- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
330-
331- objectVA.Bind ();
332- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
333- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
331+ ModifyModel = true ;
334332 }
335333 if (ImGui::Button (" Beehive Surface" ))
336334 {
337335 Surface BH (obj);
338336 obj = BH.Beehive ();
339- mesh.Rebuild (obj); // rebuild mesh based on object info
340- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
341-
342- objectVA.Bind ();
343- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
344- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
337+ ModifyModel = true ;
345338 }
346339 if (ImGui::Button (" SnowFlake Surface" ))
347340 {
348341 Surface SF (obj);
349342 obj = SF.Snowflake ();
350- mesh.Rebuild (obj); // rebuild mesh based on object info
351- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
352-
353- objectVA.Bind ();
354- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
355- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
343+ ModifyModel = true ;
356344 }
357345 if (ImGui::Button (" Catmull Clark Subdivision Surface" ))
358346 {
359347 Surface CC (obj);
360348 obj = CC.CatmullClark ();
361- mesh.Rebuild (obj); // rebuild mesh based on object info
362- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
363-
364- objectVA.Bind ();
365- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
366- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
349+ ModifyModel = true ;
367350 }
368351 if (ImGui::Button (" Doo Sabin Subdivision Surface" ))
369352 {
370353 Surface DS (obj);
371354 obj = DS.DooSabin ();
372- mesh.Rebuild (obj); // rebuild mesh based on object info
373- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
374-
375- objectVA.Bind ();
376- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
377- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
355+ ModifyModel = true ;
378356 }
379357 if (ImGui::Button (" Loop Subdivision Surface" ))
380358 {
381359 Surface Lo (obj);
382360 obj = Lo.Loop ();
383- mesh.Rebuild (obj); // rebuild mesh based on object info
384- numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
385-
386- objectVA.Bind ();
387- objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
388- objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
361+ ModifyModel = true ;
389362 }
390363 // if (ImGui::Button("Garland Heckbert Simplication Surface"))
391364 // {
@@ -648,12 +621,20 @@ int main()
648621
649622 obj = objects.findObj (currObject); // search for the object requested
650623
624+ ModifyModel = true ;
625+ }
626+
627+ // //////// apply modification //////////
628+ if (ModifyModel)
629+ {
651630 mesh.Rebuild (obj); // rebuild mesh based on object info
652631 numFaces = static_cast <unsigned int >(mesh.m_Object .m_FaceIndices .size ()); // update number of faces
653632
654633 objectVA.Bind ();
655634 objectVB.AssignData (mesh.m_OutVertices , mesh.m_OutNumVert * sizeof (float ), DRAW_MODE::STATIC);
656635 objectIB.AssignData (mesh.m_OutIndices , mesh.m_OutNumIdx , DRAW_MODE::STATIC);
636+
637+ ModifyModel = false ;
657638 }
658639
659640 // //////// change render mode //////////
0 commit comments