小编deb*_*air的帖子

如何在纹理中使用OpenGL LOD?

如何GL_TEXTURE_MIN_LOD,GL_TEXTURE_MAX_LODLOD_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的值如何,都会发生这种情况.

opengl textures texture-mapping

5
推荐指数
1
解决办法
6368
查看次数

glDepthRange如何工作?

我的顶点线是:

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一样.

opengl depth-buffer depth depth-testing

4
推荐指数
1
解决办法
5517
查看次数

使用内存映射 I/O 管理缓存

我有一个关于内存映射 io 的问题。假设有一个内存映射的 IO 外设,其值正在被 CPU 读取。读取后,该值存储在缓存中。但是内存中的值已经被外部IO外设更新了。在这种情况下,CPU 将如何确定缓存已失效,这种情况的解决方法是什么?

memory caching operating-system memory-management memory-barriers

4
推荐指数
1
解决办法
1873
查看次数

关于 glTexImage3D

如果是 3D 纹理,

对于三维纹理,z 索引指的是第三维。这究竟是什么意思?

对于二维数组纹理,z 索引指的是切片索引。是不是如果我们有4层2D纹理,那么如果z=2,它会引用第二个2D纹理切片。?

那么除了纹理坐标之间的差异之外,当我们有目标 GL_TEXTURE_3D 和 GL_TEXTURE_2D_ARRAY 时有什么区别?

opengl textures

3
推荐指数
1
解决办法
1826
查看次数

否定一个数字

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 1111011100000000 00000000 00000000 00001000 +1 = 1001 = 9

所以我的问题是,如果我们这样做,k=-9如果我们打印k,它将打印-9.什么时候需要2的补充

c bit-manipulation

3
推荐指数
1
解决办法
2万
查看次数

const返回类型在运算符重载中

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功能原型?

c++ const operator-overloading

3
推荐指数
1
解决办法
829
查看次数

了解 GL_ARB_conservative_depth 扩展

OpenGL 说如果深度函数是 GL_LESS 并且布局限定符是 depth_less,那么 OpenGL 将执行早期深度测试。

现在,如果缓冲区中的原始值为 0.5,并且特定像素的深度为 0.8,则早期深度测试将失败。但是如果我们将值修改为 0.4,那么它应该不会失败。在这种情况下这是如何工作的?

opengl depth-buffer

3
推荐指数
1
解决办法
683
查看次数

glTexImage2DMultisample 是如何工作的?

我想使用多重采样纹理。

什么是片段着色器以及如何将多个采样器传递给着色器?

另外,哪个 API 可用于加载 texel 数据?

我想为此使用默认的 FBO。

opengl textures multisampling fragment-shader opengl-3

2
推荐指数
1
解决办法
4498
查看次数

管道中的多重采样

在多重采样中,在光栅化期间,每个像素中存在多个采样点,并且确定构成基元的采样点.

哪个属性对于像素中的每个样本都相同?我在某处读到颜色和纹理值相同,但像素中样本的深度和stensil值不同.但是,当为每个采样点执行片段着色器时,它们应该是不同的.

此外,在片段着色器之后,何时在管道中解析多个样本?它们是线性平均的吗?

opengl graphics multisampling

1
推荐指数
1
解决办法
1150
查看次数

用short int补充运算符

#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个字节.有人可以解释一下吗?

c integer-promotion

1
推荐指数
2
解决办法
189
查看次数