如何有效地交换纹理颜色?

时间:2012-12-04 21:31:57

标签: ipad opengl-es textures

我有一辆汽车的ipad opengl-es 1.1 app,我希望用户能够改变颜色。 3d网格是uv纹理的,它以基本的灰色开始(带有阴影和高光)。我想向用户展示十几种颜色,以便为汽车涂漆。我现在还不确定如何有效/高效地交换颜色。

我的意思是,当前纹理是1024 x 1024.我的应用程序中可用的每种颜色都包含1024 x 1024纹理吗?我想可能有一种更简单的方法,可能我可以在原始的1024 x 1024纹理上定义每种颜色的小20 x 20像素表示。然后以某种方式,当用户选择了一个颜色样本时,我可以去抓取颜色并且"应用"它到车上。这有意义吗?

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

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

3 个答案:

答案 0 :(得分:0)

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

我会推荐多纹理路线。纹理大小只有大约4mb,所以空间权衡并不坏。

答案 1 :(得分:0)

您可以尝试这样的事情:

离线:

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

    1. 当玩家选择颜色时,创建一个新纹理(在软件中)将delta纹理乘以颜色,然后添加到黑色汽车纹理。
    2. 您只需在颜色更改时生成该纹理。它应该是一个非常快速的操作,并且存储成本很小(基本上,内存中有两个纹理,一个用于GL),适用于您想要的任何颜色。

答案 2 :(得分:0)

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

相关问题