Please enable Javascript to view the contents

[随笔]OpenRA 图形模块

 ·  ☕ 1 分钟

图形渲染模块都在 Graphics 文件夹中

透明度排序问题

WindowMode 窗口模式

PrimitiveType 几何体的形式:点线三角形

IPlatform -> 创建 窗口/声音/字体

IPlatformWindow -> 由 IPlatform 创建

IGraphicsContext 包含在 IPlatformWindow 中

是 通过 IShader shader 直接绑定在流水线上

ViewPort 设置渲染画面的大小和窗口的位置

总 Renderner

Game 类里面有个总 Renderer

Renderer 包含多种渲染模块:
SpriteRenderer
RgbaSpriteRenderer
RgbaColorRenderer
ModelRenderer

他们都是 Batch Renderer

除了 Model 只有World 才有 其他都分为 World 和 Sprite 两套

Renderer -> 包含了 PlatformWindow 和 GriaphicsContext 还有 Window

IRender 表示的具体物体

Palette

调色板

Renderer.cs 中接口定义

IBatchRenderer

模型相关

  • Model.cs
  • ModelAnimation.cs
  • ModelRenderer.cs

演示相关

  • Pallete.cs
  • PaletteReference.cs

游戏场景渲染

  • WorldRenderer 好像只渲染游戏场景,因为我发现在游戏加载和安装下载界面都不会运行

WorldRenderer 在 StartGame 才会构造

从 BeginWorld 开始
然后调用 Draw()

Sprite 渲染

Shader 的输入

游戏渲染流程整理

游戏启动阶段:

  • Game.InitializeAndRun()
  • Run()
  • Loop()
  • RenderTick()

渲染阶段:

  • 预备阶段
  • 场景渲染
  • UI渲染
  • 渲染完毕 Flush 结果

建筑渲染举例

具体建筑实现了 IRender

Buildings.Bridge

每个建筑会有一个 Template 列表,代表不同状态需要渲染的东西,在 Render 按需返回

template ID 的对应关系在 tileset 中 用 Template@170 定义

分享

saberuster
作者
saberuster
一个喜欢编程和折腾的追风少年