webgl/views/index.ejs

144 lines
8.6 KiB
Plaintext

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta
name="Description"
content="Simple WebGL app to demonstrate my skills">
<title>WebGL</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="static/css/style.css">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<div id='screen-warning'>
</div>
<div id="root">
<div class='mx-1 px-0' id='ui' style='display: inline-block; width: 620px'>
<div class='ui-block lead' style='width: 620px'>
To control the camera orientation with mouse, click in the canvas, to exit, click again.<br>
To control the camera position, use W/S for Z axis, A/D for X axis, and Space/Shift for Y axis.
</div>
<div class='ui-block my-2'>
<div class='text-left' style='display: inline-block; width:30%;'>Change shader: </div>
<div style='display: inline-block; width: 65%'>
<button class="my-1 btn btn-shader" id='s_blackandwhite'>Black & White</button>
<button class="my-1 btn btn-shader" id='s_color'>Colored</button>
<button class="my-1 btn btn-shader" id='s_grey'>No texture</button>
<button class="my-1 btn btn-shader" id='s_texture'>Texture</button>
<button class="my-1 btn btn-shader" id='s_sobel'>Sobel Edge Detection</button>
<button class="my-1 btn btn-shader" id='s_fractal'>Fractal</button>
</div>
</div>
<div class='ui-block my-2'>
<div style='display: inline-block; width:30%;'>Change object: </div>
<div style='display: inline-block; width: 65%'>
<button class="my-1 btn btn-object" style='min-width: 8%' id='o_sphere'>Sphere</button>
<button class="my-1 btn btn-object" style='min-width: 8%' id='o_teapot'>Teapot</button>
<button class="my-1 btn btn-object" style='min-width: 8%' id='o_fox'>Fox</button>
<button class="my-1 btn btn-object" style='min-width: 8%' id='o_mecha'>Mecha</button>
<button class="my-1 btn btn-object" style='min-width: 8%' id='o_racer'>Racer</button>
</div>
</div>
<div class='ui-block my-2'>
<div style='display: inline-block; width:30%;'>Change texture: </div>
<div style='display: inline-block; width: 65%'>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_wall'>Wall</button>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_ice'>Ice</button>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_noise'>Noise</button>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_fox'>Fox</button>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_racer'>Racer</button>
<button class="my-1 btn btn-texture" style='min-width: 8%' id='t_racer_wireframe'>Racer Wireframe</button>
</div>
</div>
<div class='ui-block'>
<div class='distance-block'>
<div style='display: inline-block; width:30%;'>Distance Fine: </div>
<input class='custom-range' style='width:65%' type="range" min="1" max="50" value="25" class="slider" id="distancefine">
<br>
<div style='display: inline-block; width:30%;'>Distance Coarse: </div>
<input class='custom-range' style='width:65%' type="range" min="1" max="1000" value="40" class="slider" id="distance">
</div>
</div>
<div class='ui-block'>
<div style='display: inline-block; width:30%;'>Circle Size: </div>
<input class='custom-range' style='width:65%' type="range" min="0" max="30" value="2" step='0.001' class="slider" id="circlesize">
</div>
<div class='ui-block'>
<div style='display: inline-block; width:30%;'>Rotation Speed: </div>
<input class='custom-range' style='width:65%' type="range" min="0" max="5" value="1" step='0.0001' class="slider" id="rotspeed">
</div>
<div class='ui-block'>
<div style='display: inline-block; width:30%;'>FOV: </div>
<input class='custom-range' style='width:65%' type="range" min="15" max="150" value="45" class="slider" id="fov">
</div>
<div class='ui-block'>
<div style='display: inline-block; width:30%;'>Instances Number: </div>
<input class='custom-range' style='width:65%' type="range" min="1" max="180" value="9" step='1' class="slider" id="instance">
</div>
<div class='ui-block'>
<form id="instanceoptions">
<div class='custom-control custom-radio'>
<input class="custom-control-input" type="radio" id="normal" name="instance" value="normal" checked>
<label class="custom-control-label" for="normal">Use instance slider</label>
</div>
<div class='custom-control custom-radio'>
<input class="custom-control-input" type="radio" id="one" name="instance" value="one">
<label class="custom-control-label" for="one">Lock to one working instance</label>
</div>
<div class='custom-control custom-radio'>
<input class="custom-control-input" type="radio" id="zero" name="instance" value="zero">
<label class="custom-control-label" for="zero">Do not show working instance</label>
</div>
</form>
</div>
<div class='ui-block my-2'>
<div style='display: inline-block; width:30%;'>Rotate: </div>
<div class='m-0 p-0' style='display: inline-block; width:2%;'>X: </div>
<input class='custom-range m-0 p-0' style='width:19%' type="range" min="0" max="6.2830" value="0" step='0.0001' class="slider" id="rotx">
<div class='m-0 p-0' style='display: inline-block; width:2%;'>Y: </div>
<input class='custom-range m-0 p-0' style='width:19%' type="range" min="0" max="6.2830" value="0" step='0.0001' class="slider" id="roty">
<div class='m-0 p-0' style='display: inline-block; width:2%;'>Z: </div>
<input class='custom-range m-0 p-0' style='width:19%' type="range" min="0" max="6.2830" value="0" step='0.0001' class="slider" id="rotz">
</div>
<div class='ui-block my-2'>
<div style='display: inline-block; width:30%;'>Scale: </div>
<div style='display: inline-block; width:2%;'>X: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="1" min="0" step='0.00001' id="scalex">
<div style='display: inline-block; width:2%;'>Y: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="1" min="0" step='0.00001' id="scaley">
<div style='display: inline-block; width:2%;'>Z: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="1" min="0" step='0.00001' id="scalez">
</div>
<div class='ui-block my-2'>
<div style='display: inline-block; width:30%;'>Translate: </div>
<div style='display: inline-block; width:2%;'>X: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="0" step='0.00001' id="posx">
<div style='display: inline-block; width:2%;'>Y: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="0" step='0.00001' id="posy">
<div style='display: inline-block; width:2%;'>Z: </div>
<input class='form-control m-0 p-0' style='display: inline-block; width:19%' type="number" value="0" step='0.00001' id="posz">
</div>
<div class='ui-block text-center my-2'>
<button class="btn btn-lg btn-success text-center" id='pushtoscene'>Push To Scene</button>
</div>
<div class='ui-block'>
<a href='https://git.gaetanbrochard.dev/gbrochar/webgl'>This project's git</a>
<br>
<a href='https://git.gaetanbrochard.dev/gbrochar'>My git</a>
<p>If you're on mobile, you need to set the shader to texture or sobel to change object, then you can change the shader</p>
</div>
</div>
<canvas class='mx-0 px-0' id='glCanvas' style='display: inline-block; ' width='640' height='640'></canvas>
<div class='mx-0 px-0' id='scene-block' style='vertical-align: top; display: inline-block; width: 620px'>
</div>
</div>
<script src="js/bundle.js"></script>
</body>
</html>