Files
xiaomubiao-master/QB303_RENDERING_DEBUG_GUIDE.md
2026-05-22 16:13:20 +08:00

192 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 QB303设备渲染问题调试指南
## 🎯 问题分析
**图标加载成功** - `/3dScreen/img/flyDevices.jpg` (2048x2048)
**地图上不显示** - 可能的渲染问题
## 🔍 已完成的修复
### **1. 图标缩放调整**
```javascript
// 修复前:可能太大
scale: 0.8
// 修复后适配2048x2048大图
scale: 0.1 // 大幅减小缩放比例
```
### **2. 渲染属性优化**
```javascript
// 新增渲染优化属性
pixelOffset: new Cesium.Cartesian2(0, 0),
eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0),
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
```
### **3. 调试日志增强**
- ✅ 添加设备位置详细信息
- ✅ 显示图层中图形总数
- ✅ 输出设备世界坐标
- ✅ 强制刷新图层显示
## 🚀 新增调试工具
### **1. 渲染状态调试**
```javascript
debugQB303Rendering()
```
**功能:**
- 检查QB303设备数据
- 显示图形图层状态
- 查看相机位置
- 统计QB303图形数量
### **2. 创建测试图标**
```javascript
createTestQB303Icon()
```
**功能:**
- 创建简化的测试图标
- 使用极小的缩放比例 (0.05)
- 自动飞行到设备位置
- 添加黄色标签便于识别
## 🎮 调试流程
### **步骤1检查当前渲染状态**
```javascript
debugQB303Rendering()
```
### **步骤2重新测试QB303设备**
```javascript
testQB303Data()
```
### **步骤3创建测试图标验证**
```javascript
createTestQB303Icon()
```
### **步骤4强制刷新显示**
```javascript
forceRefreshQB303()
```
## 🔍 可能的问题和解决方案
### **问题1图标太大不可见**
**症状:** 图标创建成功但看不见
**解决:** 已将scale从0.8调整为0.1
### **问题2高度参考问题**
**症状:** 图标可能在地下或太高
**解决:** 添加了`heightReference: Cesium.HeightReference.CLAMP_TO_GROUND`
### **问题3相机位置问题**
**症状:** 图标在视野外
**解决:** 使用`createTestQB303Icon()`会自动飞行到设备位置
### **问题4图层显示问题**
**症状:** 图层被隐藏
**解决:** 添加了`this.graphicLayer.show = true`强制显示
## 📊 调试信息解读
### **正常的调试输出应该包含:**
```
✅ QB303设备 dy04 已添加到地图
✅ 设备位置: [112.8945530952381, 28.20648476190476, 200]
✅ 图层中总图形数量: X
✅ 设备图形对象: BillboardEntity {...}
✅ 设备世界坐标: Cartesian3 {...}
```
### **渲染调试输出应该显示:**
```
✅ QB303设备数据: {dy04: {...}}
✅ 图层显示状态: true
✅ 找到的QB303图形: 1 个
✅ QB303图形 1: {position: [...], show: true, style: {...}}
```
## 🎯 测试步骤
### **完整测试流程:**
```javascript
// 1. 检查渲染状态
debugQB303Rendering();
// 2. 创建测试图标(会自动飞行到位置)
createTestQB303Icon();
// 3. 等待2秒后重新测试QB303
setTimeout(() => {
testQB303Data();
}, 2000);
// 4. 再等待2秒后强制刷新
setTimeout(() => {
forceRefreshQB303();
}, 4000);
```
## 🚨 如果仍然不显示
### **备选方案1使用更小的图标**
```javascript
// 临时修改图标路径使用更小的图标
// 在aixiaorui.ts中修改getQB303DeviceIcon方法
return '/3dScreen/img/marker/plane-blue.png'; // 使用小图标测试
```
### **备选方案2手动设置图标尺寸**
```javascript
// 在BillboardEntity中添加固定尺寸
style: {
image: '/3dScreen/img/flyDevices.jpg',
width: 64, // 固定宽度
height: 64, // 固定高度
// 移除scale属性
}
```
### **备选方案3使用Point图形测试**
```javascript
// 创建简单的点图形测试位置
const testPoint = new mars3d.graphic.PointEntity({
position: [112.8945530952381, 28.20648476190476, 200],
style: {
pixelSize: 20,
color: Cesium.Color.RED,
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
}
});
window.m3Data.graphicLayer.addGraphic(testPoint);
```
## 📋 快速命令参考
```javascript
// === 渲染调试 ===
debugQB303Rendering() // 检查渲染状态
createTestQB303Icon() // 创建测试图标
// === QB303调试 ===
testQB303Data() // 测试QB303数据
forceRefreshQB303() // 强制刷新显示
// === 地图控制 ===
// 飞行到QB303位置
window.m3Data.map.flyTo({
destination: Cesium.Cartesian3.fromDegrees(112.895, 28.206, 1000)
});
// 检查图层
console.log('图层数量:', window.m3Data.graphicLayer.length);
console.log('图层显示:', window.m3Data.graphicLayer.show);
```
现在请执行 `debugQB303Rendering()` 检查当前渲染状态,然后用 `createTestQB303Icon()` 创建测试图标验证渲染是否正常!🚁🛠️✨