我已经学习了一段时间的OpenGL和3D图形,我遇到了众所周知的问题:透明度,半透明度和绘制顺序依赖性.
我知道不同的alpha混合算法:减法,这是最好的,但需要正确的排序; 加法或乘法,与顺序无关,但结果不佳; 禁用z缓冲技术; 等等.
所以,我得到的主要结论是:没有神奇的方法来做透明度.
问题是:如何在现代游戏中实施透明度?我的意思是,在它们中有明确的反对物体:窗户,眼镜等.我想学习这个问题的最佳实践 - 这是如何在"大联盟"中完成的,但我还没有找到任何关于此的论文学科.
我有以下代码:
#include <functional>
//...
typedef int (*Myfun)(int);
std::function<int (int)> fn0([](int a)->int {
return -a;
});
std::cout << "val == " << fn0(3) << std::endl; //"val == -3"
Myfun *fptr = fn0.target<Myfun>(); //fptr is NULL!!
std::cout << "val == " << (*fptr)(3) << std::endl; //Access violation error
Run Code Online (Sandbox Code Playgroud)
实际上,这段代码是来自MSDN的代码,稍有改动:使用lambda而不是普通函数.
为什么调用fn0.target<Myfun>()返回NULL?
当我宣布一个常规功能
int neg(int val) {
return (-val);
}
Run Code Online (Sandbox Code Playgroud)
并写std::function<int (int)> fn0(neg);,一切似乎都有效,但lambda没有得到正确处理.