{"assets":[],"author_link":"author\/speciesunknown\/","author_name":"speciesUnknown","cat":"LD #21","categories":["LD #21"],"comments":[],"epoch":1313787300,"event":"LD21","likes":3,"metadata":{"p_key":"77428","p_author":"speciesUnknown","p_authorkey":"0","p_urlkey":"286279","p_title":"XNA Camera Class","p_cat":"LD #21","p_event":"LD21","p_time":"1313787300","p_likes":"3","p_comments":"0","p_status":"WAYBACK","us_key":null,"us_name":null,"us_username":null,"event_start":"1313712000","event_key":"7","event_name":"LD21"},"source_url":"2011\/08\/19\/xna-camera-class\/","text":"<p>wazzup dawgs<br\/>\nFor any of my fellow XNA using peeps, here is a 3D camera class<\/p>\n<p><code><br\/>\n\tpublic class Camera<br\/>\n\t{<br\/>\n\t\tprotected Vector3 position, target, up;<br\/>\n\t\tprotected float fov;<\/code><\/p>\n<p>\t\tpublic virtual Vector3 Position { get { return this.position; } set { this.position = value; } }<\/p>\n<p>\t\tpublic virtual Vector3 Target { get { return this.target; } set { this.target = value; } }<\/p>\n<p>\t\tpublic virtual Vector3 Up { get { return this.up; } set { this.up = value; } }<\/p>\n<p>\t\tpublic virtual float FOV { get { return this.fov; } set { this.fov = value; } }<\/p>\n<p>\t\tpublic Camera(Vector3 position, Vector3 target, Vector3 up, float fov)<br\/>\n\t\t{<br\/>\n\t\t\tthis.Position = position;<br\/>\n\t\t\tthis.Target = target;<br\/>\n\t\t\tthis.Up = up;<br\/>\n\t\t\tthis.FOV = fov;<br\/>\n\t\t}<\/p>\n<p>\t\tpublic virtual void rotate(float xdeg, float ydeg)<br\/>\n\t\t{<br\/>\n\t\t\tVector3 direction = (Target - Position);<\/p>\n<p>\t\t\tMatrix yrot = Matrix.CreateFromAxisAngle(-up, MathHelper.ToRadians(ydeg));<\/p>\n<p>\t\t\tVector3 xaxis = Vector3.Cross(up, direction);<\/p>\n<p>\t\t\txaxis.Normalize();<br\/>\n\t\t\txaxis = Vector3.Transform(xaxis, yrot);<\/p>\n<p>\t\t\tMatrix xrot = Matrix.CreateFromAxisAngle(xaxis, MathHelper.ToRadians(xdeg));<\/p>\n<p>\t\t\tdirection = Vector3.Transform(direction, yrot);<br\/>\n\t\t\tdirection = Vector3.Transform(direction, xrot);<\/p>\n<p>\t\t\tTarget = Position + (direction);<br\/>\n\t\t}<\/p>\n<p>\t\tpublic virtual void forward(float distance)<br\/>\n\t\t{<br\/>\n\t\t\tVector3 direction = (Target - Position);<br\/>\n\t\t\tdirection.Normalize();<\/p>\n<p>\t\t\tthis.position += direction * distance;<br\/>\n\t\t\tthis.target += direction * distance;<br\/>\n\t\t}<\/p>\n<p>\t\tpublic virtual void left(float distance)<br\/>\n\t\t{<br\/>\n\t\t\tVector3 direction = (Target - Position);<br\/>\n\t\t\tdirection.Normalize();<\/p>\n<p>\t\t\tVector3 xaxis = -Vector3.Cross(up, direction);<br\/>\n\t\t\txaxis.Normalize();<\/p>\n<p>\t\t\tthis.position += xaxis * distance;<br\/>\n\t\t\tthis.target += xaxis * distance;<br\/>\n\t\t}<\/p>\n<p>\t\tpublic virtual void upward(float distance)<br\/>\n\t\t{<br\/>\n\t\t\tthis.position += this.up * distance;<br\/>\n\t\t\tthis.target += this.up * distance;<br\/>\n\t\t}<\/p>\n<p>\t\tpublic virtual void move(Vector3 direction)<br\/>\n\t\t{<br\/>\n\t\t\tforward(direction.Z);<br\/>\n\t\t\tleft(direction.X);<br\/>\n\t\t\tupward(direction.Y);<br\/>\n\t\t}<br\/>\n\t}<br\/>\n<\/p>\n<p>Peace out<\/p>\n<div style=\"float: right;border: 1px solid #eee;padding: 2px;background: #fff;\"><div class=\"iLikeThis\" id=\"iLikeThis-62903\"><span class=\"counter\"><a class=\"image\" onclick=\"likeThis(62903);\">3<\/a><\/span><\/div><\/div>\n<p class=\"postmetadata alt\">\n<small>\n\t\t\t\t\t\tThis entry was posted\n\t\t\t\t\t\t\t\t\t\t\t\ton Friday, August 19th, 2011 at 8:55 pm\t\t\t\t\t\tand is filed under <a href=\"http:\/\/www.ludumdare.com\/compo\/category\/ld-21\/\" rel=\"category tag\" title=\"View all posts in LD #21\">LD #21<\/a>.\n\t\t\t\t\t\tYou can follow any responses to this entry through the <a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/08\/19\/xna-camera-class\/feed\/\">RSS 2.0<\/a> feed.\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tYou can <a href=\"#respond\">leave a response<\/a>, or <a href=\"http:\/\/www.ludumdare.com\/compo\/2011\/08\/19\/xna-camera-class\/trackback\/\" rel=\"trackback\">trackback<\/a> from your own site.\n\n\t\t\t\t\t\t\n\t\t\t\t\t<\/small>\n<\/p>","time":"August 19th, 2011 8:55 pm","title":"XNA Camera Class","title_was_empty":false}