作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算 GLSL 中的切线空间。
这是我的代码中的重要部分:
// variables passed from vertex to fragment program //
in vec3 vertexNormal;
in vec2 textureCoord;
in vec3 lightPosition;
in vec3 vertexPos;
in mat4 modelView;
in mat4 viewMatrix;
// TODO: textures for color and normals //
uniform sampler2D normal;
uniform sampler2D texture;
// this defines the fragment output //
out vec4 color;
void main() {
// ###### TANGENT SPACE STUFF ############
vec4 position_eye = modelView * vec4(vertexPos,1.0);
vec3 q0 = dFdx(position_eye.xyz);
vec3 q1 = dFdy(position_eye.xyz);
vec2 st0 = dFdx(textureCoord.st);
vec2 st1 = dFdy(textureCoord.st);
float Sx = ( q0.x * st1.t - q1.x * st0.t) / (st1.t * st0.s - st0.t * st1.s);
float Tx = (-q0.x * st1.s + q1.x * st0.s) / (st1.t * st0.s - st0.t * st1.s);
q0.x = st0.s * Sx + st0.t * Tx;
q1.x = st1.s * Sx + st1.t * Tx;
vec3 S = normalize( q0 * st1.t - q1 * st0.t);
vec3 T = normalize(-q0 * st1.s + q1 * st0.s);
vec3 n = texture2D(normal,textureCoord).xyz;
n = smoothstep(-1,1,n);
mat3 tbn = (mat3(S,T,n));
// #######################################
n = tbn * n; // transfer the read normal to worldSpace;
vec3 eyeDir = - (modelView * vec4(vertexPos,1.0)).xyz;
vec3 lightDir = (modelView * vec4(lightPosition.xyz, 1.0)).xyz;
最佳答案
Can someone tell me what is going wrong?
dFdx/y
计算给定值的局部变化率,在屏幕空间中,在基元的表面上。换句话说,它计算给定值对基元的导数。您的输入值是线性插值的。
关于opengl - 在 FragmentShader 中计算切线空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989475/
许多贴图技术包括法线凹凸贴图、视差贴图和其他需要特殊的每顶点切线空间基础(切线、法线、副法线/双切线)。 这显然意味着我的模型不仅应该导出 顶点位置 , 纹理坐标和 近似每顶点法线 ,但也是切线空间基
如何绕过函数tan(x)未定义的角度,即x != Pi/2 + k * PI ? 我尝试使用条件: (x != 0) && (2 * x / M_PI - (int)(2 * x / M_PI ) )
我想绘制一个简单的图示,说明如何使用导数找出函数在任意点的斜率。它看起来有点像这样: 我已经使用这段代码绘制了一个简单的抛物线: import numpy as np from matplotlib
给定两个函数,我想找出两条曲线的公切线: 公切线的斜率可以通过以下方式获得: slope of common tangent = (f(x1) - g(x2)) / (x1 - x2) = f'(x1
我知道 tan(angle) 让我得到切线。但是,如何进行“反向切线”,以便在给定直角三角形两边长度的情况下得到角度? 我假设在 math.h 中有一个方法? 最佳答案 正如其他人所提到的,atan(
我是一名优秀的程序员,十分优秀!