first commit
This commit is contained in:
commit
cf11351ffe
11 changed files with 8010 additions and 0 deletions
BIN
conejo.fire-pixel.zip
Normal file
BIN
conejo.fire-pixel.zip
Normal file
Binary file not shown.
5
firefly.toml
Normal file
5
firefly.toml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
author_id = "conejo"
|
||||
app_id = "fire-pixel"
|
||||
author_name = "Conejo"
|
||||
app_name = "Fire Pixel"
|
||||
lang = "go"
|
||||
9
go.mod
Normal file
9
go.mod
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
module fire-pixel
|
||||
|
||||
go 1.24.0
|
||||
|
||||
toolchain go1.24.13
|
||||
|
||||
require github.com/firefly-zero/firefly-go v0.10.0
|
||||
|
||||
require github.com/orsinium-labs/tinymath v1.0.0 // indirect
|
||||
4
go.sum
Normal file
4
go.sum
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
github.com/firefly-zero/firefly-go v0.10.0 h1:CFEVPrXdLCZYgMna2DMncZ+lR01xg3danlXtIw+dJkE=
|
||||
github.com/firefly-zero/firefly-go v0.10.0/go.mod h1:+X/XGyPdES51OESkV8NSf1mszEBZionoROM7x2pBofw=
|
||||
github.com/orsinium-labs/tinymath v1.0.0 h1:Uzp3GmjWIBxMObx4MQi9ACDu4Q8WKjSRakB1OMo9Bu0=
|
||||
github.com/orsinium-labs/tinymath v1.0.0/go.mod h1:WPXX6ei3KSXG7JfA03a+ekCYaY9SWN4I+JRl2p6ck+A=
|
||||
166
main.go
Normal file
166
main.go
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/firefly-zero/firefly-go/firefly"
|
||||
"github.com/orsinium-labs/tinymath"
|
||||
)
|
||||
|
||||
const (
|
||||
screenW = 240
|
||||
screenH = 160
|
||||
pixSize = 3
|
||||
projDist = 10000.0
|
||||
scale = 0.45
|
||||
rotSpeed = 0.0015
|
||||
)
|
||||
|
||||
// Custom palette for the ninja sprite (cyan gradient + accents)
|
||||
var paletteRGB = [16][3]uint8{
|
||||
{0x00, 0xBC, 0xD5}, // 1: darkest cyan
|
||||
{0x15, 0xC3, 0xD8}, // 2: dark cyan
|
||||
{0x30, 0xC9, 0xDC}, // 3: medium-dark cyan
|
||||
{0x50, 0xD1, 0xE1}, // 4: medium cyan
|
||||
{0x70, 0xD8, 0xE5}, // 5: medium-light cyan
|
||||
{0x90, 0xE0, 0xEA}, // 6: light cyan
|
||||
{0xA8, 0xE5, 0xED}, // 7: pale cyan
|
||||
{0xC0, 0xEB, 0xF0}, // 8: very pale cyan
|
||||
{0xD8, 0xF1, 0xF4}, // 9: ice cyan
|
||||
{0xE8, 0xF5, 0xF6}, // 10: near-white cyan
|
||||
{0xF2, 0xF7, 0xF8}, // 11: almost white
|
||||
{0xF9, 0xF9, 0xF9}, // 12: white
|
||||
{0xFF, 0xFB, 0xFA}, // 13: warm white
|
||||
{0xF0, 0xC1, 0xD8}, // 14: pink accent
|
||||
{0xB0, 0xC0, 0xD7}, // 15: blue-gray
|
||||
{0xC0, 0xC1, 0xD7}, // 16: light blue-gray
|
||||
}
|
||||
|
||||
type pixel3D struct {
|
||||
x, y, z float32
|
||||
color firefly.Color
|
||||
screenX int
|
||||
screenY int
|
||||
screenZ float32
|
||||
pixScale float32
|
||||
}
|
||||
|
||||
var (
|
||||
pixels [numPixels]pixel3D
|
||||
angleX float32
|
||||
angleY float32
|
||||
)
|
||||
|
||||
func init() {
|
||||
firefly.Boot = boot
|
||||
firefly.Update = update
|
||||
firefly.Render = render
|
||||
}
|
||||
|
||||
func boot() {
|
||||
// Set custom palette
|
||||
var pal [16]firefly.RGB
|
||||
for i := 0; i < 16; i++ {
|
||||
pal[i] = firefly.NewRGB(paletteRGB[i][0], paletteRGB[i][1], paletteRGB[i][2])
|
||||
}
|
||||
firefly.SetPalette(pal)
|
||||
|
||||
// Initialize pixels with coordinates, random Z, and nearest palette color
|
||||
for i := 0; i < numPixels; i++ {
|
||||
pixels[i].x = float32(imgCoord[i][0]) * scale
|
||||
pixels[i].y = float32(imgCoord[i][1]) * scale
|
||||
// Random Z between -45 and 45 (scaled from original -100..100)
|
||||
rnd := firefly.GetRandom()
|
||||
pixels[i].z = (float32(rnd%2000) - 1000.0) / 1000.0 * 45.0
|
||||
pixels[i].color = nearestPaletteColor(imgColorRGB[i][0], imgColorRGB[i][1], imgColorRGB[i][2])
|
||||
}
|
||||
}
|
||||
|
||||
func nearestPaletteColor(r, g, b uint8) firefly.Color {
|
||||
bestDist := int32(1 << 30)
|
||||
bestIdx := firefly.Color(1)
|
||||
for i := 0; i < 16; i++ {
|
||||
dr := int32(r) - int32(paletteRGB[i][0])
|
||||
dg := int32(g) - int32(paletteRGB[i][1])
|
||||
db := int32(b) - int32(paletteRGB[i][2])
|
||||
dist := dr*dr + dg*dg + db*db
|
||||
if dist < bestDist {
|
||||
bestDist = dist
|
||||
bestIdx = firefly.Color(i + 1)
|
||||
}
|
||||
}
|
||||
return bestIdx
|
||||
}
|
||||
|
||||
func update() {
|
||||
pad, _ := firefly.ReadPad(firefly.Combined)
|
||||
// Map pad position (-1000..1000) to rotation angle
|
||||
angleX += float32(pad.X) * rotSpeed
|
||||
angleY += float32(pad.Y) * rotSpeed
|
||||
|
||||
// Project all pixels to 2D
|
||||
radX := angleX * (tinymath.Pi / 180.0)
|
||||
radY := angleY * (tinymath.Pi / 180.0)
|
||||
sinX, cosX := tinymath.SinCos(radX)
|
||||
sinY, cosY := tinymath.SinCos(radY)
|
||||
|
||||
for i := 0; i < numPixels; i++ {
|
||||
px := pixels[i].x
|
||||
py := pixels[i].y
|
||||
pz := pixels[i].z
|
||||
|
||||
// Rotate around Y axis (horizontal mouse/pad movement)
|
||||
rx := px*cosX - pz*sinX
|
||||
rz1 := px*sinX + pz*cosX
|
||||
|
||||
// Rotate around X axis (vertical mouse/pad movement)
|
||||
ry := py*cosY - rz1*sinY
|
||||
rz := py*sinY + rz1*cosY
|
||||
|
||||
// Perspective projection
|
||||
d := projDist + rz
|
||||
if d < 100 {
|
||||
d = 100
|
||||
}
|
||||
sx := projDist * rx / d
|
||||
sy := projDist * ry / d
|
||||
|
||||
// Scale factor based on depth
|
||||
s := 1.0 + (pixels[i].z-rz)*0.004
|
||||
if s < 0.3 {
|
||||
s = 0.3
|
||||
}
|
||||
if s > 2.5 {
|
||||
s = 2.5
|
||||
}
|
||||
|
||||
pixels[i].screenX = int(sx) + screenW/2
|
||||
pixels[i].screenY = int(sy) + screenH/2
|
||||
pixels[i].screenZ = rz
|
||||
pixels[i].pixScale = s
|
||||
}
|
||||
}
|
||||
|
||||
func render() {
|
||||
firefly.ClearScreen(firefly.ColorWhite)
|
||||
|
||||
// Draw all pixels as small rectangles
|
||||
for i := 0; i < numPixels; i++ {
|
||||
p := &pixels[i]
|
||||
sz := int(float32(pixSize) * p.pixScale)
|
||||
if sz < 1 {
|
||||
sz = 1
|
||||
}
|
||||
x := p.screenX - sz/2
|
||||
y := p.screenY - sz/2
|
||||
|
||||
// Skip if off-screen
|
||||
if x+sz < 0 || x >= screenW || y+sz < 0 || y >= screenH {
|
||||
continue
|
||||
}
|
||||
|
||||
firefly.DrawRect(
|
||||
firefly.Point{X: x, Y: y},
|
||||
firefly.Size{W: sz, H: sz},
|
||||
firefly.Solid(p.color),
|
||||
)
|
||||
}
|
||||
}
|
||||
56
pixeljs-master/converter.php
Normal file
56
pixeljs-master/converter.php
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
$im = imagecreatefrompng("img/ninja.png");
|
||||
$img_heigh = imagesy($im);
|
||||
$img_width = imagesx($im);
|
||||
|
||||
$r = array();
|
||||
$g = array();
|
||||
$b = array();
|
||||
$xx = array();
|
||||
$yy = array();
|
||||
|
||||
for($y=0;$y<$img_heigh;$y++){
|
||||
for($x=0;$x<$img_width;$x++){
|
||||
$color_index = imagecolorat($im, $x, $y);
|
||||
|
||||
// make it human readable
|
||||
$color = imagecolorsforindex($im, $color_index);
|
||||
//print_r($color);
|
||||
//var_dump($r, $g, $b);
|
||||
if($color['alpha']==0) {
|
||||
$_r = dechex($color['red']);
|
||||
$_g = dechex($color['green']);
|
||||
$_b = dechex($color['blue']);
|
||||
|
||||
if(strlen($_r)==1) {
|
||||
$_r = "0".$_r;
|
||||
}
|
||||
$r[] = strtoupper($_r);
|
||||
if(strlen($_g)==1) {
|
||||
$_g = "0".$_g;
|
||||
}
|
||||
$g[] = strtoupper($_g);
|
||||
if(strlen($_b)==1) {
|
||||
$_b = "0".$_b;
|
||||
}
|
||||
$b[] = strtoupper($_b);
|
||||
|
||||
$xx[] = 10 * $x - ( 10 * (ceil($img_width / 2)));
|
||||
$yy[] = 10 * $y - ( 10 * (ceil($img_heigh / 2)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$color = array();
|
||||
$coord = array();
|
||||
foreach($r as $k => $v) {
|
||||
|
||||
$color[] = $r[$k].$g[$k].$b[$k];
|
||||
$coord[] = "[".$xx[$k].",".$yy[$k]."]";
|
||||
}
|
||||
|
||||
echo "var img_color = ['".implode("','", $color)."'];\n\n";
|
||||
echo "var img_coord = [".implode(",", $coord)."];";
|
||||
|
||||
?>
|
||||
3
pixeljs-master/img/ninja.js
Normal file
3
pixeljs-master/img/ninja.js
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
var img_color = ['B4E8EF','92E0EA','81DCE8','7BDBE7','8CDFE9','A4E5ED','C9EDF2','51D1E1','1CC4DA','B0C0D7','00BDD5','00BCD5','00BCD5','00BDD5','40BFD6','13C2D8','2FC9DC','99E2EB','E9F5F6','27C7DB','30C9DC','DCF2F5','F2F7F8','6FD8E5','00BCD5','00BDD5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BDD5','00BCD5','2BC7DC','DCF2F5','E7F5F6','15C3D8','00BDD5','1FC5DA','D7F1F4','E0F3F5','41CDDF','00BCD4','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BCD5','1AC4DA','15C2D9','1CC4DA','80DCE8','F2F7F8','2CC9DC','00BCD5','00BED5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BDD5','00BBD4','6CD7E5','CEEFF3','3DCDDF','00BDD5','00BED6','00BDD6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BDD5','C0C0D7','E6F4F6','9BE3EC','00BDD5','00BED6','00BCD5','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD4','00BCD5','00BDD5','00BED6','20C6DA','67D6E4','30C9DC','18C3D9','28C7DB','B6E9EF','37CBDD','00BDD5','20BED6','4DD0E1','8FDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8EDFEA','8FDFEA','76DAE6','F0C1D8','00BED6','10C1D8','BEEBF0','CEEEF3','DEF2F5','BBEAF0','C0C1D7','00BDD5','15C3D9','CDEFF3','FAF9F9','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','F8F8F8','FFFBFA','40CDDF','00BED6','00BCD5','75D9E6','8FDFEA','00BBD4','00BDD6','1EC5DA','F2F7F7','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F8F9F9','FFFBFA','6ED8E5','00BED6','00BDD5','3CCCDE','E8F5F6','65D6E4','00BCD5','00BDD5','34CADD','FFFCFB','F9F9F9','FFFBFA','FFFCFB','FFFBFA','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','F9F9F9','FFFAFA','FFFCFB','FFFBFA','FAF9F9','FFFAFA','9CE3EC','00BED6','00BDD5','16C3D9','DFF2F5','4ED0E0','00BCD5','00BDD5','66D6E4','FFFBFA','FDF9F9','78DBE7','33CADC','7EDCE7','F4F7F8','F8F8F8','F9F9F9','F9F9F9','F8F8F8','F8F8F8','9AE2EB','33CADD','62D5E4','F3F7F8','FEFAF9','CCEEF3','00BED6','00BDD5','30BFD6','DAF1F4','4CD0E0','00BCD5','00BDD5','57D3E2','FCF9F9','61D5E3','00BCD5','00BDD5','00B9D3','7DDCE7','FDFAF9','FAF9F9','FAF9F9','FDFAF9','ABE6EE','00B9D3','00BDD5','00BCD5','38CBDD','F8F8F9','B6E9EF','00BED6','00BDD5','40BFD6','DAF1F4','62D5E3','00BCD5','00BED6','00BDD5','20C5DA','60BFD6','00BED6','00BED6','00BDD5','1AC4D9','A0E4EC','A2E4EC','A3E5EC','A6E5ED','38CBDD','00BCD5','00BED6','00BED6','40BFD6','2DC8DC','40BFD6','00BED6','00BDD5','13C2D8','DEF2F5','8ADFE9','00BCD4','00BDD6','00BDD5','00BDD5','00BDD5','00BED6','00BED6','00BDD6','00BDD5','30BED6','50BFD6','50BFD6','50BFD6','10BED6','00BDD5','00BED6','00BED6','00BDD5','00BDD5','00BDD5','00BED6','00BDD5','33CADD','E6F4F6','B6E9EF','90C0D7','00BDD5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BCD5','6BD7E4','31CADC','00BDD5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','80C0D7','AEE7EE','8DDFE9','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','37CBDD','2AC8DC','00BDD5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','C6EDF2','E6F4F6','1DC5DA','00BCD5','00BED5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BDD5','00BED6','93E0EA','D4F0F3','2EC9DD','00BCD4','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BDD6','00BED6','00BDD5','50BFD6','98E2EB','EAF5F7','4BD0E1','00BCD5','00BDD5','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BED6','00BCD5','14C2D8','BEEBF0','AEE7EE','34CADD','13C2D8','10BED6','00BCD5','00BDD5','00BDD5','00BCD5','00BDD5','C0C1D7','1FC5DA','77DBE7','CAEDF2','9EE3EC','80DCE8','6AD7E5','6BD7E5','73D9E6','92E1EA','B8EAF0'];
|
||||
|
||||
var img_coord = [[-50,-120],[-40,-120],[-30,-120],[-20,-120],[-10,-120],[0,-120],[10,-120],[-70,-110],[-60,-110],[-50,-110],[-40,-110],[-30,-110],[-20,-110],[-10,-110],[0,-110],[10,-110],[20,-110],[30,-110],[70,-110],[80,-110],[90,-110],[100,-110],[-100,-100],[-90,-100],[-80,-100],[-70,-100],[-60,-100],[-50,-100],[-40,-100],[-30,-100],[-20,-100],[-10,-100],[0,-100],[10,-100],[20,-100],[30,-100],[40,-100],[50,-100],[60,-100],[70,-100],[80,-100],[90,-100],[100,-100],[-110,-90],[-100,-90],[-90,-90],[-80,-90],[-70,-90],[-60,-90],[-50,-90],[-40,-90],[-30,-90],[-20,-90],[-10,-90],[0,-90],[10,-90],[20,-90],[30,-90],[40,-90],[50,-90],[60,-90],[70,-90],[80,-90],[-120,-80],[-110,-80],[-100,-80],[-90,-80],[-80,-80],[-70,-80],[-60,-80],[-50,-80],[-40,-80],[-30,-80],[-20,-80],[-10,-80],[0,-80],[10,-80],[20,-80],[30,-80],[40,-80],[50,-80],[60,-80],[70,-80],[80,-80],[-120,-70],[-110,-70],[-100,-70],[-90,-70],[-80,-70],[-70,-70],[-60,-70],[-50,-70],[-40,-70],[-30,-70],[-20,-70],[-10,-70],[0,-70],[10,-70],[20,-70],[30,-70],[40,-70],[50,-70],[60,-70],[70,-70],[80,-70],[90,-70],[100,-70],[110,-70],[120,-70],[130,-70],[140,-70],[-130,-60],[-120,-60],[-110,-60],[-100,-60],[-90,-60],[-80,-60],[-70,-60],[-60,-60],[-50,-60],[-40,-60],[-30,-60],[-20,-60],[-10,-60],[0,-60],[10,-60],[20,-60],[30,-60],[40,-60],[50,-60],[60,-60],[70,-60],[80,-60],[90,-60],[100,-60],[110,-60],[120,-60],[130,-60],[-130,-50],[-120,-50],[-110,-50],[-100,-50],[-90,-50],[-80,-50],[-70,-50],[-60,-50],[-50,-50],[-40,-50],[-30,-50],[-20,-50],[-10,-50],[0,-50],[10,-50],[20,-50],[30,-50],[40,-50],[50,-50],[60,-50],[70,-50],[80,-50],[90,-50],[110,-50],[120,-50],[-140,-40],[-130,-40],[-120,-40],[-110,-40],[-100,-40],[-90,-40],[-80,-40],[-70,-40],[-60,-40],[-50,-40],[-40,-40],[-30,-40],[-20,-40],[-10,-40],[0,-40],[10,-40],[20,-40],[30,-40],[40,-40],[50,-40],[60,-40],[70,-40],[80,-40],[90,-40],[-140,-30],[-130,-30],[-120,-30],[-110,-30],[-100,-30],[-90,-30],[-80,-30],[-70,-30],[-60,-30],[-50,-30],[-40,-30],[-30,-30],[-20,-30],[-10,-30],[0,-30],[10,-30],[20,-30],[30,-30],[40,-30],[50,-30],[60,-30],[70,-30],[80,-30],[90,-30],[100,-30],[-140,-20],[-130,-20],[-120,-20],[-110,-20],[-100,-20],[-90,-20],[-80,-20],[-70,-20],[-60,-20],[-50,-20],[-40,-20],[-30,-20],[-20,-20],[-10,-20],[0,-20],[10,-20],[20,-20],[30,-20],[40,-20],[50,-20],[60,-20],[70,-20],[80,-20],[90,-20],[100,-20],[-140,-10],[-130,-10],[-120,-10],[-110,-10],[-100,-10],[-90,-10],[-80,-10],[-70,-10],[-60,-10],[-50,-10],[-40,-10],[-30,-10],[-20,-10],[-10,-10],[0,-10],[10,-10],[20,-10],[30,-10],[40,-10],[50,-10],[60,-10],[70,-10],[80,-10],[90,-10],[100,-10],[-140,0],[-130,0],[-120,0],[-110,0],[-100,0],[-90,0],[-80,0],[-70,0],[-60,0],[-50,0],[-40,0],[-30,0],[-20,0],[-10,0],[0,0],[10,0],[20,0],[30,0],[40,0],[50,0],[60,0],[70,0],[80,0],[90,0],[100,0],[-140,10],[-130,10],[-120,10],[-110,10],[-100,10],[-90,10],[-80,10],[-70,10],[-60,10],[-50,10],[-40,10],[-30,10],[-20,10],[-10,10],[0,10],[10,10],[20,10],[30,10],[40,10],[50,10],[60,10],[70,10],[80,10],[90,10],[100,10],[-140,20],[-130,20],[-120,20],[-110,20],[-100,20],[-90,20],[-80,20],[-70,20],[-60,20],[-50,20],[-40,20],[-30,20],[-20,20],[-10,20],[0,20],[10,20],[20,20],[30,20],[40,20],[50,20],[60,20],[70,20],[80,20],[90,20],[100,20],[-140,30],[-130,30],[-120,30],[-110,30],[-100,30],[-90,30],[-80,30],[-70,30],[-60,30],[-50,30],[-40,30],[-30,30],[-20,30],[-10,30],[0,30],[10,30],[20,30],[30,30],[40,30],[50,30],[60,30],[70,30],[80,30],[90,30],[-130,40],[-120,40],[-110,40],[-100,40],[-90,40],[-80,40],[-70,40],[-60,40],[-50,40],[-40,40],[-30,40],[-20,40],[-10,40],[0,40],[10,40],[20,40],[30,40],[40,40],[50,40],[60,40],[70,40],[80,40],[90,40],[-130,50],[-120,50],[-110,50],[-100,50],[-90,50],[-80,50],[-70,50],[-60,50],[-50,50],[-40,50],[-30,50],[-20,50],[-10,50],[0,50],[10,50],[20,50],[30,50],[40,50],[50,50],[60,50],[70,50],[80,50],[-120,60],[-110,60],[-100,60],[-90,60],[-80,60],[-70,60],[-60,60],[-50,60],[-40,60],[-30,60],[-20,60],[-10,60],[0,60],[10,60],[20,60],[30,60],[40,60],[50,60],[60,60],[70,60],[80,60],[-120,70],[-110,70],[-100,70],[-90,70],[-80,70],[-70,70],[-60,70],[-50,70],[-40,70],[-30,70],[-20,70],[-10,70],[0,70],[10,70],[20,70],[30,70],[40,70],[50,70],[60,70],[70,70],[-110,80],[-100,80],[-90,80],[-80,80],[-70,80],[-60,80],[-50,80],[-40,80],[-30,80],[-20,80],[-10,80],[0,80],[10,80],[20,80],[30,80],[40,80],[50,80],[60,80],[-100,90],[-90,90],[-80,90],[-70,90],[-60,90],[-50,90],[-40,90],[-30,90],[-20,90],[-10,90],[0,90],[10,90],[20,90],[30,90],[40,90],[50,90],[-80,100],[-70,100],[-60,100],[-50,100],[-40,100],[-30,100],[-20,100],[-10,100],[0,100],[10,100],[20,100],[30,100],[-60,110],[-50,110],[-40,110],[-30,110],[-20,110],[-10,110],[0,110],[10,110]];
|
||||
BIN
pixeljs-master/img/ninja.png
Normal file
BIN
pixeljs-master/img/ninja.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
155
pixeljs-master/index.php
Normal file
155
pixeljs-master/index.php
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
canvas {
|
||||
border: 1px solid #9C9898;
|
||||
}
|
||||
|
||||
html, body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
background: #222;
|
||||
}
|
||||
|
||||
.container {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script src="kinetic-v3.10.5.js"></script>
|
||||
<script src="img/ninja.js"></script>
|
||||
<script>
|
||||
var w = window.innerWidth-2;
|
||||
var h = window.innerHeight-4;
|
||||
|
||||
function to2d(coordx, coordy, coordz, grados, gradosa) {
|
||||
var numeropi = 3.141592;
|
||||
var x=(coordx)*Math.cos((numeropi/180)*grados)-(coordz)*Math.sin((numeropi/180)*grados);
|
||||
var z1=(coordx)*Math.sin((numeropi/180)*grados)+(coordz)*Math.cos((numeropi/180)*grados);
|
||||
var y=(coordy)*Math.cos((numeropi/180)*gradosa)-(z1)*Math.sin((numeropi/180)*gradosa);
|
||||
var z=(coordy)*Math.sin((numeropi/180)*gradosa)+(z1)*Math.cos((numeropi/180)*gradosa);
|
||||
|
||||
var d = 10000;
|
||||
var p = {'x': 0, 'y' : 0, 'z' : 1};
|
||||
p.x = ((d*x)/(d+z));
|
||||
p.y = ((d*y)/(d+z));
|
||||
p.z = z;
|
||||
|
||||
return p;
|
||||
|
||||
}
|
||||
|
||||
|
||||
window.onload = function() {
|
||||
var stage = new Kinetic.Stage({
|
||||
container: "container",
|
||||
width: w,
|
||||
height: h
|
||||
});
|
||||
var layer = new Kinetic.Layer();
|
||||
var layerBck = new Kinetic.Layer();
|
||||
var xRandom = Math.random() * w * 0.8 + 0.1 * w;
|
||||
var yRandom = Math.random() * h * 0.8 + 0.1 * h;
|
||||
|
||||
var background = new Kinetic.Rect({
|
||||
x: 0,
|
||||
y: 0,
|
||||
offset: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
width: w,
|
||||
height: h,
|
||||
fill: "white",
|
||||
stroke: "white",
|
||||
strokeWidth: 0
|
||||
});
|
||||
|
||||
layerBck.add(background);
|
||||
|
||||
|
||||
var l = img_coord.length;
|
||||
for(var n = 0; n < l; n++) {( function() {
|
||||
var randX = img_coord[n][0];
|
||||
var randY = img_coord[n][1];
|
||||
var randZ = ( Math.random() * 200 ) - 100;
|
||||
|
||||
var box = new Kinetic.Rect({
|
||||
x3d: randX,
|
||||
y3d: randY,
|
||||
z3d: randZ,
|
||||
zIndex:1,
|
||||
offset: {
|
||||
x: 5,
|
||||
y: 5
|
||||
},
|
||||
width: 8,
|
||||
height: 8,
|
||||
fill: img_color[n],
|
||||
stroke: img_color[n],
|
||||
strokeWidth: 0
|
||||
});
|
||||
|
||||
layer.add(box);
|
||||
}());
|
||||
}
|
||||
|
||||
|
||||
stage.add(layerBck);
|
||||
stage.add(layer);
|
||||
|
||||
stage.onFrame(function(frame) {
|
||||
|
||||
});
|
||||
stage.start();
|
||||
|
||||
stage.on("mousemove", function(evt){
|
||||
var mouse = stage.getUserPosition(evt);
|
||||
|
||||
var boxes = layer.getChildren();
|
||||
zi = new Array();
|
||||
var bl = boxes.length;
|
||||
boxes[0].setZIndex(1);
|
||||
for(var n = 0; n < bl; n++) {
|
||||
var shape = boxes[n];
|
||||
var constk = 0.25;
|
||||
var coord = to2d(shape.attrs.x3d, shape.attrs.y3d, shape.attrs.z3d, constk*(mouse.x-xRandom), constk*(mouse.y-yRandom));
|
||||
shape.attrs.x = (w/2) + coord.x;
|
||||
shape.attrs.y = (h/2) + coord.y;
|
||||
shape.attrs.z = -coord.z;
|
||||
coord.z = 1 + (shape.attrs.z3d - coord.z) * 0.008
|
||||
if(coord.z<0.3) {
|
||||
coord.z = 0.3;
|
||||
}
|
||||
if(coord.z>4) {
|
||||
coord.z = 4;
|
||||
}
|
||||
shape.attrs.scale.x = coord.z;
|
||||
shape.attrs.scale.y = coord.z;
|
||||
for(var i = (n-1);i>0;i--) {
|
||||
if(boxes[i].attrs.z>shape.attrs.z) {
|
||||
shape.moveDown();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
layer.draw();
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onmousedown="return false;">
|
||||
<div id="container" class="container"></div>
|
||||
</body>
|
||||
</html>
|
||||
6600
pixeljs-master/kinetic-v3.10.5.js
Normal file
6600
pixeljs-master/kinetic-v3.10.5.js
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue