3d_snake_test / index.html
broadfield-dev's picture
Update index.html
919d739 verified
raw
history blame
3.9 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D Sphere Snake Game</title>
<style>
body { margin: 0; overflow: hidden; }
canvas { display: block; }
</style>
</head>
<body>
<canvas id="gameCanvas"></canvas>
<script>
// Setup the WebGL context
const canvas = document.getElementById('gameCanvas');
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
if (!gl) {
alert('WebGL not supported in this browser');
throw new Error('WebGL not supported');
}
// Vertex shader
const vsSource = `
attribute vec4 aVertexPosition;
uniform mat4 uModelViewMatrix;
uniform mat4 uProjectionMatrix;
void main() {
gl_Position = uProjectionMatrix * uModelViewMatrix * aVertexPosition;
}
`;
// Fragment shader
const fsSource = `
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // Red color for snake
}
`;
// Compile shader
function loadShader(gl, type, source) {
const shader = gl.createShader(type);
gl.shaderSource(shader, source);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
alert('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader));
gl.deleteShader(shader);
return null;
}
return shader;
}
// Create shader program
const shaderProgram = initShaderProgram(gl, vsSource, fsSource);
// Initialize shader program with given vertex and fragment shaders
function initShaderProgram(gl, vsSource, fsSource) {
const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource);
const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource);
const shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
alert('Unable to initialize the shader program: ' + gl.getProgramInfoLog(shaderProgram));
return null;
}
return shaderProgram;
}
// Setup buffers, matrices, etc.
let snakeSegments = [];
let foodPosition = [0, 0, 0];
let angle = 0;
function initBuffers() {
// Set up initial snake and food
// Here we would define positions on a 3D sphere for snake and food
}
function drawScene() {
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// Move the sphere (rotation for interaction)
angle += 0.1;
const modelViewMatrix = mat4.create();
mat4.rotate(modelViewMatrix, modelViewMatrix, angle * Math.PI / 180, [0, 1, 0]);
// Draw snake, food, etc. on the sphere
}
// Game logic
function update() {
// Move snake, check for food collision, update food if eaten, etc.
}
// Animation loop
function render() {
update();
drawScene();
requestAnimationFrame(render);
}
// Start rendering loop
render();
// Handle user interaction for rotating the sphere
document.addEventListener('mousemove', onMouseMove);
function onMouseMove(e) {
// Implement rotation of the sphere based on mouse movement
}
</script>
</body>
</html>