【问题标题】:Overlapping 2 transparent Texture2Ds in OpenGL ES在 OpenGL ES 中重叠 2 个透明 Texture2D
【发布时间】:2011-10-29 10:42:55
【问题描述】:

我正在尝试使用 OpenGL 为 iPad 制作 2D 游戏。一般来说,我是 OpenGL 的新手,所以这种混合的东西是新的。

我的绘图代码如下所示:

static CGFloat r=0;
r+=2.5;
r=remainder(r, 360);

glLoadIdentity();
//you can ignore the rotating and scaling
glRotatef(90, 0,0, -1);
glScalef(1, -1, 1);
glTranslatef(-1024, -768, 0);

glClearColor(0.3,0.8,1, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable (GL_BLEND);
glBlendFunc (GL_ONE,GL_ONE_MINUS_SRC_ALPHA);

[texture drawInRect:CGRectMake(512-54, abs(sin(((r+45)/180)*3.14)*500), 108, 108)];
[texture drawInRect:CGRectMake(512-54, abs(sin((r/180)*3.14)*500), 108, 108)];

("texture" 是一个具有透明背景的 Texture2D) 我只需要知道如何做到这一点,这样纹理周围的蓝色框就不会覆盖另一个。

【问题讨论】:

    标签: ipad opengl-es texture2d blending


    【解决方案1】:

    听起来您只需要在您最喜欢的图像编辑器中打开纹理图像,然后在 Alpha 通道中将蓝色区域设置为 0% 不透明(即 0)。 GL_ONE_MINUS_SRC_ALPHASRC_ALPHA 部分表示源纹理中的 alpha 值。

    您可能正在使用 32 位颜色,在这种情况下,您将有四个通道,红色、绿色、蓝色和 Alpha 为 8 位。

    【讨论】:

    • 我 100% 确定图像 (i55.tinypic.com/34rsv9l.png) 是完全透明的。
    • 您说我可能使用的是 32 位颜色。这会影响什么吗?
    • 不,32位应该不错。你说你看到蓝色,你的意思是你看到你的背景蓝色在应该透明的位中?如果是这种情况,我怀疑这是您的抽签顺序。使用透明度,您需要首先渲染最远的多边形,因此当新的透明区域与背景混合时,后面的区域已经在帧缓冲区中,否则它将与背景混合,然后在后面绘制另一个但它会被应该透明的区域遮住。
    • “你看到你的背景蓝色在应该透明的位中?”是正确的。但我希望纹理重叠,而且它们是相同的纹理,那么如何让透明度显示到下面的纹理?
    • 我很确定这只是您渲染多边形的顺序的一种情况。在它们重叠的地方做一个测试,确保你先画离相机最远的一个,我想你会得到你想要的结果。
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多