我正在开发一个非常基本的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);
}
当前我是通过简单地清除所有内容并使用新的模型矩阵再次绘制它们来渲染场景。所以我的问题是是否有一种方法可以更新每个对象而不会在每个帧上清除和绘制整个场景?