标签: textures

WebGL2 中浮点纹理的线性过滤

我正在尝试在 WebGL2 中使用浮点纹理。我像这样初始化纹理:

function textureFromFloat32Array( gl, arr, w, h ){
    //https://developer.mozilla.org/en-US/docs/Web/API/OES_texture_float_linear
    gl.getExtension('OES_texture_float');        // just in case
    gl.getExtension('OES_texture_float_linear'); // do I need this with WebGL2
    const texture = gl.createTexture();
    gl.bindTexture( gl.TEXTURE_2D, texture);
    // see https://www.khronos.org/registry/webgl/specs/latest/2.0/#TEXTURE_TYPES_FORMATS_FROM_DOM_ELEMENTS_TABLE
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, w, h, 0, gl.RED, gl.FLOAT, arr);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
    //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); // this works
    //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
    return texture;
}
Run Code Online (Sandbox Code Playgroud)

在 Firefox 55.0.2(64 位)中,出现以下错误:

Error: WebGL warning: drawElements: Active texture 0 for target …

javascript textures webgl2

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

纹理平面上的 OpenGL 光照不起作用

我想照亮纹理平面,但这行不通。实心球上的光很好,但纹理平面上的光不亮。

整体形象

实心球体上的照明效果良好。

但是,纹理平面上的照明不起作用。(GL_DECAL,GL_REPLACE;我也尝试过GL_MODULATE)

这是我的渲染代码的片段。(完整代码在 GitHub 上

加载纹理。

  sf::Image image;

  if (!image.loadFromFile(path))
    return false;
  glGenTextures(1, &id);
  glBindTexture(GL_TEXTURE_2D, id);

  glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA,
    image.getSize().x, image.getSize().y, 0,
    GL_RGBA, GL_UNSIGNED_BYTE,
    image.getPixelsPtr()
  );

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)

初始化

  glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  glClearDepth(1.0f);
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);
  glShadeModel(GL_SMOOTH);
  //glEnable(GL_CULL_FACE);
  glFrontFace(GL_CCW);
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  glutSetCursor(GLUT_CURSOR_NONE);
  light.Init();

  camera.SetPin((GLfloat)width / 2, (GLfloat)height/2);
Run Code Online (Sandbox Code Playgroud)

显示回调

  adjustPerspective();

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glEnable(GL_LIGHTING);

  glPushMatrix();
  camera.SetLookAt();
  light.On();

  // TODO: dsiplay processing
  for (auto& obj …
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures lighting opengl-compat

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

如何将 CUDA tex1DFetch 与 cudaTextureObject_t 一起使用?

当我注意到纹理引用已被弃用时,我正在使用纹理引用,我尝试更新我的测试函数以使用 tex1Dfetch 处理“新”无绑定纹理对象,但无法产生相同的结果。

\n\n

我目前正在探索使用纹理内存来加速我的 aho-corasick 实现;我能够得到tex1D()使用纹理引用,但是,我注意到它们已被弃用,并决定使用纹理对象。

\n\n

当我尝试以任何方式使用结果时,我会遇到一些非常奇怪的内核行为;我可以results[tidx] = tidx;没有任何问题,但只返回notresults[tidx] = temp + 1;的值或涉及 的任何其他数值测试。temptemp * 3temp

\n\n

我看不出这种行为的逻辑原因,并且文档示例看起来非常相似,我看不出哪里出了问题。

\n\n

我已经读过 CUDA tex1Dfetch() 错误行为和 New CUDA 纹理对象 \xe2\x80\x94 在 2D 情况下获取错误数据,但这似乎都与我遇到的问题无关。

\n\n

以防万一它有所作为;我正在使用 CUDA 版本 10.0、V10.0.130 和 Nvidia GTX 980ti。

\n\n
#include <iostream>\n\n__global__ void test(cudaTextureObject_t tex ,int* results){\n    int tidx = threadIdx.y * blockDim.x + threadIdx.x;\n    unsigned temp = tex1Dfetch<unsigned>(tex, threadIdx.x);\n    results[tidx] = temp * 3;\n}\n\nint main(){\n    int *host_arr;\n    const …
Run Code Online (Sandbox Code Playgroud)

textures cuda

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

如何让各向异性过滤扩展发挥作用?

在我的(C++/OpenGL)程序中,我加载一组纹理并设置纹理参数,如下所示:

\n\n
//TEXTURES\nglGenTextures(1, &texture1);\nglBindTexture(GL_TEXTURE_2D, texture1);\n// set the texture wrapping parameters\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);\n// set texture filtering parameters\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);\n\nglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现各向异性过滤可以帮助我增强场景的外观。因此,我使用这一行来实现它:

\n\n
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);\n
Run Code Online (Sandbox Code Playgroud)\n\n

虽然我在我的笔记本电脑(有 AMD GPU 供应商)上编译这行代码没有任何问题,但我无法在使用 Intel(R) HD Graphics 530 (Skylake GT2) 的另一台计算机上编译这段代码。\n具体来说,尝试使用 g++ 编译该代码段会输出以下错误:

\n\n
error: \xe2\x80\x98GL_TEXTURE_MAX_ANISOTROPY\xe2\x80\x99 was not declared in this scope\n glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);\n
Run Code Online (Sandbox Code Playgroud)\n\n

更具体地说,在我的 Linux 终端中运行以下命令:

\n\n
glxinfo | grep -i opengl\n
Run Code Online (Sandbox Code Playgroud)\n\n

显示有关我的 GPU 供应商和 OpenGL 支持的以下详细信息:

\n\n

在此输入图像描述

\n\n

我知道在 中启用了各向异性过滤ARB_texture_filter_anisotropic,但老实说,我不知道如何检查我的 GPU 供应商是否支持该扩展,如果支持,我如何才能使用各向异性过滤? …

c++ opengl textures glfw opengl-extensions

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

纹理地址模式钳制,它如何工作?

我正在尝试了解纹理钳制在OpenGL或任何其他API中如何工作。我知道一个事实,您将操作定义为将范围从[0,1]扩展到任何值,但将其限制在边缘。

所以,如果我有一个伪代码功能:

unsigned int clampedTexel(float u, float v)
{
if(u < 0) u = 0;
if(u >= width) u = width-1;
if(v < 0) v = 0;
if(v >= height) v = height-1;
return image[u][v];

}


(来源:www.cs.unc.edu上的sud

对?所以,如果我超出范围,如u方向上的1.1,为什么不将其固定在末尾的黑色上?在此示例中,它不是黑色,而是白色。我误会了吗?为什么黑色旁边的值固定为白色?

或与边缘颜色交替的任何其他扩展名。请帮助我看看我要去哪里。

opengl textures mode

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

glTexImage2d什么都不做

这个问题困扰着我.我正在测试一些Haskell绑定到OpenGL,我创建了一个顶点着色器,一个片段着色器,编译程序,并在转换顶点后在屏幕上绘制一个纹理矩形......除了屏幕是空白的.

当我渲染矩形平白而不是在片段着色器中使用采样器时,它工作正常.当我进入gdebugger并使用选项将所有纹理替换为存根纹理时,它也可以正常工作.

当我在gdebugger中查看分配的纹理时,没有纹理对象,只有默认的2d纹理.当我在glTexImage2d上设置断点时,我看到它被调用了,但是当我用gdebugger查看它时,内存中没有纹理对象出现.

这是怎么回事?我忘了设置一些环境变量吗?我很沮丧.踢球者之前我遇到过这个问题,然后我设法解决了这个问题,但我忘记了问题所在.我讨厌自己> _>

opengl textures haskell

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

OpenGL - 两种纹理的力量

OpenGL使用2次幂纹理.这是因为由于MipMapping,一些GPU仅接受2次幂纹理.在绘制比它大的纹理时,使用这些2次幂纹理会导致问题.

我曾经想过一种方法来解决这个问题,那就是当我们使纹理比实际更小时使用PO2比率,并且当我们使它变大时使用1:1的比例,但这会创建某些GPU的兼容性问题?

如果有人知道是否会出现问题(我无法检查这一点,因为我的GPU接受NPO2纹理),或者更好的解决方法,我将不胜感激.

opengl textures lwjgl

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

错误:'my_texture'没有命名类型

我试图制作简单的纹理,但是出现了一个错误:

错误:'my_texture'没有命名类型

这里出现的地方(LoadTexture方法后面):

GLuint my_texture;
my_texture = LoadTexture( "grass.bmp" );
Run Code Online (Sandbox Code Playgroud)

这是我的代码.怎么了?

#include <iostream>
#include <GL/gl.h>
#include <GL/glut.h>
#include <stdio.h>      /* printf, scanf, NULL */
#include <stdlib.h>     /* malloc, free, rand */

using namespace std;

float _angle = 0.5f;

GLuint LoadTexture( const char * filename )
{

    GLuint texture;

    int width, height;

    unsigned char * data;

    FILE * file;

    file = fopen( filename, "rb" );

    if ( file == NULL ) return 0;
    width = 1024;
    height = 512; …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glut textures

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

什么opengl命令将rambuffer上传到视频纹理

哪个命令将ram像素缓冲区准确上传到视频内存中的纹理?

这是glTexImage2D(...)?也许或其他什么?

如果我有一些纹理,并想要更改RAM缓冲区内容我可以用什么命令将其转移到视频卡?

我可以用于此目的?

opengl textures

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

OpenGL glUniform1i无效操作

因此,我一直在使用learnopengl.com书,并且一直无法让纹理单元工作.起初我在主循环中调用glGetUniform1i,就像他在书中所做的那样,但是建议(通过#learnprogramming IRC)将任何纹理操作限制在主循环之前.使用本书的代码时,问题是纹理不会像片段着色器中那样正确混合,只会渲染绑定到GL_TEXTURE_2D的第二个纹理(在本例中为"faceTexture").翻转渲染顺序可以渲染出先前使用的纹理.

但是,在主循环之前放置纹理单元代码会导致glUniform1i调用上的无效操作:

File "C:/Users/1117254/Documents/Python Experiments/OpenGL/OpenGL Testing/main.py", line 171, in main
     glUniform1i(wood_texture_loc, 0)
File "C:\Users\1117254\AppData\Local\Programs\Python\Python36\lib\site-packages\OpenGL\platform\baseplatform.py", line 402, in __call__
     return self( *args, **named )
File "errorchecker.pyx", line 53, in 
     OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src\errorchecker.c:1218)
     OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glUniform1i,
cArguments = (23724032, 0)
)
Run Code Online (Sandbox Code Playgroud)

我的错误似乎与frag着色器中统一变量的位置有关,但我不确定glGetUniformLocation给出的位置(似乎是23724032)是否有效.

下面的相关源以及顶点和片段着色器:

# Shader
shader = shader_loader.Shader("vertex.vs", "fragment.fs")

# Vertex Buffering
vao = GLuint(0)
vbo = GLuint(0)
ebo = GLuint(0)

glGenVertexArrays(1, vao)
glGenBuffers(1, vbo)
glGenBuffers(1, ebo)

glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, …
Run Code Online (Sandbox Code Playgroud)

python opengl textures pyopengl

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