【问题标题】:about VTF(vertex texture fetch)关于 VTF(顶点纹理提取)
【发布时间】:2014-03-22 15:54:13
【问题描述】:

我正在研究剪贴图算法,我想通过 VTF 获得高程。 但是我在使用顶点纹理时遇到了问题。我不知道怎么了。 相关代码是这样的:

int width=127;

float *data=new float[width*width];
for(int i=0;i<width*width;i++)
data[i]=float(rand()%100)/100.0;
glGenTextures(1, &vertexTexture);   
//glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, vertexTexture);

//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST);
glTexImage2D(
        GL_TEXTURE_2D, 0, GL_LUMINANCE_FLOAT32_ATI, 
        width, width, 0, GL_LUMINANCE, GL_FLOAT, data);

顶点着色器中的GLSL代码是这样的:

#version 410
uniform mat4    mvpMatrix;
uniform sampler2D vertexTexture;
in vec2 vVertex;

void main(void) 
{ 
    vec2 vTexCoords=vVertex/127.0; 
    float height = texture2DLod(vertexTexture, vTexCoords,0.0).x*100.0;
    // I also tried texture2D(vertexTexture, vTexCoords) 
    // and texture(vertexTexture, vTexCoords),but they don't work.
    vec4 position=vec4(vVertex.x,height,vVertex.y,1.0);
    gl_Position = mvpMatrix * position;
}

我将一些随机浮点数存储在数组数据中,然后将它们与纹理一起存储,正如顶点着色器所示,我想通过 VTF 获取 y 坐标的一些值。但结果是高度始终为 0。认为一定有问题。我不知道出了什么问题以及如何正确处理。

【问题讨论】:

  • 实际问题是什么?请描述您的期望。
  • 我将一些随机浮点数存储在数组数据中,然后将它们与纹理一起存储,并且正如顶点着色器所示,我想通过 VTF 获取 y 坐标的一些值。但结果是高度始终为 0。我认为一定有问题。我不知道出了什么问题以及如何正确处理。
  • GL_LUMINANCE_FLOAT32_ATI?在支持#version 410 的实现上?为什么不GL_R32F
  • 我是一个新手。我发现有些 ATIcard 不支持 VTF 或者当我想使用 VTF 时只支持 2 种格式的数据,所以我调整其中一种以防万一。我认为这没什么大不了的。当我使用 GL_R32F 时它仍然不起作用。
  • 顺便问一下,在使用特定版本的着色器时,我在哪里可以了解哪种数据类型更好?

标签: opengl glsl vertex-shader terrain


【解决方案1】:

现在已经解决了。答案是here。谢谢大家!

尝试在 glTexImage2D() 之后将纹理的缩小过滤器设置为 GL_NEAREST 或 GL_LINEAR:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

OpenGL 默认是使用 mipmaps,而您没有发送任何使纹理不完整并将禁用该纹理图像单元的任何内容。

然后,您可以在着色器中使用 texture(vertexTexture, vTexCoords),而不是使用显式 LOD 访问的已弃用的 texture2DLOD() 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多