我正在做一個模擬遊戲,我不是很擅長三角學,也不知道如何做到這一點,儘管許多嘗試。「反轉」這些數學觸發(3d遊戲世界)操作
我在3D世界的某個位置有一些面向角(z角)的車輛。我旁邊還有一個對象,並且有XYZ位置和旋轉。我想將對象附加到車輛上,但要附加它,我需要指定相對於車輛的偏移量,而不是現實世界的位置。 這是「車輛座標系統」: vehicle attachment coords
但這不是問題。我已經有這個代碼做的:
new Float:ofx, Float:ofy, Float:ofz, Float:ofangle;
new Float:attachX, Float:attachY;
new Float:vehX, Float:vehY, Float:vehZ, Float:vehAngle;
GetVehiclePos(vehicleid, vehX, vehY, vehZ); // get vehicle XYZ pos
GetVehicleZAngle(vid, vehAngle); // get vehicle facing angle
ofx = x-vehX; // x = object's real world XYZ, vehX - vehicle's XYZ. Calculate real world offset between object and vehicle
ofy = y-vehY;
ofz = z-vehZ;
ofangle = rz-vehAngle;
// calculate attach offsets relative to vehicle (see image above)
attachX = ofx*floatcos(vehAngle, degrees) + ofy*floatsin(vehAngle, degrees);
attachY = -ofx*floatsin(vehAngle, degrees)+ ofy*floatcos(vehAngle, degrees);
AttachObjectToVehicle(objectid, vehicleid, attachX, attachY, ofz, rx, ry, ofangle); // attach object with calculated X, Y and angle
而這個偉大的工程,但我想現在要做的,就是「反轉」這一點。 我想計算對象的真實世界位置(所以它會在完全相同的地方,因爲它是現在,但不要執着) 所以我有這樣的:
new Float:vehX, Float:vehY, Float:vehZ, Float:vehAngle;
GetVehiclePos(vehicleid, vehX, vehY, vehZ);
GetVehicleAngle(vehicleid, vehAngle);
new Float:objAttachX, Float:objAttachY, Float:objAttachZ, Float:objAttachRotX, Float:objAttachRotY, Float:ObjAttachRotZ);
GetAttachedObjectOffsets(objectid, objAttachX, objAttachY, objAttachZ);
GetAttachedObjectRotation(objectid, objAttachRotX, objAttachRotY, objAttachRotZ);
// now, using current vehicle position and the object's attachment offsets, somehow calculate the objects position in real world.
我會很高興,如果有人可以幫助我在這裏,我想這很簡單,但我無法弄清楚。