增加摄像机

This commit is contained in:
2026-04-23 13:11:36 +08:00
parent a78b290920
commit 974946cee4
12 changed files with 1134 additions and 23 deletions

View File

@@ -148,6 +148,24 @@ public:
void setTools(const QVector<Tool>& tools) { m_tools = tools; }
const QVector<Tool>& tools() const { return m_tools; }
// —— 摄像机正交俯视centerWorld 为视口中心viewScale 为相对参考分辨率 1600×900 的像素/世界单位比,
// 预览与视口框按该参考换算,不随实际窗口宽高改变「镜头」所覆盖的世界范围)——
struct Camera {
QString id;
QString displayName;
bool visible = true;
QPointF centerWorld;
double viewScale = 1.0;
QVector<Entity::KeyframeVec2> locationKeys;
QVector<Entity::KeyframeDouble> scaleKeys;
};
void setCameras(const QVector<Camera>& cameras) { m_cameras = cameras; }
const QVector<Camera>& cameras() const { return m_cameras; }
void setActiveCameraId(const QString& id) { m_activeCameraId = id; }
const QString& activeCameraId() const { return m_activeCameraId; }
// —— 动画系统Blender/NLA 风格简化版,工程级)——
struct AnimationClip {
QString id;
@@ -162,6 +180,9 @@ public:
// Tool channels (keyed by tool id)
QHash<QString, QVector<Entity::KeyframeVec2>> toolLocationKeys;
QHash<QString, QVector<ToolKeyframeBool>> toolVisibilityKeys;
QHash<QString, QVector<Entity::KeyframeVec2>> cameraLocationKeys;
QHash<QString, QVector<Entity::KeyframeDouble>> cameraScaleKeys;
};
struct NlaStrip {
@@ -247,6 +268,8 @@ private:
int m_fps = 60;
QVector<Entity> m_entities;
QVector<Tool> m_tools;
QVector<Camera> m_cameras;
QString m_activeCameraId;
QVector<AnimationClip> m_clips;
QVector<AnimationScheme> m_schemes;