首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >屏幕上绘制的元素的深度排序

屏幕上绘制的元素的深度排序
EN

Stack Overflow用户
提问于 2013-01-30 05:53:57
回答 2查看 297关注 0票数 2

我这里有一个小程序,其中我在窗口上画了一些元素。

代码语言:javascript
复制
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

代码语言:javascript
复制
CustomRectangle customRectangle;
CustomPointer customPointer;

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

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

如何使我的customPointer始终保持在窗口上的所有其他元素之上?

此外,我还期望在自定义形状上绘制我的btnImage.draw() (就像控件右上角的一个圆形按钮)。btnImage是一个巴布亚新几内亚,并有一些透明度的一面。然而,它不是出现在矩形上,而是出现在它的后面。类似的问题需要解决。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2013-01-30 07:14:52

我想你应该对二维空间进行Z排序。每个对象都应该有自己的Z值(可以是整数),在全局绘制方法中,可以使用Z顺序进行排序。

对于最上面的大多数矩形,您可以将Z设置为某个大值,以便它始终是第一个/最后一个。

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

代码语言:javascript
复制
void drawAll() {
    sort_by_z_order();
    foreach rect in sorted_rect_list {
        draw_rect(rect)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-01-30 07:34:47

除了指针绘制之外,还可以启用深度测试来获得这种效果:

代码语言:javascript
复制
void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}

这样才能达到预期的效果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14597588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档