Skip to content

Commit 1edde11

Browse files
committed
luzes
1 parent 5638a87 commit 1edde11

File tree

1 file changed

+102
-29
lines changed

1 file changed

+102
-29
lines changed

t07-iluminacao-ambiente-direcional/index.html

Lines changed: 102 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,43 @@
88
uniform mat4 uMMatrix;
99
uniform mat4 uVMatrix;
1010
uniform mat4 uPMatrix;
11+
uniform mat3 uNMatrix;
12+
13+
uniform vec3 uCorAmbiente;
14+
uniform vec3 uDirecaoLuz;
15+
uniform vec3 uCorDifusa;
16+
17+
uniform bool uUsarLuz;
1118

1219
varying vec2 vTextureCoord;
20+
varying vec3 vPotenciaLuz;
1321

1422
void main(void)
1523
{
1624
gl_Position = uPMatrix * uVMatrix * uMMatrix * vec4(aVertexPosition, 1.0);
1725
vTextureCoord = aTextureCoord;
26+
27+
if(!uUsarLuz){
28+
vPotenciaLuz = vec3(1.0,1.0,1.0);
29+
}else
30+
{
31+
vec3 normalTransformado=uNMatrix * aVertexNormal;
32+
float potenciaLuz = max(dot(normalTransformado, uDirecaoLuz),0.0);
33+
vPotenciaLuz = uCorAmbiente + uCorDifusa * potenciaLuz;
34+
}
1835
}
1936
</script>
2037
<script id="shader-fs" type="x-shader/x-fragment">
2138
precision mediump float;
2239
varying vec2 vTextureCoord;
40+
varying vec3 vPotenciaLuz;
2341

2442
uniform sampler2D uSampler;
2543

2644
void main(void)
2745
{
28-
gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
46+
vec4 corTextura = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
47+
gl_FragColor = vec4(corTextura.rgb * vPotenciaLuz, corTextura.a);
2948
}
3049
</script>
3150

@@ -41,6 +60,7 @@
4160
var cuboVertexPositionBuffer;
4261
var cuboVertexTextureCoordBuffer;
4362
var cuboVertexIndexBuffer;
63+
var cuboVertexNormalBuffer;
4464

4565
var mMatrix = mat4.create();
4666
var mMatrixPilha = [];
@@ -54,12 +74,15 @@
5474

5575
var z = -5.0;
5676

57-
var filtro = 0;
58-
5977
var ultimo = 0;
6078

61-
var caixaTexturas = Array();
79+
var caixaTextura;
6280
var teclasPressionadas = {};
81+
82+
var luzCheckBox;
83+
var vermelhoInput;
84+
var verdeInput;
85+
var azulInput;
6386

6487
// Iniciar o ambiente quando a página for carregada
6588
$(function()
@@ -94,9 +117,6 @@
94117

95118
function eventoTeclaPress(evento) {
96119
teclasPressionadas[evento.keyCode] = true;
97-
98-
if (String.fromCharCode(evento.keyCode) == "F")
99-
filtro = (filtro+1) % 3;
100120
return false;
101121
}
102122

@@ -135,38 +155,23 @@
135155
function iniciarTextura()
136156
{
137157
var imagemCaixa = new Image();
138-
for(var i = 0; i < 3; i++)
139-
{
140-
var textura = gl.createTexture();
141-
textura.image = imagemCaixa;
142-
caixaTexturas.push(textura);
143-
}
158+
var caixaTextura = gl.createTexture();
159+
caixaTextura.image = imagemCaixa;
144160
imagemCaixa.onload = function()
145161
{
146-
tratarTextura(caixaTexturas);
162+
tratarTextura(caixaTextura);
147163
}
148164
imagemCaixa.src = "caixa.gif";
149165
shaderProgram.samplerUniform = gl.getUniformLocation(shaderProgram, "uSampler");
150166
}
151-
function tratarTextura(texturas)
167+
function tratarTextura(textura)
152168
{
153169
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
154-
gl.bindTexture(gl.TEXTURE_2D, texturas[0]);
155-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texturas[0].image);
170+
gl.bindTexture(gl.TEXTURE_2D, textura);
171+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textura.image);
156172
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
157173
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
158174

159-
gl.bindTexture(gl.TEXTURE_2D, texturas[1]);
160-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texturas[1].image);
161-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
162-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
163-
164-
gl.bindTexture(gl.TEXTURE_2D, texturas[2]);
165-
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texturas[2].image);
166-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
167-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
168-
gl.generateMipmap(gl.TEXTURE_2D);
169-
170175
gl.bindTexture(gl.TEXTURE_2D, null);
171176
}
172177

@@ -210,9 +215,16 @@
210215
shaderProgram.vertexTextureCoordAttribute = gl.getAttribLocation(shaderProgram, "aTextureCoord");
211216
gl.enableVertexAttribArray(shaderProgram.vertexTextureCoordAttribute);
212217

218+
shaderProgram.vertexNormalAttribute = gl.getAttribLocation(shaderProgram, "aNormal");
219+
gl.enableVertexAttribArray(shaderProgram.vertexNormalAttribute);
220+
213221
shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
214222
shaderProgram.vMatrixUniform = gl.getUniformLocation(shaderProgram, "uVMatrix");
215223
shaderProgram.mMatrixUniform = gl.getUniformLocation(shaderProgram, "uMMatrix");
224+
shaderProgram.usarLuzUniform = gl.getUniformLocation(shaderProgram, "uUsarLuz");
225+
shaderProgram.corAmbienteUniform = gl.getUniformLocation(shaderProgram, "uCorAmbiente");
226+
shaderProgram.corDifusaUniform = gl.getUniformLocation(shaderProgram, "uCorDifusa");
227+
shaderProgram.direcaoLuzUniform = gl.getUniformLocation(shaderProgram, "uDirecaoLuz");
216228

217229

218230
}
@@ -361,12 +373,59 @@
361373
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
362374
cuboVertexIndexBuffer.itemSize = 1;
363375
cuboVertexIndexBuffer.numItems = 36;
376+
377+
cuboVertexNormalBuffer = gl.createBuffer();
378+
gl.bindBuffer(gl.ARRAY_BUFFER, cuboVertexNormalBuffer);
379+
var vertexNormals = [
380+
// Frente
381+
0.0, 0.0, 1.0,
382+
0.0, 0.0, 1.0,
383+
0.0, 0.0, 1.0,
384+
0.0, 0.0, 1.0,
385+
386+
// Trás
387+
0.0, 0.0, -1.0,
388+
0.0, 0.0, -1.0,
389+
0.0, 0.0, -1.0,
390+
0.0, 0.0, -1.0,
391+
392+
// Topo
393+
0.0, 1.0, 0.0,
394+
0.0, 1.0, 0.0,
395+
0.0, 1.0, 0.0,
396+
0.0, 1.0, 0.0,
397+
398+
// Base
399+
0.0, -1.0, 0.0,
400+
0.0, -1.0, 0.0,
401+
0.0, -1.0, 0.0,
402+
0.0, -1.0, 0.0,
403+
404+
// Direita
405+
1.0, 0.0, 0.0,
406+
1.0, 0.0, 0.0,
407+
1.0, 0.0, 0.0,
408+
1.0, 0.0, 0.0,
409+
410+
// Esquerda
411+
-1.0, 0.0, 0.0,
412+
-1.0, 0.0, 0.0,
413+
-1.0, 0.0, 0.0,
414+
-1.0, 0.0, 0.0,
415+
];
416+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexNormals),gl.STATIC_DRAW);
417+
cubeVertexNormalBuffer.itemSize = 3;
418+
cubeVertexNormalBuffer.numItems = 24;
364419
}
365420

366421
function iniciarAmbiente()
367422
{
368423
gl.clearColor(0.0, 0.0, 0.0, 1.0);
369424
gl.enable(gl.DEPTH_TEST);
425+
luzCheckBox = document.getElementById("luz");
426+
vermelhoInput = document.getElementById("vermelho");
427+
verdeInput = document.getElementById("verde");
428+
azulInput = document.getElementById("azul");
370429
}
371430

372431
function desenharCena()
@@ -386,11 +445,21 @@
386445
gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, cuboVertexPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
387446
gl.bindBuffer(gl.ARRAY_BUFFER, cuboVertexTextureCoordBuffer);
388447
gl.vertexAttribPointer(shaderProgram.vertexTextureCoordAttribute, cuboVertexTextureCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);
448+
gl.bindBuffer(gl.ARRAY_BUFFER, cuboVertexNormalBuffer);
449+
gl.vertexAttribPointer(shaderProgram.vertexNormalAttribute, cuboVertexNormalBuffer.itemSize, gl.FLOAT, false, 0, 0);
389450

390451
gl.activeTexture(gl.TEXTURE0);
391-
gl.bindTexture(gl.TEXTURE_2D, caixaTexturas[filtro]);
452+
gl.bindTexture(gl.TEXTURE_2D, caixaTextura);
392453
gl.uniform1i(shaderProgram.samplerUniform, 0);
393454

455+
var luz = luzCheckBox.checked;
456+
gl.uniform1i(shaderProgram.usarLuzUniform, luz);
457+
if(luz)
458+
{
459+
gl.uniform3f(shaderProgram.corAmbienteUniform,
460+
parseFloat(document.getElement));
461+
}
462+
394463
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, cuboVertexIndexBuffer);
395464
setMatrixUniforms();
396465
gl.drawElements(gl.TRIANGLES, cuboVertexIndexBuffer.numItems, gl.UNSIGNED_SHORT,0);
@@ -452,5 +521,9 @@
452521

453522
<body>
454523
<canvas id="licao01-canvas" width="500" height="500"></canvas>
524+
<form>
525+
<input type="checkbox" name="luz" value="luz" checked><label for="luz">Luz</label><br>
526+
527+
</form>
455528
</body>
456529
</html>

0 commit comments

Comments
 (0)