我这里有一个小程序,其中我在窗口上画了一些元素。
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是一个巴布亚新几内亚,并有一些透明度的一面。然而,它不是出现在矩形上,而是出现在它的后面。类似的问题需要解决。有什么建议吗?
发布于 2013-01-30 07:14:52
我想你应该对二维空间进行Z排序。每个对象都应该有自己的Z值(可以是整数),在全局绘制方法中,可以使用Z顺序进行排序。
对于最上面的大多数矩形,您可以将Z设置为某个大值,以便它始终是第一个/最后一个。
在使用透明度时,这也会有所帮助。
void drawAll() {
sort_by_z_order();
foreach rect in sorted_rect_list {
draw_rect(rect)
}
}发布于 2013-01-30 07:34:47
除了指针绘制之外,还可以启用深度测试来获得这种效果:
void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}这样才能达到预期的效果
https://stackoverflow.com/questions/14597588
复制相似问题