0

我有一个汽车的 ipad opengl-es 1.1 应用程序,我希望用户能够更改颜色。3d 网格是 uv 纹理的,它以基本的灰色开始(带有阴影和高光)。我想向用户展示十几个颜色样本,以给汽车上色。我只是不确定此时我将如何有效/高效地交换颜色。

我的意思是,当前纹理是 1024 x 1024。我是否为我的应用程序中可用的每种颜色都包含一个 1024 x 1024 纹理?我在想可能有一种更简单的方法,如果我可以在原始 1024 x 1024 纹理上为每种颜色定义一个小的 20 x 20 像素表示。然后不知何故,当用户选择颜色样本时,我可以去抓取颜色并将其“应用”到汽车上。这有意义吗?

我已将所有网格照明/颜色烘焙到我的纹理中,因此应用程序本身不使用照明,因此仅尝试更改颜色对我的纹理没有影响。如果我确实使用照明,我可以将灰色纹理与材质颜色变化混合,但我真的不喜欢这个解决方案的外观。我正在寻找纹理特定的解决方案(我认为)

任何想法或建议都会很棒。谢谢!

4

3 回答 3

0

我怀疑除了在 opengl 1.1 中制作更多纹理之外,您还能做任何事情。但我认为无论如何这将是你最好的选择。如果您要更改为 opengl 2.0 并使用着色器更改颜色,我认为性能不会太好,因为必须进行大量检查以查看颜色的范围,并将其更改为适当的颜色. 无论如何,这看起来并不顺利。

我会推荐多纹理路线。无论如何,这种大小的纹理只有大约 4mb,所以空间权衡还不错。

于 2012-12-05T07:16:44.127 回答
0

你可以尝试这样的事情:

离线:

  1. 创建黑色和白色版本的汽车纹理
  2. 从白色中减去黑色以创建新的“delta”纹理。

运行:

  1. 当玩家选择一种颜色时,创建一个新纹理(在软件中)将 delta 纹理乘以颜色,并添加到黑色汽车纹理。

您只需要在颜色发生变化时生成该纹理。对于您想要的任何颜色,这应该是一个非常快速的操作,并且存储成本最低(本质上,内存中有两个纹理,一个用于 GL)。

于 2012-12-05T07:48:32.293 回答
0

对于汽车,我实际上需要设置 shouldUseLighting = YES。通过此设置,我可以使用多纹理混合以及颜色选择器弹出窗口来允许用户选择各种颜色。

于 2012-12-23T04:51:16.000 回答