Skip to content

Instantly share code, notes, and snippets.

@mathdoodle
Last active August 29, 2015 14:22
Show Gist options
  • Save mathdoodle/eb6917b64c59bc2633a4 to your computer and use it in GitHub Desktop.
Save mathdoodle/eb6917b64c59bc2633a4 to your computer and use it in GitHub Desktop.
Surface Warp
{
"uuid": "4dd474cd-ae3e-4e80-9c40-a8050e9f8b7c",
"description": "Surface Warp",
"dependencies": {
"MathBox-bundle": "latest",
"domready": "latest"
}
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Surface Warp</title>
<!-- STYLE-MARKER -->
<!-- SCRIPTS-MARKER -->
</head>
<body>
<div id="info"></div>
<script type='text/javascript'>
try {
<!-- CODE-MARKER -->
}
catch(e) {
console.log(e);
}
</script>
</body>
</html>
/**
* Bootstrap
*/
DomReady.ready(function() {
ThreeBox.preload([
'../shaders/snippets.glsl.html',
], function () {
// MathBox boilerplate
var mathbox = window['mathbox'] = mathBox({
cameraControls: true,
cursor: true,
controlClass: ThreeBox.OrbitControls,
elementResize: true,
fullscreen: true,
screenshot: true,
stats: false,
scale: 1,
}).start();
// Viewport camera/setup
mathbox
// Polar viewport
.viewport({
type: 'polar',
range: [[-π, π], [-3, 6], [-1, 1]],
scale: [1, 1, 1],
polar: 0,
})
.camera({
orbit: 4,
phi: τ/4-.8,
theta: 1.1,
})
.transition(300)
// Surface function
.surface({
shaded: true,
domain: [[-π, π], [-1, 1]],
n: [48, 32],
expression: surfaceFunc,
})
// Animate viewport between polar and cartesian
mathbox.world().loop().hookPreRender(function () {
var t = Date.now() * .0003;
mathbox.set('viewport', { polar: Math.sin(t) * .5 + .5 });
});
});
});
/**
* Custom helpers
*/
// Arbitrary function
function surfaceFunc(x, y) {
return [x, 4 + -1 + Math.cos(x*2) + Math.cos(y*5), y];
}
html, body { height: 100%; }
body { margin: 0; padding: 0 }
canvas { display: block }
#info {
position: absolute;
left: 50%;
bottom: 50px;
z-index: 20;
width: 300px;
margin-left: -150px;
padding: 25px;
background: rgba(0, 0, 0, .5);
color: #fff;
font-family: "Lucida Grande", sans-serif;
font-size: 16px;
text-align: center;
border-radius: 3px;
text-shadow: 0px 1px 0px rgba(0, 0, 0, .4);
opacity: 0;
}
#info.transition {
-webkit-transition: opacity 300ms ease-in-out;
-moz-transition: opacity 300ms ease-in-out;
transition: opacity 300ms ease-in-out;
}
#info kbd {
background: #aaa;
box-shadow: 0px 1px 1px rgba(0, 0, 0, .3);
border-radius: 3px;
padding: 3px;
margin: 3px;
font-family: inherit;
}
.mathbox-label {
font-family: 'klavika-web', sans-serif;
font-weight: normal;
font-style: normal;
text-shadow:
3px 0px 1px rgb(255, 255, 255),
-3px 0px 1px rgb(255, 255, 255),
0px -3px 1px rgb(255, 255, 255),
0px 3px 1px rgb(255, 255, 255),
2px 2px 1px rgb(255, 255, 255),
-2px 2px 1px rgb(255, 255, 255),
2px -2px 1px rgb(255, 255, 255),
-2px -2px 1px rgb(255, 255, 255),
3px 2px 1px rgb(255, 255, 255),
-3px 2px 1px rgb(255, 255, 255),
3px -2px 1px rgb(255, 255, 255),
-3px -2px 1px rgb(255, 255, 255),
1px 3px 1px rgb(255, 255, 255),
-1px 3px 1px rgb(255, 255, 255),
1px -3px 1px rgb(255, 255, 255),
-1px -3px 1px rgb(255, 255, 255),
-1px -1px 1px rgb(255, 255, 255),
-1px 1px 1px rgb(255, 255, 255),
1px -1px 1px rgb(255, 255, 255),
1px 1px 1px rgb(255, 255, 255);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment