Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphics TBN矩阵真的是旋转矩阵吗?_Graphics_Glsl_Shader - Fatal编程技术网

Graphics TBN矩阵真的是旋转矩阵吗?

Graphics TBN矩阵真的是旋转矩阵吗?,graphics,glsl,shader,Graphics,Glsl,Shader,我看过一些家伙的着色器片段,合成的TBN矩阵用于转换属性a_pos,但显然它与凹凸贴图或其他任何内容无关。这可能是由着色器的输入参数生成的旋转矩阵吗?那些向量(法线、副法线、切线)只不过是三个基,不是吗 我的意思是着色器的TBN矩阵从来都不是应用于凹凸贴图的TBN矩阵(如您所知,在切线空间中将向量转换为向量,或者使用TBN矩阵的逆将切线中的向量转换回),并且不涉及光线计算。我心里有点困惑 希望你的人帮我度过难关。对不起,我的英语不好,谢谢 以下是着色器,如下所示: #ifdef GL_ES #e

我看过一些家伙的着色器片段,合成的TBN矩阵用于转换属性a_pos,但显然它与凹凸贴图或其他任何内容无关。这可能是由着色器的输入参数生成的旋转矩阵吗?那些向量(法线、副法线、切线)只不过是三个基,不是吗

我的意思是着色器的TBN矩阵从来都不是应用于凹凸贴图的TBN矩阵(如您所知,在切线空间中将向量转换为向量,或者使用TBN矩阵的逆将切线中的向量转换回),并且不涉及光线计算。我心里有点困惑

希望你的人帮我度过难关。对不起,我的英语不好,谢谢

以下是着色器,如下所示:

#ifdef GL_ES
#else
#define highp
#define mediump
#define lowp
#endif
uniform   mat4 u_mvp;

attribute vec3 a_pos;
attribute vec3 a_normal;
attribute vec2 a_uv0;
attribute vec2 a_uv1;

varying   vec2 v_texcoord0;
varying   vec2 v_texcoordMap;

uniform highp float u_time;
uniform mediump float u_1DivLevelWidth;
uniform mediump float u_1DivLevelHeight;

void main()
{
    float mapPos = a_normal.x * 0.1 + a_normal.y * 0.6;
    vec2 v1 = vec2(cos(mapPos + u_time * 0.6), cos(mapPos + u_time * 0.9));
    mapPos = (a_normal.x + a_normal.y + a_pos.x + a_pos.y) * 3.0;
    vec2 v2 = vec2(cos(mapPos + u_time * 3.2 + (a_uv1.y * 0.1)), cos(mapPos + u_time * 2.9 + (a_uv1.y * 0.1))) * 0.02 * a_uv1.y;



    vec3 normal = normalize(vec3(v1 * (a_uv1.x * 0.2), 5.0));
    //vec3 normal = vec3(0.0, 0.0, 1.0);
    vec3 binormal = normalize(cross(normal, vec3(1.0, 0.0, 0.0)));
    vec3 tangent = normalize(cross(binormal, normal));


    // to transform the position using the above TBN matrix
    // what's the TBN matrix meaning for 
    vec4 pos = vec4((a_pos * mat3(tangent, binormal, normal)) + a_normal, 1.0) + vec4(v2 * (a_uv1.y * 0.2), 0.0, 0.0);

    gl_Position = u_mvp * pos;
    v_texcoord0 = a_uv0;
    v_texcoordMap = vec2(pos.x * u_1DivLevelWidth, pos.y * u_1DivLevelHeight);
}

TBN矩阵正在光栅化基本坐标和世界坐标之间转换。这3个向量表示旋转矩阵,原点通常位于
(0,0,0)
或其中一个顶点

您问题的答案取决于TBN用法。如果仅将其用于矢量(如用于平行光计算或凹凸贴图),则“是”TBN可以只是旋转矩阵。但若你们也需要变换位置,那个么你们需要有原点的完整矩阵


请参阅相关的QA:其中TBN用作旋转3x3矩阵。

“这可能是由一些输入参数组成的旋转矩阵,仅以三个为基础?”不清楚您的意思。您好,@Nicol Bolas。我已经把这个描述清楚无误了