标签: textures

glActiveTexture和glBindTexture之间的差异和关系

从我收集的内容中,glActiveTexture设置活动的"纹理单元".每个纹理单元可以具有多个纹理目标(通常为GL_TEXTURE_1D,2D,3D或CUBE_MAP).

如果我理解正确,你必须先调用glActiveTexture纹理单元(初始化为GL_TEXTURE0),然后将(一个或多个)"纹理目标"绑定到该纹理单元?

可用的纹理单元的数量取决于系统.我在我的图书馆看到最多32个枚举的枚举.我想这实际上意味着我可以拥有GPU的极限(我认为是这样)168)在任何时候GPU内存中都有32个纹理?我想还有一个额外的限制,我没有超过GPU的最大内存(据说是1 GB).

我能正确理解纹理目标和纹理单元之间的关系吗?假设我允许每个16个单位和4个目标,这是否意味着有16*4 = 64个目标的空间,或者它不能那样工作?

接下来,您通常要加载纹理.你可以通过这样做glTexImage2D.第一个参数是纹理目标.如果这样工作glBufferData,那么我们基本上将"句柄"/"纹理名称"绑定到纹理目标,然后将纹理数据加载到该目标中,从而间接地将其与该句柄相关联.

怎么样glTexParameter?我们必须绑定一个纹理目标,然后再次选择同一个目标作为第一个参数?或者,只要我们有正确的活动纹理单元,纹理目标是否不需要绑定?

glGenerateMipmap 也在目标上运行......目标必须仍然绑定到纹理名称才能成功?

然后,当我们要引起我们的对象上有一个纹理,我们要不要选择积极的纹理单元,然后一个纹理目标?或者我们选择一个纹理单元,然后我们可以从与该单元相关的4个目标中的任何一个中获取数据?这是让我很困惑的部分.

opengl textures

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

Android OpenGL纹理压缩

我需要一些帮助来查找如何使用Android纹理压缩的信息(或示例).我现在有很多PNG,我需要减少他们占用的内存量.我在看PVR压缩,但我无法弄清楚如何在OpenGL中使用它.

有些人可能指出我正确的方向或提供一些例子,因为我找不到任何东西.

android textures opengl-es

55
推荐指数
2
解决办法
5万
查看次数

与OpenGL TextureSampling相比,糟糕的OpenCL ImageSampling性能

我最近将我的volumeraycaster从OpenGL移植到OpenCL,这使得raycaster的性能降低了大约90%.我跟踪了OpenCL的图像采样功能的性能下降,这比相应的OpenGL纹理采样功能慢得多.通过删除图像采样功能和纹理采样功能,两个raycaster实现具有大致相同的速度.为了轻松地在不同的硬件上使用功能,并在其余的RT代码中排除一些愚蠢的错误,我写了一个小的基准测试,将OpenCL采样速度与OpenGL采样速度进行比较,并在不同的机器上进行测试但是OpenCL仍然只占OpenGL性能的10%左右.

基准测试的OpenCL HostCode(至少是其中最重要的部分):

void OGLWidget::OCLImageSampleTest()
{
    try
    {
    int size=8;
    float Values[4*size*size*size];
    cl::Kernel kernel=cl::Kernel(program,"ImageSampleTest",NULL);
    cl::ImageFormat FormatA(CL_RGBA,CL_FLOAT);
    cl::Image3D CLImage(CLcontext, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR ,FormatA,size,size,size,0,0,Values,NULL);


    cl::ImageFormat FormatB(CL_RGBA,CL_UNSIGNED_INT8);
    cl::Image2D TempImage(CLcontext, CL_MEM_WRITE_ONLY,FormatB,1024,1024,0,NULL,NULL );


    kernel.setArg(0, CLImage);
    kernel.setArg(1, TempImage);



    cl::Sampler Samp;
    Samp() = clCreateSampler( CLcontext(), CL_TRUE, CL_ADDRESS_REPEAT, CL_FILTER_LINEAR, NULL);
    kernel.setArg(2, Samp);

    QTime BenchmarkTimer=QTime();
    BenchmarkTimer.start();

    cl::KernelFunctor func = kernel.bind(queue, cl::NDRange(1024,1024), cl::NDRange(32,32));
    func().wait();

    int Duration =  BenchmarkTimer.elapsed();
    printf("OCLImageSampleTest: %d ms \n", Duration);
    }
    catch (cl::Error& err)
      {
        std::cerr << "An OpenCL error occured, " << err.what()
                  << "\nError num …
Run Code Online (Sandbox Code Playgroud)

opengl textures image opencl sampling

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

ffmpeg视频到opengl纹理

我正在尝试使用ffmpeg渲染帧并将其从视频转换为OpenGL纹理以放置在四边形上.我已经筋疲力尽了谷歌并没有找到答案,我找到了答案,但似乎没有一个有效.

基本上,我avcodec_decode_video2()用来解码帧然后sws_scale()将帧转换为RGB然后glTexSubImage2D()从它创建一个openGL纹理,但似乎无法使任何东西工作.

我确保"目标"AVFrame在SWS上下文设置中具有2维的功能.这是我的代码:

SwsContext *img_convert_ctx = sws_getContext(pCodecCtx->width,
                pCodecCtx->height, pCodecCtx->pix_fmt, 512,
                256, PIX_FMT_RGB24, SWS_BICUBIC, NULL,
                NULL, NULL);

//While still frames to read
while(av_read_frame(pFormatCtx, &packet)>=0) {
    glClear(GL_COLOR_BUFFER_BIT);

    //If the packet is from the video stream
    if(packet.stream_index == videoStream) {
        //Decode the video
        avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);

        //If we got a frame then convert it and put it into RGB buffer
        if(frameFinished) {
            printf("frame finished: %i\n", number);
            sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

            glBindTexture(GL_TEXTURE_2D, texture);
            //gluBuild2DMipmaps(GL_TEXTURE_2D, …
Run Code Online (Sandbox Code Playgroud)

opengl textures ffmpeg video-processing render-to-texture

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

单声道噪声与Perlin噪声

我想知道为什么在Simplex问世后,Perlin噪音仍然如此受欢迎.单一噪声是由Ken Perlin自己制作的,并且它假设接管他的旧算法,这种算法对于更高的尺寸和更好的质量(没有可见的伪像)来说是缓慢的.

单面噪声在2001年出现,在过去的10年里,我只看到人们谈论Perlin噪声,当涉及到为地形生成高度图,创建程序纹理等等.

任何人都可以帮助我,Simplex噪音有一些缺点吗?我听说有传言说Perlin噪音在1D和2D噪音方面更快,但我不知道它是否真实.

谢谢!

textures image-processing perlin-noise simplex-noise

38
推荐指数
4
解决办法
2万
查看次数

拉伸UIButton的背景图像

我的纹理比我的UIButton短得多.

我有这个纹理:

在此输入图像描述

我应该创建这个按钮:

在此输入图像描述

我应该如何伸展(而不是平铺)这种纹理?沿水平方向拉伸

日Thnx

textures uibutton uiimage ios

34
推荐指数
2
解决办法
4万
查看次数

Three.js中的自定义纹理着色器

我只是想创建一个非常简单的片段着色器,它为网格绘制指定的纹理.我查看了一些自定义片段着色器,它们完成了相同的操作并构建了自己的着色器并支持它周围的JS代码.但是,它只是不起作用.这是我正在尝试运行的代码的工作抽象:

顶点着色器

<script id="vertexShader" type="x-shader/x-vertex">
    varying vec2 vUv;

    void main() {
        vUv = uv;

        gl_Position =   projectionMatrix * 
                        modelViewMatrix * 
                        vec4(position,1.0);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

片段着色器

<script id="fragmentShader" type="x-shader/x-fragment">
    uniform sampler2D texture1;

    varying vec2 vUv;

    void main() {
        gl_FragColor = texture2D(texture1, vUv); // Displays Nothing
        //gl_FragColor = vec4(0.5, 0.2, 1.0, 1.0); // Works; Displays Flat Color
    }
</script>
Run Code Online (Sandbox Code Playgroud)

场景代码

<script>
    // Initialize WebGL Renderer
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    var canvas = document.getElementById('canvas').appendChild(renderer.domElement);

    // Initialize Scenes
    var scene = new …
Run Code Online (Sandbox Code Playgroud)

shader textures fragment-shader three.js

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

从照片中删除纸张纹理图案

我用纸张纹理图案扫描了一张旧照片,我想尽可能地去除纹理而不降低图像质量.有没有办法,可能在MATLAB中使用图像处理工具箱?

我试图应用FFT转换(使用Photoshop插件),但我找不到任何明显的白点可以画画.对于这种方法,这种模式可能不那么规律吗?

您可以在下面看到示例.如果您需要完整的图像,我可以将其上传到某处. 照片样本

matlab textures design-patterns image-processing

28
推荐指数
2
解决办法
8450
查看次数

glPixelStorei(GL_UNPACK_ALIGNMENT,1)缺点?

总是使用1的alginment有什么缺点?

glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
Run Code Online (Sandbox Code Playgroud)

它会影响现代gpus的性能吗?

c++ opengl textures alignment pbo

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

Three.js中同一网格面上的多个透明纹理

是否有可能在Three.js中的同一面上将多个纹理叠加在一起,以便在webGL中加速alpha加速?

纹理(或应该)应用于同一面,使得底部纹理(纹理1)没有alpha通道,并且上面的纹理以类似下面图像示例中的纹理2的方式被引导.

这种混合可以使用HTML5 Canvas作为前置步骤来实现,但由于纹理位图可能很大,我更喜欢跳过Canvas混合操作.

我通过创建网格的副本并对每个网格应用一个纹理进行测试,并使其他网格透明并移动了一点,几乎成功,但有一些闪烁,因为对象不能完全在同一位置,有一些纹理之间的空间不是正确的效果.他们看起来应该像是混合在一起.Photoshop(如下图所示).

在此输入图像描述

javascript textures alphablending webgl three.js

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