2

我在这里有一个小程序,我在窗口上绘制了一些元素。

class CustomPointer{
void draw(); //draw png image on the screen
};

class CustomRectangle{
void draw(){
drawRect(); //draw Rectangle with a certain color
drawbtnImage(); //draw png image to the top right of rectangle (alphaBlending enabled)
}
};

主文件

CustomRectangle customRectangle;
CustomPointer customPointer;

void draw(){
drawBackgroundImage();
customRectangle.draw();
customPointer.draw();
}

当我使用上面的代码绘制我的元素时,我希望customPointer将 绘制在屏幕上的所有其他元素上,因为指针正在绘制其他所有元素。但是我的指针出现在背景上,但在customRectangle/btnImage.

如何让我customPointer的实际始终保持在窗口上的所有其他元素之上?
此外,我还希望我btnImage.draw()能够绘制在自定义形状上(如控件右上角的圆形按钮)。这btnImage是一个png,两侧有一些透明度。但是,它不是出现在矩形上方,而是出现在矩形后面。类似的问题要修复。有什么建议么?

4

2 回答 2

0

您可以为除指针绘制之外的所有内容启用深度测试以获得该效果:

void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}

应该会得到预期的效果

于 2013-01-30T07:34:47.187 回答
0

我认为您应该为 2D 空间使用一些 Z-Sorting zalgorithm。每个对象都应该有自己的 Z 值(它可以是整数),并且在全局 Draw 方法中,您使用此 Z 顺序进行排序。

对于最顶部的矩形,您可以将 Z 设置为某个较大的值,以便它始终是 first/last 。

这在使用透明度时也会有所帮助。

void drawAll() {
    sort_by_z_order();
    foreach rect in sorted_rect_list {
        draw_rect(rect)
    }
}
于 2013-01-30T07:14:52.303 回答