How to implement a Camera???
Hi everybody.
I would like to know how to implement a Camera into a 3D engine, so that you can look around instead of looking into a fixed direction.
I was thinking that I should use 2 points for the camera. One vertex for the actual position of the camera, and one vector for the spot direction. Is that right? And how to I actually render the world from the camera''s perspective? Should I rotate the whole world in funtion of the cameras position/spot direction?
"Simple is beautiful"
you can either use direct3d or opengl for that. whichever one you choose has camera features.
a2k
a2k
AFAIK, OpenGL does NOT have camera features. Granted, with gluLookAt() you can make a simple camera system, but OpenGL itself does not support any such feature. IMO, if your using OGL, just roll your own camera system to build a camera matrix from scratch, then load the matrix on to the matrix stack and multiply.
I don''t want to seem rude, but I give a shit for all this pre-coded 3D API''s. (OpenGL/Glide/Direct3D/etc.)
What I''m doing is to build a 3D engine in DirectDraw for me to learn how a 3D engine works. I want to know how things are calculated etc. And now I''m asking how I could implement a camera. What I want are some formulas, tutorials, etc...
Please, don''t mention any 3D API''s because using them is for people who allready know how a 3D engine works, or for those who just want to code a 3D engine without any deep knowledge. I plan to use them later to get beautiful graphics on high-resolution.
"Simple is beautiful"
What I''m doing is to build a 3D engine in DirectDraw for me to learn how a 3D engine works. I want to know how things are calculated etc. And now I''m asking how I could implement a camera. What I want are some formulas, tutorials, etc...
Please, don''t mention any 3D API''s because using them is for people who allready know how a 3D engine works, or for those who just want to code a 3D engine without any deep knowledge. I plan to use them later to get beautiful graphics on high-resolution.
"Simple is beautiful"
okay, gotcha. um, you need to perform what''s called a world to viewer coordinate transformation with a special matrix.
Here''s a link to info as to how this is performed:
http://www.siggraph.org/education/materials/HyperGraph/viewing/view3d/3dview1.htm
a2k
Here''s a link to info as to how this is performed:
http://www.siggraph.org/education/materials/HyperGraph/viewing/view3d/3dview1.htm
a2k
OK, thanks. That was exaclty what I am looking for. If you have some other URL''s about this topic I would apreciate it.
I like it to read 2 or 3 diferent tutorials about the same topic, because each author has a diferent point-of-view. So, reading 3 diferent opinions is the best way to make your own conclusions
"Simple is beautiful"
I like it to read 2 or 3 diferent tutorials about the same topic, because each author has a diferent point-of-view. So, reading 3 diferent opinions is the best way to make your own conclusions
"Simple is beautiful"
Another URL?
Sure, look in the DirectX documentation : )
But hey, feel free to bitch about mentioning an API and not look at it.
G''luck,
-Alamar
Sure, look in the DirectX documentation : )
But hey, feel free to bitch about mentioning an API and not look at it.
G''luck,
-Alamar
OK, I''ve found 2 tutorials about camera calculations. One of them provided by a2k .
Both tutorials use a 3x3 Camera Matrix in the clculations. And this is my new question now. What is inside this 3x3 camera matrix?
I really don''t know what to put in there. I have the cameras position inside a vertex:
[X]
[Y]
[Z]
and I''m sure that I must put the cameras direction vector into this 3x3 Camera Matrix, but how???
[Vx,0,0]
[0,Vy,0]
[0,0,Vz]
?
Any idae?
Both tutorials use a 3x3 Camera Matrix in the clculations. And this is my new question now. What is inside this 3x3 camera matrix?
I really don''t know what to put in there. I have the cameras position inside a vertex:
[X]
[Y]
[Z]
and I''m sure that I must put the cameras direction vector into this 3x3 Camera Matrix, but how???
[Vx,0,0]
[0,Vy,0]
[0,0,Vz]
?
Any idae?
3x3 Matrix? Hmmmm, interesting. It would be a little bit easier if you used 4x4 Matrices and worked in Homogeneous space rather than Euclidean space. Then the matrices would be:
Translation:
[1 0 0 X]
[0 1 0 Y]
[0 0 1 Z]
[0 0 0 1]
Rotation around X:
[ 1 0 0 0]
[ 0 cosT -sinT 0]
[ 0 sinT cosT 0]
[ 0 0 0 1]
Rotation around Y:
[cosT 0 sinT 0]
[ 0 1 0 0]
[-sinT 0 cosT 0]
[0 0 0 1]
Rotation around Z:
[cosT -sinT 0 0]
[sinT cosT 0 0]
[ 0 0 1 0]
[ 0 0 0 1]
Remember to rotate before you translate and then invert.
M = Inverse(T * Rz * Ry * Rx)
But if your writing yourself a renderer get yourself the bible. Computer Graphics: Principles and Practice.
Translation:
[1 0 0 X]
[0 1 0 Y]
[0 0 1 Z]
[0 0 0 1]
Rotation around X:
[ 1 0 0 0]
[ 0 cosT -sinT 0]
[ 0 sinT cosT 0]
[ 0 0 0 1]
Rotation around Y:
[cosT 0 sinT 0]
[ 0 1 0 0]
[-sinT 0 cosT 0]
[0 0 0 1]
Rotation around Z:
[cosT -sinT 0 0]
[sinT cosT 0 0]
[ 0 0 1 0]
[ 0 0 0 1]
Remember to rotate before you translate and then invert.
M = Inverse(T * Rz * Ry * Rx)
But if your writing yourself a renderer get yourself the bible. Computer Graphics: Principles and Practice.
If you got access to your local bookstore, flip open Game Programming Gems. They have the matrix in there, and a description of where the aspect ratio and field of view go into that matrix.
your aim is to find a way to express a camera with a matrix transformation that accepts:
camera position vector
camera target vector
camera "up" vector
field of view
and aspect ratio
the W->V matrix can readily take these values in (i think)
a2k
Edited by - a2k on August 8, 2001 1:34:12 PM
your aim is to find a way to express a camera with a matrix transformation that accepts:
camera position vector
camera target vector
camera "up" vector
field of view
and aspect ratio
the W->V matrix can readily take these values in (i think)
a2k
Edited by - a2k on August 8, 2001 1:34:12 PM
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement