[ PeraKojovic @ 08.06.2007. 11:57 ] @
Pozdrav ljudi, Rec je o D3D9, odlucio sam se za to da mi objekti na sceni budu fiksirani, a da kameru pomeram/rotiram po sceni, ne uspevam da zarotiram kako treba kameru oko arbitrary ose koja se nalazi u tacki Camera.Position. Odnosno, da kamera sada bude okrenuta kao na slici isprekidana linija (novi LookAt kamere). Na slici se ne vidi, ali kamera, naravno, nije samo u XZ ravni, vec menja i Y koordinatu... Sledi kod za Rotate(): Code: { float fr = 1; // rotiramo kameru po napravljen osi koja se nalazi u tacki lookAt Vector3 madeUp = new Vector3(0, 0, 1); Matrix rot = Matrix.RotationAxis(madeUp, Geometry.DegreeToRadian(fr)); Vector3 v = Vector3.Normalize(LookAt); Matrix tr = Matrix.Translation(m_look); //LookAt = Vector3.TransformCoordinate(LookAt, tr); LookAt = Vector3.TransformCoordinate(LookAt, rot); //tr = Matrix.Translation(m_lookAt); //LookAt = Vector3.TransformCoordinate(LookAt, tr); m_right = Vector3.TransformNormal(m_right, rot); //m_up = Vector3.TransformNormal(m_up, rotation); m_up = Vector3.Cross(m_look, m_right); } Nebitno za rotate, ali posle toga sledi Update, npr.: Code: { m_view = Matrix.LookAtLH( m_position, m_lookAt, m_up ); float tempWidth, tempHeight, h; h = Udaljenost(m_lookAt, m_position); tempHeight = m_height * m_nearPlane / h; tempWidth = tempHeight * m_aspect; if (perspective) m_projection = Matrix.PerspectiveLH(tempWidth, tempHeight, m_nearPlane, m_farPlane); else m_projection = Matrix.OrthoLH(m_width, m_height, m_nearPlane, m_farPlane); } Pozdrav, Petar Kojovic Novi Sad [Ovu poruku je menjao tosa dana 14.06.2007. u 03:18 GMT+1] |