对屏幕上绘制的元素进行深度排序
Depth sorting of elements drawn on the screen
我这里有一个小程序,我在窗口中绘制了一些元素。
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)
}
};
主.cpp
CustomRectangle customRectangle;
CustomPointer customPointer;
void draw(){
drawBackgroundImage();
customRectangle.draw();
customPointer.draw();
}
当我使用上面的代码绘制我的元素时,我希望customPointer
绘制在屏幕上的所有其他元素上,因为指针正在绘制其他所有元素。但是我的指针出现在背景上,但在customRectangle/btnImage
后面。
如何让我的customPointer
实际上始终保留在窗口上的所有其他元素之上?
此外,我还希望我的btnImage.draw()
绘制在自定义形状上(如控件右上角的圆形按钮)。btnImage
是 png,侧面有一些透明度。但是,它不是出现在矩形上方,而是出现在矩形后面。要修复的类似问题。有什么建议吗?
我认为你应该为2D空间做一些Z-Sort算法。每个对象都应该有自己的 Z 值(它可以是整数),在全局 Draw 方法中,使用此 Z 顺序进行排序。
对于最上面的矩形,您可以将 Z 设置为某个大值,以便它始终是第一个/最后一个。
这在使用透明度时也会有所帮助。
void drawAll() {
sort_by_z_order();
foreach rect in sorted_rect_list {
draw_rect(rect)
}
}
您可以
对除指针绘制以外的所有内容启用深度测试以获得该效果:
void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}
应该得到预期的效果
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- OpenGL在启用深度测试时不会丢弃我的碎片
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- 在 OpenCV 中按深度维度排序,C++
- 递归深度切断策略:并行快速排序
- 对屏幕上绘制的元素进行深度排序