我这里有一个小程序,我正在窗口上绘制一些元素。
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)
}
};
的main.cpp
CustomRectangle customRectangle;
CustomPointer customPointer;
void draw(){
drawBackgroundImage();
customRectangle.draw();
customPointer.draw();
}
当我使用上面的代码绘制我的元素时,我期望将customPointer
绘制在屏幕上的所有其他元素上,因为指针正在绘制其他所有内容。但我的指针出现在背景上,但落后于customRectangle/btnImage
。
如何让我的customPointer
实际上始终保持在窗口上的所有其他元素上?
另外,我还期望我的btnImage.draw()
被绘制在自定义形状上(就像控件右上角的圆形按钮)。 btnImage
是一个png,它的两侧有一些透明度。但是,它不会出现在矩形上,而是出现在它后面。类似的问题需要解决。有什么建议吗?
答案 0 :(得分:0)
我认为你应该为2D空间进行一些Z-Sorting zalgorithm。每个对象都应该有自己的Z值(可以是整数),在全局Draw方法中,您可以使用此Z顺序进行排序。
对于最顶部的矩形,您可以将Z设置为某个较大的值,以便它始终是第一个/最后一个。
这在使用透明度时也会有所帮助。
void drawAll() {
sort_by_z_order();
foreach rect in sorted_rect_list {
draw_rect(rect)
}
}
答案 1 :(得分:0)
你可以为除了指针绘制之外的所有内容启用深度测试以获得该效果:
void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}
应该达到预期的效果