Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

DarkKiller

Tip: easyest camera ever and no prob. to implement

This topic is 5811 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

First #include <gl\glu.h> and (depens on your way of working): #pragma comment(lib, "glu32.lib") then copy and paste the folloing structure somewhere at the top of your main.cpp (or the file where your renderscene() is in, too)
typedef struct
{
	POINT	Pos;
	float	AngleX;
	float	AngleY;
	float	Radius;
	float	DeltaX;
	float	DeltaY;
	float	PlayerX;
	float	PlayerY;
	float	PlayerZ;
	float	LookAtX;
	float	LookAtY;
	float	LookAtZ;
	float	SlideX;
	float	SlideZ;
}
Camera;
Camera CameraSettings;
  
after that goto your renderscene() function and copy and paste the following:
	glLoadIdentity();

// here goes the camera calculation. Not very simple but effective and short!
	GetCursorPos(&CameraSettings.Pos);
	CameraSettings.DeltaX  = ((float)(ScreenX/2) - (float)CameraSettings.Pos.x);
	CameraSettings.DeltaY = ((float)(ScreenY/2) - (float)CameraSettings.Pos.y);
	CameraSettings.AngleX += (CameraSettings.DeltaX/300);
	CameraSettings.AngleY += (CameraSettings.DeltaY/300);
	if (CameraSettings.AngleY > 1.569f) CameraSettings.AngleY = 1.569f;
	if (CameraSettings.AngleY < -1.569f) CameraSettings.AngleY = -1.569f;
	CameraSettings.LookAtY = (float)(sin(CameraSettings.AngleY) * 6);
        CameraSettings.Radius  = (float)(cos(CameraSettings.AngleY) * 6);
        CameraSettings.LookAtX = (float)(sin(CameraSettings.AngleX) * CameraSettings.Radius);
        CameraSettings.LookAtZ = (float)(cos(CameraSettings.AngleX) * CameraSettings.Radius);
	CameraSettings.SlideX = (float)(sin(CameraSettings.AngleX) * 6);
	CameraSettings.SlideZ = (float)(cos(CameraSettings.AngleX) * 6);
	SetCursorPos(ScreenWidth/2, ScreenHeight/2);
	gluLookAt(CameraSettings.PlayerX, CameraSettings.PlayerY, CameraSettings.PlayerZ, CameraSettings.PlayerX+CameraSettings.LookAtX, CameraSettings.PlayerY+CameraSettings.LookAtY, CameraSettings.PlayerZ+CameraSettings.LookAtZ, 0, 1,	0);
// End camera calculation
  
Thats all you have to do. No classes, no vector mathmatics! (@vector-coders: ahh, please don't kick me :D its much easier to understand this instead of the complicated tutorials about this topic and its much shorter and fast, too) dark [edited by - DarkKiller on June 28, 2002 6:25:06 AM]

Share this post


Link to post
Share on other sites
Advertisement
for movement do the following: (I use nehe''s "bool keys[256]")
copy and paste the folowing code into your mainloop



if (keys[''W''])
{
CameraSettings.PlayerX += CameraSettings.LookAtX * ValProc;
CameraSettings.PlayerY += CameraSettings.LookAtY * ValProc;
CameraSettings.PlayerZ += CameraSettings.LookAtZ * ValProc;
}
if (keys[''S''])
{
CameraSettings.PlayerX -= CameraSettings.LookAtX * ValProc;
CameraSettings.PlayerY -= CameraSettings.LookAtY * ValProc;
CameraSettings.PlayerZ -= CameraSettings.LookAtZ * ValProc;
}
if (keys[''A''])
{
CameraSettings.PlayerX += CameraSettings.SlideZ * ValProc;
CameraSettings.PlayerZ -= CameraSettings.SlideX * ValProc;
}
if (keys[''D''])
{
CameraSettings.PlayerX -= CameraSettings.SlideZ * ValProc;
CameraSettings.PlayerZ += CameraSettings.SlideX * ValProc;
}

Share this post


Link to post
Share on other sites
or you could just use a matrix and a vector object. assuming you'd already made the objects (which isn't a hard thing to do provided you understand how they work)

then it'd be a matter of:

set the camera:

glLoadMatrixf((float*)&martix.transpose());
glTranslatef(-position.x,-position.y,-position.z);


and to rotate,

if (keys[VK_UP])
matrix.RealitiveRotate(deltaTime,0,0);

etc..

to move,

if (keys[VK_W])
position+=Vector3(0,1,0)*matrix*deltaTime;



this is exactly what the code for a space game I'm making looks like at this rough testing stage.

[edited by - RipTorn on June 28, 2002 6:52:13 AM]

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

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

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!