Es geht um folgendes Problem bzw. Wunsch. Ich möchte eine Außenkamera haben, die sich auf der Y Achse, d.h. die horizontale Drehrichtung, nicht instand mit dem Fahrzeug mitbewegt sondern langsam hinterherwandert, ähnlich anderen Videospielen wie GTA. Ich habe bereits ein Script gefunden (freeCamera) http://www.modsls17.com/free-camera-for-ls-17 welche die Außenkamera komplett vom Fahrzeug entkoppelt. Das ist zumindest schonmal ein Schritt in die richtige Richtung was ich haben will. Man müsste das Scipt jetzt nur noch so umschreiben, dass die Kamera sich (vielleicht mittels eines Timers und einer Exponentialfunktion oder der Fahrzeuggeschwindigkeit ?) langsam hinter das Fahrzeug dreht.
Dazu habe ich mir das Script von freeCamera mal genauer angeguckt und zitiere es hier mal:
Code: Select all
print("////////////////// FreeCamera mod (by HarvesteR) ///////////////////")
cameras = {}
VehicleCamera.updateRotateNodeRotation = function(self)
local rotY = self.rotY;
if self.rotYSteeringRotSpeed ~= 0 and self.vehicle.rotatedTime ~= nil then
rotY = rotY + self.vehicle.rotatedTime*self.rotYSteeringRotSpeed;
end
if getUpdatedToggles(self) then
local upx,upy,upz = 0,1,0;
local dx,dy,dz = 0,0,1; --localDirectionToWorld(getParent(self.rotateNode), 0,0,1);
local invLen = 1/math.sqrt(dx*dx + dz*dz);
dx = dx*invLen;
dz = dz*invLen;
local newDx = math.cos(self.rotX) * (math.cos(rotY)*dx + math.sin(rotY)*dz);
local newDy = -math.sin(self.rotX);
local newDz = math.cos(self.rotX) * (-math.sin(rotY)*dx + math.cos(rotY)*dz);
newDx,newDy,newDz = worldDirectionToLocal(getParent(self.rotateNode), newDx,newDy,newDz);
upx,upy,upz = worldDirectionToLocal(getParent(self.rotateNode), upx,upy,upz);
setDirection(self.rotateNode, newDx,newDy,newDz, upx,upy,upz);
else
if self.useWorldXZRotation then
local upx,upy,upz = 0,1,0;
local dx,dy,dz = localDirectionToWorld(getParent(self.rotateNode), 0,0,1);
local invLen = 1/math.sqrt(dx*dx + dz*dz);
dx = dx*invLen;
dz = dz*invLen;
local newDx = math.cos(self.rotX) * (math.cos(rotY)*dx + math.sin(rotY)*dz);
local newDy = -math.sin(self.rotX);
local newDz = math.cos(self.rotX) * (-math.sin(rotY)*dx + math.cos(rotY)*dz);
newDx,newDy,newDz = worldDirectionToLocal(getParent(self.rotateNode), newDx,newDy,newDz);
upx,upy,upz = worldDirectionToLocal(getParent(self.rotateNode), upx,upy,upz);
setDirection(self.rotateNode, newDx,newDy,newDz, upx,upy,upz);
else
setRotation(self.rotateNode, self.rotX, rotY, self.rotZ);
end;
end;
end;
function getUpdatedToggles(cam)
if cameras[cam] == nil then
cameras[cam] = false
end;
if InputBinding.hasEvent(InputBinding.cameraFrameOfReference) then
cameras[cam] = not cameras[cam];
end;
return cameras[cam];
end;
Meiner Meinung nach müsste es doch nun möglich sein hier mit den richtigen mathematischen Formeln etwas machen zu können.
Ich bin jetzt nicht komplett unerfahren was Programmierung angeht, bin Fachinformatiker und habe immer wieder mal Kontakt mit verschiedenen Sprachen.
In LUA arbeite ich mich seit ein paar Tagen grade ein.
Hat eventuell jemand eine Idee an welcher Stelle im Script ich ansetzen muss und am Besten noch wie ?
Liebe Grüße
TheLion092