From 8c89ad96e0c786a84b5235d08ad0ba2847f1675a Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 10 Aug 2015 14:14:18 -0400 Subject: [PATCH 01/51] test --- examples/3d/material/sketch.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/3d/material/sketch.js b/examples/3d/material/sketch.js index bbf28b3d55..e0cd2c400a 100644 --- a/examples/3d/material/sketch.js +++ b/examples/3d/material/sketch.js @@ -8,7 +8,6 @@ function draw(){ background(250, 250, 250, 255); // directionalLight(153, 153, 153, .5, 0, -1); // ambientLight(153, 102, 0); - // ambient(51, 26, 0); translate(-100, 0, -1000); push(); rotateX(theta * 0.1); @@ -37,5 +36,4 @@ function draw(){ plane(60, 60); pop(); theta += 0.03; - } \ No newline at end of file From 5aba5e3481e4596e3caf30613f4ef13b10642cbb Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 10 Aug 2015 18:57:54 -0400 Subject: [PATCH 02/51] further rename --- src/3d/shaders/_light.frag | 9 -- src/3d/shaders/_light.vert | 156 --------------------------- src/3d/shaders/directionalLight.vert | 21 ++-- src/3d/shaders/light.frag | 3 - src/3d/shaders/normal.vert | 7 +- src/3d/shaders/pointLight.vert | 27 +++-- src/3d/shaders/vertexColor.vert | 8 +- 7 files changed, 30 insertions(+), 201 deletions(-) delete mode 100644 src/3d/shaders/_light.frag delete mode 100644 src/3d/shaders/_light.vert diff --git a/src/3d/shaders/_light.frag b/src/3d/shaders/_light.frag deleted file mode 100644 index a8045f963e..0000000000 --- a/src/3d/shaders/_light.frag +++ /dev/null @@ -1,9 +0,0 @@ -precision mediump float; -precision mediump int; - -varying vec4 vVertColor; -varying vec4 vBackVertColor; - -void main() { - gl_FragColor = gl_FrontFacing ? vVertColor : vBackVertColor; -} \ No newline at end of file diff --git a/src/3d/shaders/_light.vert b/src/3d/shaders/_light.vert deleted file mode 100644 index d1fcf5e23c..0000000000 --- a/src/3d/shaders/_light.vert +++ /dev/null @@ -1,156 +0,0 @@ -/* - Part of the Processing project - http://processing.org - - Copyright (c) 2011-13 Ben Fry and Casey Reas - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License version 2.1 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, - Boston, MA 02111-1307 USA - */ - -uniform mat4 uModelviewMatrix; -uniform mat4 uTransformMatrix; -uniform mat3 uNormalMatrix; - -uniform int uLightCount; -uniform vec4 uLightPosition[8]; -uniform vec3 uLightNormal[8]; -uniform vec3 uLightAmbient[8]; -uniform vec3 uLightDiffuse[8]; -uniform vec3 uLightSpecular[8]; -uniform vec3 uLightFalloff[8]; -uniform vec2 uLightSpot[8]; - -attribute vec4 aPosition; -attribute vec4 aColor; -attribute vec3 aNormal; -attribute vec2 aTexCoord; - -attribute vec4 aAmbient; -attribute vec4 aSpecular; -attribute vec4 aEmissive; -attribute float aShininess; - -varying vec4 vVertColor; -varying vec4 vBackVertColor; - -const float zero_float = 0.0; -const float one_float = 1.0; -const vec3 zero_vec3 = vec3(0); - -float falloffFactor(vec3 lightPos, vec3 vertPos, vec3 coeff) { - vec3 lpv = lightPos - vertPos; - vec3 dist = vec3(one_float); - dist.z = dot(lpv, lpv); - dist.y = sqrt(dist.z); - return one_float / dot(dist, coeff); -} - -float spotFactor(vec3 lightPos, vec3 vertPos, vec3 lightNorm, float minCos, float spotExp) { - vec3 lpv = normalize(lightPos - vertPos); - vec3 nln = -one_float * lightNorm; - float spotCos = dot(nln, lpv); - return spotCos <= minCos ? zero_float : pow(spotCos, spotExp); -} - -float lambertFactor(vec3 lightDir, vec3 vecNormal) { - return max(zero_float, dot(lightDir, vecNormal)); -} - -float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) { - vec3 np = normalize(vertPos); - vec3 ldp = normalize(lightDir - np); - return pow(max(zero_float, dot(ldp, vecNormal)), shine); -} - -void main() { - // Vertex in clip coordinates - - vec3 zeroToOne = aPosition / uResolution; - vec4 positionVec4 = vec4(zeroToOne, 1.); - gl_Position = uTransformMatrix * modelviewMatrix * positionVec4; - - // Vertex in eye coordinates - vec3 ecVertex = vec3(uModelviewMatrix * aPosition); - - // Normal vector in eye coordinates - vec3 ecNormal = normalize(uNormalMatrix * aNormal); - vec3 ecNormalInv = ecNormal * -one_float; - - // Light calculations - vec3 totalAmbient = vec3(0, 0, 0); - - vec3 totalFrontDiffuse = vec3(0, 0, 0); - vec3 totalFrontSpecular = vec3(0, 0, 0); - - vec3 totalBackDiffuse = vec3(0, 0, 0); - vec3 totalBackSpecular = vec3(0, 0, 0); - - for (int i = 0; i < 8; i++) { - if (lightCount == i) break; - - vec3 lightPos = lightPosition[i].xyz; - bool isDir = zero_float < lightPosition[i].w; - float spotCos = lightSpot[i].x; - float spotExp = lightSpot[i].y; - - vec3 lightDir; - float falloff; - float spotf; - - if (isDir) { - falloff = one_float; - lightDir = -one_float * uLightNormal[i]; - } else { - falloff = falloffFactor(lightPos, ecVertex, lightFalloff[i]); - lightDir = normalize(lightPos - ecVertex); - } - - spotf = spotExp > zero_float ? spotFactor(lightPos, ecVertex, uLightNormal[i], - spotCos, spotExp) - : one_float; - - if (any(greaterThan(lightAmbient[i], zero_vec3))) { - totalAmbient += lightAmbient[i] * falloff; - } - - if (any(greaterThan(lightDiffuse[i], zero_vec3))) { - totalFrontDiffuse += lightDiffuse[i] * falloff * spotf * - lambertFactor(lightDir, ecNormal); - totalBackDiffuse += lightDiffuse[i] * falloff * spotf * - lambertFactor(lightDir, ecNormalInv); - } - - if (any(greaterThan(lightSpecular[i], zero_vec3))) { - totalFrontSpecular += lightSpecular[i] * falloff * spotf * - blinnPhongFactor(lightDir, ecVertex, ecNormal, shininess); - totalBackSpecular += lightSpecular[i] * falloff * spotf * - blinnPhongFactor(lightDir, ecVertex, ecNormalInv, shininess); - } - } - - // Calculating final color as result of all lights (plus emissive term). - // Transparency is determined exclusively by the diffuse component. - vertColor = vec4(totalAmbient, 0) * ambient + - vec4(totalFrontDiffuse, 1) * color + - vec4(totalFrontSpecular, 0) * specular + - vec4(emissive.rgb, 0); - - backVertColor = vec4(totalAmbient, 0) * ambient + - vec4(totalBackDiffuse, 1) * color + - vec4(totalBackSpecular, 0) * specular + - vec4(emissive.rgb, 0); - - vertexNormal = vec3( normalMatrix * vec4( normal, 1.0 ) ); - vertTexCoord = texCoord; -} \ No newline at end of file diff --git a/src/3d/shaders/directionalLight.vert b/src/3d/shaders/directionalLight.vert index ffb1486e7f..0e5bef0db5 100644 --- a/src/3d/shaders/directionalLight.vert +++ b/src/3d/shaders/directionalLight.vert @@ -1,10 +1,10 @@ -attribute vec3 position; -attribute vec3 normal; -attribute vec2 texCoord; +attribute vec3 aPosition; +attribute vec3 aNormal; +attribute vec2 aTexCoord; -uniform mat4 modelviewMatrix; -uniform mat4 transformMatrix; -uniform mat4 normalMatrix; +uniform mat4 uModelviewMatrix; +uniform mat4 uProjectionMatrix; +uniform mat4 uNormalMatrix; uniform float uResolution; uniform vec3 uAmbientColor; @@ -15,11 +15,10 @@ varying vec2 vertTexCoord; varying vec3 vLightWeighting; void main(void) { - vec3 zeroToOne = position / uResolution; - vec4 positionVec4 = vec4(zeroToOne, 1.); - gl_Position = transformMatrix * modelviewMatrix * positionVec4; - vec3 vertexNormal = vec3( normalMatrix * vec4( normal, 1.0 ) ); - vertTexCoord = texCoord; + vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); + vertTexCoord = aTexCoord; float directionalLightWeighting = max(dot(vertexNormal, uLightingDirection), 0.0); vLightWeighting = uAmbientColor + uDirectionalColor * directionalLightWeighting; diff --git a/src/3d/shaders/light.frag b/src/3d/shaders/light.frag index b0e29a1b4a..1c25013602 100644 --- a/src/3d/shaders/light.frag +++ b/src/3d/shaders/light.frag @@ -1,9 +1,6 @@ precision mediump float; -//varying vec2 vTextureCoord; varying vec3 vLightWeighting; -//uniform sampler2D uSampler; uniform vec4 uMaterialColor; void main(void) { - //vec4 textureColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)); gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); } \ No newline at end of file diff --git a/src/3d/shaders/normal.vert b/src/3d/shaders/normal.vert index 7ef05e7f4f..aaedaf9d30 100644 --- a/src/3d/shaders/normal.vert +++ b/src/3d/shaders/normal.vert @@ -3,7 +3,7 @@ attribute vec3 aNormal; attribute vec2 aTexCoord; uniform mat4 uModelviewMatrix; -uniform mat4 uTransformMatrix; +uniform mat4 uProjectionMatrix; uniform mat4 uNormalMatrix; uniform float uResolution; @@ -11,9 +11,8 @@ varying vec3 vVertexNormal; varying highp vec2 vVertTexCoord; void main(void) { - vec3 zeroToOne = aPosition / uResolution; - vec4 positionVec4 = vec4(zeroToOne, 1.); - gl_Position = uTransformMatrix * uModelviewMatrix * positionVec4; + vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; vVertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); vVertTexCoord = aTexCoord; } \ No newline at end of file diff --git a/src/3d/shaders/pointLight.vert b/src/3d/shaders/pointLight.vert index 6c0703090e..dfe56df60e 100644 --- a/src/3d/shaders/pointLight.vert +++ b/src/3d/shaders/pointLight.vert @@ -1,28 +1,27 @@ -attribute vec3 position; -attribute vec3 normal; -attribute vec2 texCoord; +attribute vec3 aPosition; +attribute vec3 aNormal; +attribute vec2 aVertexColor; -uniform mat4 modelviewMatrix; -uniform mat4 transformMatrix; -uniform mat4 normalMatrix; +uniform mat4 uModelviewMatrix; +uniform mat4 uProjectionMatrix; +uniform mat4 uNormalMatrix; uniform float uResolution; uniform vec4 uAmbientColor; uniform vec3 uPointLightingLocation; uniform vec4 uPointLightingColor; -varying vec3 vertexNormal; -varying vec2 vertTexCoord; +varying vec3 vVertexNormal; +varying vec2 vVertTexCoord; varying vec4 vLightWeighting; void main(void) { - vec3 zeroToOne = position / uResolution; - vec4 positionVec4 = vec4(zeroToOne, 1.); - gl_Position = transformMatrix * modelviewMatrix * positionVec4; - vertTexCoord = texCoord; + vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + vertTexCoord = aVertexColor; - vec3 lightDirection = normalize(uPointLightingLocation - mvPosition.xyz); - vec3 transformedNormal = normalMatrix * vertexNormal; + vec3 lightDirection = normalize(uPointLightingLocation - aPosition.xyz); + vec3 transformedNormal = uNormalMatrix * vVertexNormal; float directionalLightWeighting = max(dot(transformedNormal, lightDirection), 0.0); vLightWeighting = uAmbientColor + uPointLightingColor * directionalLightWeighting; } \ No newline at end of file diff --git a/src/3d/shaders/vertexColor.vert b/src/3d/shaders/vertexColor.vert index 65364d2003..49b9a16d43 100644 --- a/src/3d/shaders/vertexColor.vert +++ b/src/3d/shaders/vertexColor.vert @@ -2,13 +2,13 @@ attribute vec3 aPosition; attribute vec4 aVertexColor; uniform mat4 uModelviewMatrix; -uniform mat4 uTransformMatrix; +uniform mat4 uProjectionMatrix; +uniform float uResolution; varying vec4 vColor; void main(void) { - vec3 zeroToOne = aPosition / 1000.0; - vec4 positionVec4 = vec4(zeroToOne * vec3(1., -1., 1.), 1.); - gl_Position = uTransformMatrix * uModelviewMatrix * positionVec4; + vec4 positionVec4 = vec4(aPosition / uResolution * vec3(1., -1., 1.), 1.); + gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; vColor = aVertexColor; } \ No newline at end of file From cf72facf46c54ac757bccc68a27a1f72f27e3304 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 10 Aug 2015 19:17:38 -0400 Subject: [PATCH 03/51] fix bugs --- src/3d/p5.Renderer3D.js | 2 +- src/3d/shaders/pointLight.vert | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index e3244621d0..9563390d01 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -191,7 +191,7 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { //projection Matrix uniform shaderProgram.uPMatrixUniform = - gl.getUniformLocation(shaderProgram, 'uTransformMatrix'); + gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'); //model view Matrix uniform shaderProgram.uMVMatrixUniform = gl.getUniformLocation(shaderProgram, 'uModelviewMatrix'); diff --git a/src/3d/shaders/pointLight.vert b/src/3d/shaders/pointLight.vert index dfe56df60e..73ab3a794d 100644 --- a/src/3d/shaders/pointLight.vert +++ b/src/3d/shaders/pointLight.vert @@ -1,6 +1,6 @@ attribute vec3 aPosition; attribute vec3 aNormal; -attribute vec2 aVertexColor; +attribute vec2 aVexCoord; uniform mat4 uModelviewMatrix; uniform mat4 uProjectionMatrix; @@ -18,7 +18,7 @@ varying vec4 vLightWeighting; void main(void) { vec4 positionVec4 = vec4(aPosition / uResolution, 1.); gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; - vertTexCoord = aVertexColor; + vertTexCoord = aVexCoord; vec3 lightDirection = normalize(uPointLightingLocation - aPosition.xyz); vec3 transformedNormal = uNormalMatrix * vVertexNormal; From 4e0db0f954c7aa37d7f24aea0af2c7fae4d167ee Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 19 Aug 2015 13:40:15 -0400 Subject: [PATCH 04/51] start with multiple lights --- .../{directional_light => light}/index.html | 0 .../3d/{directional_light => light}/sketch.js | 7 --- src/3d/light.js | 25 ++++++++-- src/3d/p5.Renderer3D.js | 24 ++++++--- src/3d/shader.js | 17 +++++-- src/3d/shaders/light.vert | 49 +++++++++++++++++++ 6 files changed, 97 insertions(+), 25 deletions(-) rename examples/3d/{directional_light => light}/index.html (100%) rename examples/3d/{directional_light => light}/sketch.js (85%) create mode 100644 src/3d/shaders/light.vert diff --git a/examples/3d/directional_light/index.html b/examples/3d/light/index.html similarity index 100% rename from examples/3d/directional_light/index.html rename to examples/3d/light/index.html diff --git a/examples/3d/directional_light/sketch.js b/examples/3d/light/sketch.js similarity index 85% rename from examples/3d/directional_light/sketch.js rename to examples/3d/light/sketch.js index c50eea1e64..c874def1ab 100644 --- a/examples/3d/directional_light/sketch.js +++ b/examples/3d/light/sketch.js @@ -12,13 +12,6 @@ function draw(){ ambientLight(150); directionalLight(250, 0, 0, dirX, -dirY, 0.25); - // directionalLight(0, 0, 250, -dirX, -dirY, 0.25); - // ambientMaterial(250); - // sphere(60); - // directionalLight(0, 0, 250, -dirX, -dirY, 0.25); - // directionalLight(250, 0, 0, dirX, dirY, 0.25); - // translate(200, 0,0); - // sphere(60); push(); rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); diff --git a/src/3d/light.js b/src/3d/light.js index 8d5704063e..29a632e49f 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -8,11 +8,12 @@ p5.prototype.ambientLight = function(r, g, b, a){ var gl = this._graphics.GL; var shaderProgram = this._graphics.getShader( - 'directionalLightVert', 'lightFrag'); + 'lightVert', 'lightFrag'); gl.useProgram(shaderProgram); shaderProgram.uAmbientColor = gl.getUniformLocation( - shaderProgram, 'uAmbientColor' ); + shaderProgram, + 'uAmbientColor[' + this._graphics.ambientLightCount + ']'); var color = this._graphics._pInst.color.apply( this._graphics._pInst, arguments); @@ -26,6 +27,12 @@ p5.prototype.ambientLight = function(r, g, b, a){ shaderProgram, 'uMaterialColor' ); gl.uniform4f( shaderProgram.uMaterialColor, 1, 1, 1, 1); + this._graphics.ambientLightCount ++; + shaderProgram.uAmbientLightCount = + gl.getUniformLocation(shaderProgram, 'uAmbientLightCount'); + gl.uniform1f(shaderProgram.ambientLightCount, + this._graphics.ambientLightCount); + return this; }; @@ -33,11 +40,12 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { var gl = this._graphics.GL; var shaderProgram = this._graphics.getShader( - 'directionalLightVert', 'lightFrag'); + 'lightVert', 'lightFrag'); gl.useProgram(shaderProgram); shaderProgram.uDirectionalColor = gl.getUniformLocation( - shaderProgram, 'uDirectionalColor' ); + shaderProgram, + 'uDirectionalColor[' + this._graphics.directionalLightCount + ']'); var color = this._graphics._pInst.color.apply( this._graphics._pInst, [r, g, b]); @@ -47,7 +55,8 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { colors[0], colors[1], colors[2]); shaderProgram.uLightingDirection = gl.getUniformLocation( - shaderProgram, 'uLightingDirection' ); + shaderProgram, + 'uLightingDirection' + this._graphics.directionalLightCount + ']'); gl.uniform3f( shaderProgram.uLightingDirection, arguments[arguments.length-3], arguments[arguments.length-2], @@ -58,6 +67,12 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { shaderProgram, 'uMaterialColor' ); gl.uniform4f( shaderProgram.uMaterialColor, 1, 1, 1, 1); + this._graphics.directionalLightCount ++; + shaderProgram.uDirectionalLightCount = + gl.getUniformLocation(shaderProgram, 'uDirectionalLightCount'); + gl.uniform1f(shaderProgram.uDirectionalLightCount, + this._graphics.uDirectionalLightCount); + return this; }; diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index c9fcf32b07..5e24b64e75 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -169,6 +169,13 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { gl.getAttribLocation(shaderProgram, 'aPosition'); gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute); + //projection Matrix uniform + shaderProgram.uPMatrixUniform = + gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'); + //model view Matrix uniform + shaderProgram.uMVMatrixUniform = + gl.getUniformLocation(shaderProgram, 'uModelviewMatrix'); + //@TODO: figure out a better way instead of if statement if(immediateMode === undefined){ //vertex normal Attribute @@ -189,18 +196,17 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { gl.getUniformLocation(shaderProgram, 'uSampler'); } - //projection Matrix uniform - shaderProgram.uPMatrixUniform = - gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'); - //model view Matrix uniform - shaderProgram.uMVMatrixUniform = - gl.getUniformLocation(shaderProgram, 'uModelviewMatrix'); - this.mHash[vertId + '|' + fragId] = shaderProgram; return shaderProgram; }; +/** + * [getShader description] + * @param {[type]} vertId [description] + * @param {[type]} fragId [description] + * @return {[type]} [description] + */ p5.Renderer3D.prototype.getShader = function(vertId, fragId) { var mId = vertId+ '|' + fragId; @@ -251,6 +257,7 @@ p5.Renderer3D.prototype.saveShaders = function(mId){ }; p5.Renderer3D.prototype.getCurColor = function() { + //default color: gray return this.colorStack[this.colorStack.length-1] || [0.5, 0.5, 0.5, 1.0]; }; @@ -283,7 +290,8 @@ p5.Renderer3D.prototype.resetStack = function(){ //holding an array of vertex position this.verticeStack = []; //holding lights - this.lightStack = []; + this.directionalLightCount = 0; + this.ambientLightCount = 0; }; ////////////////////////////////////////////// diff --git a/src/3d/shader.js b/src/3d/shader.js index e56a369afc..22bf347071 100644 --- a/src/3d/shader.js +++ b/src/3d/shader.js @@ -5,11 +5,18 @@ module.exports = { fs.readFileSync(__dirname +'/shaders/vertexColor.vert', 'utf-8'), vertexColorFrag: fs.readFileSync(__dirname +'/shaders/vertexColor.frag', 'utf-8'), - normalVert: fs.readFileSync(__dirname +'/shaders/normal.vert', 'utf-8'), - normalFrag: fs.readFileSync(__dirname +'/shaders/normal.frag', 'utf-8'), - basicFrag: fs.readFileSync(__dirname +'/shaders/basic.frag', 'utf-8'), - textureFrag: fs.readFileSync(__dirname +'/shaders/texture.frag', 'utf-8'), - lightFrag: fs.readFileSync(__dirname +'/shaders/light.frag', 'utf-8'), + normalVert: + fs.readFileSync(__dirname +'/shaders/normal.vert', 'utf-8'), + normalFrag: + fs.readFileSync(__dirname +'/shaders/normal.frag', 'utf-8'), + basicFrag: + fs.readFileSync(__dirname +'/shaders/basic.frag', 'utf-8'), + textureFrag: + fs.readFileSync(__dirname +'/shaders/texture.frag', 'utf-8'), + lightVert: + fs.readFileSync(__dirname +'/shaders/light.vert', 'utf-8'), + lightFrag: + fs.readFileSync(__dirname +'/shaders/light.frag', 'utf-8'), directionalLightVert: fs.readFileSync(__dirname +'/shaders/directionalLight.vert', 'utf-8'), spotLightVert: diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert new file mode 100644 index 0000000000..7442936433 --- /dev/null +++ b/src/3d/shaders/light.vert @@ -0,0 +1,49 @@ +attribute vec3 aPosition; +attribute vec3 aNormal; +attribute vec2 aTexCoord; + +uniform mat4 uModelviewMatrix; +uniform mat4 uProjectionMatrix; +uniform mat4 uNormalMatrix; +uniform float uResolution; +uniform int uAmbientLightCount; +uniform int uDirectionalLightCount; + +uniform vec3 uAmbientColor[8]; +uniform vec3 uLightingDirection[8]; +uniform vec3 uDirectionalColor[8]; +//uniform vec3 uPointLightingLocation[8]; +//uniform vec4 uPointLightingColor[8]; + +varying vec3 vVertexNormal; +varying vec2 vVertTexCoord; +varying vec3 vLightWeighting; + +void main(void){ + + vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + + vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); + vVertexNormal = vertexNormal; + vVertTexCoord = aTexCoord; + + vec3 ambientLightFactor; + vec3 directionalLightFactor; + //vec4 pointLightingFactor; + + for(int i = 0; i < 8; i++){ + if( i == uAmbientLightCount) break; + ambientLightFactor += uAmbientColor[i]; + } + + for(int j = 0; j < 8; j++){ + if(j == uDirectionalLightCount) break; + float directionalLightWeighting = max(dot(vertexNormal, uLightingDirection[j]), 0.0); + directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting; + + } + + vLightWeighting = ambientLightFactor + directionalLightFactor; + +} \ No newline at end of file From 6b92cf342f82494966c0b4937c77d878d3d9ddac Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 19 Aug 2015 15:24:27 -0400 Subject: [PATCH 05/51] multiple light sources with defined numbers work --- examples/3d/light/sketch.js | 10 +++------- src/3d/light.js | 4 ++-- src/3d/shaders/directionalLight.vert | 25 ------------------------- src/3d/shaders/light.vert | 17 ++++++++--------- 4 files changed, 13 insertions(+), 43 deletions(-) delete mode 100644 src/3d/shaders/directionalLight.vert diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index c874def1ab..8a1f7ca592 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -9,14 +9,15 @@ function draw(){ var dirY = (mouseY / height - 0.5) *2; var dirX = (mouseX / width - 0.5) *2; - ambientLight(150); + ambientLight(50); directionalLight(250, 0, 0, dirX, -dirY, 0.25); + directionalLight(0, 0, 250, 0.5, 0.5, 0.25); push(); rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(250, 250, 10); + ambientMaterial(250); plane(80, 80); pop(); translate(250, 0, 0); @@ -24,7 +25,6 @@ function draw(){ rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(250, 100, 250); box(80, 80, 80); pop(); translate(250, 0, 0); @@ -32,7 +32,6 @@ function draw(){ rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(100, 50, 250); cylinder(80, 80); pop(); translate(250, 0, 0); @@ -40,7 +39,6 @@ function draw(){ rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(100, 250, 250); cone(80, 80); pop(); translate(250, 0, 0); @@ -48,7 +46,6 @@ function draw(){ rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(20, 200, 10); torus(80, 20); pop(); translate(250, 0, 0); @@ -56,7 +53,6 @@ function draw(){ rotateZ(frameCount * 0.02); rotateX(frameCount * 0.02); rotateY(frameCount * 0.02); - ambientMaterial(frameCount % 250, 250 - frameCount % 250, 250 - frameCount % 250); sphere(80, 80); pop(); } \ No newline at end of file diff --git a/src/3d/light.js b/src/3d/light.js index 29a632e49f..1fc5525deb 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -56,7 +56,7 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { shaderProgram.uLightingDirection = gl.getUniformLocation( shaderProgram, - 'uLightingDirection' + this._graphics.directionalLightCount + ']'); + 'uLightingDirection[' + this._graphics.directionalLightCount + ']'); gl.uniform3f( shaderProgram.uLightingDirection, arguments[arguments.length-3], arguments[arguments.length-2], @@ -71,7 +71,7 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { shaderProgram.uDirectionalLightCount = gl.getUniformLocation(shaderProgram, 'uDirectionalLightCount'); gl.uniform1f(shaderProgram.uDirectionalLightCount, - this._graphics.uDirectionalLightCount); + this._graphics.directionalLightCount); return this; }; diff --git a/src/3d/shaders/directionalLight.vert b/src/3d/shaders/directionalLight.vert deleted file mode 100644 index 0e5bef0db5..0000000000 --- a/src/3d/shaders/directionalLight.vert +++ /dev/null @@ -1,25 +0,0 @@ -attribute vec3 aPosition; -attribute vec3 aNormal; -attribute vec2 aTexCoord; - -uniform mat4 uModelviewMatrix; -uniform mat4 uProjectionMatrix; -uniform mat4 uNormalMatrix; -uniform float uResolution; - -uniform vec3 uAmbientColor; -uniform vec3 uLightingDirection; -uniform vec3 uDirectionalColor; - -varying vec2 vertTexCoord; -varying vec3 vLightWeighting; - -void main(void) { - vec4 positionVec4 = vec4(aPosition / uResolution, 1.); - gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; - vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); - vertTexCoord = aTexCoord; - - float directionalLightWeighting = max(dot(vertexNormal, uLightingDirection), 0.0); - vLightWeighting = uAmbientColor + uDirectionalColor * directionalLightWeighting; -} \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index 7442936433..e8cba78841 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -19,6 +19,9 @@ varying vec3 vVertexNormal; varying vec2 vVertTexCoord; varying vec3 vLightWeighting; +vec3 ambientLightFactor = vec3(0., 0., 0.); +vec3 directionalLightFactor = vec3(0., 0., 0.); + void main(void){ vec4 positionVec4 = vec4(aPosition / uResolution, 1.); @@ -27,21 +30,17 @@ void main(void){ vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); vVertexNormal = vertexNormal; vVertTexCoord = aTexCoord; - - vec3 ambientLightFactor; - vec3 directionalLightFactor; + //vec4 pointLightingFactor; - - for(int i = 0; i < 8; i++){ - if( i == uAmbientLightCount) break; + for(int i = 0; i < 1; i++){ + //if(uAmbientLightCount == i) break; ambientLightFactor += uAmbientColor[i]; } - for(int j = 0; j < 8; j++){ - if(j == uDirectionalLightCount) break; + for(int j = 0; j < 2; j++){ + //if(uDirectionalLightCount == j) break; float directionalLightWeighting = max(dot(vertexNormal, uLightingDirection[j]), 0.0); directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting; - } vLightWeighting = ambientLightFactor + directionalLightFactor; From ae0cf2bc5fdcd7a9dd09f29aaa0596a80f570441 Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 19 Aug 2015 15:29:05 -0400 Subject: [PATCH 06/51] multiple light sources with any numbers supported --- src/3d/light.js | 4 ++-- src/3d/shader.js | 6 +----- src/3d/shaders/light.vert | 8 ++++---- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/3d/light.js b/src/3d/light.js index 1fc5525deb..532f77f4ff 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -30,7 +30,7 @@ p5.prototype.ambientLight = function(r, g, b, a){ this._graphics.ambientLightCount ++; shaderProgram.uAmbientLightCount = gl.getUniformLocation(shaderProgram, 'uAmbientLightCount'); - gl.uniform1f(shaderProgram.ambientLightCount, + gl.uniform1i(shaderProgram.ambientLightCount, this._graphics.ambientLightCount); return this; @@ -70,7 +70,7 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { this._graphics.directionalLightCount ++; shaderProgram.uDirectionalLightCount = gl.getUniformLocation(shaderProgram, 'uDirectionalLightCount'); - gl.uniform1f(shaderProgram.uDirectionalLightCount, + gl.uniform1i(shaderProgram.uDirectionalLightCount, this._graphics.directionalLightCount); return this; diff --git a/src/3d/shader.js b/src/3d/shader.js index 22bf347071..cda9db5923 100644 --- a/src/3d/shader.js +++ b/src/3d/shader.js @@ -16,9 +16,5 @@ module.exports = { lightVert: fs.readFileSync(__dirname +'/shaders/light.vert', 'utf-8'), lightFrag: - fs.readFileSync(__dirname +'/shaders/light.frag', 'utf-8'), - directionalLightVert: - fs.readFileSync(__dirname +'/shaders/directionalLight.vert', 'utf-8'), - spotLightVert: - fs.readFileSync(__dirname +'/shaders/pointLight.vert', 'utf-8') + fs.readFileSync(__dirname +'/shaders/light.frag', 'utf-8') }; \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index e8cba78841..92581b6718 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -32,13 +32,13 @@ void main(void){ vVertTexCoord = aTexCoord; //vec4 pointLightingFactor; - for(int i = 0; i < 1; i++){ - //if(uAmbientLightCount == i) break; + for(int i = 0; i < 8; i++){ + if(uAmbientLightCount == i) break; ambientLightFactor += uAmbientColor[i]; } - for(int j = 0; j < 2; j++){ - //if(uDirectionalLightCount == j) break; + for(int j = 0; j < 8; j++){ + if(uDirectionalLightCount == j) break; float directionalLightWeighting = max(dot(vertexNormal, uLightingDirection[j]), 0.0); directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting; } From 4164554016894d498fd55e674c6379bea0ec9c17 Mon Sep 17 00:00:00 2001 From: Karen Date: Wed, 19 Aug 2015 17:31:27 -0400 Subject: [PATCH 07/51] point light added --- examples/3d/light/sketch.js | 4 +++- src/3d/light.js | 42 +++++++++++++++++++++++++++++++--- src/3d/p5.Renderer3D.js | 5 ++-- src/3d/shaders/light.vert | 20 ++++++++++++---- src/3d/shaders/pointLight.vert | 27 ---------------------- 5 files changed, 61 insertions(+), 37 deletions(-) delete mode 100644 src/3d/shaders/pointLight.vert diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index 8a1f7ca592..cea738bc20 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -11,7 +11,9 @@ function draw(){ ambientLight(50); directionalLight(250, 0, 0, dirX, -dirY, 0.25); - directionalLight(0, 0, 250, 0.5, 0.5, 0.25); + //directionalLight(0, 250, 0, 0, 0, 0.25); + pointLight(0, 0, 250, 70, 100, 0); + pointLight(250, 250, 0, -70, -100, 0); push(); rotateZ(frameCount * 0.02); diff --git a/src/3d/light.js b/src/3d/light.js index 532f77f4ff..10fab3e0f7 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -30,7 +30,7 @@ p5.prototype.ambientLight = function(r, g, b, a){ this._graphics.ambientLightCount ++; shaderProgram.uAmbientLightCount = gl.getUniformLocation(shaderProgram, 'uAmbientLightCount'); - gl.uniform1i(shaderProgram.ambientLightCount, + gl.uniform1i(shaderProgram.uAmbientLightCount, this._graphics.ambientLightCount); return this; @@ -76,8 +76,44 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { return this; }; -p5.prototype.pointLight = function() { - // body... +p5.prototype.pointLight = function(r, g, b, a, x, y, z) { + + var gl = this._graphics.GL; + var shaderProgram = this._graphics.getShader( + 'lightVert', 'lightFrag'); + + gl.useProgram(shaderProgram); + shaderProgram.uPointLightColor = gl.getUniformLocation( + shaderProgram, + 'uPointLightColor[' + this._graphics.pointLightCount + ']'); + + var color = this._graphics._pInst.color.apply( + this._graphics._pInst, [r, g, b]); + var colors = _normalizeColor(color.rgba); + + gl.uniform3f( shaderProgram.uPointLightColor, + colors[0], colors[1], colors[2]); + + shaderProgram.uPointLightLocation = gl.getUniformLocation( + shaderProgram, + 'uPointLightLocation[' + this._graphics.pointLightCount + ']'); + gl.uniform3f( shaderProgram.uPointLightLocation, + arguments[arguments.length-3], + arguments[arguments.length-2], + arguments[arguments.length-1]); + + //in case there's no material color for the geometry + shaderProgram.uMaterialColor = gl.getUniformLocation( + shaderProgram, 'uMaterialColor' ); + gl.uniform4f( shaderProgram.uMaterialColor, 1, 1, 1, 1); + + this._graphics.pointLightCount ++; + shaderProgram.uPointLightCount = + gl.getUniformLocation(shaderProgram, 'uPointLightCount'); + gl.uniform1i(shaderProgram.uPointLightCount, + this._graphics.pointLightCount); + + return this; }; function _normalizeColor(_arr){ diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index 5e24b64e75..74255b1e6e 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -289,9 +289,10 @@ p5.Renderer3D.prototype.resetStack = function(){ this.drawModeStack = []; //holding an array of vertex position this.verticeStack = []; - //holding lights - this.directionalLightCount = 0; + //holding lights number this.ambientLightCount = 0; + this.directionalLightCount = 0; + this.pointLightCount = 0; }; ////////////////////////////////////////////// diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index 92581b6718..2a69d6782c 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -8,12 +8,13 @@ uniform mat4 uNormalMatrix; uniform float uResolution; uniform int uAmbientLightCount; uniform int uDirectionalLightCount; +uniform int uPointLightCount; uniform vec3 uAmbientColor[8]; uniform vec3 uLightingDirection[8]; uniform vec3 uDirectionalColor[8]; -//uniform vec3 uPointLightingLocation[8]; -//uniform vec4 uPointLightingColor[8]; +uniform vec3 uPointLightLocation[8]; +uniform vec3 uPointLightColor[8]; varying vec3 vVertexNormal; varying vec2 vVertTexCoord; @@ -21,9 +22,11 @@ varying vec3 vLightWeighting; vec3 ambientLightFactor = vec3(0., 0., 0.); vec3 directionalLightFactor = vec3(0., 0., 0.); +vec3 pointLightingFactor = vec3(0., 0., 0.); void main(void){ + vec4 mvPosition = uModelviewMatrix * vec4(aPosition, 1.0); vec4 positionVec4 = vec4(aPosition / uResolution, 1.); gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; @@ -31,7 +34,6 @@ void main(void){ vVertexNormal = vertexNormal; vVertTexCoord = aTexCoord; - //vec4 pointLightingFactor; for(int i = 0; i < 8; i++){ if(uAmbientLightCount == i) break; ambientLightFactor += uAmbientColor[i]; @@ -43,6 +45,16 @@ void main(void){ directionalLightFactor += uDirectionalColor[j] * directionalLightWeighting; } - vLightWeighting = ambientLightFactor + directionalLightFactor; + for(int k = 0; k < 8; k++){ + if(uPointLightCount == k) break; + vec3 loc = uPointLightLocation[k]; + //loc = loc / uResolution; + vec3 lightDirection = normalize(loc - mvPosition.xyz); + + float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0); + pointLightingFactor += uPointLightColor[k] * directionalLightWeighting; + } + + vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightingFactor; } \ No newline at end of file diff --git a/src/3d/shaders/pointLight.vert b/src/3d/shaders/pointLight.vert deleted file mode 100644 index 73ab3a794d..0000000000 --- a/src/3d/shaders/pointLight.vert +++ /dev/null @@ -1,27 +0,0 @@ -attribute vec3 aPosition; -attribute vec3 aNormal; -attribute vec2 aVexCoord; - -uniform mat4 uModelviewMatrix; -uniform mat4 uProjectionMatrix; -uniform mat4 uNormalMatrix; -uniform float uResolution; - -uniform vec4 uAmbientColor; -uniform vec3 uPointLightingLocation; -uniform vec4 uPointLightingColor; - -varying vec3 vVertexNormal; -varying vec2 vVertTexCoord; -varying vec4 vLightWeighting; - -void main(void) { - vec4 positionVec4 = vec4(aPosition / uResolution, 1.); - gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; - vertTexCoord = aVexCoord; - - vec3 lightDirection = normalize(uPointLightingLocation - aPosition.xyz); - vec3 transformedNormal = uNormalMatrix * vVertexNormal; - float directionalLightWeighting = max(dot(transformedNormal, lightDirection), 0.0); - vLightWeighting = uAmbientColor + uPointLightingColor * directionalLightWeighting; -} \ No newline at end of file From 259454a57f78c6ea626f342ea13fd4b1d28fe9c2 Mon Sep 17 00:00:00 2001 From: Karen Date: Thu, 20 Aug 2015 21:29:51 -0400 Subject: [PATCH 08/51] start with phong algorithm --- examples/3d/light/sketch.js | 4 +-- examples/3d/specular/index.html | 20 +++++++++++ examples/3d/specular/sketch.js | 60 +++++++++++++++++++++++++++++++++ src/3d/material.js | 24 +++++++++---- src/3d/shader.js | 18 +++++----- src/3d/shaders/light.frag | 4 ++- src/3d/shaders/light.vert | 30 ++++++++++++++--- src/3d/shaders/specular.frag | 8 +++++ 8 files changed, 146 insertions(+), 22 deletions(-) create mode 100644 examples/3d/specular/index.html create mode 100644 examples/3d/specular/sketch.js create mode 100644 src/3d/shaders/specular.frag diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index cea738bc20..1bdd94b5d7 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -12,8 +12,8 @@ function draw(){ ambientLight(50); directionalLight(250, 0, 0, dirX, -dirY, 0.25); //directionalLight(0, 250, 0, 0, 0, 0.25); - pointLight(0, 0, 250, 70, 100, 0); - pointLight(250, 250, 0, -70, -100, 0); + pointLight(0, 0, 250, 70, 70, 0); + pointLight(250, 250, 0, -70, -70, 0); push(); rotateZ(frameCount * 0.02); diff --git a/examples/3d/specular/index.html b/examples/3d/specular/index.html new file mode 100644 index 0000000000..201710dc81 --- /dev/null +++ b/examples/3d/specular/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/3d/specular/sketch.js b/examples/3d/specular/sketch.js new file mode 100644 index 0000000000..8adf1833c0 --- /dev/null +++ b/examples/3d/specular/sketch.js @@ -0,0 +1,60 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + translate(-width/2, 0, -800); + + var dirY = (mouseY / height - 0.5) *2; + var dirX = (mouseX / width - 0.5) *2; + + ambientLight(50); + directionalLight(250, 0, 0, dirX, -dirY, 0.25); + //directionalLight(0, 250, 0, 0, 0, 0.25); + pointLight(0, 0, 250, 70, 70, 0); + pointLight(250, 250, 0, -70, -70, 0); + + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + specularMaterial(250); + plane(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + box(80, 80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + cylinder(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + cone(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + torus(80, 20); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + sphere(80, 80); + pop(); +} \ No newline at end of file diff --git a/src/3d/material.js b/src/3d/material.js index 3a8b7bea7a..2c6d8f8c9e 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -81,7 +81,7 @@ function _isPowerOf2 (value) { return (value & (value - 1)) === 0; } -p5.prototype.basicMaterial = function(){ +p5.prototype.basicMaterial = function(r, g, b, a){ var gl = this._graphics.GL; @@ -102,11 +102,10 @@ p5.prototype.basicMaterial = function(){ }; -p5.prototype.ambientMaterial = function() { +p5.prototype.ambientMaterial = function(r, g, b, a) { var gl = this._graphics.GL; - var mId = this._graphics.getCurShaderId(); - var shaderProgram = this._graphics.mHash[mId]; + var shaderProgram = this._graphics.getShader('lightVert', 'lightFrag'); gl.useProgram(shaderProgram); shaderProgram.uMaterialColor = gl.getUniformLocation( @@ -122,12 +121,25 @@ p5.prototype.ambientMaterial = function() { return this; }; -p5.prototype.specularMaterial = function() { +p5.prototype.specularMaterial = function(r, g, b, a) { + + var gl = this._graphics.GL; + var shaderProgram = this._graphics.getShader('lightVert', 'specularFrag'); + + gl.useProgram(shaderProgram); + shaderProgram.uMaterialColor = gl.getUniformLocation( + shaderProgram, 'uMaterialColor' ); + + var color = this._graphics._pInst.color.apply( + this._graphics._pInst, arguments); + var colors = _normalizeColor(color.rgba); + + gl.uniform4f( shaderProgram.uMaterialColor, + colors[0], colors[1], colors[2], colors[3]); return this; }; - function _normalizeColor(_arr){ var arr = []; _arr.forEach(function(val){ diff --git a/src/3d/shader.js b/src/3d/shader.js index cda9db5923..683d82e3a5 100644 --- a/src/3d/shader.js +++ b/src/3d/shader.js @@ -2,19 +2,21 @@ var fs = require('fs'); module.exports = { vertexColorVert: - fs.readFileSync(__dirname +'/shaders/vertexColor.vert', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/vertexColor.vert', 'utf-8'), vertexColorFrag: - fs.readFileSync(__dirname +'/shaders/vertexColor.frag', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/vertexColor.frag', 'utf-8'), normalVert: - fs.readFileSync(__dirname +'/shaders/normal.vert', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/normal.vert', 'utf-8'), normalFrag: - fs.readFileSync(__dirname +'/shaders/normal.frag', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/normal.frag', 'utf-8'), basicFrag: - fs.readFileSync(__dirname +'/shaders/basic.frag', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/basic.frag', 'utf-8'), textureFrag: - fs.readFileSync(__dirname +'/shaders/texture.frag', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/texture.frag', 'utf-8'), lightVert: - fs.readFileSync(__dirname +'/shaders/light.vert', 'utf-8'), + fs.readFileSync(__dirname + '/shaders/light.vert', 'utf-8'), lightFrag: - fs.readFileSync(__dirname +'/shaders/light.frag', 'utf-8') + fs.readFileSync(__dirname + '/shaders/light.frag', 'utf-8'), + specularFrag: + fs.readFileSync(__dirname + '/shaders/specular.frag', 'utf-8') }; \ No newline at end of file diff --git a/src/3d/shaders/light.frag b/src/3d/shaders/light.frag index 1c25013602..f86883383b 100644 --- a/src/3d/shaders/light.frag +++ b/src/3d/shaders/light.frag @@ -1,6 +1,8 @@ precision mediump float; -varying vec3 vLightWeighting; + uniform vec4 uMaterialColor; +varying vec3 vLightWeighting; + void main(void) { gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); } \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index 2a69d6782c..b8af76110e 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -19,14 +19,15 @@ uniform vec3 uPointLightColor[8]; varying vec3 vVertexNormal; varying vec2 vVertTexCoord; varying vec3 vLightWeighting; +varying vec3 vLightWeighting2; vec3 ambientLightFactor = vec3(0., 0., 0.); vec3 directionalLightFactor = vec3(0., 0., 0.); -vec3 pointLightingFactor = vec3(0., 0., 0.); +vec3 pointLightFactor = vec3(0., 0., 0.); +vec3 pointLightFactor2 = vec3(0., 0., 0.); void main(void){ - vec4 mvPosition = uModelviewMatrix * vec4(aPosition, 1.0); vec4 positionVec4 = vec4(aPosition / uResolution, 1.); gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; @@ -34,6 +35,12 @@ void main(void){ vVertexNormal = vertexNormal; vVertTexCoord = aTexCoord; + vec4 mvPosition = uModelviewMatrix * vec4(aPosition, 1.0); + vec3 eyeDirection = normalize(-mvPosition.xyz); + float shininess = 32.0; + float specularFactor = 1.0; + float diffuseFactor = 1.0; + for(int i = 0; i < 8; i++){ if(uAmbientLightCount == i) break; ambientLightFactor += uAmbientColor[i]; @@ -52,9 +59,22 @@ void main(void){ vec3 lightDirection = normalize(loc - mvPosition.xyz); float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0); - pointLightingFactor += uPointLightColor[k] * directionalLightWeighting; - } + pointLightFactor += uPointLightColor[k] * directionalLightWeighting; + + //factor2 + vec3 lightDirection2 = normalize(uPointLightLocation[k] - mvPosition.xyz); + vec3 normal = normalize(vVertexNormal); + + vec3 reflectionDirection = reflect(-lightDirection2, normal); + float specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess); + + float diffuseLightWeighting = max(dot(normal, lightDirection2), 0.0); - vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightingFactor; + pointLightFactor2 += (uPointLightColor[k] * specularFactor * specularLightWeighting + + uPointLightColor[k] * diffuseFactor * diffuseLightWeighting); + } + + vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor; + vLightWeighting2 = ambientLightFactor + directionalLightFactor + pointLightFactor2; } \ No newline at end of file diff --git a/src/3d/shaders/specular.frag b/src/3d/shaders/specular.frag new file mode 100644 index 0000000000..7fbbc22551 --- /dev/null +++ b/src/3d/shaders/specular.frag @@ -0,0 +1,8 @@ +precision mediump float; + +uniform vec4 uMaterialColor; +varying vec3 vLightWeighting2; + +void main(void) { + gl_FragColor = vec4(uMaterialColor.rgb * vLightWeighting2, uMaterialColor.a); +} \ No newline at end of file From 7ecc461f3bc4a6b8be779a6da21af4c03abd8b69 Mon Sep 17 00:00:00 2001 From: Karen Date: Thu, 20 Aug 2015 22:07:05 -0400 Subject: [PATCH 09/51] modify light --- examples/3d/light/sketch.js | 6 ++-- examples/3d/specular/index.html | 20 ----------- examples/3d/specular/sketch.js | 60 --------------------------------- src/3d/shaders/light.vert | 4 +-- 4 files changed, 5 insertions(+), 85 deletions(-) delete mode 100644 examples/3d/specular/index.html delete mode 100644 examples/3d/specular/sketch.js diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index 1bdd94b5d7..614327b0b2 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -10,10 +10,10 @@ function draw(){ var dirX = (mouseX / width - 0.5) *2; ambientLight(50); - directionalLight(250, 0, 0, dirX, -dirY, 0.25); + directionalLight(250, 250, 250, dirX, -dirY, 0.25); //directionalLight(0, 250, 0, 0, 0, 0.25); - pointLight(0, 0, 250, 70, 70, 0); - pointLight(250, 250, 0, -70, -70, 0); + pointLight(0, 0, 250, 70, 80, 0); + pointLight(250, 0, 0, -70, -80, 0); push(); rotateZ(frameCount * 0.02); diff --git a/examples/3d/specular/index.html b/examples/3d/specular/index.html deleted file mode 100644 index 201710dc81..0000000000 --- a/examples/3d/specular/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/3d/specular/sketch.js b/examples/3d/specular/sketch.js deleted file mode 100644 index 8adf1833c0..0000000000 --- a/examples/3d/specular/sketch.js +++ /dev/null @@ -1,60 +0,0 @@ -function setup(){ - createCanvas(windowWidth, windowHeight, 'webgl'); -} - -function draw(){ - background(0); - translate(-width/2, 0, -800); - - var dirY = (mouseY / height - 0.5) *2; - var dirX = (mouseX / width - 0.5) *2; - - ambientLight(50); - directionalLight(250, 0, 0, dirX, -dirY, 0.25); - //directionalLight(0, 250, 0, 0, 0, 0.25); - pointLight(0, 0, 250, 70, 70, 0); - pointLight(250, 250, 0, -70, -70, 0); - - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - specularMaterial(250); - plane(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - box(80, 80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - cylinder(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - cone(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - torus(80, 20); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - sphere(80, 80); - pop(); -} \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index b8af76110e..5ed4b4bc55 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -38,8 +38,8 @@ void main(void){ vec4 mvPosition = uModelviewMatrix * vec4(aPosition, 1.0); vec3 eyeDirection = normalize(-mvPosition.xyz); float shininess = 32.0; - float specularFactor = 1.0; - float diffuseFactor = 1.0; + float specularFactor = 2.0; + float diffuseFactor = 0.5; for(int i = 0; i < 8; i++){ if(uAmbientLightCount == i) break; From 8df7b34242e0ddd227f255445205e962e1ab0d80 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 17:22:58 -0400 Subject: [PATCH 10/51] rename uModelViewMatrix --- src/3d/p5.Renderer3D.js | 8 ++++---- src/3d/shaders/light.vert | 6 +++--- src/3d/shaders/normal.vert | 4 ++-- src/3d/shaders/vertexColor.vert | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index 74255b1e6e..fddd61e793 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -174,7 +174,7 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { gl.getUniformLocation(shaderProgram, 'uProjectionMatrix'); //model view Matrix uniform shaderProgram.uMVMatrixUniform = - gl.getUniformLocation(shaderProgram, 'uModelviewMatrix'); + gl.getUniformLocation(shaderProgram, 'uModelViewMatrix'); //@TODO: figure out a better way instead of if statement if(immediateMode === undefined){ @@ -338,9 +338,9 @@ p5.Renderer3D.prototype.initMatrix = function(){ this.uMVMatrix = new p5.Matrix(); this.uPMatrix = new p5.Matrix(); this.uNMatrix = new p5.Matrix(); - var _w = this.width; - var _h = this.height; - this.uPMatrix.perspective(60 / 180 * Math.PI, _w / _h, 0.1, 100); + // var _w = this.width; + // var _h = this.width; + this.uPMatrix.perspective(60 / 180 * Math.PI, 1.0, 0.1, 100); }; /** diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index 5ed4b4bc55..fc689dacd2 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -2,7 +2,7 @@ attribute vec3 aPosition; attribute vec3 aNormal; attribute vec2 aTexCoord; -uniform mat4 uModelviewMatrix; +uniform mat4 uModelViewMatrix; uniform mat4 uProjectionMatrix; uniform mat4 uNormalMatrix; uniform float uResolution; @@ -29,13 +29,13 @@ vec3 pointLightFactor2 = vec3(0., 0., 0.); void main(void){ vec4 positionVec4 = vec4(aPosition / uResolution, 1.); - gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); vVertexNormal = vertexNormal; vVertTexCoord = aTexCoord; - vec4 mvPosition = uModelviewMatrix * vec4(aPosition, 1.0); + vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0); vec3 eyeDirection = normalize(-mvPosition.xyz); float shininess = 32.0; float specularFactor = 2.0; diff --git a/src/3d/shaders/normal.vert b/src/3d/shaders/normal.vert index aaedaf9d30..111a437854 100644 --- a/src/3d/shaders/normal.vert +++ b/src/3d/shaders/normal.vert @@ -2,7 +2,7 @@ attribute vec3 aPosition; attribute vec3 aNormal; attribute vec2 aTexCoord; -uniform mat4 uModelviewMatrix; +uniform mat4 uModelViewMatrix; uniform mat4 uProjectionMatrix; uniform mat4 uNormalMatrix; uniform float uResolution; @@ -12,7 +12,7 @@ varying highp vec2 vVertTexCoord; void main(void) { vec4 positionVec4 = vec4(aPosition / uResolution, 1.); - gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vVertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); vVertTexCoord = aTexCoord; } \ No newline at end of file diff --git a/src/3d/shaders/vertexColor.vert b/src/3d/shaders/vertexColor.vert index 49b9a16d43..61250e718d 100644 --- a/src/3d/shaders/vertexColor.vert +++ b/src/3d/shaders/vertexColor.vert @@ -1,7 +1,7 @@ attribute vec3 aPosition; attribute vec4 aVertexColor; -uniform mat4 uModelviewMatrix; +uniform mat4 uModelViewMatrix; uniform mat4 uProjectionMatrix; uniform float uResolution; @@ -9,6 +9,6 @@ varying vec4 vColor; void main(void) { vec4 positionVec4 = vec4(aPosition / uResolution * vec3(1., -1., 1.), 1.); - gl_Position = uProjectionMatrix * uModelviewMatrix * positionVec4; + gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vColor = aVertexColor; } \ No newline at end of file From ad84db9ea962566ac6e991bef1b0cc3709fb8852 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 17:28:37 -0400 Subject: [PATCH 11/51] box and plane are as big as the other by default not --- src/3d/3d_primitives.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/3d/3d_primitives.js b/src/3d/3d_primitives.js index 1d27cb1ab5..c7dcd319f7 100755 --- a/src/3d/3d_primitives.js +++ b/src/3d/3d_primitives.js @@ -33,8 +33,8 @@ require('./p5.Geometry3D'); */ p5.prototype.plane = function(width, height, detailX, detailY){ - width = width || 1; - height = height || 1; + width = width || 50; + height = height || 50; detailX = detailX || 1; detailY = detailY || 1; @@ -387,7 +387,7 @@ p5.prototype.torus = function(radius, tubeRadius, detailX, detailY){ */ p5.prototype.box = function(width, height, depth){ - width = width || 10; + width = width || 50; height = height || width; depth = depth || width; From be3bf6bd114c0ca9d9dd7da0f5e9a45994e15b5a Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 17:39:30 -0400 Subject: [PATCH 12/51] add normalize method to color --- src/3d/immediateMode3D.js | 12 ++--------- src/3d/light.js | 14 +++--------- src/3d/material.js | 38 +++++++++++++-------------------- src/3d/shaders/light.vert | 10 ++++----- src/3d/shaders/normal.vert | 2 +- src/3d/shaders/vertexColor.vert | 2 +- src/color/p5.Color.js | 6 ++++++ 7 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src/3d/immediateMode3D.js b/src/3d/immediateMode3D.js index 74bf9c8cae..27b1546a01 100644 --- a/src/3d/immediateMode3D.js +++ b/src/3d/immediateMode3D.js @@ -131,7 +131,7 @@ p5.Renderer3D.prototype._strokeCheck = function(){ p5.Renderer3D.prototype.fill = function(r, g, b, a) { var color = this._pInst.color.apply(this._pInst, arguments); - var colorNormalized = _normalizeColor(color.rgba); + var colorNormalized = color._normalize(); if( colorNormalized !== this.getCurColor()){ this.colorStack.push(colorNormalized); } @@ -141,7 +141,7 @@ p5.Renderer3D.prototype.fill = function(r, g, b, a) { p5.Renderer3D.prototype.stroke = function(r, g, b, a) { var color = this._pInst.color.apply(this._pInst, arguments); - var colorNormalized = _normalizeColor(color.rgba); + var colorNormalized = color._normalize(); if( colorNormalized !== this.getCurColor()){ this.colorStack.push(colorNormalized); } @@ -165,12 +165,4 @@ p5.Renderer3D.prototype.getColorVertexShader = function(){ return shaderProgram; }; -function _normalizeColor(_arr){ - var arr = []; - _arr.forEach(function(val){ - arr.push(val/255); - }); - return arr; -} - module.exports = p5.Renderer3D; \ No newline at end of file diff --git a/src/3d/light.js b/src/3d/light.js index 10fab3e0f7..8da81ec279 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -17,7 +17,7 @@ p5.prototype.ambientLight = function(r, g, b, a){ var color = this._graphics._pInst.color.apply( this._graphics._pInst, arguments); - var colors = _normalizeColor(color.rgba); + var colors = color._normalize(); gl.uniform3f( shaderProgram.uAmbientColor, colors[0], colors[1], colors[2]); @@ -49,7 +49,7 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { var color = this._graphics._pInst.color.apply( this._graphics._pInst, [r, g, b]); - var colors = _normalizeColor(color.rgba); + var colors = color._normalize(); gl.uniform3f( shaderProgram.uDirectionalColor, colors[0], colors[1], colors[2]); @@ -89,7 +89,7 @@ p5.prototype.pointLight = function(r, g, b, a, x, y, z) { var color = this._graphics._pInst.color.apply( this._graphics._pInst, [r, g, b]); - var colors = _normalizeColor(color.rgba); + var colors = color._normalize(); gl.uniform3f( shaderProgram.uPointLightColor, colors[0], colors[1], colors[2]); @@ -116,12 +116,4 @@ p5.prototype.pointLight = function(r, g, b, a, x, y, z) { return this; }; -function _normalizeColor(_arr){ - var arr = []; - _arr.forEach(function(val){ - arr.push(val/255); - }); - return arr; -} - module.exports = p5; diff --git a/src/3d/material.js b/src/3d/material.js index 2c6d8f8c9e..54f4c41c39 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -93,7 +93,7 @@ p5.prototype.basicMaterial = function(r, g, b, a){ var color = this._graphics._pInst.color.apply( this._graphics._pInst, arguments); - var colors = _normalizeColor(color.rgba); + var colors = color._normalize(); gl.uniform4f( shaderProgram.uMaterialColor, colors[0], colors[1], colors[2], colors[3]); @@ -113,7 +113,7 @@ p5.prototype.ambientMaterial = function(r, g, b, a) { var color = this._graphics._pInst.color.apply( this._graphics._pInst, arguments); - var colors = _normalizeColor(color.rgba); + var colors = color._normalize(); gl.uniform4f( shaderProgram.uMaterialColor, colors[0], colors[1], colors[2], colors[3]); @@ -121,31 +121,23 @@ p5.prototype.ambientMaterial = function(r, g, b, a) { return this; }; -p5.prototype.specularMaterial = function(r, g, b, a) { +// p5.prototype.specularMaterial = function(r, g, b, a) { - var gl = this._graphics.GL; - var shaderProgram = this._graphics.getShader('lightVert', 'specularFrag'); - - gl.useProgram(shaderProgram); - shaderProgram.uMaterialColor = gl.getUniformLocation( - shaderProgram, 'uMaterialColor' ); +// var gl = this._graphics.GL; +// var shaderProgram = this._graphics.getShader('lightVert', 'specularFrag'); - var color = this._graphics._pInst.color.apply( - this._graphics._pInst, arguments); - var colors = _normalizeColor(color.rgba); +// gl.useProgram(shaderProgram); +// shaderProgram.uMaterialColor = gl.getUniformLocation( +// shaderProgram, 'uMaterialColor' ); - gl.uniform4f( shaderProgram.uMaterialColor, - colors[0], colors[1], colors[2], colors[3]); +// var color = this._graphics._pInst.color.apply( +// this._graphics._pInst, arguments); +// var colors = color._normalize(); - return this; -}; +// gl.uniform4f( shaderProgram.uMaterialColor, +// colors[0], colors[1], colors[2], colors[3]); -function _normalizeColor(_arr){ - var arr = []; - _arr.forEach(function(val){ - arr.push(val/255); - }); - return arr; -} +// return this; +// }; module.exports = p5; \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index fc689dacd2..719daa8edc 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -21,14 +21,14 @@ varying vec2 vVertTexCoord; varying vec3 vLightWeighting; varying vec3 vLightWeighting2; -vec3 ambientLightFactor = vec3(0., 0., 0.); -vec3 directionalLightFactor = vec3(0., 0., 0.); -vec3 pointLightFactor = vec3(0., 0., 0.); -vec3 pointLightFactor2 = vec3(0., 0., 0.); +vec3 ambientLightFactor = vec3(0.0, 0.0, 0.0); +vec3 directionalLightFactor = vec3(0.0, 0.0, 0.0); +vec3 pointLightFactor = vec3(0.0, 0.0, 0.0); +vec3 pointLightFactor2 = vec3(0.0, 0.0, 0.0); void main(void){ - vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + vec4 positionVec4 = vec4(aPosition / uResolution, 1.0); gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vec3 vertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); diff --git a/src/3d/shaders/normal.vert b/src/3d/shaders/normal.vert index 111a437854..f965bc37f5 100644 --- a/src/3d/shaders/normal.vert +++ b/src/3d/shaders/normal.vert @@ -11,7 +11,7 @@ varying vec3 vVertexNormal; varying highp vec2 vVertTexCoord; void main(void) { - vec4 positionVec4 = vec4(aPosition / uResolution, 1.); + vec4 positionVec4 = vec4(aPosition / uResolution, 1.0); gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vVertexNormal = vec3( uNormalMatrix * vec4( aNormal, 1.0 ) ); vVertTexCoord = aTexCoord; diff --git a/src/3d/shaders/vertexColor.vert b/src/3d/shaders/vertexColor.vert index 61250e718d..01e773c5b7 100644 --- a/src/3d/shaders/vertexColor.vert +++ b/src/3d/shaders/vertexColor.vert @@ -8,7 +8,7 @@ uniform float uResolution; varying vec4 vColor; void main(void) { - vec4 positionVec4 = vec4(aPosition / uResolution * vec3(1., -1., 1.), 1.); + vec4 positionVec4 = vec4(aPosition / uResolution * vec3(1.0, -1.0, 1.0), 1.0); gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4; vColor = aVertexColor; } \ No newline at end of file diff --git a/src/color/p5.Color.js b/src/color/p5.Color.js index a6366da448..ddea8d6f69 100644 --- a/src/color/p5.Color.js +++ b/src/color/p5.Color.js @@ -109,6 +109,12 @@ p5.Color.prototype.toString = function() { return 'rgba('+a[0]+','+a[1]+','+a[2]+','+ a[3] +')'; }; +p5.Color.prototype._normalize = function(){ + this.rgba.map(function(value){ + return value / 255; + }); +}; + /** * These Regular Expressions are used to build up the patterns for matching * viable CSS color strings: fragmenting the regexes in this way increases From a8bb75fea3f3d162bc6c31c06f71e4be353a98f7 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 17:46:52 -0400 Subject: [PATCH 13/51] fix bug in color normalize --- src/color/p5.Color.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/color/p5.Color.js b/src/color/p5.Color.js index ddea8d6f69..345d284df0 100644 --- a/src/color/p5.Color.js +++ b/src/color/p5.Color.js @@ -110,9 +110,10 @@ p5.Color.prototype.toString = function() { }; p5.Color.prototype._normalize = function(){ - this.rgba.map(function(value){ + var arr = this.rgba.map(function(value){ return value / 255; }); + return arr; }; /** From 57d3a05c4d8d19065cadbf2fe52e6b989c9fe657 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 17:47:24 -0400 Subject: [PATCH 14/51] set camera back to before --- src/3d/p5.Renderer3D.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index fddd61e793..c28e1ec6c7 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -338,9 +338,9 @@ p5.Renderer3D.prototype.initMatrix = function(){ this.uMVMatrix = new p5.Matrix(); this.uPMatrix = new p5.Matrix(); this.uNMatrix = new p5.Matrix(); - // var _w = this.width; - // var _h = this.width; - this.uPMatrix.perspective(60 / 180 * Math.PI, 1.0, 0.1, 100); + var _w = this.width; + var _h = this.height; + this.uPMatrix.perspective(60 / 180 * Math.PI, _w/_h, 0.1, 100); }; /** From ac42e37dcc43340c6d56bef1c8feb35c8b4d591e Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 18:15:29 -0400 Subject: [PATCH 15/51] add camera --- examples/3d/center_origin/sketch.js | 4 +++- examples/3d/geometry/sketch.js | 4 ++-- examples/3d/immediateMode/sketch.js | 3 ++- examples/3d/interaction/sketch.js | 3 ++- examples/3d/light/sketch.js | 4 +++- examples/3d/material/sketch.js | 4 +++- examples/3d/mobile/sketch.js | 3 ++- examples/3d/performance/sketch.js | 4 +++- examples/3d/texture/sketch.js | 3 ++- examples/3d/topleft_origin/sketch.js | 3 ++- src/3d/camera.js | 17 +++++++++++++++++ src/3d/light.js | 4 +--- src/3d/p5.Renderer3D.js | 4 +--- src/app.js | 1 + 14 files changed, 44 insertions(+), 17 deletions(-) create mode 100644 src/3d/camera.js diff --git a/examples/3d/center_origin/sketch.js b/examples/3d/center_origin/sketch.js index d88e202574..f60ecceb15 100644 --- a/examples/3d/center_origin/sketch.js +++ b/examples/3d/center_origin/sketch.js @@ -6,7 +6,9 @@ function draw(){ background(255); - translate(0, 0, -800); + camera(0, 0, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + rotateY(frameCount * 0.01); var gap = 200; diff --git a/examples/3d/geometry/sketch.js b/examples/3d/geometry/sketch.js index 7807337f3a..03be025fdb 100644 --- a/examples/3d/geometry/sketch.js +++ b/examples/3d/geometry/sketch.js @@ -6,8 +6,8 @@ var theta = 0; function draw(){ background(255, 255, 255, 255); - - translate(-width/2, 0, -800); + camera(width/2, 0, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); normalMaterial(); push(); rotateZ(theta * mouseX * 0.001); diff --git a/examples/3d/immediateMode/sketch.js b/examples/3d/immediateMode/sketch.js index f9844523db..6e695fc827 100644 --- a/examples/3d/immediateMode/sketch.js +++ b/examples/3d/immediateMode/sketch.js @@ -9,7 +9,8 @@ function draw(){ background('white'); colorMode(HSB); - translate(0, 0, -1000); + camera(0, 0, 1000); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); rotateY(frameCount * 0.01); diff --git a/examples/3d/interaction/sketch.js b/examples/3d/interaction/sketch.js index 16fbc18884..012a86ca1d 100644 --- a/examples/3d/interaction/sketch.js +++ b/examples/3d/interaction/sketch.js @@ -5,7 +5,8 @@ function setup(){ function draw(){ background(250, 250, 250, 255); var radius = width; - translate(0, 0, -1600); + camera(0, 0, 1600); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); orbitControl(); if(!mouseIsPressed){ diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index 614327b0b2..fdeccb0afb 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -4,7 +4,9 @@ function setup(){ function draw(){ background(0); - translate(-width/2, 0, -800); + + camera(width/2, 0, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); var dirY = (mouseY / height - 0.5) *2; var dirX = (mouseX / width - 0.5) *2; diff --git a/examples/3d/material/sketch.js b/examples/3d/material/sketch.js index 225ec9371e..67543e05a1 100644 --- a/examples/3d/material/sketch.js +++ b/examples/3d/material/sketch.js @@ -8,7 +8,9 @@ function draw(){ background(250, 250, 250, 255); // directionalLight(153, 153, 153, .5, 0, -1); // ambientLight(153, 102, 0); - translate(-100, 0, -1000); + camera(width/2, 0, 1000); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + push(); rotateX(theta * 0.1); rotateZ(theta); diff --git a/examples/3d/mobile/sketch.js b/examples/3d/mobile/sketch.js index 7260f3d575..4586a16b15 100644 --- a/examples/3d/mobile/sketch.js +++ b/examples/3d/mobile/sketch.js @@ -4,7 +4,8 @@ function setup(){ function draw(){ background(250, 250, 250, 255); - translate(0,0,-400); + camera(0, 0, 400); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); normalMaterial(); rotateX(accelerationX * 0.01); rotateY(accelerationY * 0.01); diff --git a/examples/3d/performance/sketch.js b/examples/3d/performance/sketch.js index 778e1bdec5..0552efe3c5 100644 --- a/examples/3d/performance/sketch.js +++ b/examples/3d/performance/sketch.js @@ -7,7 +7,9 @@ function setup(){ function draw(){ background(250, 250, 250, 255); - translate(0, 0, -1500); + camera(0, 0, 1500); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + normalMaterial(); rotateY(frameCount * 0.01); diff --git a/examples/3d/texture/sketch.js b/examples/3d/texture/sketch.js index 0fb6513433..e7584cdf67 100644 --- a/examples/3d/texture/sketch.js +++ b/examples/3d/texture/sketch.js @@ -15,7 +15,8 @@ function setup(){ function draw(){ background(255, 255, 255, 255); - translate(0, 0, -200); + camera(0, 0, 200); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); diff --git a/examples/3d/topleft_origin/sketch.js b/examples/3d/topleft_origin/sketch.js index 09f3e61ef4..87445c191e 100644 --- a/examples/3d/topleft_origin/sketch.js +++ b/examples/3d/topleft_origin/sketch.js @@ -6,7 +6,8 @@ function draw(){ background(255); - translate( -width/2, -height/2, -600); + camera(width/2, height/2, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); rotateY(frameCount * 0.01); diff --git a/src/3d/camera.js b/src/3d/camera.js new file mode 100644 index 0000000000..ac63c97d2e --- /dev/null +++ b/src/3d/camera.js @@ -0,0 +1,17 @@ +'use strict'; + +var p5 = require('../core/core'); + +p5.prototype.camera = function(eyeX, eyeY, eyeZ){ + this._graphics.translate(-eyeX, -eyeY, -eyeZ); +}; + +p5.prototype.perspective = function(fovy,aspect,near,far) { + this._graphics.uPMatrix.perspective(fovy,aspect,near,far); +}; + +p5.prototype.ortho = function(left,right,bottom,top,near,far) { + this._graphics.uPMatrix.ortho(left,right,bottom,top,near,far); +}; + +module.exports = p5; \ No newline at end of file diff --git a/src/3d/light.js b/src/3d/light.js index 8da81ec279..1142aeaa90 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -1,7 +1,5 @@ 'use strict'; -/** - * @todo WIP - */ + var p5 = require('../core/core'); p5.prototype.ambientLight = function(r, g, b, a){ diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index c28e1ec6c7..3dd4dadd5d 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -338,9 +338,6 @@ p5.Renderer3D.prototype.initMatrix = function(){ this.uMVMatrix = new p5.Matrix(); this.uPMatrix = new p5.Matrix(); this.uNMatrix = new p5.Matrix(); - var _w = this.width; - var _h = this.height; - this.uPMatrix.perspective(60 / 180 * Math.PI, _w/_h, 0.1, 100); }; /** @@ -350,6 +347,7 @@ p5.Renderer3D.prototype.initMatrix = function(){ */ p5.Renderer3D.prototype.resetMatrix = function() { this.uMVMatrix = p5.Matrix.identity(); + this.uPMatrix = p5.Matrix.identity(); }; /** diff --git a/src/app.js b/src/app.js index 6227ef63a4..cc7e55f95a 100644 --- a/src/app.js +++ b/src/app.js @@ -54,6 +54,7 @@ require('./3d/p5.Matrix'); require('./3d/material'); require('./3d/light'); require('./3d/shader'); +require('./3d/camera'); require('./3d/interaction'); /** From 911f0a9bb1dbc8ccac5b9ed78cce324c8b8b5977 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 18:22:37 -0400 Subject: [PATCH 16/51] add strokeWeight to todo list --- examples/3d/immediateMode/sketch.js | 13 +++++++++---- src/3d/immediateMode3D.js | 6 +++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/3d/immediateMode/sketch.js b/examples/3d/immediateMode/sketch.js index 6e695fc827..07f2d9d769 100644 --- a/examples/3d/immediateMode/sketch.js +++ b/examples/3d/immediateMode/sketch.js @@ -12,11 +12,16 @@ function draw(){ camera(0, 0, 1000); perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - rotateY(frameCount * 0.01); - //point - stroke(0, 200, 200); - point(0, 0, 0); + push(); + for(var i = 0; i < 10; i++){ + translate(10, 0, 0); + stroke(0, 200, 200); + point(0, 0, 0); + } + pop(); + + rotateY(frameCount * 0.01); //lines translate(100, 0, 0); diff --git a/src/3d/immediateMode3D.js b/src/3d/immediateMode3D.js index 27b1546a01..ed9cc614fc 100644 --- a/src/3d/immediateMode3D.js +++ b/src/3d/immediateMode3D.js @@ -40,7 +40,11 @@ p5.Renderer3D.prototype.primitives2D = function(arr){ this.setMatrixUniforms(mId); }; -//@TODO: point does not show up, gotta fix it. +//@TODO: +p5.Renderer3D.prototype.strokeWeight = function() { + throw new Error('strokeWeight for 3d not yet implemented'); +}; + p5.Renderer3D.prototype.point = function(x, y, z){ var gl = this.GL; this.primitives2D([x, y, z]); From 3a59e2e82a53f99012f1fdac15fbfb8bad5948c1 Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 18:30:52 -0400 Subject: [PATCH 17/51] add defualt camera function --- src/3d/p5.Renderer3D.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index 3dd4dadd5d..9f64fc25b2 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -340,6 +340,16 @@ p5.Renderer3D.prototype.initMatrix = function(){ this.uNMatrix = new p5.Matrix(); }; +//@TODO: figure out how to detect if user didn't set the camera +//then call this function below +p5.Renderer3D.prototype.setDefaultCamera = function() { + var _w = this.width; + var _h = this.height; + this.translate(0, 0, -800); + this.uPMatrix.perspective(60 / 180 * Math.PI, _w / _h, 0.1, 100); + this.setCamera = true; +}; + /** * resets the model view matrix to a mat4 identity * matrix. From 73e0aa71b54f98e165b0589882565b38518a18fa Mon Sep 17 00:00:00 2001 From: Karen Date: Fri, 21 Aug 2015 19:02:51 -0400 Subject: [PATCH 18/51] for future set camera detection --- src/3d/camera.js | 2 ++ src/3d/p5.Renderer3D.js | 16 ++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/3d/camera.js b/src/3d/camera.js index ac63c97d2e..1cd3af27c1 100644 --- a/src/3d/camera.js +++ b/src/3d/camera.js @@ -8,10 +8,12 @@ p5.prototype.camera = function(eyeX, eyeY, eyeZ){ p5.prototype.perspective = function(fovy,aspect,near,far) { this._graphics.uPMatrix.perspective(fovy,aspect,near,far); + this._graphics.setCamera = true; }; p5.prototype.ortho = function(left,right,bottom,top,near,far) { this._graphics.uPMatrix.ortho(left,right,bottom,top,near,far); + this._graphics.setCamera = true; }; module.exports = p5; \ No newline at end of file diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index 9f64fc25b2..03818c0de8 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -54,6 +54,7 @@ p5.Renderer3D = function(elt, pInst, isMainCanvas) { //for immedidate mode this.verticeBuffer = gl.createBuffer(); this.colorBuffer = gl.createBuffer(); + this.setCamera = false; return this; }; @@ -103,6 +104,7 @@ p5.Renderer3D.prototype.background = function() { gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); this.resetMatrix(); this.resetStack(); + this.setCamera = false; }; //@TODO implement this @@ -342,12 +344,14 @@ p5.Renderer3D.prototype.initMatrix = function(){ //@TODO: figure out how to detect if user didn't set the camera //then call this function below -p5.Renderer3D.prototype.setDefaultCamera = function() { - var _w = this.width; - var _h = this.height; - this.translate(0, 0, -800); - this.uPMatrix.perspective(60 / 180 * Math.PI, _w / _h, 0.1, 100); - this.setCamera = true; +p5.Renderer3D.prototype.setDefaultCamera = function(){ + if(!this.setCamera){ + var _w = this.width; + var _h = this.height; + this.translate(0, 0, -800); + this.uPMatrix.perspective(60 / 180 * Math.PI, _w / _h, 0.1, 100); + this.setCamera = true; + } }; /** From 7ef818e75d0b0a1126c2f2f9dddecaab627bb97f Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 08:55:09 -0400 Subject: [PATCH 19/51] fix bug for specular material --- examples/3d/light/sketch.js | 4 +-- examples/3d/specular/index.html | 20 +++++++++++ examples/3d/specular/sketch.js | 62 +++++++++++++++++++++++++++++++++ src/3d/material.js | 36 +++++++++++-------- src/3d/shader.js | 4 +-- src/3d/shaders/light.frag | 8 ++++- src/3d/shaders/light.vert | 21 +++++------ src/3d/shaders/specular.frag | 8 ----- 8 files changed, 123 insertions(+), 40 deletions(-) create mode 100644 examples/3d/specular/index.html create mode 100644 examples/3d/specular/sketch.js delete mode 100644 src/3d/shaders/specular.frag diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js index fdeccb0afb..feda1ecc3c 100644 --- a/examples/3d/light/sketch.js +++ b/examples/3d/light/sketch.js @@ -14,8 +14,8 @@ function draw(){ ambientLight(50); directionalLight(250, 250, 250, dirX, -dirY, 0.25); //directionalLight(0, 250, 0, 0, 0, 0.25); - pointLight(0, 0, 250, 70, 80, 0); - pointLight(250, 0, 0, -70, -80, 0); + pointLight(0, 0, 250, 70, 70, 0); + pointLight(250, 0, 0, -70, -70, 0); push(); rotateZ(frameCount * 0.02); diff --git a/examples/3d/specular/index.html b/examples/3d/specular/index.html new file mode 100644 index 0000000000..201710dc81 --- /dev/null +++ b/examples/3d/specular/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/3d/specular/sketch.js b/examples/3d/specular/sketch.js new file mode 100644 index 0000000000..50199f356a --- /dev/null +++ b/examples/3d/specular/sketch.js @@ -0,0 +1,62 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + + camera(width/2, 0, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + + var dirY = (mouseY / height - 0.5) *2; + var dirX = (mouseX / width - 0.5) *2; + + ambientLight(50); + //directionalLight(250, 0, 0, dirX, -dirY, 0.25); + //directionalLight(0, 250, 0, 0, 0, 0.25); + pointLight(0, 0, 250, 70, 70, 0); + pointLight(250, 250, 250, -70, -70, 0); + + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + specularMaterial(250); + plane(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + box(80, 80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + cylinder(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + cone(80, 80); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + torus(80, 20); + pop(); + translate(250, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + sphere(80, 80); + pop(); +} \ No newline at end of file diff --git a/src/3d/material.js b/src/3d/material.js index 54f4c41c39..44dc859416 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -115,29 +115,37 @@ p5.prototype.ambientMaterial = function(r, g, b, a) { this._graphics._pInst, arguments); var colors = color._normalize(); - gl.uniform4f( shaderProgram.uMaterialColor, + gl.uniform4f(shaderProgram.uMaterialColor, colors[0], colors[1], colors[2], colors[3]); + shaderProgram.uSpecular = gl.getUniformLocation( + shaderProgram, 'uSpecular' ); + gl.uniform1i(shaderProgram.uSpecular, false); + return this; }; -// p5.prototype.specularMaterial = function(r, g, b, a) { +p5.prototype.specularMaterial = function(r, g, b, a) { -// var gl = this._graphics.GL; -// var shaderProgram = this._graphics.getShader('lightVert', 'specularFrag'); + var gl = this._graphics.GL; + var shaderProgram = this._graphics.getShader('lightVert', 'lightFrag'); + + gl.useProgram(shaderProgram); + shaderProgram.uMaterialColor = gl.getUniformLocation( + shaderProgram, 'uMaterialColor' ); -// gl.useProgram(shaderProgram); -// shaderProgram.uMaterialColor = gl.getUniformLocation( -// shaderProgram, 'uMaterialColor' ); + var color = this._graphics._pInst.color.apply( + this._graphics._pInst, arguments); + var colors = color._normalize(); -// var color = this._graphics._pInst.color.apply( -// this._graphics._pInst, arguments); -// var colors = color._normalize(); + gl.uniform4f(shaderProgram.uMaterialColor, + colors[0], colors[1], colors[2], colors[3]); -// gl.uniform4f( shaderProgram.uMaterialColor, -// colors[0], colors[1], colors[2], colors[3]); + shaderProgram.uSpecular = gl.getUniformLocation( + shaderProgram, 'uSpecular' ); + gl.uniform1i(shaderProgram.uSpecular, true); -// return this; -// }; + return this; +}; module.exports = p5; \ No newline at end of file diff --git a/src/3d/shader.js b/src/3d/shader.js index 683d82e3a5..abe575bc4e 100644 --- a/src/3d/shader.js +++ b/src/3d/shader.js @@ -16,7 +16,5 @@ module.exports = { lightVert: fs.readFileSync(__dirname + '/shaders/light.vert', 'utf-8'), lightFrag: - fs.readFileSync(__dirname + '/shaders/light.frag', 'utf-8'), - specularFrag: - fs.readFileSync(__dirname + '/shaders/specular.frag', 'utf-8') + fs.readFileSync(__dirname + '/shaders/light.frag', 'utf-8') }; \ No newline at end of file diff --git a/src/3d/shaders/light.frag b/src/3d/shaders/light.frag index f86883383b..f607b67e4d 100644 --- a/src/3d/shaders/light.frag +++ b/src/3d/shaders/light.frag @@ -1,8 +1,14 @@ precision mediump float; uniform vec4 uMaterialColor; +uniform bool uSpecular; varying vec3 vLightWeighting; +varying vec3 vLightWeighting2; void main(void) { - gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); + if(uSpecular){ + gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting2), uMaterialColor.a); + }else{ + gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); + } } \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index 719daa8edc..a5d8919e43 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -35,11 +35,13 @@ void main(void){ vVertexNormal = vertexNormal; vVertTexCoord = aTexCoord; - vec4 mvPosition = uModelViewMatrix * vec4(aPosition, 1.0); + vec4 mvPosition = uModelViewMatrix * vec4(aPosition / uResolution, 1.0); vec3 eyeDirection = normalize(-mvPosition.xyz); + vec3 normal = normalize(vertexNormal); + float shininess = 32.0; float specularFactor = 2.0; - float diffuseFactor = 0.5; + float diffuseFactor = 0.2; for(int i = 0; i < 8; i++){ if(uAmbientLightCount == i) break; @@ -58,20 +60,15 @@ void main(void){ //loc = loc / uResolution; vec3 lightDirection = normalize(loc - mvPosition.xyz); - float directionalLightWeighting = max(dot(vertexNormal, lightDirection), 0.0); + float directionalLightWeighting = max(dot(normal, lightDirection), 0.0); pointLightFactor += uPointLightColor[k] * directionalLightWeighting; - - //factor2 - vec3 lightDirection2 = normalize(uPointLightLocation[k] - mvPosition.xyz); - vec3 normal = normalize(vVertexNormal); - - vec3 reflectionDirection = reflect(-lightDirection2, normal); - float specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess); - float diffuseLightWeighting = max(dot(normal, lightDirection2), 0.0); + //factor2 for specular + vec3 reflectionDirection = reflect(-lightDirection, normal); + float specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), shininess); pointLightFactor2 += (uPointLightColor[k] * specularFactor * specularLightWeighting - + uPointLightColor[k] * diffuseFactor * diffuseLightWeighting); + + directionalLightWeighting * diffuseFactor); } vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor; diff --git a/src/3d/shaders/specular.frag b/src/3d/shaders/specular.frag deleted file mode 100644 index 7fbbc22551..0000000000 --- a/src/3d/shaders/specular.frag +++ /dev/null @@ -1,8 +0,0 @@ -precision mediump float; - -uniform vec4 uMaterialColor; -varying vec3 vLightWeighting2; - -void main(void) { - gl_FragColor = vec4(uMaterialColor.rgb * vLightWeighting2, uMaterialColor.a); -} \ No newline at end of file From bda58bc97eee5e6395a8f20b66789a3f44a3dfd9 Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 09:05:42 -0400 Subject: [PATCH 20/51] modify specular factor and geometry details --- examples/3d/geometry/sketch.js | 12 ++++++------ examples/3d/performance/sketch.js | 2 +- examples/3d/specular/sketch.js | 5 +++-- src/3d/3d_primitives.js | 18 +++++++++--------- src/3d/shaders/light.vert | 2 +- 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/examples/3d/geometry/sketch.js b/examples/3d/geometry/sketch.js index 03be025fdb..06d5f87309 100644 --- a/examples/3d/geometry/sketch.js +++ b/examples/3d/geometry/sketch.js @@ -13,42 +13,42 @@ function draw(){ rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - plane(80, 80); + plane(); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - box(80, 80, 80); + box(); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - cylinder(80, 80); + cylinder(); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - cone(80, 80); + cone(); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - torus(80, 20); + torus(); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - sphere(80, 80); + sphere(); pop(); theta += 0.05; } \ No newline at end of file diff --git a/examples/3d/performance/sketch.js b/examples/3d/performance/sketch.js index 0552efe3c5..8e08ce99da 100644 --- a/examples/3d/performance/sketch.js +++ b/examples/3d/performance/sketch.js @@ -19,7 +19,7 @@ function draw(){ translate(sin(theta + j) * 100, sin(theta + j) * 100, i * 0.1); rotateZ(theta * 0.2); push(); - sphere(8); + sphere(8, 12, 8); pop(); } pop(); diff --git a/examples/3d/specular/sketch.js b/examples/3d/specular/sketch.js index 50199f356a..eff00e2a1e 100644 --- a/examples/3d/specular/sketch.js +++ b/examples/3d/specular/sketch.js @@ -8,14 +8,15 @@ function draw(){ camera(width/2, 0, 800); perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - var dirY = (mouseY / height - 0.5) *2; + var dirY = (mouseY / height - 0.5) * (-2); var dirX = (mouseX / width - 0.5) *2; ambientLight(50); //directionalLight(250, 0, 0, dirX, -dirY, 0.25); //directionalLight(0, 250, 0, 0, 0, 0.25); pointLight(0, 0, 250, 70, 70, 0); - pointLight(250, 250, 250, -70, -70, 0); + pointLight(250, 0, 0, -70, -70, 0); + pointLight(200, 200, 200, dirX, dirY, 0); push(); rotateZ(frameCount * 0.02); diff --git a/src/3d/3d_primitives.js b/src/3d/3d_primitives.js index c7dcd319f7..26eead24f7 100755 --- a/src/3d/3d_primitives.js +++ b/src/3d/3d_primitives.js @@ -95,8 +95,8 @@ p5.prototype.sphere = function(radius, detailX, detailY){ radius = radius || 50; - detailX = detailX || 12; - detailY = detailY || 8; + detailX = detailX || 24; + detailY = detailY || 16; var gId = 'sphere|'+radius+'|'+detailX+'|'+detailY; @@ -158,8 +158,8 @@ p5.prototype.cylinder = function(radius, height, detailX, detailY){ radius = radius || 50; height = height || 50; - detailX = detailX || 12; - detailY = detailY || 8; + detailX = detailX || 24; + detailY = detailY || 16; var gId = 'cylinder|'+radius+'|'+height+'|'+detailX+'|'+detailY; @@ -253,8 +253,8 @@ p5.prototype.cone = function(radius, height, detailX, detailY){ radius = radius || 50; height = height || 50; - detailX = detailX || 12; - detailY = detailY || 8; + detailX = detailX || 24; + detailY = detailY || 16; var gId = 'cone|'+radius+'|'+height+'|'+detailX+'|'+detailY; @@ -326,10 +326,10 @@ p5.prototype.cone = function(radius, height, detailX, detailY){ p5.prototype.torus = function(radius, tubeRadius, detailX, detailY){ radius = radius || 50; - tubeRadius = tubeRadius || 20; + tubeRadius = tubeRadius || 10; - detailX = detailX || 12; - detailY = detailY || 8; + detailX = detailX || 24; + detailY = detailY || 16; var gId = 'torus|'+radius+'|'+tubeRadius+'|'+detailX+'|'+detailY; diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index a5d8919e43..a33aa8d3de 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -41,7 +41,7 @@ void main(void){ float shininess = 32.0; float specularFactor = 2.0; - float diffuseFactor = 0.2; + float diffuseFactor = 0.3; for(int i = 0; i < 8; i++){ if(uAmbientLightCount == i) break; From 9ee052c09bfc217a54f078983f80ba16fdeb0952 Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 09:09:16 -0400 Subject: [PATCH 21/51] modify example sphere detail --- examples/3d/performance/sketch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/3d/performance/sketch.js b/examples/3d/performance/sketch.js index 8e08ce99da..fd4d2c476d 100644 --- a/examples/3d/performance/sketch.js +++ b/examples/3d/performance/sketch.js @@ -19,7 +19,7 @@ function draw(){ translate(sin(theta + j) * 100, sin(theta + j) * 100, i * 0.1); rotateZ(theta * 0.2); push(); - sphere(8, 12, 8); + sphere(8, 6, 4); pop(); } pop(); From 8638639ad29c7102d9adbfdf144277232d732ff1 Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 09:16:30 -0400 Subject: [PATCH 22/51] move detection from frag to vert inorder to reduce calculation --- src/3d/shaders/light.frag | 8 +------- src/3d/shaders/light.vert | 9 ++++++--- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/3d/shaders/light.frag b/src/3d/shaders/light.frag index f607b67e4d..f86883383b 100644 --- a/src/3d/shaders/light.frag +++ b/src/3d/shaders/light.frag @@ -1,14 +1,8 @@ precision mediump float; uniform vec4 uMaterialColor; -uniform bool uSpecular; varying vec3 vLightWeighting; -varying vec3 vLightWeighting2; void main(void) { - if(uSpecular){ - gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting2), uMaterialColor.a); - }else{ - gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); - } + gl_FragColor = vec4(vec3(uMaterialColor.rgb * vLightWeighting), uMaterialColor.a); } \ No newline at end of file diff --git a/src/3d/shaders/light.vert b/src/3d/shaders/light.vert index a33aa8d3de..ff87a646c1 100644 --- a/src/3d/shaders/light.vert +++ b/src/3d/shaders/light.vert @@ -15,11 +15,11 @@ uniform vec3 uLightingDirection[8]; uniform vec3 uDirectionalColor[8]; uniform vec3 uPointLightLocation[8]; uniform vec3 uPointLightColor[8]; +uniform bool uSpecular; varying vec3 vVertexNormal; varying vec2 vVertTexCoord; varying vec3 vLightWeighting; -varying vec3 vLightWeighting2; vec3 ambientLightFactor = vec3(0.0, 0.0, 0.0); vec3 directionalLightFactor = vec3(0.0, 0.0, 0.0); @@ -71,7 +71,10 @@ void main(void){ + directionalLightWeighting * diffuseFactor); } - vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor; - vLightWeighting2 = ambientLightFactor + directionalLightFactor + pointLightFactor2; + if(!uSpecular){ + vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor; + }else{ + vLightWeighting = ambientLightFactor + directionalLightFactor + pointLightFactor2; + } } \ No newline at end of file From 6906c9ce3d3ebacd9d2a33924b36d2c16e5df399 Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 09:23:42 -0400 Subject: [PATCH 23/51] abstract function away --- src/3d/p5.Renderer3D.js | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index 03818c0de8..7f6eae8e33 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -104,7 +104,6 @@ p5.Renderer3D.prototype.background = function() { gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); this.resetMatrix(); this.resetStack(); - this.setCamera = false; }; //@TODO implement this @@ -157,11 +156,18 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { alert('Snap! Error linking shader program'); } - gl.useProgram(shaderProgram); //END SHADERS SETUP - // @TODO replace 4th argument with far plane once we implement - // a view frustrum + this.getLocation(shaderProgram, immediateMode); + + this.mHash[vertId + '|' + fragId] = shaderProgram; + + return shaderProgram; +}; + +p5.Renderer3D.prototype.getLocation = function(shaderProgram, immediateMode) { + var gl = this.GL; + gl.useProgram(shaderProgram); shaderProgram.uResolution = gl.getUniformLocation(shaderProgram, 'uResolution'); gl.uniform1f(shaderProgram.uResolution, RESOLUTION); @@ -197,10 +203,6 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { shaderProgram.samplerUniform = gl.getUniformLocation(shaderProgram, 'uSampler'); } - - this.mHash[vertId + '|' + fragId] = shaderProgram; - - return shaderProgram; }; /** @@ -362,6 +364,7 @@ p5.Renderer3D.prototype.setDefaultCamera = function(){ p5.Renderer3D.prototype.resetMatrix = function() { this.uMVMatrix = p5.Matrix.identity(); this.uPMatrix = p5.Matrix.identity(); + this.setCamera = false; }; /** From e76b90d7f5b01d750f2d0e19c43f7d3ca1fe6fea Mon Sep 17 00:00:00 2001 From: Karen Date: Sat, 22 Aug 2015 10:55:25 -0400 Subject: [PATCH 24/51] simplify examples --- examples/3d/interaction/sketch.js | 13 +--- examples/3d/light/sketch.js | 62 ----------------- .../{light => lights/ambientLight}/index.html | 2 +- examples/3d/lights/ambientLight/sketch.js | 15 +++++ .../directionalLight}/index.html | 2 +- examples/3d/lights/directionalLight/sketch.js | 19 ++++++ .../pointLight}/index.html | 2 +- examples/3d/lights/pointLight/sketch.js | 20 ++++++ examples/3d/material/simple/index.html | 20 ++++++ examples/3d/material/simple/sketch.js | 31 +++++++++ examples/3d/material/sketch.js | 38 ----------- .../3d/material/specular:ambient/index.html | 20 ++++++ .../3d/material/specular:ambient/sketch.js | 34 ++++++++++ .../3d/{ => material}/texture/assets/cat.jpg | Bin examples/3d/{ => material}/texture/index.html | 2 +- examples/3d/{ => material}/texture/sketch.js | 0 .../3d/{ => origin}/center_origin/index.html | 2 +- .../3d/{ => origin}/center_origin/sketch.js | 0 .../3d/{ => origin}/topleft_origin/index.html | 2 +- .../3d/{ => origin}/topleft_origin/sketch.js | 0 examples/3d/specular/sketch.js | 63 ------------------ 21 files changed, 167 insertions(+), 180 deletions(-) delete mode 100644 examples/3d/light/sketch.js rename examples/3d/{light => lights/ambientLight}/index.html (96%) create mode 100644 examples/3d/lights/ambientLight/sketch.js rename examples/3d/{specular => lights/directionalLight}/index.html (96%) create mode 100644 examples/3d/lights/directionalLight/sketch.js rename examples/3d/{material => lights/pointLight}/index.html (96%) create mode 100644 examples/3d/lights/pointLight/sketch.js create mode 100644 examples/3d/material/simple/index.html create mode 100644 examples/3d/material/simple/sketch.js delete mode 100644 examples/3d/material/sketch.js create mode 100644 examples/3d/material/specular:ambient/index.html create mode 100644 examples/3d/material/specular:ambient/sketch.js rename examples/3d/{ => material}/texture/assets/cat.jpg (100%) rename examples/3d/{ => material}/texture/index.html (97%) rename examples/3d/{ => material}/texture/sketch.js (100%) rename examples/3d/{ => origin}/center_origin/index.html (97%) rename examples/3d/{ => origin}/center_origin/sketch.js (100%) rename examples/3d/{ => origin}/topleft_origin/index.html (97%) rename examples/3d/{ => origin}/topleft_origin/sketch.js (100%) delete mode 100644 examples/3d/specular/sketch.js diff --git a/examples/3d/interaction/sketch.js b/examples/3d/interaction/sketch.js index 012a86ca1d..a1cdfa4167 100644 --- a/examples/3d/interaction/sketch.js +++ b/examples/3d/interaction/sketch.js @@ -8,10 +8,6 @@ function draw(){ camera(0, 0, 1600); perspective(60 / 180 * Math.PI, width/height, 0.1, 100); orbitControl(); - - if(!mouseIsPressed){ - rotateY(frameCount * 0.001); - } normalMaterial(); for(var i = 0; i <= 20; i++){ @@ -19,13 +15,8 @@ function draw(){ push(); var a = j/20 * PI; var b = i/20 * PI - translate(sin(2 * a) * radius * sin(b), cos(b) * radius / 2 , cos(2 * a) * radius * sin(b)); - if(j % 2 === 0) { - box(60, 60, 60); - } - else{ - cone(60, 60); - } + translate(sin(2 * a) * radius * sin(b), cos(b) * radius / 2 , cos(2 * a) * radius * sin(b)); + cone(); pop(); } } diff --git a/examples/3d/light/sketch.js b/examples/3d/light/sketch.js deleted file mode 100644 index feda1ecc3c..0000000000 --- a/examples/3d/light/sketch.js +++ /dev/null @@ -1,62 +0,0 @@ -function setup(){ - createCanvas(windowWidth, windowHeight, 'webgl'); -} - -function draw(){ - background(0); - - camera(width/2, 0, 800); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - - var dirY = (mouseY / height - 0.5) *2; - var dirX = (mouseX / width - 0.5) *2; - - ambientLight(50); - directionalLight(250, 250, 250, dirX, -dirY, 0.25); - //directionalLight(0, 250, 0, 0, 0, 0.25); - pointLight(0, 0, 250, 70, 70, 0); - pointLight(250, 0, 0, -70, -70, 0); - - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - ambientMaterial(250); - plane(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - box(80, 80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - cylinder(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - cone(80, 80); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - torus(80, 20); - pop(); - translate(250, 0, 0); - push(); - rotateZ(frameCount * 0.02); - rotateX(frameCount * 0.02); - rotateY(frameCount * 0.02); - sphere(80, 80); - pop(); -} \ No newline at end of file diff --git a/examples/3d/light/index.html b/examples/3d/lights/ambientLight/index.html similarity index 96% rename from examples/3d/light/index.html rename to examples/3d/lights/ambientLight/index.html index 201710dc81..568dda23d0 100644 --- a/examples/3d/light/index.html +++ b/examples/3d/lights/ambientLight/index.html @@ -5,7 +5,7 @@ - + + + + + + + \ No newline at end of file diff --git a/examples/3d/material/simple/sketch.js b/examples/3d/material/simple/sketch.js new file mode 100644 index 0000000000..044647eba3 --- /dev/null +++ b/examples/3d/material/simple/sketch.js @@ -0,0 +1,31 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + + camera(width/4, 0, 600); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + + ambientLight(50); + pointLight(250, 250, 250, -70, 70, 0); + + basicMaterial(250); + sphere(); + + translate(250, 0, 0); + + normalMaterial(250); + sphere(); + + translate(250, 0, 0); + + ambientMaterial(250); + sphere(); + + translate(250, 0, 0); + + specularMaterial(250); + sphere(50, 64); +} \ No newline at end of file diff --git a/examples/3d/material/sketch.js b/examples/3d/material/sketch.js deleted file mode 100644 index 67543e05a1..0000000000 --- a/examples/3d/material/sketch.js +++ /dev/null @@ -1,38 +0,0 @@ -var theta = 0; - -function setup(){ - createCanvas(windowWidth, windowHeight, 'webgl'); -} - -function draw(){ - background(250, 250, 250, 255); - // directionalLight(153, 153, 153, .5, 0, -1); - // ambientLight(153, 102, 0); - camera(width/2, 0, 1000); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - - push(); - rotateX(theta * 0.1); - rotateZ(theta); - rotateY(theta * 0.1); - normalMaterial(); - box(60, 60, 60); - pop(); - translate(300, 0, 0); - push(); - rotateX(-theta * 0.1); - rotateZ(-theta); - rotateY(-theta * 0.1); - normalMaterial(); - sphere(60); - pop(); - translate(300, 0, 0); - push(); - rotateX(theta * 0.1); - rotateZ(theta); - rotateY(theta * 0.1); - basicMaterial(250, 0, 200); - plane(60, 60); - pop(); - theta += 0.03; -} \ No newline at end of file diff --git a/examples/3d/material/specular:ambient/index.html b/examples/3d/material/specular:ambient/index.html new file mode 100644 index 0000000000..568dda23d0 --- /dev/null +++ b/examples/3d/material/specular:ambient/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/3d/material/specular:ambient/sketch.js b/examples/3d/material/specular:ambient/sketch.js new file mode 100644 index 0000000000..e28ad98b70 --- /dev/null +++ b/examples/3d/material/specular:ambient/sketch.js @@ -0,0 +1,34 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + + camera(0, 0, 800); + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + + var locY = (mouseY / height - 0.5) * (-2); + var locX = (mouseX / width - 0.5) *2; + + ambientLight(100, 80, 80); + pointLight(200, 200, 200, locX, locY, 0); + + translate(-200, 0, 0); + push(); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + ambientMaterial(250); + torus(80, 20, 64, 64); + pop(); + + translate(400, 0, 0); + push(); + specularMaterial(250); + rotateZ(frameCount * 0.02); + rotateX(frameCount * 0.02); + rotateY(frameCount * 0.02); + torus(80, 20, 64, 64); + pop(); +} \ No newline at end of file diff --git a/examples/3d/texture/assets/cat.jpg b/examples/3d/material/texture/assets/cat.jpg similarity index 100% rename from examples/3d/texture/assets/cat.jpg rename to examples/3d/material/texture/assets/cat.jpg diff --git a/examples/3d/texture/index.html b/examples/3d/material/texture/index.html similarity index 97% rename from examples/3d/texture/index.html rename to examples/3d/material/texture/index.html index bf139d7081..f31eb8f88e 100644 --- a/examples/3d/texture/index.html +++ b/examples/3d/material/texture/index.html @@ -5,7 +5,7 @@ - + -

Move Mouse To Rotate The Geometries

+

Move mouse to spin geometries

diff --git a/examples/3d/geometry/sketch.js b/examples/3d/geometry/sketch.js index 06d5f87309..d72b44f14b 100644 --- a/examples/3d/geometry/sketch.js +++ b/examples/3d/geometry/sketch.js @@ -6,8 +6,7 @@ var theta = 0; function draw(){ background(255, 255, 255, 255); - camera(width/2, 0, 800); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + translate(-width/2, 0, 0); normalMaterial(); push(); rotateZ(theta * mouseX * 0.001); diff --git a/examples/3d/immediateMode/index.html b/examples/3d/immediateMode/index.html index 201710dc81..2272acda66 100644 --- a/examples/3d/immediateMode/index.html +++ b/examples/3d/immediateMode/index.html @@ -12,6 +12,7 @@ +

Drag mouse to toggle the world

diff --git a/examples/3d/immediateMode/sketch.js b/examples/3d/immediateMode/sketch.js index 07f2d9d769..215d7c5946 100644 --- a/examples/3d/immediateMode/sketch.js +++ b/examples/3d/immediateMode/sketch.js @@ -9,56 +9,34 @@ function draw(){ background('white'); colorMode(HSB); - camera(0, 0, 1000); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - + orbitControl(); //point - push(); - for(var i = 0; i < 10; i++){ - translate(10, 0, 0); - stroke(0, 200, 200); - point(0, 0, 0); - } - pop(); - - rotateY(frameCount * 0.01); + translate(0, -height/2, 0); - //lines - translate(100, 0, 0); + for(var i = 0; i < 500; i+=100){ push(); - rotateX(frameCount * 0.01); - for(var i = 0 ; i < 12; i++){ - var offset = i * PI / 6; - fill(i * 20, 100, 100); - line(0, 0, 0, 200 * sin(offset + frameCount*0.01), 200 * cos(offset + frameCount*0.01), 0); - } - pop(); + fill(i * 0.1, 100, 100); + point(0, 0, i); + //line + translate(0, 100, 0); + line(-100, 0, i, 100, 0, i); //triangles - translate(400, 0, 0); - push(); - for(var i = 0; i < 3; i++){ - fill(i * 30 + 200, 100, 100); - translate(100, 50, 0); + translate(0, 100, 0); triangle( - 100, 0, 0, - 60 * sin(frameCount * 0.1 + i), 0, 0, - 0, 100, 0); - } - pop(); - + 0, 0, i, + 60, 60, i, + -60, 60, i); + + translate(0, 200, 0); + quad( + -100, 0, i, + 100, 0, i, + -100, 100, i, + 100, 100, i + ); - //triangle strip - translate(200, 0, 0); - for(var i = 0; i < 30; i++){ - fill(i * 10, 120, 120); - translate(100, -50, 0); - beginShape('TRIANGLE_STRIP') - vertex(0, 0, (cos(frameCount * 0.1 + i) + 1) * 100); - vertex(0, 200, 100); - vertex(100, 100, 100); - vertex(100, 0, (sin(frameCount * 0.1 + i) + 1) * 100); - endShape(); + pop(); } } \ No newline at end of file diff --git a/examples/3d/interaction/index.html b/examples/3d/interaction/index.html index 49e0c98ad6..487af0d731 100644 --- a/examples/3d/interaction/index.html +++ b/examples/3d/interaction/index.html @@ -12,7 +12,7 @@ -

Press Mouse To Toggle The World

+

Press mouse to toggle the world

diff --git a/examples/3d/interaction/sketch.js b/examples/3d/interaction/sketch.js index a1cdfa4167..8bb18549ce 100644 --- a/examples/3d/interaction/sketch.js +++ b/examples/3d/interaction/sketch.js @@ -3,13 +3,13 @@ function setup(){ } function draw(){ - background(250, 250, 250, 255); + background(250); var radius = width; - camera(0, 0, 1600); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + orbitControl(); normalMaterial(); + translate(0, 0, -1000); for(var i = 0; i <= 20; i++){ for(var j = 0; j <= 20; j++){ push(); diff --git a/examples/3d/lights/ambientLight/sketch.js b/examples/3d/lights/ambientLight/sketch.js index 6684631f75..6833ec6bfa 100644 --- a/examples/3d/lights/ambientLight/sketch.js +++ b/examples/3d/lights/ambientLight/sketch.js @@ -5,9 +5,6 @@ function setup(){ function draw(){ background(0); - camera(0, 0, 400); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - ambientLight(150); ambientMaterial(250); diff --git a/examples/3d/lights/directionalLight/sketch.js b/examples/3d/lights/directionalLight/sketch.js index 60f84e4ba0..71f3cf6bbb 100644 --- a/examples/3d/lights/directionalLight/sketch.js +++ b/examples/3d/lights/directionalLight/sketch.js @@ -5,9 +5,6 @@ function setup(){ function draw(){ background(0); - camera(0, 0, 400); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - var dirY = (mouseY / height - 0.5) *2; var dirX = (mouseX / width - 0.5) *2; diff --git a/examples/3d/lights/pointLight/sketch.js b/examples/3d/lights/pointLight/sketch.js index 5399433ad8..b5bb999f08 100644 --- a/examples/3d/lights/pointLight/sketch.js +++ b/examples/3d/lights/pointLight/sketch.js @@ -5,14 +5,10 @@ function setup(){ function draw(){ background(0); - camera(0, 0, 400); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - var locY = (mouseY / height - 0.5) * (-2); var locX = (mouseX / width - 0.5) *2; ambientLight(50); - pointLight(250, 250, 250, -70, 70, 0); pointLight(250, 250, 250, locX, locY, 0); ambientMaterial(250); diff --git a/examples/3d/material/simple/sketch.js b/examples/3d/material/simple/sketch.js index 044647eba3..06edb00628 100644 --- a/examples/3d/material/simple/sketch.js +++ b/examples/3d/material/simple/sketch.js @@ -5,8 +5,7 @@ function setup(){ function draw(){ background(0); - camera(width/4, 0, 600); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + translate(-width/4, 0, 0); ambientLight(50); pointLight(250, 250, 250, -70, 70, 0); @@ -22,10 +21,10 @@ function draw(){ translate(250, 0, 0); ambientMaterial(250); - sphere(); + sphere(50, 128); translate(250, 0, 0); specularMaterial(250); - sphere(50, 64); + sphere(50, 128); } \ No newline at end of file diff --git a/examples/3d/material/specular:ambient/sketch.js b/examples/3d/material/specular:ambient/sketch.js index e28ad98b70..29ddb78942 100644 --- a/examples/3d/material/specular:ambient/sketch.js +++ b/examples/3d/material/specular:ambient/sketch.js @@ -5,9 +5,6 @@ function setup(){ function draw(){ background(0); - camera(0, 0, 800); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - var locY = (mouseY / height - 0.5) * (-2); var locX = (mouseX / width - 0.5) *2; diff --git a/examples/3d/mobile/sketch.js b/examples/3d/mobile/sketch.js index 4586a16b15..f2a084b009 100644 --- a/examples/3d/mobile/sketch.js +++ b/examples/3d/mobile/sketch.js @@ -3,11 +3,9 @@ function setup(){ } function draw(){ - background(250, 250, 250, 255); - camera(0, 0, 400); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + background(250); normalMaterial(); rotateX(accelerationX * 0.01); rotateY(accelerationY * 0.01); - box(60, 60, 60); + box(100, 100, 100); } \ No newline at end of file diff --git a/examples/3d/origin/center_origin/index.html b/examples/3d/origin/center_origin/index.html index 994d4570d9..56955b73e1 100644 --- a/examples/3d/origin/center_origin/index.html +++ b/examples/3d/origin/center_origin/index.html @@ -12,7 +12,7 @@ -

[0, 0, 0] is in the center of the screen by default

+

[0, 0, 0] is in the center of the screen by default

diff --git a/examples/3d/origin/center_origin/sketch.js b/examples/3d/origin/center_origin/sketch.js index f60ecceb15..7314d923db 100644 --- a/examples/3d/origin/center_origin/sketch.js +++ b/examples/3d/origin/center_origin/sketch.js @@ -6,9 +6,6 @@ function draw(){ background(255); - camera(0, 0, 800); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); - rotateY(frameCount * 0.01); var gap = 200; @@ -22,7 +19,7 @@ function draw(){ i * gap, j * gap, 0, i * gap + w, j * gap, 0, i * gap, j * gap + h, 0, - i * gap + w, j * gap + h/2 * (sin(frameCount * 0.1 + i + j) + 1), 0 + i * gap + w, j * gap + h, 0 ); } } diff --git a/examples/3d/origin/topleft_origin/index.html b/examples/3d/origin/topleft_origin/index.html index 050f62ed53..0a0d1daaad 100644 --- a/examples/3d/origin/topleft_origin/index.html +++ b/examples/3d/origin/topleft_origin/index.html @@ -12,7 +12,7 @@ -

[0, 0, 0] is in the top left corner now

+

[0, 0, 0] is in the top left corner now

diff --git a/examples/3d/origin/topleft_origin/sketch.js b/examples/3d/origin/topleft_origin/sketch.js index 87445c191e..2ec34b5cca 100644 --- a/examples/3d/origin/topleft_origin/sketch.js +++ b/examples/3d/origin/topleft_origin/sketch.js @@ -6,8 +6,7 @@ function draw(){ background(255); - camera(width/2, height/2, 800); - perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + translate(-width/2, -height/2, 0); rotateY(frameCount * 0.01); @@ -22,7 +21,7 @@ function draw(){ i * gap, j * gap, 0, i * gap + w, j * gap, 0, i * gap, j * gap + h, 0, - i * gap + w, j * gap + h/2 * (sin(frameCount * 0.1 + i + j) + 1), 0 + i * gap + w, j * gap + h, 0 ); } } diff --git a/examples/3d/performance/index.html b/examples/3d/performance/index.html index 9270293780..cbe4af5068 100644 --- a/examples/3d/performance/index.html +++ b/examples/3d/performance/index.html @@ -11,7 +11,7 @@ html, body {margin:0; padding:0;} -

1000 spheres, how's the speed?

+

1000 spheres, how's the speed?

+ + + + +

Press mouse to toggle the world

+ + + + \ No newline at end of file diff --git a/examples/3d/camera/ortho/sketch.js b/examples/3d/camera/ortho/sketch.js new file mode 100644 index 0000000000..c1af834333 --- /dev/null +++ b/examples/3d/camera/ortho/sketch.js @@ -0,0 +1,22 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + orbitControl(); + + ortho(-width/2, width/2, height/2, -height/2, 0.1, 100); + + translate(-width/4, 0, 0); + + normalMaterial(250); + for(var i = 0; i < 10; i++){ + for(var j = 0; j < 10; j++){ + push(); + translate(i*100, 0, -j*100); + sphere(); + pop(); + } + } +} \ No newline at end of file diff --git a/examples/3d/camera/perspective/index.html b/examples/3d/camera/perspective/index.html new file mode 100644 index 0000000000..80690fc6e2 --- /dev/null +++ b/examples/3d/camera/perspective/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + +

Press mouse to toggle the world

+ + + + \ No newline at end of file diff --git a/examples/3d/camera/perspective/sketch.js b/examples/3d/camera/perspective/sketch.js new file mode 100644 index 0000000000..cbe49de0cd --- /dev/null +++ b/examples/3d/camera/perspective/sketch.js @@ -0,0 +1,23 @@ +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + background(0); + orbitControl(); + + perspective(60 / 180 * Math.PI, width/height, 0.1, 100); + + translate(-width/2, 0, -100); + + normalMaterial(250); + for(var i = 0; i < 10; i++){ + for(var j = 0; j < 10; j++){ + push(); + translate(i*150, 0, -j*150); + sphere(); + pop(); + } + } + +} \ No newline at end of file diff --git a/examples/3d/immediateMode/sketch.js b/examples/3d/immediateMode/sketch.js index 215d7c5946..5897d44fb7 100644 --- a/examples/3d/immediateMode/sketch.js +++ b/examples/3d/immediateMode/sketch.js @@ -25,7 +25,7 @@ function draw(){ //triangles translate(0, 100, 0); triangle( - 0, 0, i, + 0, sin( i + frameCount * 0.1) * 10, i, 60, 60, i, -60, 60, i); diff --git a/src/3d/camera.js b/src/3d/camera.js index f4271c33d8..be9c32a956 100644 --- a/src/3d/camera.js +++ b/src/3d/camera.js @@ -12,6 +12,10 @@ p5.prototype.perspective = function(fovy,aspect,near,far) { }; p5.prototype.ortho = function(left,right,bottom,top,near,far) { + left /= this.width; + right /= this.width; + top /= this.height; + bottom /= this.height; this._graphics.uPMatrix.ortho(left,right,bottom,top,near,far); this._graphics._setCamera = true; }; From 3ce6fca785c6793ca5e03553b448030e3f26faf2 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 15:49:58 -0400 Subject: [PATCH 28/51] add _validateParameters to light and material --- src/3d/light.js | 31 ++++++++++++++++++++++++++++++- src/3d/material.js | 22 ++++++++++++++++++++-- src/3d/p5.Geometry3D.js | 6 ------ 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/3d/light.js b/src/3d/light.js index 2a11a3acc7..190e7e5e44 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -3,7 +3,16 @@ var p5 = require('../core/core'); p5.prototype.ambientLight = function(r, g, b, a){ - + this._validateParameters( + 'ambientLight', + arguments, + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader( 'lightVert', 'lightFrag'); @@ -35,6 +44,16 @@ p5.prototype.ambientLight = function(r, g, b, a){ }; p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { + this._validateParameters( + 'directionalLight', + arguments, + //rgbaxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //rgbxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //cxyz + ['Number', 'Number', 'Number', 'Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader( @@ -75,6 +94,16 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { }; p5.prototype.pointLight = function(r, g, b, a, x, y, z) { + this._validateParameters( + 'pointLight', + arguments, + //rgbaxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //rgbxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //cxyz + ['Number', 'Number', 'Number', 'Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader( diff --git a/src/3d/material.js b/src/3d/material.js index 931b29a2ec..0387effab2 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -103,7 +103,16 @@ p5.prototype.basicMaterial = function(r, g, b, a){ }; p5.prototype.ambientMaterial = function(r, g, b, a) { - + this._validateParameters( + 'ambientMaterial', + arguments, + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader('lightVert', 'lightFrag'); @@ -126,7 +135,16 @@ p5.prototype.ambientMaterial = function(r, g, b, a) { }; p5.prototype.specularMaterial = function(r, g, b, a) { - + this._validateParameters( + 'specularMaterial', + arguments, + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader('lightVert', 'lightFrag'); diff --git a/src/3d/p5.Geometry3D.js b/src/3d/p5.Geometry3D.js index 4c80f6a63d..800a9972d5 100755 --- a/src/3d/p5.Geometry3D.js +++ b/src/3d/p5.Geometry3D.js @@ -211,12 +211,6 @@ p5.Geometry3D.prototype.computeVertexNormals = function (){ }; -/** - * [generateUV description] - * @param {[type]} faces [description] - * @param {[type]} uvs [description] - * @return {[type]} [description] - */ p5.Geometry3D.prototype.generateUV = function(faces, uvs){ faces = flatten(faces); From 458b35664a2bfb0583ab77a66465d6b371f245a8 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 16:01:57 -0400 Subject: [PATCH 29/51] add validParameter for transform functions --- src/core/transform.js | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/core/transform.js b/src/core/transform.js index f4a045d7bf..1578d418ff 100644 --- a/src/core/transform.js +++ b/src/core/transform.js @@ -110,6 +110,13 @@ p5.prototype.rotate = function(r) { */ p5.prototype.rotateX = function(rad) { if (this._graphics.isP3D) { + this._validateParameters( + 'rotateX', + arguments, + [ + ['Number'] + ] + ); this._graphics.rotateX(rad); } else { throw 'not yet implemented.'; @@ -124,6 +131,13 @@ p5.prototype.rotateX = function(rad) { */ p5.prototype.rotateY = function(rad) { if (this._graphics.isP3D) { + this._validateParameters( + 'rotateY', + arguments, + [ + ['Number'] + ] + ); this._graphics.rotateY(rad); } else { throw 'not yet implemented.'; @@ -138,6 +152,13 @@ p5.prototype.rotateY = function(rad) { */ p5.prototype.rotateZ = function(rad) { if (this._graphics.isP3D) { + this._validateParameters( + 'rotateZ', + arguments, + [ + ['Number'] + ] + ); this._graphics.rotateZ(rad); } else { throw 'not supported in p2d. Please use webgl mode'; @@ -186,8 +207,24 @@ p5.prototype.rotateZ = function(rad) { */ p5.prototype.scale = function() { if (this._graphics.isP3D) { + this._validateParameters( + 'scale', + arguments, + [ + //p3d + ['Number', 'Number', 'Number'] + ] + ); this._graphics.scale(arguments[0], arguments[1], arguments[2]); } else { + this._validateParameters( + 'scale', + arguments, + [ + //p2d + ['Number', 'Number'] + ] + ); this._graphics.scale.apply(this._graphics, arguments); } return this; @@ -303,8 +340,24 @@ p5.prototype.shearY = function(angle) { */ p5.prototype.translate = function(x, y, z) { if (this._graphics.isP3D) { + this._validateParameters( + 'translate', + arguments, + [ + //p3d + ['Number', 'Number', 'Number'] + ] + ); this._graphics.translate(x, y, z); } else { + this._validateParameters( + 'translate', + arguments, + [ + //p2d + ['Number', 'Number'] + ] + ); this._graphics.translate(x, y); } return this; From 3dea2015b1d9f447c3b6aa1ab604a78bb398ed16 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 16:07:04 -0400 Subject: [PATCH 30/51] do valid parameters differently between 2d and 3d --- src/core/2d_primitives.js | 101 +++++++++++++++++++++++--------------- 1 file changed, 61 insertions(+), 40 deletions(-) diff --git a/src/core/2d_primitives.js b/src/core/2d_primitives.js index 2f43cd5ce3..617314ff9c 100644 --- a/src/core/2d_primitives.js +++ b/src/core/2d_primitives.js @@ -195,20 +195,18 @@ p5.prototype.ellipse = function(x, y, w, h) { // } // }; p5.prototype.line = function() { - this._validateParameters( - 'line', - arguments, - [ - ['Number', 'Number', 'Number', 'Number'], - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'] - ] - ); - if (!this._doStroke) { return this; } //check whether we should draw a 3d line or 2d if(this._graphics.isP3D){ + this._validateParameters( + 'line', + arguments, + [ + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'] + ] + ); this._graphics.line( arguments[0], arguments[1], @@ -217,6 +215,13 @@ p5.prototype.line = function() { arguments[4], arguments[5]); } else { + this._validateParameters( + 'line', + arguments, + [ + ['Number', 'Number', 'Number', 'Number'], + ] + ); this._graphics.line( arguments[0], arguments[1], @@ -246,26 +251,31 @@ p5.prototype.line = function() { * */ p5.prototype.point = function() { - this._validateParameters( - 'point', - arguments, - [ - ['Number', 'Number'], - ['Number', 'Number', 'Number'] - ] - ); - if (!this._doStroke) { return this; } //check whether we should draw a 3d line or 2d if(this._graphics.isP3D){ + this._validateParameters( + 'point', + arguments, + [ + ['Number', 'Number', 'Number'] + ] + ); this._graphics.point( arguments[0], arguments[1], arguments[2] ); } else { + this._validateParameters( + 'point', + arguments, + [ + ['Number', 'Number'] + ] + ); this._graphics.point( arguments[0], arguments[1] @@ -300,23 +310,20 @@ p5.prototype.point = function() { * */ p5.prototype.quad = function() { - this._validateParameters( - 'quad', - arguments, - [ - [ 'Number', 'Number', 'Number', 'Number', - 'Number', 'Number', 'Number', 'Number' ], - [ 'Number', 'Number', 'Number', - 'Number', 'Number', 'Number', - 'Number', 'Number', 'Number', - 'Number', 'Number', 'Number'] - ] - ); - if (!this._doStroke && !this._doFill) { return this; } if(this._graphics.isP3D){ + this._validateParameters( + 'quad', + arguments, + [ + [ 'Number', 'Number', 'Number', + 'Number', 'Number', 'Number', + 'Number', 'Number', 'Number', + 'Number', 'Number', 'Number'] + ] + ); this._graphics.quad( arguments[0], arguments[1], @@ -332,6 +339,14 @@ p5.prototype.quad = function() { arguments[11] ); } else { + this._validateParameters( + 'quad', + arguments, + [ + [ 'Number', 'Number', 'Number', 'Number', + 'Number', 'Number', 'Number', 'Number' ] + ] + ); this._graphics.quad( arguments[0], arguments[1], @@ -430,20 +445,19 @@ p5.prototype.rect = function (x, y, w, h, tl, tr, br, bl) { * */ p5.prototype.triangle = function() { - this._validateParameters( - 'triangle', - arguments, - [ - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', - 'Number', 'Number', 'Number'] - ] - ); if (!this._doStroke && !this._doFill) { return this; } if(this._graphics.isP3D){ + this._validateParameters( + 'triangle', + arguments, + [ + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', + 'Number', 'Number', 'Number'] + ] + ); this._graphics.triangle( arguments[0], arguments[1], @@ -456,6 +470,13 @@ p5.prototype.triangle = function() { arguments[8] ); } else { + this._validateParameters( + 'triangle', + arguments, + [ + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'] + ] + ); this._graphics.triangle( arguments[0], arguments[1], From df1fbddd423ad97dff30428dcda913b989144142 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 16:13:26 -0400 Subject: [PATCH 31/51] do valid parameters differently between 2d and 3d --- src/3d/camera.js | 21 +++++++++++++++++++++ src/core/vertex.js | 15 +++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/3d/camera.js b/src/3d/camera.js index be9c32a956..c151c6b1c2 100644 --- a/src/3d/camera.js +++ b/src/3d/camera.js @@ -3,15 +3,36 @@ var p5 = require('../core/core'); p5.prototype.camera = function(eyeX, eyeY, eyeZ){ + this._validateParameters( + 'camera', + arguments, + [ + ['Number', 'Number', 'Number'] + ] + ); this._graphics.translate(-eyeX, -eyeY, -eyeZ); }; p5.prototype.perspective = function(fovy,aspect,near,far) { + this._validateParameters( + 'perspective', + arguments, + [ + ['Number', 'Number', 'Number', 'Number'] + ] + ); this._graphics.uPMatrix.perspective(fovy,aspect,near,far); this._graphics._setCamera = true; }; p5.prototype.ortho = function(left,right,bottom,top,near,far) { + this._validateParameters( + 'ortho', + perspective, + [ + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'] + ] + ); left /= this.width; right /= this.width; top /= this.height; diff --git a/src/core/vertex.js b/src/core/vertex.js index 4dcc81f342..6146c93764 100644 --- a/src/core/vertex.js +++ b/src/core/vertex.js @@ -550,9 +550,24 @@ p5.prototype.quadraticVertex = function(cx, cy, x3, y3) { */ p5.prototype.vertex = function(x, y, moveTo) { if(this._graphics.isP3D){ + this._validateParameters( + 'vertex', + arguments, + [ + ['Number', 'Number', 'Number'] + ] + ); this._graphics.vertex (arguments[0], arguments[1], arguments[2]); }else{ + this._validateParameters( + 'vertex', + arguments, + [ + ['Number', 'Number'], + ['Number', 'Number', 'Number'] + ] + ); var vert = []; vert.isVert = true; vert[0] = x; From 40849b94f48f8eabd4eafcb70a07296e30162784 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 16:18:26 -0400 Subject: [PATCH 32/51] valid parameter for camera --- src/3d/camera.js | 2 +- src/3d/material.js | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/3d/camera.js b/src/3d/camera.js index c151c6b1c2..e4e1a49c4b 100644 --- a/src/3d/camera.js +++ b/src/3d/camera.js @@ -28,7 +28,7 @@ p5.prototype.perspective = function(fovy,aspect,near,far) { p5.prototype.ortho = function(left,right,bottom,top,near,far) { this._validateParameters( 'ortho', - perspective, + arguments, [ ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'] ] diff --git a/src/3d/material.js b/src/3d/material.js index 0387effab2..94f83a46c3 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -82,7 +82,16 @@ function _isPowerOf2 (value) { } p5.prototype.basicMaterial = function(r, g, b, a){ - + this._validateParameters( + 'basicMaterial', + arguments, + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader('normalVert', 'basicFrag'); From 5e514ece4b45b462a56802b5f8a7a471a29e7231 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 17:33:31 -0400 Subject: [PATCH 33/51] update inline documentation for 3d primitives --- src/3d/3d_primitives.js | 196 ++++++++++++++++++--------------------- src/3d/retainedMode3D.js | 11 +-- 2 files changed, 96 insertions(+), 111 deletions(-) diff --git a/src/3d/3d_primitives.js b/src/3d/3d_primitives.js index 26eead24f7..28d92be8fe 100755 --- a/src/3d/3d_primitives.js +++ b/src/3d/3d_primitives.js @@ -1,3 +1,11 @@ +/** + * @module Shape + * @submodule 3D Primitives + * @for p5 + * @requires core + * @requires p5.Geometry3D + */ + 'use strict'; var p5 = require('../core/core'); @@ -5,39 +13,34 @@ require('./p5.Geometry3D'); /** * draw a plane with given a width and height - * @param {Number} width the width of the plane - * @param {Number} height the height of the plane - * @param {Number} detailX(optional) number of vertices on horizontal surface - * @param {Number} detailY(optional) number of vertices on horizontal surface - * example - *
+ * @method plane + * @param {Number} width width of the plane + * @param {Number} height height of the plane + * @return {p5} + * @example + *
* + * //draw a spining plane with width 100 and height 100 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); + * background(255); + * rotateY(frameCount * 0.02); * plane(100, 100); - * pop(); - * theta += 0.05; + * } * *
*/ -p5.prototype.plane = function(width, height, detailX, detailY){ +p5.prototype.plane = function(width, height){ width = width || 50; height = height || 50; - detailX = detailX || 1; - detailY = detailY || 1; + //details for plane are highly optional + var detailX = typeof arguments[2] === Number ? arguments[2] : 1; + var detailY = typeof arguments[3] === Number ? arguments[3] : 1; var gId = 'plane|'+width+'|'+height+'|'+detailX+'|'+detailY; @@ -66,37 +69,33 @@ p5.prototype.plane = function(width, height, detailX, detailY){ /** * draw a sphere with given raduis - * @param {Number} radius radius of the sphere - * @param {Number} detailX(optional) number of vertices on horizontal surface - * @param {Number} detailY(optional) number of vertices on vertical surface - * example - *
+ * @method sphere + * @param {Number} radius radius of circle + * @param {Number} detail(optional) number of segments, + * the more segments the smoother geometry + * default is 24 + * @return {p5} + * @example + *
* + * // draw a sphere with radius 100 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); + * background(255); * sphere(100); - * pop(); - * theta += 0.05; + * } * *
*/ -p5.prototype.sphere = function(radius, detailX, detailY){ +p5.prototype.sphere = function(radius, detail){ radius = radius || 50; - detailX = detailX || 24; - detailY = detailY || 16; + var detailX = detail || 24; + var detailY = detail || 16; var gId = 'sphere|'+radius+'|'+detailX+'|'+detailY; @@ -127,39 +126,35 @@ p5.prototype.sphere = function(radius, detailX, detailY){ /** * draw a cylinder with given radius and height + * @method cylinder * @param {Number} radius radius of the surface * @param {Number} height height of the cylinder - * @param {Number} detailX(optional) number of vertices on horizontal surface - * @param {Number} detailY(optional) number of vertices on vertical surface - * example - *
+ * @param {Number} detail(optional) number of segments, + * the more segments the smoother geometry + * default is 24 + * @return {p5} + * @example + *
* + * //draw a spining sylinder with radius 100 and height 100 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } - * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); - * cylinder(100, 200); - * pop(); - * theta += 0.05; + * background(255); + * rotateX(frameCount * 0.02); + * cylinder(100, 100); + * } * *
*/ -p5.prototype.cylinder = function(radius, height, detailX, detailY){ +p5.prototype.cylinder = function(radius, height, detail){ radius = radius || 50; height = height || 50; - detailX = detailX || 24; - detailY = detailY || 16; + var detailX = detail || 24; + var detailY = detail || 16; var gId = 'cylinder|'+radius+'|'+height+'|'+detailX+'|'+detailY; @@ -222,39 +217,35 @@ p5.prototype.cylinder = function(radius, height, detailX, detailY){ /** * draw a cone with given radius and height + * @method cone * @param {Number} radius radius of the bottom surface * @param {Number} height height of the cone - * @param {Number} detailX(optional) number of vertices on horizontal surface - * @param {Number} detailY(optional) number of vertices on vertical surface - * example - *
+ * @param {Number} detail(optional) number of segments, + * the more segments the smoother geometry + * default is 24 + * @return {p5} + * @example + *
* + * //draw a spining cone with radius 100 and height 100 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } - * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); + * background(255); + * rotateX(frameCount * 0.02); * cone(100, 200); - * pop(); - * theta += 0.05; + * } * *
*/ -p5.prototype.cone = function(radius, height, detailX, detailY){ +p5.prototype.cone = function(radius, height, detail){ radius = radius || 50; height = height || 50; - detailX = detailX || 24; - detailY = detailY || 16; + var detailX = detail || 24; + var detailY = detail || 16; var gId = 'cone|'+radius+'|'+height+'|'+detailX+'|'+detailY; @@ -297,39 +288,37 @@ p5.prototype.cone = function(radius, height, detailX, detailY){ /** * draw a torus with given radius and tube radius + * @method torus * @param {Number} radius radius of the whole ring * @param {Number} tubeRadius radius of the tube - * @param {Number} detailX(optional) number of vertices on horizontal surface - * @param {Number} detailY(optional) number of vertices on vertical surface - * example - *
+ * @param {Number} detail(optional) number of segments, + * the more segments the smoother geometry + * default is 24 + * @return {p5} + * @example + *
* + * //draw a spining torus with radius 100 and tube radius 20 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); + * background(255); + * rotateX(frameCount * 0.02); + * rotateY(frameCount * 0.02); * torus(100, 20); - * pop(); - * theta += 0.05; + * } * *
*/ -p5.prototype.torus = function(radius, tubeRadius, detailX, detailY){ +p5.prototype.torus = function(radius, tubeRadius, detail){ radius = radius || 50; tubeRadius = tubeRadius || 10; - detailX = detailX || 24; - detailY = detailY || 16; + var detailX = detail || 24; + var detailY = detail || 16; var gId = 'torus|'+radius+'|'+tubeRadius+'|'+detailX+'|'+detailY; @@ -359,29 +348,26 @@ p5.prototype.torus = function(radius, tubeRadius, detailX, detailY){ }; /** - * draw a box with given widht, height and depth + * draw a box with given width, height and depth + * @method box * @param {Number} width width of the box * @param {Number} height height of the box * @param {Number} depth depth of the box - * example - *
+ * @return {p5} + * @example + *
* + * //draw a spining box with width, height and depth 100 * function setup(){ * createCanvas(windowWidth, windowHeight, 'webgl'); * } * - * var theta = 0; - * * function draw(){ - * background(255, 255, 255, 255); - * translate(0, 0, -100); - * push(); - * rotateZ(theta); - * rotateX(theta); - * rotateY(theta); + * background(255); + * rotateX(frameCount * 0.02); + * rotateY(frameCount * 0.02); * box(100, 100, 100); - * pop(); - * theta += 0.05; + * } * *
*/ @@ -391,7 +377,7 @@ p5.prototype.box = function(width, height, depth){ height = height || width; depth = depth || width; - //detail for box as optional + //details for box are highly optional var detailX = typeof arguments[3] === Number ? arguments[3] : 1; var detailY = typeof arguments[4] === Number ? arguments[4] : 1; diff --git a/src/3d/retainedMode3D.js b/src/3d/retainedMode3D.js index a3f96b83f4..84f1c72fb0 100644 --- a/src/3d/retainedMode3D.js +++ b/src/3d/retainedMode3D.js @@ -5,10 +5,9 @@ var p5 = require('../core/core'); /** - * [createBuffer description] - * @param {[type]} gId [description] - * @param {[type]} obj [description] - * @return {[type]} [description] + * createBuffer + * @param {String} gId [description] + * @param {String} obj [description] */ p5.Renderer3D.prototype.createBuffer = function(gId, obj) { var gl = this.GL; @@ -21,7 +20,7 @@ p5.Renderer3D.prototype.createBuffer = function(gId, obj) { }; /** - * [initBuffer description] + * initBuffer description * @param {String} gId key of the geometry object * @param {Object} obj an object containing geometry information */ @@ -59,7 +58,7 @@ p5.Renderer3D.prototype.initBuffer = function(gId, obj) { }; /** - * [drawBuffer description] + * drawBuffer * @param {String} gId key of the geometery object */ p5.Renderer3D.prototype.drawBuffer = function(gId) { From 13604e950c7a9f5cfea62f195994dbecbb3cf81a Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 19:11:47 -0400 Subject: [PATCH 34/51] fix bug in valid param and modify getShader function --- src/3d/immediateMode3D.js | 2 ++ src/3d/light.js | 42 ++++++++++++---------- src/3d/material.js | 42 ++++++++++++---------- src/3d/p5.Renderer3D.js | 76 ++++++++++++++++++--------------------- src/core/core.js | 6 +++- 5 files changed, 90 insertions(+), 78 deletions(-) diff --git a/src/3d/immediateMode3D.js b/src/3d/immediateMode3D.js index fd71b18fdc..581df892c2 100644 --- a/src/3d/immediateMode3D.js +++ b/src/3d/immediateMode3D.js @@ -157,9 +157,11 @@ p5.Renderer3D.prototype._getColorVertexShader = function(){ var gl = this.GL; var mId = 'vertexColorVert|vertexColorFrag'; var shaderProgram; + if(!this.materialInHash(mId)){ shaderProgram = this.initShaders('vertexColorVert', 'vertexColorFrag', true); + this._saveShaderInHash(mId, shaderProgram); shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, 'aVertexColor'); gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute); diff --git a/src/3d/light.js b/src/3d/light.js index 190e7e5e44..6efc274335 100644 --- a/src/3d/light.js +++ b/src/3d/light.js @@ -6,12 +6,14 @@ p5.prototype.ambientLight = function(r, g, b, a){ this._validateParameters( 'ambientLight', arguments, - //rgba - ['Number', 'Number', 'Number', 'Number'], - //rgb - ['Number', 'Number', 'Number'], - //c - ['Number'] + [ + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ] ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader( @@ -47,12 +49,14 @@ p5.prototype.directionalLight = function(r, g, b, a, x, y, z) { this._validateParameters( 'directionalLight', arguments, - //rgbaxyz - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], - //rgbxyz - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], - //cxyz - ['Number', 'Number', 'Number', 'Number'] + [ + //rgbaxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //rgbxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //cxyz + ['Number', 'Number', 'Number', 'Number'] + ] ); var gl = this._graphics.GL; @@ -97,12 +101,14 @@ p5.prototype.pointLight = function(r, g, b, a, x, y, z) { this._validateParameters( 'pointLight', arguments, - //rgbaxyz - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], - //rgbxyz - ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], - //cxyz - ['Number', 'Number', 'Number', 'Number'] + [ + //rgbaxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //rgbxyz + ['Number', 'Number', 'Number', 'Number', 'Number', 'Number'], + //cxyz + ['Number', 'Number', 'Number', 'Number'] + ] ); var gl = this._graphics.GL; diff --git a/src/3d/material.js b/src/3d/material.js index 94f83a46c3..36a7a3841e 100644 --- a/src/3d/material.js +++ b/src/3d/material.js @@ -85,12 +85,14 @@ p5.prototype.basicMaterial = function(r, g, b, a){ this._validateParameters( 'basicMaterial', arguments, - //rgba - ['Number', 'Number', 'Number', 'Number'], - //rgb - ['Number', 'Number', 'Number'], - //c - ['Number'] + [ + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ] ); var gl = this._graphics.GL; @@ -115,12 +117,14 @@ p5.prototype.ambientMaterial = function(r, g, b, a) { this._validateParameters( 'ambientMaterial', arguments, - //rgba - ['Number', 'Number', 'Number', 'Number'], - //rgb - ['Number', 'Number', 'Number'], - //c - ['Number'] + [ + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ] ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader('lightVert', 'lightFrag'); @@ -147,12 +151,14 @@ p5.prototype.specularMaterial = function(r, g, b, a) { this._validateParameters( 'specularMaterial', arguments, - //rgba - ['Number', 'Number', 'Number', 'Number'], - //rgb - ['Number', 'Number', 'Number'], - //c - ['Number'] + [ + //rgba + ['Number', 'Number', 'Number', 'Number'], + //rgb + ['Number', 'Number', 'Number'], + //c + ['Number'] + ] ); var gl = this._graphics.GL; var shaderProgram = this._graphics._getShader('lightVert', 'lightFrag'); diff --git a/src/3d/p5.Renderer3D.js b/src/3d/p5.Renderer3D.js index edd9e0f7fa..361fe8cb83 100755 --- a/src/3d/p5.Renderer3D.js +++ b/src/3d/p5.Renderer3D.js @@ -78,7 +78,7 @@ p5.Renderer3D.prototype._init = function(first_argument) { this.pointLightCount = 0; }; -p5.Renderer3D.prototype._reset = function() { +p5.Renderer3D.prototype._update = function() { this.resetMatrix(); this.resetStack(); this._setCamera = false; @@ -114,7 +114,6 @@ p5.Renderer3D.prototype.background = function() { var _a = (_col.rgba[3]) / 255; gl.clearColor(_r, _g, _b, _a); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - this._reset(); }; //@TODO implement this @@ -145,7 +144,7 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { // if our vertex shader failed compilation? if (!gl.getShaderParameter(_vertShader, gl.COMPILE_STATUS)) { alert('Yikes! An error occurred compiling the shaders:' + - gl._getShaderInfoLog(_vertShader)); + gl.getShaderInfoLog(_vertShader)); return null; } @@ -156,7 +155,7 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { // if our frag shader failed compilation? if (!gl.getShaderParameter(_fragShader, gl.COMPILE_STATUS)) { alert('Darn! An error occurred compiling the shaders:' + - gl._getShaderInfoLog(_fragShader)); + gl.getShaderInfoLog(_fragShader)); return null; } @@ -171,8 +170,6 @@ p5.Renderer3D.prototype.initShaders = function(vertId, fragId, immediateMode) { this._getLocation(shaderProgram, immediateMode); - this.mHash[vertId + '|' + fragId] = shaderProgram; - return shaderProgram; }; @@ -239,23 +236,6 @@ p5.Renderer3D.prototype.setMatrixUniforms = function(shaderKey) { false, this.uNMatrix.mat4); }; -p5.Renderer3D.prototype._getShader = function(vertId, fragId) { - var mId = vertId+ '|' + fragId; - - //if shader is not created yet - - //create it and put it into hashTable - if(!this.materialInHash(mId)){ - this.initShaders(vertId, fragId); - } - //also put its name into stack - if(mId !== this._getCurShaderId()){ - this._saveShader(mId); - } - //return shader - return this.mHash[mId]; -}; - ////////////////////////////////////////////// // STACK | for shader, vertex, color and mode ////////////////////////////////////////////// @@ -272,35 +252,49 @@ p5.Renderer3D.prototype.resetStack = function(){ this.verticeStack = []; }; -p5.Renderer3D.prototype._saveShader = function(mId){ +p5.Renderer3D.prototype._saveShaderInStack = function(mId) { shaderStack.push(mId); }; -p5.Renderer3D.prototype._getCurColor = function() { - //default color: gray - return this.colorStack[this.colorStack.length-1] || [0.5, 0.5, 0.5, 1.0]; +p5.Renderer3D.prototype._saveShaderInHash = function(mId, shaderProgram) { + this.mHash[mId] = shaderProgram; }; -p5.Renderer3D.prototype._getCurShaderId = function(){ - var mId = shaderStack[shaderStack.length - 1]; +p5.Renderer3D.prototype._getShader = function(vertId, fragId, immediateMode) { + var mId = vertId+ '|' + fragId; + //create it and put it into hashTable + if(!this.materialInHash(mId)){ + var shaderProgram = this.initShaders(vertId, fragId, immediateMode); + this._saveShaderInHash(mId, shaderProgram); + } + //also put its name into stack + if(mId !== this._getCurShaderId()){ + this._saveShaderInStack(mId); + } + return this.mHash[mId]; +}; +p5.Renderer3D.prototype._getCurShaderId = function(){ + var mId; //if there's nothing in the stack - if(mId === undefined){ - //create and return default shader: basicMaterial - mId = 'normalVert|basicFrag'; - var gl = this.GL; - var shaderProgram = - this.initShaders('normalVert', 'basicFrag'); - shaderProgram.uMaterialColor = gl.getUniformLocation( - shaderProgram, 'uMaterialColor' ); - var colors = this._getCurColor(); - gl.uniform4f( shaderProgram.uMaterialColor, - colors[0], colors[1], colors[2], colors[3]); - this._saveShader(mId); + if(shaderStack.length === 0){ + + //default shader: normalMaterial() + mId = 'normalVert|normalFrag'; + var shaderProgram = this.initShaders('normalVert', 'normalFrag'); + this._saveShaderInHash(mId, shaderProgram); + this._saveShaderInStack(mId); + }else{ + mId = shaderStack[shaderStack.length - 1]; } return mId; }; +p5.Renderer3D.prototype._getCurColor = function() { + //default color: gray + return this.colorStack[this.colorStack.length-1] || [0.5, 0.5, 0.5, 1.0]; +}; + ////////////////////////////////////////////// // HASH | for material and geometry ////////////////////////////////////////////// diff --git a/src/core/core.js b/src/core/core.js index 3c1b9af7ad..b2f66d6eee 100644 --- a/src/core/core.js +++ b/src/core/core.js @@ -294,7 +294,6 @@ var p5 = function(sketch, node, sync) { k.className = k.className.replace(reg, ''); } this._setupDone = true; - }.bind(this); this._draw = function () { @@ -322,6 +321,11 @@ var p5 = function(sketch, node, sync) { this._lastFrameTime = now; } + //mandatory update values for 3d + if(this._graphics.isP3D){ + this._graphics._update(); + } + // get notified the next time the browser gives us // an opportunity to draw. if (this._loop) { From 6e0d7b86ac0c9750acac907410a067d6a61c5bda Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 19:40:33 -0400 Subject: [PATCH 35/51] further simplify examples --- examples/3d/camera/ortho/sketch.js | 1 - examples/3d/camera/perspective/sketch.js | 1 - examples/3d/geometry/index.html | 2 +- examples/3d/geometry/sketch.js | 12 ++++---- examples/3d/immediateMode/sketch.js | 4 +-- examples/3d/mixedMode/index.html | 22 ++++++++++++++ examples/3d/mixedMode/sketch.js | 32 ++++++++++++++++++++ examples/3d/origin/center_origin/sketch.js | 18 ++++++----- examples/3d/origin/topleft_origin/index.html | 2 +- 9 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 examples/3d/mixedMode/index.html create mode 100644 examples/3d/mixedMode/sketch.js diff --git a/examples/3d/camera/ortho/sketch.js b/examples/3d/camera/ortho/sketch.js index c1af834333..82de6e8071 100644 --- a/examples/3d/camera/ortho/sketch.js +++ b/examples/3d/camera/ortho/sketch.js @@ -10,7 +10,6 @@ function draw(){ translate(-width/4, 0, 0); - normalMaterial(250); for(var i = 0; i < 10; i++){ for(var j = 0; j < 10; j++){ push(); diff --git a/examples/3d/camera/perspective/sketch.js b/examples/3d/camera/perspective/sketch.js index cbe49de0cd..9b8304848b 100644 --- a/examples/3d/camera/perspective/sketch.js +++ b/examples/3d/camera/perspective/sketch.js @@ -10,7 +10,6 @@ function draw(){ translate(-width/2, 0, -100); - normalMaterial(250); for(var i = 0; i < 10; i++){ for(var j = 0; j < 10; j++){ push(); diff --git a/examples/3d/geometry/index.html b/examples/3d/geometry/index.html index c3db7ebee8..7d8ee8e122 100644 --- a/examples/3d/geometry/index.html +++ b/examples/3d/geometry/index.html @@ -12,7 +12,7 @@ -

Move mouse to spin geometries

+

Move mouse to spin geometries

diff --git a/examples/3d/geometry/sketch.js b/examples/3d/geometry/sketch.js index d72b44f14b..caa3e46bc2 100644 --- a/examples/3d/geometry/sketch.js +++ b/examples/3d/geometry/sketch.js @@ -12,42 +12,42 @@ function draw(){ rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - plane(); + plane(50); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - box(); + box(50, 50, 50); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - cylinder(); + cylinder(50, 50); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - cone(); + cone(50, 50); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - torus(); + torus(50, 10); pop(); translate(250, 0, 0); push(); rotateZ(theta * mouseX * 0.001); rotateX(theta * mouseX * 0.001); rotateY(theta * mouseX * 0.001); - sphere(); + sphere(50); pop(); theta += 0.05; } \ No newline at end of file diff --git a/examples/3d/immediateMode/sketch.js b/examples/3d/immediateMode/sketch.js index 5897d44fb7..9f66cb8da7 100644 --- a/examples/3d/immediateMode/sketch.js +++ b/examples/3d/immediateMode/sketch.js @@ -10,13 +10,12 @@ function draw(){ colorMode(HSB); orbitControl(); - //point + translate(0, -height/2, 0); for(var i = 0; i < 500; i+=100){ push(); fill(i * 0.1, 100, 100); - point(0, 0, i); //line translate(0, 100, 0); @@ -29,6 +28,7 @@ function draw(){ 60, 60, i, -60, 60, i); + //quad translate(0, 200, 0); quad( -100, 0, i, diff --git a/examples/3d/mixedMode/index.html b/examples/3d/mixedMode/index.html new file mode 100644 index 0000000000..4fd1441686 --- /dev/null +++ b/examples/3d/mixedMode/index.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + +

Drag mouse to toggle the world

+

(3d primitives and 2d primitives can be used together)

+ + + + \ No newline at end of file diff --git a/examples/3d/mixedMode/sketch.js b/examples/3d/mixedMode/sketch.js new file mode 100644 index 0000000000..2d998c3a0b --- /dev/null +++ b/examples/3d/mixedMode/sketch.js @@ -0,0 +1,32 @@ +var theta = 0; + +function setup(){ + createCanvas(windowWidth, windowHeight, 'webgl'); +} + +function draw(){ + + background('white'); + colorMode(HSB); + + orbitControl(); + + for(var i = 0; i < 500; i+=100){ + + push(); + translate(0, 0, i); + basicMaterial(i * 0.1, 100, 100); + + push(); + translate(0, cos( i + frameCount * 0.1) * 10, 0); + box(20, 20, 20); + pop(); + fill(i * 0.1, 100, 100); + line( + -100, sin( i + frameCount * 0.1) * 10, 0, + 100, sin( i + frameCount * 0.1) * 10, 0 + ); + pop(); + + } +} \ No newline at end of file diff --git a/examples/3d/origin/center_origin/sketch.js b/examples/3d/origin/center_origin/sketch.js index 7314d923db..cdc1162332 100644 --- a/examples/3d/origin/center_origin/sketch.js +++ b/examples/3d/origin/center_origin/sketch.js @@ -14,13 +14,17 @@ function draw(){ for(var i = -2; i < 3; i++){ for(var j = -2; j < 3; j++){ - fill( (i+2) * 40, (j+2) * 40, 0); - quad( - i * gap, j * gap, 0, - i * gap + w, j * gap, 0, - i * gap, j * gap + h, 0, - i * gap + w, j * gap + h, 0 - ); + basicMaterial( (i+2) * 40, (j+2) * 40, 0); + push(); + translate(i*gap, j*gap,0); + plane(); + pop(); + // quad( + // i * gap, j * gap, 0, + // i * gap + w, j * gap, 0, + // i * gap, j * gap + h, 0, + // i * gap + w, j * gap + h, 0 + // ); } } diff --git a/examples/3d/origin/topleft_origin/index.html b/examples/3d/origin/topleft_origin/index.html index 0a0d1daaad..aeb19be5c1 100644 --- a/examples/3d/origin/topleft_origin/index.html +++ b/examples/3d/origin/topleft_origin/index.html @@ -12,7 +12,7 @@ -

[0, 0, 0] is in the top left corner now

+

[0, 0, 0] is in the top left corner now

From 8406eaff2dfe9672c2b97205ea86c7cbfa2e3a07 Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 19:45:42 -0400 Subject: [PATCH 36/51] recover core.js --- src/core/core.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/core/core.js b/src/core/core.js index b2f66d6eee..3c1b9af7ad 100644 --- a/src/core/core.js +++ b/src/core/core.js @@ -294,6 +294,7 @@ var p5 = function(sketch, node, sync) { k.className = k.className.replace(reg, ''); } this._setupDone = true; + }.bind(this); this._draw = function () { @@ -321,11 +322,6 @@ var p5 = function(sketch, node, sync) { this._lastFrameTime = now; } - //mandatory update values for 3d - if(this._graphics.isP3D){ - this._graphics._update(); - } - // get notified the next time the browser gives us // an opportunity to draw. if (this._loop) { From 4ab3b0f49253aa8ad41028e882b4d075c301597f Mon Sep 17 00:00:00 2001 From: Karen Date: Mon, 24 Aug 2015 19:47:14 -0400 Subject: [PATCH 37/51] 3d value update(matrix and stack) is now called by draw() function --- src/core/core.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/core.js b/src/core/core.js index 3c1b9af7ad..1f7e010627 100644 --- a/src/core/core.js +++ b/src/core/core.js @@ -322,6 +322,11 @@ var p5 = function(sketch, node, sync) { this._lastFrameTime = now; } + //mandatory update values(matrixs and stack) for 3d + if(this._graphics.isP3D){ + this._graphics._update(); + } + // get notified the next time the browser gives us // an opportunity to draw. if (this._loop) { From f89a81b0f732df92ed0e6f80a753a4846ab64414 Mon Sep 17 00:00:00 2001 From: indefinit Date: Tue, 25 Aug 2015 11:00:40 -0400 Subject: [PATCH 38/51] implements video as texture in webgl: WIP still buggy --- .../texture/assets/360video_256crop_v2.mp4 | Bin 0 -> 2869326 bytes examples/3d/material/texture/index.html | 1 + examples/3d/material/texture/sketch.js | 31 +++++++++--- src/3d/material.js | 44 ++++++++++++++++-- 4 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 examples/3d/material/texture/assets/360video_256crop_v2.mp4 diff --git a/examples/3d/material/texture/assets/360video_256crop_v2.mp4 b/examples/3d/material/texture/assets/360video_256crop_v2.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..e64ba0d13cdfaa5858083f724e2232975d22a25e GIT binary patch literal 2869326 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�l+c~;>$L(&ff0qg^Q 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ℜrtjo@O7rzrt6H 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%0DT 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