Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/*Defines the behaviour of a Camera object.*/ enum CameraMode : ubyte_t { /*Represents the Camera Position and Target as detached absolute coordinates. Pos contains the absolute coordinates of the Camera. Target contains the absolute coordinates of the view target.*/ CAMERA_MODE_LOOKAT_FIX = 0x00, /*Represents the Camera Position as attached to the Target. Pos contains the coordinates of the Camera relative to the view target. Target contains the absolute coordinates of the view target.*/ CAMERA_MODE_LOOKAT_REL = 0x0F, /*Represents the Camera Target as attached to the Camera. Pos contains the absolute coordinates of the Camera. Target contains the coordinates of the view target relative to the Camera. */ CAMERA_MODE_FACEDIR = 0xF0 }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
class Camera { public: /*Creates a Camera object. mode defaults to CAMERA_MODE_LOOKAT_FIX.*/ Camera(); Camera(CameraMode mode); /*Sets the Pos value. This is not necessarily the absolute coordinate of the Camera. Mind the current CameraMode configuration set.*/ void setPos(const math::vec3 &pos); /*Sets the Target value. This is not necessarily the absolute coordinate of the view target. Mind the current CameraMode configuration set.*/ void setTarget(const math::vec3 &target); /*Sets the CameraMode. Note that this overrides the field 'mode' without converting the values - for that purpose, use convertTo(CameraMode).*/ void setMode(CameraMode mode); /*Returns the Pos field. Note that this is not necessarily the absolute Camera coordinate. Mind the current CameraMode configuration set.*/ const math::vec3 &getPos(); /*Returns the Target field. Note that this is not necessarily the absolute view target coordinate. Mind the current CameraMode configuration set.*/ const math::vec3 &getTarget(); /*Converts the internal value representation to the given model.*/ void convertTo(CameraMode newMode); /*Returns the current camera mode.*/ CameraMode getMode(); private: math::vec3 pos; math::vec3 target; CameraMode mode; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
void Camera::convertTo(CameraMode newMode) { switch(mode) { case CAMERA_MODE_FACEDIR: { switch(newMode) { case CAMERA_MODE_FACEDIR: { return; } break; case CAMERA_MODE_LOOKAT_FIX: { target = pos+target; } break; case CAMERA_MODE_LOOKAT_REL: { math::vec3 temp(target); target = pos+target; pos=-temp; } break; } } break; case CAMERA_MODE_LOOKAT_FIX: { switch(newMode) { case CAMERA_MODE_FACEDIR: { target = target-pos; } break; case CAMERA_MODE_LOOKAT_FIX: { return; } break; case CAMERA_MODE_LOOKAT_REL: { pos = pos-target; } break; } } break; case CAMERA_MODE_LOOKAT_REL: { switch(newMode) { case CAMERA_MODE_FACEDIR: { pos = target+pos; target = target-pos; } break; case CAMERA_MODE_LOOKAT_FIX: { pos = target + pos; } break; case CAMERA_MODE_LOOKAT_REL: { return; } break; } } break; } mode = newMode; } |
Administrator
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (25.08.2014, 15:13)
Werbeanzeige