如何GL_TEXTURE_MIN_LOD
,GL_TEXTURE_MAX_LOD
和LOD_BIAS
工作?
为了在视觉上检查,我已经使用mipmapping创建了6*6纹理,并且对于值> 0.5,MIN_LOD
我获得了3*3纹理,而不管其值是多少MAX_LOD
.如果我改变LOD_BIAS
它不会影响我的o/p.我无法弄清楚它是如何工作的.
可以通过陈述一个例子来解释吗?
编辑:我手动创建mipmap级别,以便我可以观察它正在拾取的级别.这是我的代码:
glTexImage2D(target, 0, GL_RGBA,9 ,9, 0, GL_RGBA, GL_BYTE,subpix);
glTexImage2D(target, 1, GL_RGBA,4 ,4, 0, GL_RGBA, GL_BYTE,&subpix[4]);
glTexImage2D(target, 2, GL_RGBA,2 ,2, 0, GL_RGBA, GL_BYTE,&subpix[10]);
glTexImage2D(target, 3, GL_RGBA,1 ,1, 0, GL_RGBA, GL_BYTE,&subpix[18]);
glSamplerParameterf(sampler,GL_TEXTURE_MIN_LOD,0.862);
glSamplerParameterf(sampler,GL_TEXTURE_MAX_LOD,0.99);
glSamplerParameterf(sampler,GL_TEXTURE_LOD_BIAS,0.0);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我希望它将采用2*2的第二个mipmap级别,但它选择4*4的第一个mipmap级别.当我设置min lod <0.5时,它取0级9*9.并且无论设置为max lod的值如何,都会发生这种情况.
我的顶点线是:
GLfloat vertices[]=
{
0.5f,0.5f,0.5f,
-0.5f,0.5f,0.5f,
-0.5f,-0.5f,0.5f,
0.5f,-0.5f,0.5f,//face 1
0.5f,-0.5f,-0.5f,
-0.5f,-0.5f,-0.5f,
-0.5f,0.5f,-0.5f,
0.5f,0.5f,-0.5f,//face 2
0.5f,0.5f,0.5f,
0.5f,-0.5f,0.5f,
0.5f,-0.5f,-0.5f,
0.5f,0.5f,-0.5f,//face 3
-0.5f,0.5f,0.5f,
-0.5f,0.5f,-0.5f,
-0.5f,-0.5f,-0.5f,
-0.5f,-0.5f,0.5f,//face 4
0.5f,0.5f,0.5f,
0.5f,0.5f,-0.5f,
-0.5f,0.5f,-0.5f,
-0.5f,0.5f,0.5f,//face 5
-0.5f,-0.5f,0.5f,
-0.5f,-0.5f,-0.5f,
0.5f,-0.5f,-0.5f,
0.5f,-0.5f,0.5f//face 6
};
Run Code Online (Sandbox Code Playgroud)
现在,我正在改变z绳索:
for(int i=0;i<24;i++)
vertices[i*3+2]*=10
glDepthRange(0,10.0);
Run Code Online (Sandbox Code Playgroud)
现在,我期待由于glDepthRange调用,z线将被映射到-0.5到0.5范围,并且我可以看到一个合适的立方体,但是它给出o/p,就像我在上面用变形几何注释glDepthRange一样.
我有一个关于内存映射 io 的问题。假设有一个内存映射的 IO 外设,其值正在被 CPU 读取。读取后,该值存储在缓存中。但是内存中的值已经被外部IO外设更新了。在这种情况下,CPU 将如何确定缓存已失效,这种情况的解决方法是什么?
memory caching operating-system memory-management memory-barriers
如果是 3D 纹理,
对于三维纹理,z 索引指的是第三维。这究竟是什么意思?
对于二维数组纹理,z 索引指的是切片索引。是不是如果我们有4层2D纹理,那么如果z=2,它会引用第二个2D纹理切片。?
那么除了纹理坐标之间的差异之外,当我们有目标 GL_TEXTURE_3D 和 GL_TEXTURE_2D_ARRAY 时有什么区别?
int x=8;
int k=~(x);
printf(%d",k)
Run Code Online (Sandbox Code Playgroud)
输出:9
对它的解释是:
8= 00000000 00000000 00000000 00001000
~8 = 11111111 11111111 11111111 11110111
Run Code Online (Sandbox Code Playgroud)
我们用整数分配它,因此最高有效位(MSB)是符号位bcz MSB是1因此它被视为-ve no.当你尝试打印它然后在打印之前编译器将采用2的补码因此它变为:2的补码是(~8)=9
2的补码11111111 11111111 11111111 11110111
是00000000 00000000 00000000 00001000 +1 = 1001 = 9
所以我的问题是,如果我们这样做,k=-9
如果我们打印k,它将打印-9.什么时候需要2的补充
const Byte operator/(const Byte& right) const {
require(right.b != 0, "divide by zero");
return Byte(b / right.b);
}
Run Code Online (Sandbox Code Playgroud)
我读到如果运算符的效果是产生一个新值,则需要生成一个新对象作为返回值.例如,Integer::operator+
必须生成一个Integer
操作数之和的对象.此对象由值返回为a const
,因此结果不能修改为左值.
如果我们不把它写成const
怎么办?任何有解释的例子都会有所帮助.
为什么我们还有第二个const
功能原型?
OpenGL 说如果深度函数是 GL_LESS 并且布局限定符是 depth_less,那么 OpenGL 将执行早期深度测试。
现在,如果缓冲区中的原始值为 0.5,并且特定像素的深度为 0.8,则早期深度测试将失败。但是如果我们将值修改为 0.4,那么它应该不会失败。在这种情况下这是如何工作的?
我想使用多重采样纹理。
什么是片段着色器以及如何将多个采样器传递给着色器?
另外,哪个 API 可用于加载 texel 数据?
我想为此使用默认的 FBO。
在多重采样中,在光栅化期间,每个像素中存在多个采样点,并且确定构成基元的采样点.
哪个属性对于像素中的每个样本都相同?我在某处读到颜色和纹理值相同,但像素中样本的深度和stensil值不同.但是,当为每个采样点执行片段着色器时,它们应该是不同的.
此外,在片段着色器之后,何时在管道中解析多个样本?它们是线性平均的吗?
#include <stdio.h>
#include <string.h>
main()
{
short int x=0x55AA;
printf("%x ",~x);
}
Run Code Online (Sandbox Code Playgroud)
上面的程序给出了输出:ffffaa55.我期待o/p只有aa55,因为short int是2个字节.有人可以解释一下吗?