 Checking out, building, and using the sample solution  Part 1: Surface of Revolution  Part 2: Hierarchical Modeling  Part 3: Blinn-Phong Shader 

Slides:



Advertisements
Similar presentations
Today Composing transformations 3D Transformations
Advertisements

Computer Graphics 2D & 3D Transformation.
CSE 457 Modeler Help Session Lovingly brought to you by: TA Steve.
Using GLU/GLUT Objects GLU/GLUT provides very simple object primitives glutWireCube glutWireCone gluCylinder glutWireTeapot.
BodyPaint 3D Basics Configuring and Using BodyPaint With Lightwave Mark Filanov.
Introduction to FX Draw 4. Flyout Toolbars Any tool with a red triangle hides a “flyout” toolbar containing extra tools. Click and hold the left mouse.
SE 313 – Computer Graphics Lecture 13: Lighting and Materials Practice Lecturer: Gazihan Alankuş 1.
Due: Thursday, April 28 th by the stroke of midnight! TA: Jeff Booth.
Modeler Help Session CSE 457, Spring 2006 Modeler Due: Thursday, October 26th Modeler Artifact Due: Monday, Oct. 30th Project TA: Sierra
Modeler Help Session CSE 457, Fall 2005 Modeler Due: Oct 28, Friday Modeler Artifact Due: Oct 31, Monday Project TA: Jeremy
OpenGL (II). How to Draw a 3-D object on Screen?
2IV60 Computer Graphics 2D transformations
3D Rendering with JOGL Introduction to Java OpenGL Graphic Library By Ricardo Veguilla
Hierarchical Transformations Hierarchical Models Scene Graphs
SE 313 – Computer Graphics Lecture 11: Projection Painting and Merging Textures Lecturer: Gazihan Alankuş 1.
A Prezi presentation is like creating a mind map. It is created on a blank canvas and you decide where the information goes on this canvas.
Modeling and Animation with 3DS MAX R 3.1 Graphics Lab. Korea Univ. Reference URL :
COMP 175: Computer Graphics March 10, 2015
Mouse-Based Viewing & Navigation Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Monday, November 3, 2003.
COMP 175: Computer Graphics March 24, 2015
Microsoft Office 2003 Illustrated Brief Document Creating a.
EEC-693/793 Applied Computer Vision with Depth Cameras Lecture 13 Wenbing Zhao
Image Synthesis Rabie A. Ramadan, PhD 2. 2 Java OpenGL Using JOGL: Using JOGL: Wiki: You can download JOGL from.
Week 5 - Wednesday.  What did we talk about last time?  Project 2  Normal transforms  Euler angles  Quaternions.
Homogeneous Form, Introduction to 3-D Graphics Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Monday, October 20,
MA/CS 3751 Fall 2002 Lecture 24. MA/CS 3752 ginput ginput is a Matlab function which takes one argument input: number of points to select in the image.
Shadows via Projection Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, November 5, 2003.
Modeler Help Session CSEP 557, Spring Help Session Overview The Modeler Application Modeler Code Overview Constructing Your Model Hierarchical Modeling.
Lecture 11: Exam Revision 1  Principles of Interactive Graphics  CMSCD2012  Dr David England, Room 718,  ex 2271  Coursework.
Learning Unity. Getting Unity
Representation. Objectives Introduce concepts such as dimension and basis Introduce coordinate systems for representing vectors spaces and frames for.
Modeling with OpenGL Practice with OpenGL transformations.
Computer Science Term 1, 2006 Tutorial 2 Assignment 3 – The Virtual World.
Design Studies 20 ‘Show Off’ Project How to make a computer monitor In Google Sketchup By: Liam Jack.
CSE 381 – Advanced Game Programming GLSL. Rendering Revisited.
Animator Help Session. Surface of Revolution You will write OpenGL code to draw a surface by rotating a curve. Each vertex must have an appropriate: 
Advanced Viewing Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Friday, October 31, 2003.
1/50 CS148: Introduction to Computer Graphics and Imaging Transforms CS148: Introduction to Computer Graphics and Imaging Transforms.
Learning PowerPoint Presenting your ideas as a slide show… …on the computer!
Learning to Program: Part 1 Scene Setup and Starting Animation by Ruthie Tucker and Jenna Hayes Under the direction of Professor Susan Rodger Duke University,
2D Design – A Guide! SECTION 1.
Computer Graphics Matrices
1 Perception, Illusion and VR HNRS 299, Spring 2008 Lecture 15 Creating 3D Models.
OpenGL and You I Cast, Therefore I Am. Ray Casting Idea is simple, implementation takes some work –Cast rays as if you were the camera –Determine intersection.
Some Notes on 3-D Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Friday, October 24, 2003.
Computer Graphics Imaging Lecture 13 and 14 UV Mapping.
1 Berger Jean-Baptiste
Geometric Transformations Ceng 477 Introduction to Computer Graphics Computer Engineering METU.
GLSL Review Monday, Nov OpenGL pipeline Command Stream Vertex Processing Geometry processing Rasterization Fragment processing Fragment Ops/Blending.
Introduction to 3-D Viewing Glenn G. Chappell U. of Alaska Fairbanks CS 381 Lecture Notes Monday, October 27, 2003.
EEC-693/793 Applied Computer Vision with Depth Cameras
EEC-693/793 Applied Computer Vision with Depth Cameras
Introducing Blender.
Introducing Blender.
EEC-693/793 Applied Computer Vision with Depth Cameras
Introducing Blender.
Graphing & Describing “Translations”
Computer Animation UV Mapping.
Modeler Help Session CSE 457, Autumn 2008
Projection in 3-D Glenn G. Chappell
Modeler Help Session CSE 457, Spring 2006
Modeler Help Session CSE 457, Spring 2005
More on Widgets, Misc. Topics
Modeler Help Session CSE 457, Autumn 2007
Introduction to Grasshopper for rhino
Modeler Help Session CSE 457, Spring 2008
Modeler Code Basics CSE P 557, Autumn 2006
EEC-693/793 Applied Computer Vision with Depth Cameras
Modeler Help Session CSE 457, Spring 2007
Prepared by your friendly, phantom TA Jennifer
Presentation transcript:

 Checking out, building, and using the sample solution  Part 1: Surface of Revolution  Part 2: Hierarchical Modeling  Part 3: Blinn-Phong Shader  Part 4: Custom Shader(s)

 Go to the Modeler course page for detailed check-out directions.  Repository path:  svn+ssh://Your CSE wi/cse457/modeler/Your Group ID/source

 Go to your project folder  Double-click the.vcxproj file  Configuration menu next to green arrow  Debug – lets you set breakpoints  Release – for turn-in  Pick Debug, then click the green arrow next to it to build and run your project (Hotkey: F5)  Let us know if it doesn’t build!

List of Controls Control Groups View of your model Move the camera by dragging the mouse while holding down: Left button: rotate the view like a huge trackball. Right button (or left button + CTRL): zoom in/out Middle button (or left button + SHIFT): pan

 Partner A: Modeling  Part 1: Surface of revolution  Part 2: Hierarchical Modeling  Partner B: Shading  Part 3: Blinn-Phong Shader  Part 4: Custom Shader(s)  NOTE: this division of labor is just a suggestion!

 You will write OpenGL code to draw a surface by rotating a curve.  Each vertex must have an appropriate:  Texture coordinate pair  Vertex normal  Position  Replace code for drawRevolution() in modelerdraw.cpp  The divisions variable determines number of slices  Load new curve with File->”Load Revolution Curve File”

 Drawing a curve  Using the curve editor tool  Start by left click with ctrl key on  Save dense point samples into.apts file  Load point samples in modeler

 A curve file is basically a.txt file with a list of x,y coordinates for control points .apts  Densely sampled points on a curve .cfg: curve configuration file  Row 1: sample density  Row 2: curve interpolation method

 Divide the surface into “bands” by longitude  Compute vertex positions and normals  Using sin(), cos() in c++ code  See lecture notes for normal computation  Connect the dots with OpenGL triangles

 Use glDrawElements with GL_TRIANGLES (required!)  The order of vertices matters  Right-hand rule

 It’s okay to use glBegin(), glEnd() for testing shapes, but don’t use them in the final submitted code  Don’t use GL_QUAD_STRIP or GL_TRIANGLE_STRIP in the final submission, either.  In the submitted code, you need to build a triangle mesh and send it to OpenGL  Using glDrawElements with GL_TRIANGLES

This is an overly simplified example of drawing a plane using glDrawElements. The plane consists of two connecting triangles and the normal vectors of all vertices are pointing up. // preparing the data for the vertices positions GLfloat vertices[12] = { 0,0,0, 0,0,-1, 1,0,0, 1,0,-1 }; // normal directions GLfloat normals[12] = {0,1,0, 0,1,0, 0,1,0, 0,1,0}; // texture coordinate GLfloat texture_uv[8] = {0,0, 0,1, 1,0, 1,1}; // vertex indices to form triangles, the order of the vertices follows the right hand rule GLuint indices[6] = { 1,0,2, 1,2,3 } int indices_length = 6; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertices); glNormalPointer(GL_FLOAT,0,normals); glTexCoordPointer(2,GL_FLOAT,0,texture_uv); glDrawElements(GL_TRIANGLES, indices_length,GL_UNSIGNED_INT, indices); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);

 See lecture slides for texture mapping  Basic idea: use longitude and arc length (curve distance) as texture coordinates  Each vertex must have an appropriate:  Vertex normal  Position  Texture Coordinate Pair ▪ u,v Є [0,1]

 You must make a character with:  2 levels of branching  Something drawn at each level  Meaningful controls ▪ Otherwise, you will be overwhelmed when you animate it!  You will need to:  Extend the Model class  Override the draw() method  Add properties that Modeler users can control  Give an instance of your class to ModelerUserInterface in the main() function

 In sample.cpp, the Scene class extends Model  draw() method draws the green floor, sphere, and cylinder, etc.  Add and replace drawing commands of your own  You can use these draw commands as OpenGL references  Modelerdraw.cpp ▪ drawBox ▪ drawCylinder ▪ drawRevolution

 Add a new radio button for your scene at the end of the list

 Kinds of properties (in properties.h):  BooleanProperty = checkbox  RangeProperty = slider  RGBProperty = color  ChoiceProperty = radio buttons  Need to add it to: 1. Class definition 2. Constructor 3. Property list  See sample.cpp for example

 glEnable()/glDisable() changes state  Once you change something, it stays that way until you change it to something new  OpenGL’s state includes:  Current color  Transformation matrices  Drawing modes  Light sources

 Just two of them: projection and modelview. We’ll modify modelview.  Matrix applied to all vertices and normals  These functions multiply transformations: glRotated(), glTranslated(), glScaled()  Applies transformations in REVERSE order from the order in which they are called.  Transformations are cumulative. Since they’re all “squashed” into one matrix, you can’t “undo” a transformation.

 How do we get back to an earlier transformation matrix?  We can “remember” it  OpenGL maintains a stack of matrices.  To store the current matrix, call glPushMatrix().  To restore the last matrix you stored, call glPopMatrix().

 Draw the body  Use glPushMatrix() to remember the current matrix.  Imagine that a matrix corresponds to a set of coordinate axes:  By changing your matrix, you can move, rotate, and scale the axes OpenGL uses.

 Apply a transform:  glRotated()  glTranslated()  glScaled()  Here, we apply glTranslated(1.5,2,0)  All points translated 1.5 units left and 2 units up  It’s as if we moved our coordinate axes!

 Draw an ear.  This ear thinks it was drawn at the origin.  Transformations let us transform objects without changing their geometry!  We didn’t have to edit that ear’s drawing commands to transform it

 Call glPopMatrix() to return to the body’s coordinate axes.  To draw the other ear, call glPushMatrix() again…

 Apply another transform…  Where will the ear be drawn now?

 Draw the other ear

 Then, call glPopMatrix() to return to the body’s “axes”  Technically, you don’t need to if that second ear is the last thing you draw.  But what if you wanted to add something else to the body?

 Make sure there’s a glPopMatrix() for every glPushMatrix()!  You can divide your draw() function into a series of nested methods, each with a push at the beginning and a pop at the end.

 Your scene must have two levels of branching like in this diagram.  Circles are objects  Arrows are transformations  Call glPushMatrix() for green, so you can draw orange after drawing red  Do the same for orange  You must draw something at each level.

 Needs to control multiple aspects of your model.  Example: Rotate multiple joints at once  Don’t get too complicated!  Wait for Animator in four weeks!

 We provide a directional light shader in OpenGL Shading Language (GLSL)  You must extend it to support point lights.  Files to edit:  shader.frag – your fragment shader  shader.vert – your vertex shader

 modeler_solution.exe in your project folder  Loads your shader.frag and shader.vert.  Also contains our sample shaders.  Use radio buttons to compare with sample solution Choose shader here

 gl_LightSource[i].position.xyz – the position of light source i.  gl_FrontLightProduct[i] – object that stores the product of a light’s properties with the current surface’s material properties:  Example: gl_FrontLightProduct[i].diffuse == gl_FrontMaterial.diffuse * gl_LightSource[i].diffuse

 Anything you want!  Can earn extra credit!  Ask TA’s for estimated extra credit value of an option.  See the OpenGL orange book in the lab for details + code.  Can still use sample solution to test (depending on complexity)  Warnings  Don’t modify any files except your model file and the required modifications  Or, your model might not work in Animator (project 4)

 Make sure that your repository works by:  Checking it out  Building it  Tweaking something  Committing  Do this on each work environment you plan to use, even if you aren’t going to start work yet:  Lab machines  Your home computer  The sooner we know of a problem, the sooner we can fix it.

 In general, never put anything besides source code into source control:  Debug and Release folders  Modeler.suo  Modeler.ncb  *.user files  DO put source files (*.cpp, *.h, *.vcproj, image files, etc.) in the repository  Make sure you both add AND commit the files.  TortoiseSVN: when you commit, make sure all the files you added have a checkmark.

THINGS TO DO  Partner A: Modeling  Part 1: Surface of revolution  Part 2: Hierarchical Modeling  Partner B: Shading  Part 3: Blinn-Phong Shader  Part 4: Custom Shader(s)  You don’t have to divide work up this way! WARNINGS  Don’t modify any files except your model file and the required modifications  Or, your model might not work in Animator  Make sure you can check out, commit, and build!

 Try adjusting the sample model  Let us know if you have problems  COMMIT BEFORE LOGOFF!  Your files in C:\User\... will go away when you log out, due to Deep Freeze!