3D 3/4 camera mouse control

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 3D 3/4 camera mouse control

    Hi, ich bin grad dabei eine kleine moba engine
    zu erstellen und bin jetzt beim ersten großen Problem angelangt.

    Da meine Kamera alles in einer 3/4 Sicht zeigt, kann man mouse_x und mouse_y vergessen, wenn
    man den Spieler per Maus steuern will. Wie finde ich denn jetzt die richtigen Koordinaten ?


    Hier mein bisheriger Fortschritt:
    Download

    Danke schon mal!
  • Ich weiß nicht mehr von wem diese Scripte sind, poste sie aber mal trotzdem:

    GML-Quellcode

    1. // ConvertPrepare(xfrom,yfrom,zfrom,xto,yto,zto,xup,yup,zup,angle,aspect);
    2. var mm;
    3. dX = argument3 - argument0;
    4. dY = argument4 - argument1;
    5. dZ = argument5 - argument2;
    6. mm = sqrt(dX*dX + dY*dY + dZ*dZ);
    7. dX /= mm;
    8. dY /= mm;
    9. dZ /= mm;
    10. uX = argument6;
    11. uY = argument7;
    12. uZ = argument8;
    13. mm = uX*dX + uY*dY + uZ*dZ;
    14. uX -= mm*dX;
    15. uY -= mm*dY;
    16. uZ -= mm*dZ;
    17. mm = sqrt(uX*uX + uY*uY + uZ*uZ);
    18. uX /= mm;
    19. uY /= mm;
    20. uZ /= mm;
    21. tFOV = tan(argument9*pi/360);
    22. uX *= tFOV;
    23. uY *= tFOV;
    24. uZ *= tFOV;
    25. vX = uY*dZ - dY*uZ;
    26. vY = uZ*dX - dZ*uX;
    27. vZ = uX*dY - dX*uY;
    28. vX *= argument10;
    29. vY *= argument10;
    30. vZ *= argument10;
    Alles anzeigen

    und

    GML-Quellcode

    1. // Convert_2d(x,y,xfrom,yfrom,zfrom,view)
    2. // The script returns the 3d x and y coordinates at z = 0
    3. screenx = 2*argument0/view_wview[argument5]-1;
    4. screeny = 1-2*argument1/view_hview[argument5];
    5. mX = dX + uX*screeny + vX*screenx;
    6. mY = dY + uY*screeny + vY*screenx;
    7. mZ = dZ + uZ*screeny + vZ*screenx;
    8. if mZ != 0
    9. {
    10. x_3d = argument2 - argument4 * mX / mZ;
    11. y_3d = argument3 - argument4 * mY / mZ;
    12. }
    13. else
    14. {
    15. x_3d = argument2 - argument4 * mX;
    16. y_3d = argument3 - argument4 * mY;
    17. }
    Alles anzeigen

    Der Erste Skript muss auch als erstes ausgeführt werden auf Vorbereitung des zweiten Skripts.