球に角度16等分に色を付けています。
var canvas;
var ctx;
WIDTH = 640;
HEIGHT = 480;
VIEW_WIDTH = 640;
VIEW_HEIGHT = 480;
RAD = 180;
var lx = -1.0 / 1.732;
var ly = -1.0 / 1.732;
var lz = 1.0 / 1.732;
var fAmbient = 128.0;
var fDirect = 128.0;
var fDot = 0;
var bordcolor = ["white", "silver", "gray"];
function init(){
canvas = document.getElementById('world');
canvas.width = WIDTH;
canvas.height = HEIGHT;
ctx = canvas.getContext('2d');
ctx.font = "48px 'MS Pゴシック'";
user = window.navigator.userAgent.toLowerCase();
nBright = 0;
//(描画処理)
for( y = 0; y < VIEW_HEIGHT; y++){
for( x = 0; x < VIEW_WIDTH; x++){
dx = x - VIEW_WIDTH / 2.0;
dy = y - VIEW_HEIGHT / 2.0;
dzsq = RAD * RAD -dx * dx - dy * dy;
if(dzsq > 0.0 ){
dz = Math.sqrt(dzsq);
fAngle = Math.atan2(dz, dx);
if(fAngle < 0.0) fAngle += 2.0 * Math.PI;
nx = dx / RAD; ny = dy / RAD; nz = dz / RAD;
fDot = nx * lx + ny * ly + nz * lz;
if(fDot >= 0.0){
nBright = parseInt(fDot * fDirect + fAmbient);
} else {
nBright = parseInt(fAmbient);
}
if(parseInt(fAngle /( 2.0 * Math.PI) * 16 ) & 1){
wkcolor = "rgb(" + nBright + "," + nBright + "," + nBright + ")"; //色なし
} else {
wkcolor = "rgb(" + nBright + "," + "0" + "," + nBright + ")"; //色付き
}
ctx.beginPath();
ctx.lineWidth = 1;
ctx.moveTo(x,y);
ctx.lineTo(x+1,y+1);
//全て座標を指定(ドット)
ctx.strokeStyle = wkcolor;
ctx.stroke();
}
}
}
}