【问题标题】:OPEN GL - Change Vertex position from a texture colorOPENGL - 从纹理颜色更改顶点位置
【发布时间】:2016-02-16 01:39:35
【问题描述】:

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

我将平面对象绑定了两种不同的纹理,一种是要在对象上显示的颜色纹理,另一种是heightMap,(黑白),它必须改变平面的de vertexyy位置取决于对应纹理坐标中的白色。

我知道问题出在我的着色器中。我对 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 过滤器,因为默认将使用 mipmapping,如果您的纹理不是 miopmap 完整的,则纹理采样将不起作用。在顶点着色器中采样纹理时,Mipmapping 也将不起作用。
  • 通常,高度图的 texCoord 是从顶点 pos(在世界坐标中)计算的,您将它们除以地图的宽度和高度,您将得到高度图的 tex 坐标,范围从 0.0 到 1.0。
  • 谢谢。我已经解决了这个问题。已解决:我忘记更改对象顶点的数量

标签: opengl opengl-es textures shader texture-mapping


【解决方案1】:

我忘记更改对象的顶点数

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2019-03-17
    • 2017-12-31
    • 2020-12-16
    • 2022-11-18
    相关资源
    最近更新 更多