Jump to content
  • Advertisement
Sign in to follow this  
justin12343

2D Camera System

This topic is 2940 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

How do I setup a 3D camera for use with 2D? I attempted it, but it didn't look like it was working. Does D3DXMatrixLookAtLH work with D3DXSPRITEs? Really I just need a good tutorial on this (already googled everywhere).

This is what I have so far:

camera.h


#ifndef _CAMERA_
#define _CAMERA_

#include <d3d9.h>
#include <d3dx9.h>
#include <vector>

using namespace std;

struct camera
{
D3DVIEWPORT9 viewport;
D3DXVECTOR3 pos;
int width, height;

};

class cameraSystem
{
public:
cameraSystem( LPDIRECT3DDEVICE9 device,int width, int height);
~cameraSystem();

int create_camera( int width, int height);
void set_camera( int cam){ view_current = cam;}

void set_position( D3DXVECTOR3 &pos);
void set_zoom( float zoom) { view_zoom = zoom;}
D3DXMATRIX &get_View_matrix(){ return matView;}

inline int get_view_current(){ return view_current;}

void applyView();

private:
LPDIRECT3DDEVICE9 pDevice;

D3DXMATRIX matPerspective;
D3DXMATRIX matView;
D3DXMATRIX matWorld;

vector<camera*> camera_list;

int screen_width, screen_height;
int view_current;
float view_zoom;
};
#endif



camera.cpp


#include "camera.h"

cameraSystem::cameraSystem( LPDIRECT3DDEVICE9 device,int width, int height):
pDevice(device),
screen_width(width),
screen_height(height)
{
//Setup orthographic projection matrix
D3DXMatrixOrthoLH (&matPerspective, screen_width, screen_height, 1.0f, 10.0f);
D3DXMatrixIdentity (&matWorld);
D3DXMatrixIdentity (&matView);
pDevice->SetTransform (D3DTS_PROJECTION, &matPerspective);
pDevice->SetTransform (D3DTS_WORLD, &matWorld);
pDevice->SetTransform (D3DTS_VIEW, &matView);

view_current=0;
view_zoom=0;

create_camera( width, height);
}

cameraSystem::~cameraSystem()
{
for (UINT i =0; i < camera_list.size(); ++i)
{
delete camera_list;
}

camera_list.clear();
}

int cameraSystem::create_camera( int width, int height)
{
int i = camera_list.size();

camera *tmp = new camera();
tmp->viewport.X = 0;
tmp->viewport.Y = 0;
tmp->viewport.Width = width;
tmp->viewport.Height = height;
tmp->viewport.MinZ = 0.0f;
tmp->viewport.MaxZ = 1.0f;

tmp->width = width;
tmp->height = height;
tmp->pos = D3DXVECTOR3( 0.0f, 0.0f, 0.0f);

camera_list.push_back( tmp);
return i;
}

void cameraSystem::set_position( D3DXVECTOR3 &pos)
{
camera_list[view_current]->pos = pos;
//camera_list[view_current]->pos.z = view_zoom;
//D3DXMatrixLookAtLH( &matView, &camera_list[view_current]->pos, &camera_list[view_current]->pos, &D3DXVECTOR3( 0.0f, 1.0f, 0.0f));

D3DXMatrixTranslation( &matView, pos.x, pos.y, 0);
}

void cameraSystem::applyView()
{
//pDevice->SetTransform( D3DTS_WORLD, &matWorld);
pDevice->SetTransform( D3DTS_VIEW, &matView);
}



It doesn't seem to move anything. I use a bunch of D3DXSPRITEs, so is there something I have to set to make it work with those?

[Edited by - justin12343 on August 26, 2010 9:39:07 PM]

Share this post


Link to post
Share on other sites
Advertisement
Quote:
It doesn't seem to move anything.

Are you trying to ask about something? What is "It" and what is it "It" should move?
Quote:
Does D3DXMatrixLookAtLH work with D3DXSPRITEs?

Without seeing any of what you're trying to do with sprites - In general, D3DXSPITE is rendered to the viewport, so it isn't affected by your view or projection matrices. The position, etc., for a D3DXSPRITE is in screen coordinates.

If you need more help than that, you'll have to describe more specifically what you're having trouble with.

Share this post


Link to post
Share on other sites
My question is, How do I correctly setup an orthographic view for use with 2d? I'd rather do it this way than cheating by using D3DXSPRITE::SetTransform. If I use a orthographic view, do I now have to pass the D3DXSPRITE_OBJECTSPACE parameter for it to use the view matrix?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!