Opengl 打开GL-从纹理颜色更改顶点位置

Opengl 打开GL-从纹理颜色更改顶点位置,opengl,opengl-es,textures,shader,texture-mapping,Opengl,Opengl Es,Textures,Shader,Texture Mapping,我有一个平面,由NURB曲面制成,有许多顶点,因此它可以根据顶点位置(控制点)创建曲面 我用两种不同的纹理绑定平面对象,一种是要在对象上显示的颜色纹理,另一种是高度贴图(黑色和白色),它必须根据相应纹理坐标中的白色改变平面的de vertexyy位置 我知道问题出在我的着色器中。我没有很多使用OPENGL的经验 下面是我使用的shader.vert: attribute vec3 aVertexPosition; attribute vec3 aVertexNormal; attribute v

我有一个平面,由NURB曲面制成,有许多顶点,因此它可以根据顶点位置(控制点)创建曲面

我用两种不同的纹理绑定平面对象,一种是要在对象上显示的颜色纹理,另一种是高度贴图(黑色和白色),它必须根据相应纹理坐标中的白色改变平面的de vertex
yy
位置

我知道问题出在我的着色器中。我没有很多使用OPENGL的经验

下面是我使用的
shader.vert

attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec2 aTextureCoord;

uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform mat4 uNMatrix;

varying vec2 vTextureCoord;

uniform sampler2D uSampler2;

uniform float heightScale;

void main() {

//change texture coordinates
vec2 texInver=vec2(1.0, -1.0);

vTextureCoord = aTextureCoord*texInver;
//--------------------------

//change vertex position
vec4 filter = texture2D(uSampler2, vTextureCoord);

float offset = filter.r;

vec3 inc = vec3(0.0, offset, 0.0);

gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition + inc, 1.0);
//----------------------
}
因为图像是黑白的,所以R=G=B。这就是为什么我只检查
filter.R

我的
shader.frag
是:

#ifdef GL_ES
precision highp float;
#endif

varying vec2 vTextureCoord;

uniform sampler2D uSampler;

void main() {
gl_FragColor = texture2D(uSampler, vTextureCoord);
}
这是高度图(
.jpg
):

我得到的结果是,在
yy
坐标中,一个平面的值都增加了1

我期望的结果是平面的某个顶点在
yy
坐标中增加0-1的值

我忘了更改对象顶点的数量


这就是问题所在,在我这么做之后问题就解决了。

如何指定纹理坐标?如果指定错误,可能会导致为每个顶点指定相同的tc,这将恰好是纹理值1。此外,请确保正确设置纹理。您应该特别检查min/mag过滤器,因为默认情况下将使用MIPMAP,如果您的纹理未完成miopmap,纹理采样将无法工作。在顶点着色器中采样纹理时,Mipmapping也不起作用。通常,高度贴图的texCoord是从顶点位置(在世界坐标中)计算出来的。将它们除以贴图宽度和高度,将得到高度贴图的tex coord,范围为0.0到1.0。谢谢。我已经解决了这个问题。已解决:我忘记更改对象顶点的数量