Skip to content

Instantly share code, notes, and snippets.

@mathdoodle
Last active August 29, 2015 14:22
Show Gist options
  • Save mathdoodle/a09c52460b14942cf935 to your computer and use it in GitHub Desktop.
Save mathdoodle/a09c52460b14942cf935 to your computer and use it in GitHub Desktop.
Projective View
{
"uuid": "cbfdcae5-fab1-4562-9461-7f31cb165af1",
"description": "Projective View",
"dependencies": {
"MathBox-bundle": "latest",
"domready": "latest"
}
}
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>MathBox - Empty Example.</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
// Projective viewport
.viewport({
type: 'projective',
range: [[-3, 3], [-2, 2], [-1, 1]],
scale: [1, 1, 1],
projective: [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, .86, .5],
[0, 0, .5, 1]]
})
.camera({
orbit: 6,
phi: -τ/6,
theta: 0.3,
})
.transition(300)
// Axes
.axis({
id: 'a',
axis: 0,
color: 0xa0a0a0,
ticks: 5,
lineWidth: 2,
size: .05,
labels: true,
offset: [0, -2, -1],
})
.axis({
id: 'b',
axis: 1,
color: 0xa0a0a0,
ticks: 5,
lineWidth: 2,
size: .05,
zero: false,
labels: false,
arrow: false,
offset: [-3, 0, -1],
})
.axis({
id: 'c',
axis: 2,
color: 0xa0a0a0,
ticks: 5,
lineWidth: 2,
size: .05,
zero: true,
labels: true,
offset: [-3, -2, 0],
})
.axis({
id: 'd',
axis: 1,
offset: [3, 0, -1],
ticks: 5,
lineWidth: 2,
color: 0xa0a0a0,
labels: true,
arrow: false,
})
.axis({
id: 'e',
axis: 1,
offset: [-3, 0, 1],
ticks: 5,
lineWidth: 2,
arrow: false,
color: 0xa0a0a0,
})
.axis({
id: 'f',
axis: 1,
offset: [3, 0, 1],
ticks: 5,
lineWidth: 2,
arrow: false,
color: 0xa0a0a0,
})
// Grid
.grid({
axis: [0, 2],
color: 0xc0c0c0,
lineWidth: 1,
offset: [0, -2, 0],
})
.grid({
axis: [0, 2],
ticks: [2, 1],
offset: [0, 2, 0],
color: 0xc0c0c0,
lineWidth: 1,
})
.grid({
axis: [0, 1],
color: 0xc0c0c0,
lineWidth: 1,
offset: [0, 0, -1],
})
.grid({
axis: [0, 1],
ticks: [2, 1],
offset: [0, 0, 1],
color: 0xc0c0c0,
lineWidth: 1,
})
.animate('camera', { orbit: 8, phi: τ*5/8 + .2 }, { delay: 500, duration: 5000 });
});
});
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