-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.ts
More file actions
169 lines (136 loc) · 5.41 KB
/
main.ts
File metadata and controls
169 lines (136 loc) · 5.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import * as pc from 'playcanvas';
// 导入所需的函数
import { setupSkybox } from './instance/sky.ts';
import { createSplatInstance } from './instance/gsplat.ts'
import { createCamera } from './instance/camera.ts'
import { createLight } from './instance/light.ts';
import { createAssets } from './instance/asset.ts'
//导入摄像头控制模块
// 导入状态管理
import { initializeConfigFromUrl, appConfig } from './stores.ts';
// 导入路由初始化函数
import { initRouter } from './router.ts';
// 初始化配置
initializeConfigFromUrl();
// 初始化路由系统
initRouter();
// 初始化PlayCanvas应用
const app = initApp(appConfig);
/**
* 初始化PlayCanvas应用
* @param gsplatUrl 高斯喷溅模型URL
* @param skyboxUrl 天空盒URL
* @param scale 模型缩放比例
* @returns 应用实例
*/
function initApp(config: any): pc.Application {
// 获取canvas元素
const canvas = document.getElementById('application') as HTMLCanvasElement;
if (!canvas) {
throw new Error('Canvas element not found');
}
// 创建应用实例
const app = new pc.Application(canvas);
app.setCanvasResolution(pc.RESOLUTION_AUTO);
app.setCanvasFillMode(pc.FILLMODE_NONE);
updateAssetInfoDisplay(config);
// 加载资产
const assets = createAssets(
config.gsplatUrl, // 模型路径
config.skyboxUrl // 环境贴图路径
);
const assetListLoader = new pc.AssetListLoader(Object.values(assets), app.assets);
// 确保资产加载完成
assetListLoader.load((err, failed) => {
if (err) {
console.error(`Failed to load assets:`, err);
if (failed && failed.length) {
console.error(`Failed assets count: ${failed.length}`);
failed.forEach(asset => {
console.error(asset);
});
}
} else {
console.log(`${Object.keys(assets).length} assets loaded`);
app.start();
// 设置天空盒
setupSkybox(app, assets);
// 设置相机
const initialPosition = new pc.Vec3(0, 6, 9);
const initialRotation = new pc.Vec3(-15, 0, 0);
const { camera, cameraControls: scriptInstance } = createCamera(app, initialPosition, initialRotation);
// 创建一个灯光
const light = createLight(app);
// 创建一个高斯喷溅实体
const Cat = createSplatInstance(app, 'Toy Cat', assets.gsplat, 0, -1.5, 0, config.scale);
scriptInstance.setTargetEntity(Cat);
// 监听鼠标点击事件
canvas.addEventListener('mousedown', () => {
});
// 监听鼠标滚轮事件
canvas.addEventListener('wheel', () => {
});
// 监听触摸事件
canvas.addEventListener('touchstart', (e) => {
e.preventDefault(); // 防止默认的触摸行为
});
// 监听触摸移动事件
canvas.addEventListener('touchmove', (e) => {
e.preventDefault(); // 防止页面滚动
});
// 监听触摸结束事件
canvas.addEventListener('touchend', (e) => {
e.preventDefault();
});
}
});
return app;
}
/**
* 更新资产信息显示
* 将配置参数与index.html中的标签绑定
* @param config 应用配置对象
*/
function updateAssetInfoDisplay(config: any): void {
// 获取HTML中的元素
const nameElement = document.getElementById('asset-name');//TODO
const studentidElement = document.getElementById('asset-studentid');
const descriptionElement = document.getElementById('asset-description');
const authorElement = document.getElementById('asset-author');
const dateElement = document.getElementById('asset-date');
const organizationElement = document.getElementById('asset-organization');
// 检查元素是否存在
if (!descriptionElement || !authorElement || !dateElement || !organizationElement || !studentidElement || !nameElement) {
console.warn('无法找到资产信息显示元素');
return;
}
// 清空现有内容
// dateElement.innerHTML = '';
// 显示additionalInfo内容作为标签
if (config.additionalInfo) {
if (config.additionalInfo.description) {
// 显示描述信息
descriptionElement.textContent = `${config.additionalInfo.description || '无描述'}`;
}
if (config.additionalInfo.description) {
// 显示作品名称
nameElement.textContent = `${config.additionalInfo.name || '无描述'}`;
}
if (config.additionalInfo.author) {
// 显示作者信息
authorElement.textContent = `作者: ${config.additionalInfo.author || '未知'}`;
}
if (config.additionalInfo.studentId) {
// 显示学号信息
studentidElement.textContent = `学号: ${config.additionalInfo.studentId || '无信息'}`;
}
if (config.additionalInfo.date) {
// 显示日期标签
dateElement.textContent = `日期: ${config.additionalInfo.date || '未知'}`;
}
if (config.additionalInfo.organization) {
//显示单位信息
organizationElement.textContent = `单位: ${config.additionalInfo.organization || '未知'}`;
}
}
}