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 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 |
/ * CODE 1 */ D3DXMATRIX* cGraphicsCore::rotateCam( cWorldObject* cam) { D3DXMATRIX yawMat, pitchMat, rollMat; D3DXVECTOR3 camRotation = *(cam->getRotation()); D3DXVECTOR3 camPosition = *(cam->getPosition()); // Identitätsmatrix und Ausgangsvektoren initialisieren D3DXVECTOR3 m_up = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXVECTOR3 m_look = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); D3DXVECTOR3 m_right = D3DXVECTOR3( 1.0f, 0.0f, 0.0f ); // Rotation um Z-Achse D3DXMatrixRotationAxis( &rollMat, &m_look, camRotation.z ); D3DXVec3TransformCoord( &m_right, &m_right, &rollMat ); D3DXVec3TransformCoord( &m_up, &m_up, &rollMat ); // Rotation um X-Achse D3DXMatrixRotationAxis( &pitchMat, &m_right, camRotation.x ); D3DXVec3TransformCoord( &m_look, &m_look, &pitchMat ); D3DXVec3TransformCoord( &m_up, &m_up, &pitchMat ); // Rotation um Y-Achse D3DXMatrixRotationAxis( &yawMat, &m_up, camRotation.y ); D3DXVec3TransformCoord( &m_look, &m_look, &yawMat ); D3DXVec3TransformCoord( &m_right, &m_right, &yawMat ); // Berechnung der viewMatrix D3DXMATRIX viewMat; D3DXMatrixIdentity( &viewMat ); // Rotationsachsen festlegen viewMat._11 = m_right.x; viewMat._21 = m_right.y; viewMat._31 = m_right.z ; viewMat._12 = m_up.x; viewMat._22 = m_up.y; viewMat._32 = m_up.z ; viewMat._13 = m_look.x; viewMat._23 = m_look.y; viewMat._33 = m_look.z ; // Position berechnen viewMat._41 = - D3DXVec3Dot( &camPosition, &m_right); viewMat._42 = - D3DXVec3Dot( &camPosition, &m_up); viewMat._43 = - D3DXVec3Dot( &camPosition, &m_look); return &viewMat; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* Code 2 * / D3DXMATRIX* cGraphicsCore::rotateCam( cWorldObject* cam ) { D3DXMATRIX matView, matTrans, matRot; D3DXVECTOR3 camRotation = *(cam->getRotation() ); D3DXVECTOR3 camPos = *(cam->getPosition() ); D3DXMatrixTranslation( &matTrans, -camPos.x, -camPos.y, -camPos.z); D3DXMatrixIdentity( &matView ); D3DXMatrixRotationYawPitchRoll( &matRot, -camRotation.y, -camRotation.x, -camRotation.z ); D3DXMatrixMultiply( &matView, &matView, &matTrans); D3DXMatrixMultiply( &matView, &matView, &matRot); return &matView; } |
Alter Hase
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
myVektor a(0,0,1), u(0,1,0), s(1,0,0); rotation = myMatrixRotation(r.x, r.y, r.z) * rotation; physikdata.Ausrichtung = a * rotation; physikdata.up = u * rotation; physikdata.side = s * rotation; World = rotation * myMatrixMove(physikdata.Position); |
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
class CCamera { private: // Daten tbVector3 vPosition; tbVector3 vBlickpunkt; tbVector3 vYAchse; public: // Konstrukturen CCamera() { vPosition = tbVector3(0.0f, 0.0f, 0.0f); vBlickpunkt = tbVector3(0.0f, 0.0f, 1.0f); vYAchse = tbVector3(0.0f, 1.0f, 0.0f); } CCamera(const tbVector3& vPos, const tbVector3& vLookAt, const tbVector3& vYAxis) { vPosition = vPos; vBlickpunkt = vLookAt; vYAchse = vYAxis; } // Verschiedene Get und Set-Methoden tbMatrix GetMatrix() { return tbMatrixCamera(vPosition, vBlickpunkt, vYAchse);} void SetPos(const tbVector3& v) { vPosition = v;} tbVector3 GetPos() { return vPosition;} void SetBlickpunkt(const tbVector3& v) { vBlickpunkt = v;} tbVector3 GetBlickpunkt() { return vBlickpunkt;} void SetYAchse(const tbVector3& v) { vYAchse = v;} tbVector3 GetYAchse() { return vYAchse;} // Bewegungsmethode, zu der Position und dem // Blickpunkt wird der angegebene Vektor hinzuaddiert void Move(const tbVector3& vMove) { vPosition += vMove; vBlickpunkt += vMove;} // Rotation um die relative x-Achse. Diese berechnet sich aus dem Kreuzprodukt // von Y-Achse und dem normalisierten Blickpunkt - der Position. Rotiert werden // müssen die y-Achse und der Blickpunkt void XRotate(float fGrad) { vBlickpunkt = vPosition + tbVector3TransformCoords(vBlickpunkt - vPosition, tbMatrixRotationAxis(tbVector3Cross(tbVector3Normalize(vBlickpunkt - vPosition), tbVector3Normalize(vYAchse)), TB_DEG_TO_RAD(fGrad))); vYAchse = tbVector3Normalize(tbVector3TransformCoords(vYAchse, tbMatrixRotationAxis(tbVector3Cross(tbVector3Normalize(vBlickpunkt - vPosition), tbVector3Normalize(vYAchse)), TB_DEG_TO_RAD(fGrad)))); } // Rotation um die relative y-Achse. Hier muss die y-Achse nicht rotiert werden!! void YRotateRel(float fGrad) { vBlickpunkt = vPosition + tbVector3TransformCoords(vBlickpunkt - vPosition, tbMatrixRotationAxis(tbVector3Normalize(vYAchse), TB_DEG_TO_RAD(fGrad))); } // Rotation um die absolute y-Achse. Die y-Achse muss hier mitrotiert werden!! void YRotateAbs(float fGrad) { vBlickpunkt = vPosition + tbVector3TransformCoords(vBlickpunkt - vPosition, tbMatrixRotationY(TB_DEG_TO_RAD(fGrad))); vYAchse = tbVector3TransformCoords(vYAchse, tbMatrixRotationY(TB_DEG_TO_RAD(fGrad))); } // Rotation um die relative z-Achse void ZRotate(float fGrad) { vBlickpunkt = vPosition + tbVector3TransformCoords(vBlickpunkt - vPosition, tbMatrixRotationAxis(tbVector3Normalize(vBlickpunkt - vPosition), TB_DEG_TO_RAD(fGrad))); vYAchse = tbVector3Normalize(tbVector3TransformCoords(vYAchse, tbMatrixRotationAxis(tbVector3Normalize(vBlickpunkt - vPosition), TB_DEG_TO_RAD(fGrad)))); } // Liefert den relativen Blickpunkt tbVector3 GetDir() { return vBlickpunkt - vPosition;} }; |
C-/C++-Quelltext |
|
1 |
void MoveRel(float f) { Move(GetDir() * f);} |
Werbeanzeige