AAAAAAAAAAAAAAAAAAAAAAAAH

This commit is contained in:
Kbz-8
2024-02-10 19:38:56 +01:00
parent f9e9538159
commit 54c4ae77f2
8 changed files with 134 additions and 93 deletions

View File

@ -0,0 +1,44 @@
import { shaderInfos } from "../3D/shaders.js"
function renderCube(ctx, x, y, z, angle = 0, sx = 1, sy = 1, sz = 1)
{
const modelMatrix = mat4.create();
mat4.translate(
modelMatrix,
modelMatrix,
[x, y, z]
);
mat4.rotate(
modelMatrix,
modelMatrix,
angle,
[0, 1, 1],
);
mat4.scale(
modelMatrix,
modelMatrix,
[sx, sy, sz]
);
const normalMatrix = mat4.create();
mat4.invert(normalMatrix, modelMatrix);
mat4.transpose(normalMatrix, normalMatrix);
ctx.uniformMatrix4fv(
shaderInfos.uniformLocations.modelMatrix,
false,
modelMatrix
);
ctx.uniformMatrix4fv(
shaderInfos.uniformLocations.normalMatrix,
false,
normalMatrix,
);
ctx.drawElements(ctx.TRIANGLES, 36, ctx.UNSIGNED_SHORT, 0);
}
export { renderCube };

View File

@ -2,7 +2,8 @@ const vertex_shader_source = `
attribute vec4 aPos;
attribute vec3 aNormal;
uniform mat4 uModView;
uniform mat4 uMod;
uniform mat4 uView;
uniform mat4 uProj;
uniform mat4 uNormalMat;
@ -33,7 +34,7 @@ const vertex_shader_source = `
*/
void main()
{
gl_Position = uProj * uModView * aPos;
gl_Position = uView * uProj * uMod * aPos;
highp vec3 ambientLight = vec3(0.3, 0.3, 0.3);
highp vec3 directionalLightColor = vec3(1, 1, 1);
@ -63,17 +64,32 @@ function initShaderProgram(gl)
const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vertex_shader_source);
const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fragment_shader_source);
const shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
const shader_prog = gl.createProgram();
gl.attachShader(shader_prog, vertexShader);
gl.attachShader(shader_prog, fragmentShader);
gl.linkProgram(shader_prog);
if(!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS))
if(!gl.getProgramParameter(shader_prog, gl.LINK_STATUS))
{
alert(`Unable to initialize the shader program: ${gl.getProgramInfoLog(shaderProgram)}`);
return null;
}
return shaderProgram;
shaderInfos = {
program: shader_prog,
attribLocations: {
vertexPosition: gl.getAttribLocation(shader_prog, "aPos"),
vertexNormal: gl.getAttribLocation(shader_prog, "aNormal"),
},
uniformLocations: {
projectionMatrix: gl.getUniformLocation(shader_prog, "uProj"),
modelMatrix: gl.getUniformLocation(shader_prog, "uMod"),
viewMatrix: gl.getUniformLocation(shader_prog, "uView"),
normalMatrix: gl.getUniformLocation(shader_prog, "uNormalMat"),
},
};
return shader_prog;
}
function loadShader(gl, type, source)
@ -93,5 +109,5 @@ function loadShader(gl, type, source)
return shader;
}
export let shaderInfos = null;
export let shaderInfos;
export { initShaderProgram };