首页 > 解决方案 > 如何使用模型矩阵在游戏循环中渲染帧?

问题描述

我正在开发一个非常基本的 3d 游戏引擎。我的游戏循环是这样的:

void draw()
{
   shader->bindShader();
   for(entity in entityList)
   {
      mat4 modelMat=entity.getModelMat();
      shader->sendUniform("model_matrix",&modelMat);//sending model matrix to shader
      glDraw(...)//draw call
   }
}
void gameLoop()
{
   init();
   draw();//drawing objects for the first time
   while(true)//game loop
   {
       handlingEvents();//calculate model matrices based on inputs
       renderScene();//this function renders the scene on current frame
   }
}

这是我的顶点着色器:

uniform mat4 projection_matrix;
uniform mat4 view_matrix;
uniform mat4 model_matrix;

void main()
{
gl_Position = projection_matrix*view_matrix*model_matrix*vec4(gl_Vertex.xyz,1);
}

目前我正在通过简单地清除所有内容并使用新模型矩阵再次绘制场景来渲染场景。所以我的问题是有没有一种方法可以更新每个对象,而无需在每一帧上清除和绘制整个场景?

标签: c++opengl-estransformgame-enginevertex-shader

解决方案


推荐阅读