【发布时间】: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