Difference between revisions of "User:Akopytov"

From CDOT Wiki
Jump to: navigation, search
Line 50: Line 50:
 
*Add a static iContext* variable under the protected list of variables (Line 58)
 
*Add a static iContext* variable under the protected list of variables (Line 58)
 
*Add the void hasContext(iContext* c) function to the Object class (Line 67)
 
*Add the void hasContext(iContext* c) function to the Object class (Line 67)
*Remove the static iContext* variables from the derived classes (Line 138, 174, 196, 214 in Solution 28)
+
*Remove the static iContext* variables from the derived classes (Line 138, 174, 196, 214)
 
*Define the get and set functions (Line 78-85)
 
*Define the get and set functions (Line 78-85)
  
 
Object.cpp
 
Object.cpp
 +
*Set the iContext* variable to NULL (Line 37)
 +
*Remove the iContext* variables from the derived classes (Line 389, 475, 552, 572)
 +
*Set the default values for shine, roughness and index (Line 65-67)
 +
*Call the setAlgorithm function, passing in the value of GF_DF_ALGO (Line 69)
 +
*Remove the code that initializes the shine variable's subsets, as it is no longer an array (Line 72-75)
 +
*Set roughness and index variables to NULL (Line 113-114)
 +
*Remove the conditional statement that deletes a shine array (Line 134-137)
 +
*Set the input variables and algorithm to the values from the object being copied (Line 152-154, 156)
 +
*Remove the code that instantiates shine as a new array (Line 168-172)
 +
*Remove the code that destroys the shine array (Line 282-283)
 +
 +
Scene.cpp
 +
*Pass the context to the Object class, and remove the code that passes the context to derived classes (Line 47-50)
 +
  
  

Revision as of 13:52, 9 April 2011

Contact Information

Name: Andrei Kopytov

Seneca e-mail address: akopytov@learn.senecac.on.ca

Lighting

Instructions to incorporate advanced lighting into your game:

Download the full working solution here:
OR
Download just the files that have changes relevant to lighting here:


Copy from the files or manually code the following:

Configuration.h

  • Increase the MAX_STR_ARRAYS macro by 1 (Line 46)
  • Add two more elements to the Integer enum: GF_NO_ALGS and GF_DF_ALGO (Line 88-89)
  • Add an element to the StrArray enum: GF_LITDESC (Line 127)
  • Create a macro called LIGHT_DESCRIPTIONS (Line 331)
  • Create an enum called LightAlgorithm (Line 389)

Context.cpp

  • Allocate memory for str array and set it to LIGHT_DESCRIPTIONS (Line 67-69)
  • Set the GF_NO_ALGS element to the number of algorithms (Line 70)

iUserDialog.h

  • Add virtual void populateLightingList(void*) = 0; to the interface (Line 29)

UserDialog.h

  • Add a wchar_t variable to store the lighting description (Line 34)
  • Add void populateLightingList(void*); to the header file (Line 54)

UserDialog.cpp

  • Set the previously created wchar_t variable to an empty string (Line 48)
  • Call the populateLightingList(hwnd) function in populateUserDialog (Line 88)
  • Create the void populateLightingList(void*) function (Line 150-161)
  • Retrieve the selected algorithm and set its index into GF_DF_ALGO (Line 581-585)
  • Store the lighting description inside of the wchar_t variable (Line 594)

iObject.h

  • Declare the LightAlgorithm enum (Line 26)
  • Declare the get and set functions for the input variables, remove the parameter from power() (Line 43-50)

Object.h

  • Change the shine variable from float* to float (Line 41)
  • Add a float variable for roughness (Line 42)
  • Add a float variable for index of refraction (Line 43)
  • Add a LightAlgorithm variable that will store the index of the algorithm to be used for the object (Line 45)
  • Add a static iContext* variable under the protected list of variables (Line 58)
  • Add the void hasContext(iContext* c) function to the Object class (Line 67)
  • Remove the static iContext* variables from the derived classes (Line 138, 174, 196, 214)
  • Define the get and set functions (Line 78-85)

Object.cpp

  • Set the iContext* variable to NULL (Line 37)
  • Remove the iContext* variables from the derived classes (Line 389, 475, 552, 572)
  • Set the default values for shine, roughness and index (Line 65-67)
  • Call the setAlgorithm function, passing in the value of GF_DF_ALGO (Line 69)
  • Remove the code that initializes the shine variable's subsets, as it is no longer an array (Line 72-75)
  • Set roughness and index variables to NULL (Line 113-114)
  • Remove the conditional statement that deletes a shine array (Line 134-137)
  • Set the input variables and algorithm to the values from the object being copied (Line 152-154, 156)
  • Remove the code that instantiates shine as a new array (Line 168-172)
  • Remove the code that destroys the shine array (Line 282-283)

Scene.cpp

  • Pass the context to the Object class, and remove the code that passes the context to derived classes (Line 47-50)


************************ Lighting Documentation v1.00 ************************
* Lighting with the programmable graphics pipeline currently requires the use of
* the effects framework and works on the object level. This means the algorithm
* with which you wish to illuminate your object will work on the entire object, not
* a subset of that object. The inputs for the algorithm also work on the object level,
* meaning all subsets will use the same values.
*
* To avoid bloating the object class, three variables will be used across the various
* algorithms in different ways. It is very important to note that an algorithm may not
* necessarily use all three variables in its calculations. Also, each algorithm may
* accept different ranges of values from each of the variables it does use. The
* lighting algorithms available for use in the framework are described below:
*
* Functions
* ---------
* power(), setPower(float)
* getRoughness(), setRoughness(float)
* getIndexOfRefraction, setIndexOfRefraction(float)
* getAlgorithm(), setAlgorithm(LightAlgorithm)
*
* Inputs for setAlgorithm()
* PHONG
* BLINN_PHONG
* COOK_TORRANCE
* OREN_NAYAR
* WARD_ANISO
* ASH_SHIRLEY
*
* == Phong ==
* Isotropic
*
* Input                 Effective Range
* power                 0.0 - 1000
*
* Makes objects look plastic
* ==========================================================================
* == Blinn-Phong ==
* Isotropic
*
* Input                 Effective Range
* power                 0.0 - 1000
*
* Like Phong, but uses less instructions, also gives objects a plastic look
* ==========================================================================
* == Cook-Torrance ==
* Isotropic
*
* Input                 Effective Range
* roughness             0.0 - 15.0
* index of refraction   0.0 - 10.0
*
* Gives objects a metallic look
* ==========================================================================
* == Oren-Nayar ==
* Isotropic
*
* Input                 Effective Range
* roughness             0.0 - 2.0
*
* Diffuse only model, good for making objects look rough
* ==========================================================================
* == Ward Anisotropic ==
* Anisotropic
*
* Input                 Effective Range
* roughness             0.0 - 2.0
* power                 0.0 - 2.0
*
* Allows the manipulation of specular lobe (change its shape)
* ==========================================================================
* == Ashikhmin-Shirley ==
* Anisotropic
*
* Input                 Effective Range
* roughness             0 - 10000
* power                 0 - 10000
* index of refraction   0.0 - 10.0
*
* Good for making objects look metal or plastic, and can manipulate specular lobe
* ==========================================================================
*
* For more information on lighting, check out: http://wiki.gamedev.net/index.php/D3DBook:Lighting