![Page 1: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/1.jpg)
Light Hearted Look At
GPU Programming And Linear Algebra Operators
![Page 2: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/2.jpg)
Pass Out (3) PapersAnd GPUGems Book
Book Has Some Nice Graphics
![Page 3: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/3.jpg)
Demos
![Page 4: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/4.jpg)
Pyramids DemoBlackbox
![Page 5: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/5.jpg)
Codecreatures Demo
Benchmarks!
![Page 6: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/6.jpg)
What Are The Differences Between These Demos?
![Page 7: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/7.jpg)
Food For Thought
Science/Education Versus Entertainment?
“Edutainment”?
Is “User Friendliness” The Same?
To Me, The Codecreatures Demo Was State Of The Art!Probably To Some Video Gamers, It’s Old Hat!
I Assume This Code Is Really Taking Advantage Of The GPU
![Page 8: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/8.jpg)
“The Continuum”
Assembly Programming “GPU Programming” Monitor Programming 4GL, 5GL, …?
User Friendliness
small medium large
What, Exactly, Is Happening On The GPU? Probably Don’t Know Exactly
SDKS e.g.
Visual Studio
![Page 9: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/9.jpg)
My ContinuumGPU Knowledge
small medium large
Me Prof Bailey (andProf Zhang andJacob)
![Page 10: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/10.jpg)
;-) :-)
![Page 11: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/11.jpg)
What’s On the GPU,What’s on the CPU?
“Don’t Ask Me!”
![Page 12: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/12.jpg)
Is the GPU Synonymous With the Graphics Card?
“Yes, close enough. The GPU is actually the processor chip that lives on the graphics card. The "graphics card" has a bunch of other stuff on it to support the GPU and its operations, plus memory, bus interaction, etc.”
Mike Bailey
![Page 13: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/13.jpg)
GonnaWear ThisOne Out!
![Page 14: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/14.jpg)
GPU/Graphics Card?
![Page 15: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/15.jpg)
CPU,Bus,VP,FP,bunchof other stuff
![Page 16: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/16.jpg)
Benchmarking
(CPU)
(BUS)
![Page 17: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/17.jpg)
Benchmarking
(VP)
(FP)
Science?
Entertainment?
![Page 18: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/18.jpg)
Benchmarking
glFinish(); int t0 = glutGet( GLUT_ELAPSED_TIME );
<< All Graphics Calls That You Are Testing The Speed Of >>
glFinish(); int t1 = glutGet( GLUT_ELAPSED_TIME ); glutSwapBuffers(); fprintf( stderr, "One display frame took %d milliseconds\n", t1 - t0 );
![Page 19: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/19.jpg)
What’s On the GPU,What’s On the CPU?
How Well Do We Know The Hardware/Software Boundary?
![Page 20: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/20.jpg)
// minimal vertex shader// www.lighthouse3d.com
void main(){
// the following three lines provide the same result
// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = ftransform();}
The end result is of course the same. Does this guarantee the same transformation as in the fixed functionality? Well in theory yes, but in practice the process of transforming the vertices may not follow the same order as in
here. This is normally a highly optimized task in a graphic card, and a special function is provided to take advantage of that optimization. Another reason for this function is due to the limit in the precision of the float data type. When calculus is done in different orders, different results may be obtained due to this limited precision. Hence the GLSL provides a function that guarantees that not only the best performance is obtained but also that the result is always the same as when using the fixed functionality. This magical function is:
vec4 ftransform(void);
This function returns the transformed incoming vertex, following the same steps as the fixed functionality does.
http://www.lighthouse3d.com/opengl/glsl/index.php?minimal
Jumping Ahead:Specific Code,But TakeawayIs Some UncertaintyIn Implementation
Simplest Shader Program You Will Ever See!
![Page 21: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/21.jpg)
GPU Overview
![Page 22: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/22.jpg)
What is the GPU?
“Graphical Processing Unit”
![Page 23: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/23.jpg)
HowWe Gonna Dive In?
![Page 24: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/24.jpg)
GLSL - (Relatively) User Friendly
GLman - User Friendly
Good Demos Available (e.g. Pyramids)
GLSL/GLman Orientation
(Simple, Less Powerful, Less User Friendly Visual Studio Demos/Prototypes Do Exist And Will Be Overviewed
![Page 25: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/25.jpg)
GLSL/GLman Orientation
![Page 26: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/26.jpg)
“GLman is written in OpenGL. It is meant to be a scripting system to make it easy to explore GPU programming, so internally it takes care of a lot of theboilerplate of writing GPU-based programs, leaving you just to write the GPU code. So, the .glib files are the script, and the .vert and .frag files are the vertex and fragment GPU code.”
Mike Bailey
http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/Glman/glman.pdf
![Page 27: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/27.jpg)
Glman Lets You Concentrate On:
Vertex Processor - .vert file // text file
Fragment Processor - .frag file // text file
GLSL/GLman Orientation
![Page 28: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/28.jpg)
GLSL/GLman Orientation
Glman makesthis part easy
![Page 29: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/29.jpg)
GLSL/GLman Orientation
Simple/Standalone Visual Studio Demo AppsAvailable, AndWill Be LookedAt
![Page 30: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/30.jpg)
Why Use the GPU?
![Page 31: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/31.jpg)
“The rasterizer is a part of the GPU, but its functionality can't becustomized by the user, other than sending user-defined variablesthrough it to be interpolated.”
Mike Bailey
![Page 32: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/32.jpg)
Rasterizer In The“Bunch Of Other Stuff”Category ?
![Page 33: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/33.jpg)
![Page 34: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/34.jpg)
![Page 35: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/35.jpg)
GPU versus CPU
“The distinction is becoming more and more blurred, but the basic difference is that GPUs have certain architectural changes that appeal more to graphics, such as more cores, less cache,and special texture fetching hardware.”
Mike Bailey
Can’t Do Recursion On The GPU!!!
![Page 36: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/36.jpg)
GPU versus CPU
Can’t Do Recursion On The GPU!!!
CPU – double oriented
GPU – float oriented
![Page 37: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/37.jpg)
Multi Cores Parallelism
Less Cache Streaming
Texture (Local) Memory Reduced Bus Activity
![Page 38: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/38.jpg)
GPU versus CPU
![Page 39: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/39.jpg)
http://www.springerlink.com/content/eupfj7euk0jvj98u/fulltext.pdf
[Chiang, Hsueh, Liu]
![Page 40: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/40.jpg)
GPU versus CPU
![Page 41: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/41.jpg)
GPU versus CPU
We’ll take a quick look at these (mostly linear operator) terms shortly
![Page 42: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/42.jpg)
http://ieeexplore.ieee.org/iel5/4221378/4221379/04221459.pdf?tp=&isnumber=&arnumber=4221459
[Gong, Langille, Gong]
![Page 43: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/43.jpg)
GPU Typical Programming Environment
GLSL - OpenGL Shading Language
HLSL - DirectX's high-level shading language
Cg – C For Graphics
…
![Page 44: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/44.jpg)
Vertex Shader Program(ming)
Fragment Shader Program(ming)
each with a main()
examples shortly
![Page 45: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/45.jpg)
Specific Linear Operators
Matrices for Multiplication
Matrices for Differentiation – e.g. Sobel Filter
![Page 46: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/46.jpg)
Specific Linear Operators
vec2 texcoord1, texcoord2;vec3 position;vec4 myRGBA;ivec2 textureLookup;bvec3 less;
Data Types
![Page 47: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/47.jpg)
Specific Linear Operators
mat2 mat2D;mat3 optMatrix;mat4 view, projection;mat4x4 view; // an alternate way of declaring a mat4mat3x2 m; // a matrix with 3 columns and 2 rows
Data Types
![Page 48: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/48.jpg)
Specific Linear Operators
vec3(float) // initializes each component of with the floatvec4(ivec4) // makes a vec4 with component-wise conversionvec2(float, float) // initializes a vec2 with 2 floatsivec3(int, int, int) // initializes an ivec3 with 3 intsbvec4(int, int, float, float) // uses 4 Boolean conversionsvec2(vec3) // drops the third component of a vec3vec3(vec4) // drops the fourth component of a vec4vec3(vec2, float) // vec3.x = vec2.x, vec3.y = vec2.y, vec3.z = floatvec3(float, vec2) // vec3.x = float, vec3.y = vec2.x, vec3.z = vec2.yvec4(vec3, float) // We’’ll See An Application Of One Of Thesevec4(float, vec3) // Or Something Similarvec4(vec2, vec2)
Constructors
![Page 49: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/49.jpg)
Specific Linear Operators
http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf
![Page 50: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/50.jpg)
Specific Linear Operators
Testing/Benchmarking
![Page 51: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/51.jpg)
Specific Linear Operators
Testing/Benchmarking
![Page 52: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/52.jpg)
Specific Linear Operators
Non Linear
Testing/Benchmarking
![Page 53: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/53.jpg)
Specific Linear Operators
SWIZZLING!
![Page 54: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/54.jpg)
Specific Linear Operators
// different denominator forms
![Page 55: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/55.jpg)
Specific Linear Operators
![Page 56: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/56.jpg)
Specific Linear Operators
![Page 57: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/57.jpg)
http://wwwcg.in.tum.de/Research/data/Publications/sig03.pdf
[Kruger,Westermann]
Specific Linear Operators
![Page 58: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/58.jpg)
Basic Architecture View
Input Is (C/C++ Program), .vert file, .frag file (, .glib file)
Output Is Image(s)
![Page 59: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/59.jpg)
More Complex Architecture Views
![Page 60: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/60.jpg)
Another Pipeline Overview
MC – Model Coordinates
SC – Screen Coordinates
CompleteColored Screen
Coordinates
![Page 61: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/61.jpg)
![Page 62: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/62.jpg)
![Page 63: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/63.jpg)
Another Pipeline Overview
“Programmable Unit”
![Page 64: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/64.jpg)
OverSimplified?
![Page 65: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/65.jpg)
MC – Model Coordinates
SC – Screen Coordinates
Colored Screen Coordinates
![Page 66: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/66.jpg)
Snazzy Examples
![Page 67: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/67.jpg)
Snazzy Examples
![Page 68: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/68.jpg)
Snazzy Examples
![Page 69: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/69.jpg)
Snazzy Examples
![Page 70: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/70.jpg)
Getting Started
GLSL/GLman
![Page 71: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/71.jpg)
Demos
Start -> Programs -> Shaders -> Glman
http://cs.oregonstate.edu/~mjb/cs519
has multiple sets of input files (.glib, .vert, and .frag)
(In e.g. CGEL)
![Page 72: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/72.jpg)
Pyramids
- pyramids.glib
- pyramids.vert
- pyramids.frag
![Page 73: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/73.jpg)
GLSL/Glman Specialization
![Page 74: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/74.jpg)
GLSL/Glman Specialization
![Page 75: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/75.jpg)
##OpenGL GLIB
Perspective 70
Vertex pyramids.vertFragment pyramids.fragProgram BumpMapTest \
LightX <-10. 0. 10.0> \LightY <-10. 10. 10.0> \LightZ <-10. 10. 10.0> \SurfaceColor {0.7 0.8 0.1 1.} \Ang <-3.14159 0.785398 3.14159> \BumpDensity <5. 16. 100.> \Ambient <0. 0.1 .4> \Height <-.06 .005 .06>
Sphere 1 200 200#Obj cow.obj#Teapot
pyramids.glib
![Page 76: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/76.jpg)
##OpenGL GLIB
Perspective 70
Vertex pyramids.vertFragment pyramids.frag
Program BumpMapTest \LightX <-10. 0. 10.0> \LightY <-10. 10. 10.0> \LightZ <-10. 10. 10.0> \SurfaceColor {0.7 0.8 0.1 1.} \Ang <-3.14159 0.785398 3.14159> \BumpDensity <5. 16. 100.> \Ambient <0. 0.1 .4> \Height <-.06 .005 .06>
Sphere 1 200 200#Obj cow.obj#Teapot
“one to one”
Pyramids.glib
vert filefrag file
“one to one”
![Page 77: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/77.jpg)
Getting Started
http://www.lighthouse3d.com/opengl/glsl/index.php?minimal
http://www.lighthouse3d.com/opengl/glsl/examples/glutglsl5_2.0.zip
has VS Project (glutglsl) that compiles (e.g. in CGEL) (needs glew32.lib which can be copied from the local hard drive)
Another Approach
![Page 78: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/78.jpg)
void setShaders() {
char *vs = NULL,*fs = NULL,*fs2 = NULL;
v = glCreateShader(GL_VERTEX_SHADER);f = glCreateShader(GL_FRAGMENT_SHADER);f2 = glCreateShader(GL_FRAGMENT_SHADER);
vs = textFileRead("minimal.vert");fs = textFileRead("minimal.frag");
const char * vv = vs;const char * ff = fs;
glShaderSource(v, 1, &vv,NULL);glShaderSource(f, 1, &ff,NULL);
free(vs);free(fs);
glCompileShader(v);glCompileShader(f);
printShaderInfoLog(v);printShaderInfoLog(f);printShaderInfoLog(f2);
p = glCreateProgram();glAttachShader(p,v);glAttachShader(p,f);
glLinkProgram(p);printProgramInfoLog(p);
glUseProgram(p);
}
“THE CODE !!!”
(“THE SYNTAX”?)
![Page 79: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/79.jpg)
// minimal vertex shader// www.lighthouse3d.com
void main(){
// the following three lines provide the same result
// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = ftransform();}
The end result is of course the same. Does this guarantee the same transformation as in the fixed functionality? Well in theory yes, but in practice the process of transforming the vertices may not follow the same order as in here. This is normally a highly optimized task in a graphic card, and a special function is provided to take advantage of that optimization. Another reason for this function is due to the limit in the precision of the float data type. When calculus is done in different orders, different results may be obtained due to this limited precision. Hence the GLSL provides a function that guarantees that not only the best performance is obtained but also that the result is always the same as when using the fixed functionality. This magical function is:
vec4 ftransform(void);
This function returns the transformed incoming vertex, following the same steps as the fixed functionality does.
![Page 80: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/80.jpg)
// minimal fragment shader// www.lighthouse3d.com
void main(){
gl_FragColor = vec4(0.4,0.4,0.8,1.0); What Color Is This?}
// minimal vertex shader// www.lighthouse3d.com
void main(){
// the following three lines provide the same result
// gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;// gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_Position = ftransform();}
![Page 81: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/81.jpg)
![Page 82: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/82.jpg)
CTRL-ALT-PRINT_SCREEN
PASTE INTO PAINT
SAVE AS 24 BIT BMP
RIGHT CLICK FILEOPEN WITH PHOTOSHOP
TEARDROPPER TOOL
DOUBLE CLICK
102 = .4 * 255102 = .4 * 255204 = .8 * 255
![Page 83: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/83.jpg)
// minimal fragment shader// www.lighthouse3d.com
void main(){
gl_FragColor = gl_Color ; // varying vec4 gl_Color;}
// minimal vector shader// www.lighthouse3d.com
void main(){
gl_FrontColor = gl_Color; // attribute vec4 gl_Color;
gl_Position = ftransform();}
![Page 84: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/84.jpg)
![Page 85: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/85.jpg)
// “near” minimal vertex shader// www.lighthouse3d.com
varying vec3 lightDir,normal;
void main(){
lightDir = normalize(vec3(gl_LightSource[0].position));normal = gl_NormalMatrix * gl_Normal;
gl_Position = ftransform();}
// “near” minimal fragment shader// www.lighthouse3d.com
varying vec3 lightDir,normal;
void main(){
float intensity;vec4 color;
// normalizing the lights position to be on the safe sidevec3 l = normalize(vec3(gl_LightSource[0].position));
vec3 n = normalize(normal);
intensity = dot(l,n);
if (intensity > 0.95)color = vec4(1.0,0.5,0.5,1.0);
else if (intensity > 0.5)color = vec4(0.6,0.3,0.3,1.0);
else if (intensity > 0.25)color = vec4(0.4,0.2,0.2,1.0);
elsecolor = vec4(0.2,0.1,0.1,1.0);
gl_FragColor = color;}
![Page 86: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/86.jpg)
ShaderPseudo Lighting
![Page 87: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/87.jpg)
Real Utility?
Exploiting(Living With)ExistingArchitecture/HardwareThat’s BeyondProgrammaticControl
// Special Constructor
![Page 88: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/88.jpg)
Context
![Page 89: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/89.jpg)
Context
Exploiting(Living With)ExistingArchitecture/HardwareThat’s BeyondProgrammaticControl
![Page 90: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/90.jpg)
Context
// We Saw An // Example
![Page 91: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/91.jpg)
Context
![Page 92: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/92.jpg)
Miscellaneous
“Programmable Unit”
![Page 93: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/93.jpg)
Miscellaneous
“Programmable Unit”
![Page 94: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/94.jpg)
Did You See All 3 PapersAnd The Book?
![Page 95: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/95.jpg)
Questions?
![Page 96: Light Hearted Look At GPU Programming And Linear Algebra Operators](https://reader035.vdocuments.mx/reader035/viewer/2022062500/56815968550346895dc6a682/html5/thumbnails/96.jpg)
GLUTGLSL Demo
z:\Windows.Documents\Desktop\colorglut_2.0\Debug>glutglsl