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);
}
{
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);
}
{
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]