gpt4 book ai didi

c++ - 对屏幕上绘制的元素进行深度排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:08:56 25 4
gpt4 key购买 nike

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

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 并且它的侧面有一些透明度。但是,它没有出现在矩形上方,而是出现在矩形后面。要修复的类似问题。有什么建议吗?

最佳答案

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

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

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

void drawAll() {
sort_by_z_order();
foreach rect in sorted_rect_list {
draw_rect(rect)
}
}

关于c++ - 对屏幕上绘制的元素进行深度排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14597588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com