Sevdat Posted July 12 Posted July 12 (edited) Good evening, I want to create objects from script and render their bounds. How may I do that? This is the current code I wrote. public ObjectDummy physicsDummy; ShapeSphere collisionShape; void Init(){ Visualizer.Enabled = true; collisionShape = new ShapeSphere(1f); physicsDummy.Body.AddShape(collisionShape); physicsDummy.BoundSphere.Set(new BoundSphere(physicsDummy.WorldPosition,1)); } void Update() { Visualizer.RenderBoundSphere(physicsDummy.BoundSphere, physicsDummy.WorldTransform, vec4.BLUE); } Edited July 14 by Sevdat
Sevdat Posted July 13 Author Posted July 13 (edited) Good morning Sevdat, To generate a primitive you need the code here: https://developer.unigine.com/en/docs/future/start/quick_start/physical_objects/index?rlang=cs Sphere example: void Init(){ ObjectMeshDynamic sphere = Primitives.CreateSphere(0.5f, 9, 32); sphere.TriggerInteractionEnabled = true; sphere.SetIntersection(true, 0); sphere.SetIntersectionMask(0x00000080, 0); // check the BulletIntersection bit sphere.WorldTransform = MathLib.Translate(new vec3(4.5f, 5.5f, 1.0f)); sphere.SetMaterialPath("materials/mesh_base_1.mat", "*"); sphere.Name = "sphere"; BodyRigid bodySphere = new BodyRigid(sphere); new ShapeSphere(bodySphere, 0.5f); bodySphere.ShapeBased = false; bodySphere.Mass = 2.0f; } To Generate primitive meshes by code use this: https://developer.unigine.com/en/docs/future/code/usage/mesh_class/index?rlang=cs#creating_box P.S Is there a less complicated way of doing it? and I still haven't figured out how to render Shape for physics in the sumulation mode. Not the Helper Physics one. I saw that in the tutorial. I mean when pressing this button how do I render the collision area added to Shapes?: Also I want to generate joints by script. I saw the documentation, but don't know how to attach different objects by script: https://developer.unigine.com/en/docs/latest/principles/physics/joints/ Edited July 14 by Sevdat
Sevdat Posted July 14 Author Posted July 14 (edited) Good morning, I've created something like this to create triangles and animate their vertexes, but I don't quite understand how everything works so I have a few questions. Mesh mesh; ObjectMeshDynamic dynamicMesh; vec3[] vertexes = new vec3[]{ new vec3(-0.5f, -0.5f, -0.5f),new vec3(0.5f, -0.5f, -0.5f),new vec3(-0.5f, 0.5f, -0.5f), new vec3(-0.5f, -1.5f, -0.5f),new vec3(0.5f, -1.5f, -0.5f),new vec3(-0.5f, 1.5f, -0.5f) }; int[] indices = new int[]{0,1,2,3,4,5,2,1,0,5,4,3}; private void Init(){ mesh = new Mesh(); int surface_index = mesh.AddSurface($"surface_{0}"); drawTriangle(mesh,surface_index,vertexes,indices); dynamicMesh = new ObjectMeshDynamic(mesh); mesh.Clear(); dynamicMesh.WorldPosition = new vec3(0,0,5); } private void drawTriangle(Mesh mesh, int surface_index, vec3[] vertexArray, int[] indeces){ for (int i = 0; i < vertexArray.Length; i++) mesh.AddVertex(vertexArray[i], surface_index); for (int i = 0; i < indeces.Length; i++) mesh.AddIndex(indeces[i], surface_index); mesh.CreateBounds(surface_index); } private void updateTriangle(ObjectMeshDynamic triangle, int vertex,float moveSpeed){ triangle.SetVertex(vertex,triangle.GetVertex(vertex)*moveSpeed); triangle.FlushVertex(); } void Update() { updateTriangle(dynamicMesh,0,1.0001f); } What does this part of the code exactly do? Why is it an int if a string is passed? Does it allocate a small enviroment where meshes can exist? Does a single mesh only have a single surface name? int surface_index = mesh.AddSurface($"surface_{0}"); When is it appropriate to use: mesh.Clear(); Is using this code efficient to update the mesh of the object or is there a better way of doing this? How can I get the Array of the mesh containing the indexes and vertexes? Edited July 14 by Sevdat
Recommended Posts