Marcousik Posted April 13, 2021 Share Posted April 13, 2021 How should I set a complete polymesh shape with a script on a model with 2 surfaces? I construct the shape like this: local surf1 = Model:GetSurface(0) local surf2 = Model:GetSurface(1) local Shape1 = PolyMesh(surf1) local Shape2 = PolyMesh(surf2) Model:SetShape(--- ??? ----) How to I set the two shapes on one model ????? Thx for help Quote Link to comment Share on other sites More sharing options...
Josh Posted April 13, 2021 Share Posted April 13, 2021 Use Surface::Add to add one surface to the other and create a shape from the resulting merged surface. Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Marcousik Posted April 13, 2021 Author Share Posted April 13, 2021 thx, Yes I tried that. But then I lost the 2 different Materials applied on the 2 different surfaces ! Is there something else ? Quote Link to comment Share on other sites More sharing options...
Josh Posted April 13, 2021 Share Posted April 13, 2021 Create a new surface, add both surfaces to that one, then create your shape from the merged surface. Quote My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Marcousik Posted April 13, 2021 Author Share Posted April 13, 2021 mmh I don't get it to work.. Something must be wrong but I don't know what. But I could get it running by creating 2 differents models, but maybe worse for performances. Quote local roadModel = Model:Create() -- roadModel:SetViewRange(Entity.FarViewRange) roadModel:SetShadowMode(0) roadModel:SetCollisionType(Collision.Scene) local surface = roadModel:AddSurface() local surfaceB = roadModel:AddSurface() local surfaceS = Surface:Create() -- road: surface:AddVertex(v0, n, Vec2(0,0)) --0 surface:AddVertex(v1, n, Vec2(1,0)) --1 surface:AddVertex(v2, n, Vec2(1,1)) --2 surface:AddVertex(v3, n, Vec2(0,1)) --3 surface:AddTriangle(0,1,2) surface:AddTriangle(0,2,3) surface:Update() -- bankD surfaceB:AddVertex(ve_1, n, Vec2(-1,0)) --0 surfaceB:AddVertex(v0, n, Vec2(0,0)) --1 surfaceB:AddVertex(v3, n, Vec2(0,1)) --2 surfaceB:AddVertex(ve_2, n, Vec2(-1,1)) --3 surfaceB:AddTriangle(0,1,2) surfaceB:AddTriangle(0,2,3) surfaceB:Update() -- bankG surfaceB:AddVertex(v1, n, Vec2(1,0)) --4 surfaceB:AddVertex(ve4, n, Vec2(2,0)) --5 surfaceB:AddVertex(ve5, n, Vec2(2,1)) --6 surfaceB:AddVertex(v2, n, Vec2(1,1)) --7 surfaceB:AddTriangle(4,5,6) surfaceB:AddTriangle(4,6,7) surfaceB:Update() surface:SetMaterial(self.RoadMaterial) surfaceB:SetMaterial(self.BankMaterial) -- roadModel:UpdateAABB(Entity.LocalAABB+Entity.GlobalAABB) local mat = Mat4() surfaceS:Add(surface, mat) surfaceS:Add(surfaceB, mat) surfaceS:Update() local shape = Shape:PolyMesh(surfaceS) -- THIS RETURNS shape == nil -- I don't know why roadModel:SetShape(shape) shape:Release() Quote Link to comment Share on other sites More sharing options...
SpiderPig Posted April 13, 2021 Share Posted April 13, 2021 Just a few thoughts that may or may not help; Quote roadModel:UpdateAABB(Entity.LocalAABB+Entity.GlobalAABB) Shouldn't it be; roadModel:UpdateAABB(Entity.LocalAABB | Entity.GlobalAABB) Unless LUA is different to C++ in this aspect... I see it's commented out here though.. Does surface:Update() update the vertex normals? I'm not sure if that's needed to create a polymesh though... Only other thing I can think if is too make sure the vertices aren't too close together? I recall something ages ago where this caused a null polymesh for me. Quote Link to comment Share on other sites More sharing options...
Marcousik Posted April 14, 2021 Author Share Posted April 14, 2021 Quote Just a few thoughts that may or may not help; Quote roadModel:UpdateAABB(Entity.LocalAABB+Entity.GlobalAABB) Shouldn't it be; roadModel:UpdateAABB(Entity.LocalAABB | Entity.GlobalAABB) > I got it from there: https://www.leadwerks.com/learn?page=API-Reference_Object_Surface_Add Quote I'm not sure if that's needed to create a polymesh though... > No it is not needed. Thx for reply. I don't know where is the problem. In the editor you can easily collapse models with different surfaces/materials and generate a polymesh shape. But seems not possible in script. Because collapsing make the entire model with one unique material. I got the shape to be right generated with this: Quote surface:Add(surfaceB, mat) surface:Update() local shape = Shape:PolyMesh(surface) -- THIS RETURNS the right shape for the 2 surfaces So I created 2 different models with each one one surface and it runs ok. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.