實時控制軟件第四周作業 -开发者知识库

實時控制軟件第四周作業 -开发者知识库,第1张

  • 冰球游戲系統模塊設計:
  1. Gui窗口模塊:負責整個游戲界面的繪制,作為整個游戲軟件的運行載體,目前計划采用Qt窗體程序進行游戲主窗口的創建;
  2. OpenGL模塊:在Gui窗口中進行游戲元素的繪制;
  3. 物理引擎模塊:負責進行物理邏輯的計算,主要是碰撞和速度;
  4. 定時器模塊:負責控制繪制頻率;
  5. 游戲元素
  • AI邏輯的處理:

   主要是怎樣使機械手AI判斷球的軌跡並進行攔截。

  • 可能用到的第三方庫:
  1. ODE物理引擎;
  2. qt圖形庫或imgui圖形庫,具體用哪個之后再詳細考慮;
  3. tinyxml,目的是將游戲的資源配置在xml文件中讀取,方便更改;
  4. 打算將游戲邏輯寫在lua文件中,方便修改。
  • 具體設計如下:

  程序的基礎框架將派生自此渲染框架,主要是實現render和initialize函數。

 1 class GuiBase : public QWindow , protected QOpenGLFunctions
2 {
3 Q_OBJECT
4
5 public:
6
7 explicit GuiBase(QWindow *parent = 0);
8
9 ~GuiBase();
10
11 virtual void render(QPainter *painter);
12
13 virtual void render();
14
15 virtual void initialize();
16
17 void setAnimating(bool animating);
18
19 private slots:
20
21 void renderLater();
22
23 void renderNow();
24
25 protected:
26
27 bool event(QEvent *event) Q_DECL_OVERRIDE;
28
29 void exposeEvent(QExposeEvent *event) Q_DECL_OVERRIDE;
30
31 private:
32
33 bool m_update_pending;
34 bool m_animating;
35
36 QOpenGLContext* m_context;
37 QOpenGLPaintDevice* m_device;
38 };

  從官方文檔里copy過來的一個三角形渲染框架:

 1 class TriangleWindow : public GuiBase
2 {
3 public:
4 TriangleWindow();
5
6 void initialize() Q_DECL_OVERRIDE;
7 void render() Q_DECL_OVERRIDE;
8
9 private:
10 GLuint m_posAttr;
11 GLuint m_colAttr;
12 GLuint m_matrixUniform;
13
14 QOpenGLShaderProgram *m_program;
15 int m_frame;
16 };

  shader:

static const char *vertexShaderSource =
"attribute highp vec4 posAttr;\n"
"attribute lowp vec4 colAttr;\n"
"varying lowp vec4 col;\n"
"uniform highp mat4 matrix;\n"
"void main() {\n"
" col = colAttr;\n"
" gl_Position = matrix * posAttr;\n"
"}\n";

static const char *fragmentShaderSource =
"varying lowp vec4 col;\n"
"void main() {\n"
" gl_FragColor = col;\n"
"}\n";

  運行效果:

實時控制軟件第四周作業 -开发者知识库,第2张

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复