mirror of
https://gitee.com/blitheli/test-skybox.git
synced 2025-06-16 18:38:18 +00:00
94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
![]() |
import "./hipparcos_7_concise.js"
|
|||
|
import CatalogSkybox from "./CatalogSkybox.js";
|
|||
|
|
|||
|
function createSkyboxImage(faceId, width) {
|
|||
|
|
|||
|
// 恒星亮度(等级),亮度等级越小,亮度越大
|
|||
|
const magBright = -1;
|
|||
|
const magMedium = 7;
|
|||
|
const magDim = 12;
|
|||
|
// 恒星大小,单位像素
|
|||
|
const sizeBright = 5;
|
|||
|
const sizeMedium = 1;
|
|||
|
const sizeDim = 0.1;
|
|||
|
// 恒星透明度
|
|||
|
const translucentBright = 0.0;
|
|||
|
const translucentMedium = 0.25;
|
|||
|
const translucentDim = 0.8;
|
|||
|
|
|||
|
const d2r = Math.PI / 180;
|
|||
|
|
|||
|
// 创建width*width的jpg格式的图片,背景为黑色,随机生成1000个像素点,颜色为白色,大小从1到5像素不等
|
|||
|
var canvas = document.createElement('canvas');
|
|||
|
canvas.width = width;
|
|||
|
canvas.height = width;
|
|||
|
var context = canvas.getContext('2d');
|
|||
|
// 黑色背景
|
|||
|
context.fillStyle = 'black';
|
|||
|
context.fillRect(0, 0, width, width);
|
|||
|
|
|||
|
// 循环hipparcos数据,hipparcos_catalog为数组
|
|||
|
for (var i = 0; i < hipparcos_catalog.length; i++) {
|
|||
|
var star = hipparcos_catalog[i];
|
|||
|
var mag = star[1];
|
|||
|
var ra = star[2];
|
|||
|
var dec = star[3];
|
|||
|
|
|||
|
// 赤经、赤纬转换为弧度
|
|||
|
if (ra > 180) {
|
|||
|
ra = ra - 360;
|
|||
|
}
|
|||
|
ra = ra * d2r;
|
|||
|
dec = dec * d2r;
|
|||
|
|
|||
|
// 赤经、赤纬转换为立方盒子坐标,再转换为图片坐标
|
|||
|
let { x, y, z } = CatalogSkybox.sphere2CubeXyz(ra, dec);
|
|||
|
|
|||
|
// 转换为图片坐标(i,为横坐标,向右,[0,1]), (j为纵坐标,向下,[0,1])
|
|||
|
let { i, j, faceId0 } = CatalogSkybox.cubeXyzToImgUV(x, y, z);
|
|||
|
|
|||
|
if (faceId !== faceId0) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
// 像素大小
|
|||
|
let size = sizeBright;
|
|||
|
if (mag > magMedium && mag <= magBright) {
|
|||
|
size = sizeMedium + (sizeBright - sizeMedium) * (mag - magMedium) / (magBright - magMedium);
|
|||
|
}
|
|||
|
|
|||
|
// 图像坐标系下的坐标
|
|||
|
let u = i * width - size / 2;
|
|||
|
let v = j * width - size / 2;
|
|||
|
if (u < 0) {
|
|||
|
u = 0;
|
|||
|
}
|
|||
|
if (v < 0) {
|
|||
|
v = 0;
|
|||
|
}
|
|||
|
|
|||
|
// 画点
|
|||
|
context.fillStyle = 'white';
|
|||
|
context.fillRect(u, v, size, size);
|
|||
|
}
|
|||
|
|
|||
|
var dataUrl = canvas.toDataURL('image/jpeg');
|
|||
|
|
|||
|
|
|||
|
// 将这个图片插入到id为img1的img元素中
|
|||
|
//var img1 = document.getElementById('img1');
|
|||
|
//img1.src = dataUrl;
|
|||
|
|
|||
|
return dataUrl;
|
|||
|
var image = new Image();
|
|||
|
image.src = dataUrl;
|
|||
|
|
|||
|
return image;
|
|||
|
// 将这个图片插入到id为img1的img元素中
|
|||
|
//var img1 = document.getElementById('img1');
|
|||
|
//img1.src = dataUrl;
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
export default createSkyboxImage;
|