Marcousik Posted November 16, 2020 Share Posted November 16, 2020 I tried to write a script function to trace tires tracks. Pretty easy with decals applied on Terrain if the car drives straight forward. But how to calculate the tracks rotation/ direction of such a mouvement??? Any suggestions? Quote Link to comment Share on other sites More sharing options...
SpiderPig Posted November 16, 2020 Share Posted November 16, 2020 I do know an algorithm that will calculate the centre of rotation for the car. You could use that centre of rotation and radius to then draw the decals in a circle, but I'm not sure how it will perform if the player is constantly changing directions. An easier and more accurate way may be to grab each tire position and draw decals on the terrain at those locations. I've not used decals before, how are you drawing the tracks so far? If you show some code I may be able to help more. Quote Link to comment Share on other sites More sharing options...
Marcousik Posted November 17, 2020 Author Share Posted November 17, 2020 Quote An easier and more accurate way may be to grab each tire position and draw decals on the terrain at those locations. Thx, yes that was my method but it is not 100%. Calculatoin should be a mix out of velocity and rotation but I can't get it complete in my mind. I used a modified code from the decals used for the bullets tracks on walls. It runs ok if the car stays in a "normally predictable" line of drive but not if the car is suddenly sliding like in the gif. [Sorry I had problems by uploading / deleting example video] Quote local TirePos0=self.Tires[0]:GetPosition(true) local TirePos1=self.Tires[1]:GetPosition(true) local TirePos2=self.Tires[2]:GetPosition(true) local TirePos3=self.Tires[3]:GetPosition(true) local DecalPosY0=self.Terrain:GetElevation(TirePos0.x, TirePos0.z) local DecalNormal0=self.Terrain:GetNormal(TirePos0.x, TirePos0.z) local DecalPosY1=self.Terrain:GetElevation(TirePos1.x, TirePos1.z) local DecalNormal1=self.Terrain:GetNormal(TirePos1.x, TirePos1.z) local DecalPosY2=self.Terrain:GetElevation(TirePos2.x, TirePos2.z) local DecalNormal2=self.Terrain:GetNormal(TirePos2.x, TirePos2.z) local DecalPosY3=self.Terrain:GetElevation(TirePos3.x, TirePos3.z) local DecalNormal3=self.Terrain:GetNormal(TirePos3.x, TirePos3.z) local TireTrace0 = Decal:Create(self.TireTraceMat) -- local TireTrace1 = TireTrace0:Instance() local TireTrace2 = TireTrace0:Instance() local TireTrace3 = TireTrace0:Instance() -- TireTrace0:SetScript("Scripts/Objects/Effects/BulletMark.lua") -- TireTrace1:SetScript("Scripts/Objects/Effects/BulletMark.lua") TireTrace2:SetScript("Scripts/Objects/Effects/BulletMark.lua") TireTrace3:SetScript("Scripts/Objects/Effects/BulletMark.lua") TireTrace2:SetPosition(TirePos2.x, DecalPosY2,TirePos2.z,true) TireTrace2:AlignToVector(DecalNormal2,2) TireTrace2:SetRotation(0,self.entity:GetRotation().y-((10+Vit_locale.x*3)* self.turning),0) -- TOP VIRAGE GAUCHE cad TireTrace3:SetPosition(TirePos3.x, DecalPosY3,TirePos3.z,true) TireTrace3:AlignToVector(DecalNormal3,2) TireTrace3:SetRotation(0,self.entity:GetRotation().y-((10+Vit_locale.x*3)* self.turning),0) -- System:Print(math.abs(Vit_locale.x*20)) local mat = TireTrace2:GetMatrix() mat[0] = mat[0]:Normalize() * 0.1--math.max(0.1, 0.2 * math.abs(Vit_locale.x)) mat[1] = mat[1]:Normalize() * 0.1 mat[2] = mat[2]:Normalize() * 0.2 * (self.vitesse/5) TireTrace2:SetMatrix(mat) mat = TireTrace3:GetMatrix() mat[0] = mat[0]:Normalize() * 0.1 mat[1] = mat[1]:Normalize() * 0.1 mat[2] = mat[2]:Normalize() * 0.2 * (self.vitesse/5) TireTrace3:SetMatrix(mat) TEMP 2020-11-17 07-46-42.mp4 TEMP 2020-11-17 07-46-42.mp4 Quote Link to comment Share on other sites More sharing options...
Marcousik Posted November 17, 2020 Author Share Posted November 17, 2020 TEMP 2020-11-17 07-46-42.mp4 TEMP 2020-11-17 07-46-42.mp4 Quote Link to comment Share on other sites More sharing options...
SpiderPig Posted November 17, 2020 Share Posted November 17, 2020 I think the issue above is that your placing a decal at the tire position and rotating it to that of the cars current angle (or the tires angle, I can't quite tell). An approach I would try is to collect the points under the tires over time. When you have the current point and the last point, you can draw a decal between them. Every frame you can check the distance from each tire to the last point that tire was at. When it is equal to the length of the decal, make a decal between those two points. Place the decal at the first point and rotate toward the second point. In my mind you should get something like this; 1 Quote Link to comment Share on other sites More sharing options...
Marcousik Posted November 18, 2020 Author Share Posted November 18, 2020 That is a nice idea, I will test this thx 1 Quote Link to comment Share on other sites More sharing options...
SpiderPig Posted November 18, 2020 Share Posted November 18, 2020 Welcome. Would love to see how it works out. 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.