From - Fri Aug 29 12:14:00 1997
Path: ifi.uio.no!sn.no!uninett.no!news-feed.inet.tele.dk!cpk-news-hub1.bbnplanet.com!news.bbnplanet.com!news-peer.sprintlink.net!news-pull.sprintlink.net!news-in-east.sprintlink.net!news.sprintlink.net!Sprint!206.154.70.8!news.webspan.net!usenet
From: "mr_phreak" 
Newsgroups: comp.graphics.algorithms,rec.games.programmer
Subject: Re: Virtual Camera
Date: 29 Aug 1997 01:02:02 GMT
Organization: WebSpan Inc., New Jersey
Lines: 99
Message-ID: <01bcb416$b368c7c0$d4589ace@particle>
References: <1375.7179T1340T2054@aix.pacwan.net>
NNTP-Posting-Host: usr6-12.bay.ny.webspan.net
X-Report-Abuse-To: abuse@mail.webspan.net
NNTP-Posting-Date: 28 Aug 1997 21:02:05 EDT
X-Newsreader: Microsoft Internet News 4.70.1161
Xref: ifi.uio.no comp.graphics.algorithms:56607 rec.games.programmer:154114

ok... he're what I think you're looking for... 

(this is just my fast way C copy... )

matrix set_rotations(matrix m, vector d, vector u){
	float t;
	vector D,U,R;
	D.x = d.x;
	D.y = d.y;
	D.z = d.z;
	NormalizeVector(&D);
	U.x = u.x;
	U.y = u.y;
	U.z = u.z;
	t = U.x * D.x+U.y * D.y+U.z * D.z;
	U.x -= D.x *t;
	U.y -= D.y *t;
	U.z -= D.y *t;
	NormalizeVector(&U);
	VectorCrossProduct(&R,&U,&D);
	m._11 = R.x;
	m._12 = R.y;
	m._21 = U.x;
	m._22 = U.y;
	m._31 = D.x;
	m._32 = D.y;
	m._33 = D.z;
	m._13 = R.z;
	m._23 = U.z;
	return m;
}

ok... what this thing does is: make the d (in parameter), vector, 
your Z vector,.. and the u (in parameter) vector, into your Y vector.

ok.. say you have 2 points...  5, 10, 20... for campera. and 
100,200,300, for point... 

you do something like... 
set_rotation(m,point-camera,up_vector)
that would make a rotation matrix, which will make the 
point-camera vector your current Z...   the up_vector
is somethign you'll have to figure out..... it's 
your "roll".. (I think that's what it is.. ).. 
put your ear to your shoulder... (that's what that is... )

well... the source can be found in one of those DX samples.

hope it works... (never actually tried it myself... )
-- 
Particle
mr_phreak@geocities.com
http://www.geocities.com/SiliconValley/Way/8593


Frederic Calendini        wrote in article
<1375.7179T1340T2054@aix.pacwan.net>...
> Hi !
> 
> I would like to implement a virtual camera in my 3D viewing system, but
don't
> know exactly how to do it.
> 
> Currently my system uses three angles (theta, phi and psi). So I must
provide
> these 3 angles to determine the angle from which my world is seen; this
angles
> system is not very intuitive, and I'd prefer give a point to look at
instead.
> 
> So I think it's not very difficult to determine the 3 needed theta, phi,
psi
> angles when I know the positions of my camera and the point I want to
look at,
> but I can't figure the correct formula by myself (I suppose that cos and
sin are
> used, but I'm not that good at maths, unfortunately).
> 
> So could someone help me ? To sum up, I'm looking for formulas that would
give
> me the correct theta, phi and psi rotation angles, so the z axis of my
observer
> system points to a given point (so by rotating my observer system with
these
> angles, my camera would look at the desired point).
> 
> Thank you very much for your help (and sorry if this topic was already
> discussed, but I'm new to 3D ;-)).
> 
> Best regards,
> 
> *****************************************************
> *                                                   *
> *  Fred. Calendini :  fcalendini@aix.pacwan.net     *
> *                     fcalendini@amiganews.com      *
> *                                                   *
> *****************************************************
> 
> 

Discuss this article in the forums


Date this article was posted to GameDev.net: 7/16/1999
(Note that this date does not necessarily correspond to the date the article was written)

See Also:
Matrices

© 1999-2011 Gamedev.net. All rights reserved. Terms of Use Privacy Policy
Comments? Questions? Feedback? Click here!