Stripes, Rings, and Dots! - Oregon State...

17
mjb – December 31, 2019 1 Computer Graphics Stripes, Rings, and Dots! stripesringsanddots.pptx Mike Bailey [email protected] This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License

Transcript of Stripes, Rings, and Dots! - Oregon State...

Page 1: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

1

Computer Graphics

Stripes, Rings, and Dots!

stripesringsanddots.pptx

Mike [email protected]

This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License

Page 2: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

2

Computer Graphics

Cartesian (X) Stripes

stripes.glib

##OpenGL GLIB

Perspective 90LookAt 0 0 2 0 0 0 0 1 0

Vertex stripes.vertFragment stripes.fragProgram Stripes \

uA <0 1. 10> \uP <0. .25 1.> \uTol <0. 0. .5> \uAmp <-5. 0. 5.> \uFreq <0. 10. 20.>

Color 1 0.5 0Sphere 1 200 200

Page 3: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

3

Computer Graphics

Cartesian (X) Stripesstripes.vert

#version 330 compatibility

uniform float uAmp;uniform float uFreq;

out vec3 vColor;out float vX, vY;out float vLightIntensity;

const vec3 LIGHTPOS = vec3( 0., 0., 10. );

voidmain( ){

vec3 tnorm = normalize( gl_NormalMatrix * gl_Normal );vec3 ECposition = ( gl_ModelViewMatrix * gl_Vertex ).xyz;vLightIntensity = abs( dot( normalize(LIGHTPOS - ECposition), tnorm ) );

vColor = gl_Color.rgb;vec3 MCposition = gl_Vertex.xyz;vX = MCposition.x;vY = MCposition.y;

vX = vX + uAmp * sin( uFreq * vY );

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;}

Page 4: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

4

Computer Graphics

Cartesian (X) Stripes

stripes.frag#version 330 compatibility

uniform float uA;uniform float uP;uniform float uTol;

in float vX, vY;in vec3 vColor;in float vLightIntensity;

const vec4 WHITE = vec3( 1., 1., 1. );

voidmain( ){

float f = fract( uA*vX );

float t = smoothstep( 0.5-uP-uTol, 0.5-uP+uTol, f ) - smoothstep( 0.5+uP-uTol, 0.5+uP+uTol, f );

vec3 rgb = vLightIntensity * mix( WHITE, vColor, t );gl_FragColor = ve4( rgb, 1. )p;

}

Page 5: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

5

Computer Graphics

Cartesian (X) Stripes

Page 6: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

6

Computer Graphics

Rings

##OpenGL GLIB

Perspective 90LookAt 0 0 2 0 0 0 0 1 0

Vertex rings.vertFragment rings.fragProgram Rings \

uA <0 5. 10> \uP <0. .25 1.> \uTol <0. 0. .5>

Color 1 0.5 0Sphere 1 200 200

rings.glib

Page 7: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

7

Computer Graphics

Rings

#version 330 compatibility

uniform float uAmp;uniform float uFreq;

out vec3 vColor;out float vX, vY;out float vLightIntensity;

const vec3 LIGHTPOS = vec3( 0., 0., 10. );

voidmain( ){

vec3 tnorm = normalize( gl_NormalMatrix * gl_Normal );vec3 ECposition = ( gl_ModelViewMatrix * gl_Vertex ).xyz;vLightIntensity = abs( dot( normalize(LIGHTPOS - ECposition), tnorm ) );

vColor = gl_Color.rgb;vec3 MCposition = gl_Vertex.xyz;vX = MCposition.x;vY = MCposition.y;

gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;}

rings.vert

Page 8: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

8

Computer Graphics

Rings

#version 330 compatibility

uniform float uA;uniform float uP;uniform float uTol;

in float vX, vY;in vec3 vColor;in float vLightIntensity;

const vec3 WHITE = vec3( 1., 1., 1. );

voidmain( ){

float r = sqrt( vX*vX + vY*vY );float rfrac = fract( uA*r );

float t = smoothstep( 0.5-uP-uTol, 0.5-uP+uTol, rfrac ) -smoothstep( 0.5+uP-uTol, 0.5+uP+uTol, rfrac );

vec3 rgb = vLightIntensity * mix( WHITE, vColor, t );gl_FragColor = vec4( rgb, 1. );

}

rings.frag

Page 9: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

9

Computer Graphics

Rings (= Polar Stripes)

Page 10: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

10

Computer Graphics

Circular Dots are a “Local Pattern”

u = 0.

t = 1.

t = 0.

(s,t)

(sc,tc)

Diam

0,0 1,0 2,0 3,0

0,1 1,1 2,1 3,1

0,2 1,2 2,2 3,2

s = 1.s = 0.

numins, numint

+

Page 11: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

11

Computer Graphics

Circular Dots

u = 0.

t = 1.

t = 0.

(s,t)

(sc,tc)

int numins = int( s / Diam );int numint = int( t / Diam );float R = Diam/2.;sc = numins * Diam + R;tc = numint * Diam + R;

Diam

s = 1.s = 0.

0,0 1,0 2,0 3,0

0,1 1,1 2,1 3,1

0,2 1,2 2,2 3,2

numins = 2numint = 1

+

Page 12: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

12

Computer Graphics

Circular Dots

Page 13: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

13

Computer Graphics

numins = 2numint = 1

s = 0.

t = 1.

t = 0.

(s,t)

(sc,tc)

Elliptical Dots

Ar

Br

float Ar = Ad/2.;float Br = Bd/2.;int numins = int( s / Ad );int numint = int( t / Bd );sc = numins *Ad + Ar;tc = numint *Bd + Br;

s = 1.

Circle Circle Ellipse

𝑠 𝑠 + 𝑡 𝑡 𝑅 + 1 + 1

Page 14: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

14

Computer Graphics

Elliptical Dots

Page 15: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

15

Computer Graphics

Elliptical Dots with Tolerance

Page 16: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

16

Computer Graphics

Elliptical Dots with Tolerance

+

1.+uTol

1.-uTol

1.

Page 17: Stripes, Rings, and Dots! - Oregon State Universityweb.engr.oregonstate.edu/.../stripesringsanddots.1pp.pdf · 2020-01-02 · mjb – December 31, 2019 1 Computer Graphics Stripes,

mjb – December 31, 2019

17

Computer Graphics

Soon we will see how to create elliptical dots with Noise!