initial commit - basic projection
This commit is contained in:
commit
4fddbd44c5
41
saku/index.css
Normal file
41
saku/index.css
Normal file
@ -0,0 +1,41 @@
|
||||
@import url('https://fonts.googleapis.com/css?family=Raleway');
|
||||
@import url('https://fonts.googleapis.com/css?family=Josefin+Sans');
|
||||
|
||||
html {
|
||||
font-family: 'Raleway';
|
||||
/*background-color: #15171B;*/
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#hexagon {
|
||||
height: 300;
|
||||
}
|
||||
|
||||
#hexagon polygon {
|
||||
cursor: pointer;
|
||||
fill: rgba(0,0,0,0);
|
||||
stroke-width: 2px;
|
||||
stroke: #D0790E;
|
||||
|
||||
transition: fill 0.2s ease;
|
||||
}
|
||||
|
||||
#hexagon text {
|
||||
fill: #D0790E;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.hex {
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
#hexagon polygon:hover {
|
||||
fill: rgba(255,255,255,0.05);
|
||||
}
|
||||
|
||||
#glCanvas {
|
||||
border: 2px solid black;
|
||||
}
|
||||
23
saku/index.html
Normal file
23
saku/index.html
Normal file
@ -0,0 +1,23 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<title>Foxnet</title>
|
||||
<link rel="icon" href="../assets/favicon.ico">
|
||||
<link rel="stylesheet" href="./index.css">
|
||||
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
</head>
|
||||
<!-- <body>
|
||||
<svg id="hexagon">
|
||||
<polygon class="hex" points="300,150 225,280 75,280 0,150 75,20 225,20"></polygon>
|
||||
<text x="50%" y="75%"df text-anchor="middle" font-family="Josefin Sans" font-size="35" font-weight="100">Homepage</text>
|
||||
</svg>
|
||||
|
||||
</body> -->
|
||||
<body>
|
||||
<canvas id="glCanvas" width="100%" height="100%">
|
||||
</canvas>
|
||||
</body>
|
||||
<script src="./index.js"></script>
|
||||
</html>
|
||||
74
saku/index.js
Normal file
74
saku/index.js
Normal file
@ -0,0 +1,74 @@
|
||||
var canvas = document.getElementById("glCanvas");
|
||||
ctx = canvas.getContext("2d");
|
||||
|
||||
objects = {};
|
||||
|
||||
camera = [[(canvas.width/2)-50,canvas.height/2,0],[0,90]]; // [[Position],[Rotation]];
|
||||
|
||||
triangle = [
|
||||
[0,25,1],
|
||||
[25,50,1],
|
||||
[25,0,1]
|
||||
]
|
||||
|
||||
function drawShape(shape) {
|
||||
ctx.beginPath();
|
||||
var newShape = [];
|
||||
var cP = camera[0];
|
||||
var cR = camera[1];
|
||||
// Camera direction vector
|
||||
var cV = [
|
||||
Rnd(Math.cos(toRad(cR[1])),3),
|
||||
Rnd(Math.sin(toRad(cR[0])),3),
|
||||
Rnd(Math.sin(toRad(cR[1])),3)
|
||||
];
|
||||
console.log(cV);
|
||||
// Perspective mapping
|
||||
for(var i = 0; i < shape.length; i++) {
|
||||
var x = shape[i][0];
|
||||
var y = shape[i][1];
|
||||
var z = shape[i][2];
|
||||
var pV = [x-cV[0],y-cV[1],z-cV[1]];
|
||||
console.log(pV);
|
||||
var theta = Rnd(Math.acos((dot(cV,pV)/(mag(cV)*mag(pV)))),5);
|
||||
console.log(theta);
|
||||
|
||||
var dZ = Math.abs(shape[i][2] - c[2]);
|
||||
newShape.push([c[0]+(x-c[0])/dZ,c[1]+(y-c[1])/dZ]);
|
||||
}
|
||||
ctx.moveTo(newShape[0][0],newShape[0][1]);
|
||||
for(var i = 1; i < shape.length; i++) {
|
||||
ctx.lineTo(newShape[i][0],newShape[i][1]);
|
||||
}
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
function toRad(deg) {
|
||||
return deg/180*Math.PI;
|
||||
}
|
||||
|
||||
function Rnd(num,fig) {
|
||||
return Math.round(num*Math.pow(10,fig))/Math.pow(10,fig);
|
||||
}
|
||||
|
||||
function dot(vecOne, vecTwo) {
|
||||
if(vecOne.length !== vecTwo.length) {
|
||||
//throw error
|
||||
return;
|
||||
}
|
||||
var final = 0;
|
||||
for(var i = 0; i < vecOne.length; i++) {
|
||||
final += vecOne[i]*vecTwo[i];
|
||||
}
|
||||
return final;
|
||||
}
|
||||
|
||||
function mag(vec) {
|
||||
var rad = 0;
|
||||
for(var i = 0; i < vec.length; i++) {
|
||||
rad += Math.pow(vec[i],2);
|
||||
}
|
||||
return Math.sqrt(rad);
|
||||
}
|
||||
|
||||
drawShape(triangle);
|
||||
Loading…
x
Reference in New Issue
Block a user