mirror of
https://gitee.com/blitheli/test-skybox.git
synced 2025-06-16 10:28:18 +00:00
修改代码,还剩py,pz,mz未校验
This commit is contained in:
parent
ac8482aa44
commit
aa58143113
7
.vscode/launch.json
vendored
7
.vscode/launch.json
vendored
@ -2,6 +2,13 @@
|
|||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Launch Chrome",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "chrome",
|
||||||
|
"url": "http://localhost:5000",
|
||||||
|
"webRoot": "${workspaceFolder}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "pwa-node",
|
"type": "pwa-node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
|
@ -14,21 +14,29 @@ const CatalogSkybox = {
|
|||||||
CatalogSkybox.cubeXyzToImgUV = function(x, y, z) {
|
CatalogSkybox.cubeXyzToImgUV = function(x, y, z) {
|
||||||
let faceId, i, j;
|
let faceId, i, j;
|
||||||
|
|
||||||
if (x === -1) { // back
|
if (x === -1) { // back,mx
|
||||||
j = (1.0 - y) / 2.0;
|
//j = (1.0 - y) / 2.0;
|
||||||
|
//i = (1.0 + z) / 2.0;
|
||||||
|
j = (1.0 + y) / 2.0;
|
||||||
i = (1.0 + z) / 2.0;
|
i = (1.0 + z) / 2.0;
|
||||||
faceId = 0;
|
faceId = 0;
|
||||||
} else if (y === -1) { // left
|
} else if (y === -1) { // left,my
|
||||||
i = (1.0 + x) / 2.0;
|
//i = (1.0 + x) / 2.0;
|
||||||
j = (1.0 - z) / 2.0;
|
//j = (1.0 - z) / 2.0;
|
||||||
faceId = 1;
|
|
||||||
} else if (x === 1) { // front
|
|
||||||
j = (1.0 - y) / 2.0;
|
|
||||||
i = (1.0 - z) / 2.0;
|
|
||||||
faceId = 2;
|
|
||||||
} else if (y === 1) { // right
|
|
||||||
i = (1.0 + x) / 2.0;
|
i = (1.0 + x) / 2.0;
|
||||||
j = (1.0 + z) / 2.0;
|
j = (1.0 + z) / 2.0;
|
||||||
|
faceId = 1;
|
||||||
|
} else if (x === 1) { // front,px
|
||||||
|
//j = (1.0 - y) / 2.0;
|
||||||
|
//i = (1.0 - z) / 2.0;
|
||||||
|
i = (1.0 + y) / 2.0;
|
||||||
|
j = (1.0 - z) / 2.0;
|
||||||
|
faceId = 2;
|
||||||
|
} else if (y === 1) { // right,py
|
||||||
|
//i = (1.0 + x) / 2.0;
|
||||||
|
//j = (1.0 + z) / 2.0;
|
||||||
|
i = (1.0 + x) / 2.0;
|
||||||
|
j = (1.0 - z) / 2.0;
|
||||||
faceId = 3;
|
faceId = 3;
|
||||||
} else if (z === 1) { // top
|
} else if (z === 1) { // top
|
||||||
i = (1.0 + x) / 2.0;
|
i = (1.0 + x) / 2.0;
|
||||||
@ -157,6 +165,21 @@ CatalogSkybox.sphere2CubeXyz = function (theta, phi) {
|
|||||||
return { x, y, z };
|
return { x, y, z };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 由立方体盒子某个面的图片坐标转换为对应立方盒子面的坐标
|
* 由立方体盒子某个面的图片坐标转换为对应立方盒子面的坐标
|
||||||
*
|
*
|
||||||
|
@ -1,94 +1,107 @@
|
|||||||
import "./hipparcos_7_concise.js"
|
import hipparcos_catalog from "./hipparcos_7_concise.js";
|
||||||
import CatalogSkybox from "./CatalogSkybox.js";
|
import CatalogSkybox from "./CatalogSkybox.js";
|
||||||
|
|
||||||
function createSkyboxImage(faceId, width) {
|
function createSkyboxImage(faceId0, width) {
|
||||||
|
// 恒星亮度(等级),亮度等级越小,亮度越大
|
||||||
|
const magBright = -1;
|
||||||
|
const magMedium = 7;
|
||||||
|
const magDim = 12;
|
||||||
|
// 恒星大小,单位像素
|
||||||
|
const sizeBright = 5;
|
||||||
|
const sizeMedium = 1;
|
||||||
|
const sizeDim = 0.1;
|
||||||
|
// 恒星透明度(1为不透明,0为透明)
|
||||||
|
const translucentBright = 1.0;
|
||||||
|
const translucentMedium = 0.5;
|
||||||
|
const translucentDim = 0.2;
|
||||||
|
|
||||||
// 恒星亮度(等级),亮度等级越小,亮度越大
|
const d2r = Math.PI / 180;
|
||||||
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);
|
||||||
|
|
||||||
// 创建width*width的jpg格式的图片,背景为黑色,随机生成1000个像素点,颜色为白色,大小从1到5像素不等
|
// 循环hipparcos数据,hipparcos_catalog为数组
|
||||||
var canvas = document.createElement('canvas');
|
for (var id = 0; id < hipparcos_catalog.length; id++) {
|
||||||
canvas.width = width;
|
var star = hipparcos_catalog[id];
|
||||||
canvas.height = width;
|
var mag = star[1];
|
||||||
var context = canvas.getContext('2d');
|
var ra = star[2];
|
||||||
// 黑色背景
|
var dec = star[3];
|
||||||
context.fillStyle = 'black';
|
|
||||||
context.fillRect(0, 0, width, width);
|
|
||||||
|
|
||||||
// 循环hipparcos数据,hipparcos_catalog为数组
|
// 赤经、赤纬转换为弧度
|
||||||
for (var i = 0; i < hipparcos_catalog.length; i++) {
|
if (ra > 180) {
|
||||||
var star = hipparcos_catalog[i];
|
ra = ra - 360;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
ra = ra * d2r;
|
||||||
var dataUrl = canvas.toDataURL('image/jpeg');
|
dec = dec * d2r;
|
||||||
|
|
||||||
|
// 赤经、赤纬转换为立方盒子坐标,再转换为图片坐标
|
||||||
|
let { x, y, z } = CatalogSkybox.sphere2CubeXyz(ra, dec);
|
||||||
|
|
||||||
// 将这个图片插入到id为img1的img元素中
|
// 转换为图片坐标(i,为横坐标,向右,[0,1]), (j为纵坐标,向下,[0,1])
|
||||||
//var img1 = document.getElementById('img1');
|
let { i, j, faceId } = CatalogSkybox.cubeXyzToImgUV(x, y, z);
|
||||||
//img1.src = dataUrl;
|
|
||||||
|
|
||||||
return dataUrl;
|
if (faceId !== faceId0) {
|
||||||
var image = new Image();
|
continue;
|
||||||
image.src = dataUrl;
|
}
|
||||||
|
|
||||||
return image;
|
// 像素大小
|
||||||
// 将这个图片插入到id为img1的img元素中
|
let size = sizeBright;
|
||||||
//var img1 = document.getElementById('img1');
|
let translucent = translucentBright;
|
||||||
//img1.src = dataUrl;
|
if (mag > magBright && mag <= magMedium) {
|
||||||
|
size =
|
||||||
|
sizeMedium +
|
||||||
|
((sizeBright - sizeMedium) * (mag - magMedium)) /
|
||||||
|
(magBright - magMedium);
|
||||||
|
translucent =
|
||||||
|
translucentMedium +
|
||||||
|
((translucentBright - translucentMedium) * (mag - magMedium)) /
|
||||||
|
(magBright - magMedium);
|
||||||
|
}
|
||||||
|
// 亮度太暗,最小值
|
||||||
|
else if (mag > magMedium) {
|
||||||
|
size = sizeDim;
|
||||||
|
translucent = translucentDim;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mag < 1) {
|
||||||
|
console.log(mag, size, translucent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 图像坐标系下的坐标
|
||||||
|
let u = i * width - size / 2;
|
||||||
|
let v = j * width - size / 2;
|
||||||
|
if (u < 0) {
|
||||||
|
u = 0;
|
||||||
|
}
|
||||||
|
if (v < 0) {
|
||||||
|
v = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 画点,白色,带透明度
|
||||||
|
context.fillStyle = `rgba(255,255,255,${translucent})`;
|
||||||
|
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;
|
export default createSkyboxImage;
|
||||||
|
File diff suppressed because one or more lines are too long
12
main.js
12
main.js
@ -9,8 +9,8 @@ console.log("Cesium 启动");
|
|||||||
const viewer = new Cesium.Viewer("cesiumContainer");
|
const viewer = new Cesium.Viewer("cesiumContainer");
|
||||||
|
|
||||||
|
|
||||||
const width = 4096;
|
const width = 3522;
|
||||||
const px = createSkyboxImage(0, width);
|
const py = createSkyboxImage(2, width);
|
||||||
/*
|
/*
|
||||||
const py = createImage( width);
|
const py = createImage( width);
|
||||||
const pz = createImage( width);
|
const pz = createImage( width);
|
||||||
@ -40,18 +40,18 @@ viewer.scene.skyBox = new Cesium.SkyBox({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
// 创建下载链接
|
// 创建下载链接
|
||||||
const link = document.createElement('a');
|
const link = document.createElement('a');
|
||||||
link.download = 'image.jpg';
|
link.download = 'px.jpg';
|
||||||
link.href = px;
|
link.href = py;
|
||||||
|
|
||||||
// 模拟点击下载链接
|
// 模拟点击下载链接
|
||||||
document.body.appendChild(link);
|
document.body.appendChild(link);
|
||||||
link.click();
|
link.click();
|
||||||
document.body.removeChild(link);
|
document.body.removeChild(link);
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 显示帧率
|
// 显示帧率
|
||||||
viewer.scene.debugShowFramesPerSecond = true;
|
viewer.scene.debugShowFramesPerSecond = true;
|
Loading…
Reference in New Issue
Block a user