【发布时间】:2014-12-08 21:05:54
【问题描述】:
我在我正在制作的一个小型 Java OpenGL 项目中使用 GLSL 着色器,并且我正在尝试提出一种编写良好的面向对象的方式来组织我的代码。到目前为止,我有一个名为Model 的类,它可以包含多个网格,每个网格都有自己的纹理和材质(材质是一组用于描述环境、漫反射、镜面反射、混合等的参数)。为了实现这一点,我知道每次需要更改材质时都可以将统一变量传递给着色器。但是,绘图发生在模型的draw() 方法中。这是否意味着Model 类的每个实例都需要关联一个特定的着色器?
另外,我有一个Camera 类,它会生成一个矩阵,该矩阵将转换顶点以模拟相机的俯仰、偏航和位置。然后这个矩阵需要作为视图矩阵上传到着色器。这是否意味着我需要将此矩阵上传到我使用的每个着色器?因此,如果每个Model 都可以有自己的着色器,我怎样才能将相机的视图矩阵上传到所有它们?即便如此,每个模型都拥有自己的着色器不是效率低下吗?如果您想多次绘制某个模型,那么您将use()着色器并在每次绘制时将矩阵上传到着色器。
我真的很难想出一个面向对象的解决方案来链接多个着色器、多个对象和多个材质。任何帮助表示赞赏。
【问题讨论】:
标签: java oop opengl glsl shader