Opengl 是否有任何方法可以使用类似实例的操作同时设计多个不同的模型?
我正在学习现代OpenGL创建3D游戏和不同的功能 前一段时间,我试图为一个场景设置动画,在这个场景中,无数的模型以不同的动作同时绘制,当我编程时,我通常在打印任何内容之前修改着色器中的信息,例如Opengl 是否有任何方法可以使用类似实例的操作同时设计多个不同的模型?,opengl,Opengl,我正在学习现代OpenGL创建3D游戏和不同的功能 前一段时间,我试图为一个场景设置动画,在这个场景中,无数的模型以不同的动作同时绘制,当我编程时,我通常在打印任何内容之前修改着色器中的信息,例如 glUniform3f(glGetUniformLocation(shader,"pos"),0,10,0) glUniform1f(glGetUniformLocation(shader,"rX"),90) glDrawArrays(GL_TRIANGLES,
glUniform3f(glGetUniformLocation(shader,"pos"),0,10,0)
glUniform1f(glGetUniformLocation(shader,"rX"),90)
glDrawArrays(GL_TRIANGLES, 541203, 400)
在着色器中有一些函数,我通过在屏幕上定位模型来进行几何变换计算
然而,在编写代码的过程中,我发现了更改着色器中状态开销的问题,因此我更改了编程方式
现在,与我之前绘制的对象相同,我将所有计算都放在着色器中,从而减少了修改统一变量的需要,并使游戏更轻
但最近,我正在编写一个场景,整个自然都会随风移动,其中主要包括草和树叶
问题是,我不知道如何优化屏幕上打印的信息量,例如,在图像中,我可以创建一个场景,使用几簇草(忘记颜色)并设置动画
我想要一个结果,一个球员所在的空间有无数的草丛,当他在比赛中行走时,他可以在其他位置重新保护更多的草丛,但是如果他回到那一点,同样的草丛将在相同的位置
问题是,每个gram的位置都存储在着色器内部的一个变量中,当我修改它时,请记住它是一个包含1000多个值的数组,它会加重硬件的负担,并阻止良好的性能
因此,我不知道该怎么做,我想进一步优化代码并在屏幕上放置更多对象,但每次我这样做时,我不知道如何优化它,使其看起来像相同位置的相同对象。您可以使用glMultiDrawArraysIndirect:
或glmultipaurementsindirect
为此目的
但是,上述函数要求OpenGL>=4.3。据我所知,这些功能还没有进入OpenGLES。但是,如果您对这个约束条件没有意见,这应该可以回答您的问题。GLDraweElements具有更好的性能。不要渲染视野之外的模型。“在不同位置设计不同的模型”这是什么意思?你如何在“位置”上“设计”一个“模型”?我说的是3D模型和将其置于理想位置的变换,例如角色、动物、车辆,任何在某个点移动的模型,我所说的情况是,其中几个是同时绘制的。我猜否决票是因为答案只涵盖了问题的一部分。它没有说明如何定位这些模型。它甚至没有解释所提到的方法是如何起作用的。