1 / 25

3D coordinate systems

3D coordinate systems. Y. Y. Z. X. X. Z. Right-Hand Coordinate System. Left-Hand Coordinate System. Direct3D uses this!. OpenGL uses this!. Visualizing in 3D. Y. y=1.0. G. H. Counter- clockwise. C. D. F. E. X. x=1.0. 1.0. B. A. z=1.0. Z. Rendering a Box in OpenGL.

zahi
Download Presentation

3D coordinate systems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3D coordinate systems Y Y Z X X Z Right-Hand Coordinate System Left-Hand Coordinate System Direct3D uses this! OpenGL uses this!

  2. Visualizing in 3D Y y=1.0 G H Counter-clockwise C D F E X x=1.0 1.0 B A z=1.0 Z

  3. Rendering a Box in OpenGL • We render the 6 faces as polygons • Polygons are specified as a list of vertices • Vertices are specified in counterclockwise order looking at the surface of the face! H G C D E F A B

  4. OpenGL Polygon Rendering GLdouble size = 1.0; glBegin(GL_POLYGON); // front face glVertex3d(0.0, 0.0, size); glVertex3d(size, 0.0, size); glVertex3d(size, size, size); glVertex3d(0.0, size, size); glEnd();

  5. OpenGL Conventions • C library • All function names start with gl • OpenGL is a retained mode graphics system • It has a state • glBegin(GL_POLYGON) puts us into a polygon rendering state.

  6. OpenGL Types • Basic numeric types • GLdouble = double • GLfloat = float • GLint = int • GLshort = short • Mostly you’ll use GLdouble and GLfloat

  7. Function suffixes • Many functions have alternatives • Alternatives are specified by the suffix • glVertex2d • 2 double parameters • void glVertex2d(GLdouble x, GLdouble y); • glVertex3f • 3 float parameters • void glVertex3f(GLfloat x, GLfloat y, GLfloat z); • glVertex3fv • void glVertex3fv(const GLfloat *v);

  8. All of dem… • glVertex2d, glVertex2f, glVertex2i, glVertex2s, glVertex3d, glVertex3f, glVertex3i, glVertex3s, glVertex4d, glVertex4f, glVertex4i, glVertex4s, glVertex2dv, glVertex2fv, glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv, glVertex4fv, glVertex4iv, glVertex4sv

  9. Specifying a color (no lighting) • glColor3f(red, green, blue); • Most of the same suffixes apply… GLdouble size = 1.0; glColor3d(1.0, 0.0, 0.0); // red glBegin(GL_POLYGON); // front face glVertex3d(0.0, 0.0, size); glVertex3d(size, 0.0, size); glVertex3d(size, size, size); glVertex3d(size, 0.0, size); glEnd();

  10. Moving to 3D • Camera Configuration • Parameters • Tessellation • Scene Graphs

  11. Structure of Our Programs • OnGLDraw() • Clear the buffers • Set up the camera • Position the camera • Configure OpenGL • Render whatever we are rendering • Flush

  12. Clear the Buffers void CChildView::OnGLDraw(CDC *pDC) { // Clear to black... glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); . . .

  13. Camera Configuration What does it take to describe a camera?

  14. Describing a Camera • Where it is in space • Eye location • Which way it’s pointing • Or what it’s pointing at • Which way is up • Zoom characteristics • Field of view angle

  15. Setting up the Camera Far clipping plane Near clipping plane Field of View (angle) h w Nothing is rendered that is: • Closer than the near clipping plane • Farther than the far clipping plane Aspect ratio = w/h

  16. gluPerspective() • void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar); • Fovy = Field of view angle • Degrees, usually less than 90 • Aspect = Ratio of width/height of window • zNear = distance to near clipping plane • zFar = distance to far clipping plane glu = GL Utility

  17. Important • What do the numbers zFar, zNear represent? • Always select some unit for your application • Inches, Feet, Meters, etc. • In my sample application, I used inches

  18. Using gluPerspective() // // Set up the camera // glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Determine the screen size so // we can determine the aspect ratio int width, height; GetSize(width, height); GLdouble aspectratio = GLdouble(width) / GLdouble(height); // Set the camera parameters gluPerspective(25., // Field of view. aspectratio, // The aspect ratio. 10., // Near clipping 200.); // Far clipping

  19. After this • The camera is: • At the origin • Looking down the -Z axis

  20. Positioning the Camera • gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz); • Eye – Where the camera is located • At – What the camera is looking at • Up – Which direction is up • Can’t be the looking direction

  21. Matrix Modes • GL_PROJECTION • 3D to 2D conversion • Camera parameters • GL_MODELVIEW • Translation, rotation, etc. of Graphical Models • gluLookAt is a rotation and translation of your graphical model • the camera is really at the origin and looking down the z axis.

  22. Using gluLookAt() // Set the camera location glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(50., 50., 50., // eye x,y,z 0., 0., 0., // center x,y,z 0., 1., 0.); // Up direction . . . Render from here on . . .

  23. Some OpenGL Configurations // // Some standard parameters // // Enable depth test glEnable(GL_DEPTH_TEST); // Cull backfacing polygons glCullFace(GL_BACK); glEnable(GL_CULL_FACE);

  24. Example: Showing the coordinate axis… if(m_showaxis) { glColor3d(0., 1., 1.); glBegin(GL_LINES); glVertex3d(0., 0., 0.); glVertex3d(12., 0., 0.); glVertex3d(0., 0., 0.); glVertex3d(0., 12., 0.); glVertex3d(0., 0., 0.); glVertex3d(0., 0., 12.); glEnd(); }

  25. Example: A Cube void CChildView::Cube(GLdouble size) { GLdouble a[] = {0., 0., size}; GLdouble b[] = {size, 0., size}; GLdouble c[] = {size, size, size}; GLdouble d[] = {0., size, size}; GLdouble e[] = {0., 0., 0.}; GLdouble f[] = {size, 0., 0.}; GLdouble g[] = {size, size, 0.}; GLdouble h[] = {0., size, 0.}; glColor3d(0.8, 0., 0.); glBegin(GL_POLYGON); // Front glVertex3dv(a); glVertex3dv(b); glVertex3dv(c); glVertex3dv(d); glEnd(); . . . h g c d e f a b See example program…

More Related