init hw0
parent
f449127608
commit
94660cd684
|
@ -30,6 +30,7 @@
|
||||||
<script src="src/shaders/InternalShader.js" defer></script>
|
<script src="src/shaders/InternalShader.js" defer></script>
|
||||||
<script src="src/shaders/Shader.js" defer></script>
|
<script src="src/shaders/Shader.js" defer></script>
|
||||||
<script src="src/materials/Material.js" defer></script>
|
<script src="src/materials/Material.js" defer></script>
|
||||||
|
<script src="src/materials/PhongMaterial.js" defer></script>
|
||||||
<script src="src/textures/Texture.js" defer></script>
|
<script src="src/textures/Texture.js" defer></script>
|
||||||
|
|
||||||
<script src="src/objects/Mesh.js" defer></script>
|
<script src="src/objects/Mesh.js" defer></script>
|
||||||
|
|
|
@ -37,6 +37,7 @@ function loadOBJ(renderer, path, name) {
|
||||||
|
|
||||||
let colorMap = null;
|
let colorMap = null;
|
||||||
if (mat.map != null) colorMap = new Texture(renderer.gl, mat.map.image);
|
if (mat.map != null) colorMap = new Texture(renderer.gl, mat.map.image);
|
||||||
|
/*
|
||||||
// MARK: You can change the myMaterial object to your own Material instance
|
// MARK: You can change the myMaterial object to your own Material instance
|
||||||
|
|
||||||
let textureSample = 0;
|
let textureSample = 0;
|
||||||
|
@ -54,7 +55,8 @@ function loadOBJ(renderer, path, name) {
|
||||||
'uKd': { type: '3fv', value: mat.color.toArray() }
|
'uKd': { type: '3fv', value: mat.color.toArray() }
|
||||||
},[],VertexShader, FragmentShader);
|
},[],VertexShader, FragmentShader);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
let myMaterial = new PhongMaterial(mat.color.toArray(), colorMap , mat.specular.toArray(),renderer.lights[0].entity.mat. intensity);
|
||||||
let meshRender = new MeshRender(renderer.gl, mesh, myMaterial);
|
let meshRender = new MeshRender(renderer.gl, mesh, myMaterial);
|
||||||
renderer.addMesh(meshRender);
|
renderer.addMesh(meshRender);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
class PhongMaterial extends Material
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Creates an instance of PhongMaterial.
|
||||||
|
* @param {vec3f} color The material color
|
||||||
|
* @param {Texture} colorMap The texture object of the material
|
||||||
|
* @param {vec3f} specular The material specular coefficient
|
||||||
|
* @param {float} intensity The light intensity
|
||||||
|
* @member of PhongMaterial
|
||||||
|
*/
|
||||||
|
|
||||||
|
constructor(color,colorMap,specular,intensity)
|
||||||
|
{
|
||||||
|
let textureSample = 0;
|
||||||
|
|
||||||
|
if( colorMap != null)
|
||||||
|
{
|
||||||
|
textureSample = 1;
|
||||||
|
super({
|
||||||
|
'uTextureSampler': {type:'li',value:textureSample},
|
||||||
|
'uSampler' : {type:'texture',value:colorMap},
|
||||||
|
'uKd' : {type:'3fv',value : color},
|
||||||
|
'uKs' : {type:'3fv',value: specular},
|
||||||
|
'uLightIntensity' : {type:'lf',value:intensity}
|
||||||
|
},[],PhongVertexShader,PhongFragmentShader);
|
||||||
|
}else{
|
||||||
|
console.log(color);
|
||||||
|
super({
|
||||||
|
'uTextureSampler': {type:'li',value:textureSample},
|
||||||
|
'uKd' : {type:'3fv',value : color},
|
||||||
|
'uKs' : {type:'3fv',value: specular},
|
||||||
|
'uLightIntensity' : {type:'lf',value:intensity}
|
||||||
|
},[],PhongVertexShader,PhongFragmentShader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -74,4 +74,80 @@ void main(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const PhongVertexShader = `
|
||||||
|
|
||||||
|
attribute vec3 aVertexPosition;
|
||||||
|
attribute vec3 aNormalPosition;
|
||||||
|
attribute vec2 aTextureCoord;
|
||||||
|
|
||||||
|
uniform mat4 uModelViewMatrix;
|
||||||
|
uniform mat4 uProjectionMatrix;
|
||||||
|
|
||||||
|
varying highp vec2 vTextureCoord;
|
||||||
|
varying highp vec3 vFragPos;
|
||||||
|
varying highp vec3 vNormal;
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
vFragPos = aVertexPosition;
|
||||||
|
|
||||||
|
vNormal = aNormalPosition;
|
||||||
|
|
||||||
|
gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(aVertexPosition,1.0);
|
||||||
|
|
||||||
|
vTextureCoord = aTextureCoord;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const PhongFragmentShader = `
|
||||||
|
|
||||||
|
#ifdef GL_ES
|
||||||
|
precision mediump float;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
uniform sampler2D uSampler;
|
||||||
|
//binn
|
||||||
|
|
||||||
|
uniform vec3 uKd;
|
||||||
|
uniform vec3 uKs;
|
||||||
|
uniform vec3 uLightPos;
|
||||||
|
uniform vec3 uCameraPos;
|
||||||
|
uniform float uLightIntensity;
|
||||||
|
uniform int uTextureSample;
|
||||||
|
|
||||||
|
varying highp vec2 vTextureCoord;
|
||||||
|
varying highp vec3 vFragPos;
|
||||||
|
varying highp vec3 vNormal;
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
vec3 color;
|
||||||
|
if (uTextureSample == 1 )
|
||||||
|
{
|
||||||
|
color = pow(texture2D(uSampler , vTextureCoord).rgb, vec3(2.2));
|
||||||
|
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
color = uKd;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 ambient = 0.05 *color;
|
||||||
|
|
||||||
|
vec3 lightDir = normalize(uLightPos - vFragPos);
|
||||||
|
vec3 normal = normalize(vNormal);
|
||||||
|
float diff = max(dot(lightDir,normal),0.0);
|
||||||
|
float light_atten_coff = uLightIntensity / length(uLightPos - vFragPos);
|
||||||
|
vec3 diffuse = diff * light_atten_coff * color;
|
||||||
|
|
||||||
|
vec3 viewDir = normalize(uCameraPos - vFragPos);
|
||||||
|
float spec = 0.0;
|
||||||
|
vec3 reflectDir = reflect(-lightDir,normal);
|
||||||
|
spec = pow(max(dot(viewDir,reflectDir),0.0),35.0);
|
||||||
|
vec3 specular = uKs * light_atten_coff * spec;
|
||||||
|
|
||||||
|
gl_FragColor = vec4(pow((ambient + diffuse + specular),vec3(1.0/2.2)),1.0);
|
||||||
|
}
|
||||||
|
|
||||||
`;
|
`;
|
Loading…
Reference in New Issue