не могу разобраться с аргументами near/far в функции mat4.ortho

попросил нейронку сгенерить простой пример работы с mat4.ortho, он мне это сделал и утверждает чтобы треугольник отобразился нужно в аргументы передавать [-3, -1] если z = -2, вообщем любой как я понял диапазон лишбы входил z=-2. но весь прикол в том что треугольник не рисуется. а рисуется если задать например [0, 3] или [1.5, 3] или [2, 10]. хотя z=-2 и этот набор диапазонов явно не входит в -2. можете помочь разобраться))

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>WebGL Ortho Z Test</title>
  <style>canvas { background: #222; display: block; margin: auto; }</style>
</head>
<body>
<canvas id="glcanvas" width="500" height="500"></canvas>
<script type="module">
import { mat4 } from 'https://cdn.skypack.dev/gl-matrix';

const canvas = document.getElementById('glcanvas');
const gl = canvas.getContext('webgl');

const vert = `
attribute vec3 a_position;
uniform mat4 u_projection;
void main() {
  gl_Position = u_projection * vec4(a_position, 1.0);
}
`;

const frag = `
precision mediump float;
void main() {
  gl_FragColor = vec4(1.0, 0.4, 0.2, 1.0); // оранжевый
}
`;

// Compile shader
function createShader(type, source) {
  const s = gl.createShader(type);
  gl.shaderSource(s, source);
  gl.compileShader(s);
  if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) throw gl.getShaderInfoLog(s);
  return s;
}

// Create program
const program = gl.createProgram();
gl.attachShader(program, createShader(gl.VERTEX_SHADER, vert));
gl.attachShader(program, createShader(gl.FRAGMENT_SHADER, frag));
gl.linkProgram(program);
gl.useProgram(program);

// Define a triangle at Z = -2 (← важный момент!)
const triangle = new Float32Array([
   0.0,  0.5, -2.0,
  -0.5, -0.5, -2.0,
   0.5, -0.5, -2.0
]);

// Create buffer
const buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, triangle, gl.STATIC_DRAW);

// Setup attribute
const aPos = gl.getAttribLocation(program, 'a_position');
gl.enableVertexAttribArray(aPos);
gl.vertexAttribPointer(aPos, 3, gl.FLOAT, false, 0, 0);

// Projection matrix
const uProjection = gl.getUniformLocation(program, 'u_projection');
const projection = mat4.create();
mat4.ortho(projection, -1, 1, -1, 1, 1.5, 3); // ? попробуй поменять near/far!

gl.uniformMatrix4fv(uProjection, false, projection);

// Enable depth testing (в ortho не обязателен, но хорошая практика)
gl.enable(gl.DEPTH_TEST);

// Draw
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, 3);
</script>
</body>
</html>

Ответы (0 шт):