Opengl 如何在着色器中更改正交矩阵大小
我尝试缩放正交投影矩阵,但它似乎无法缩放其尺寸。我正在使用正交投影进行定向照明。但是如果主摄像机在地面上,我想使我的正交矩阵范围更大 例如,如果摄影机为零,则orho矩阵为Opengl 如何在着色器中更改正交矩阵大小,opengl,matrix,glsl,glm-math,projection-matrix,Opengl,Matrix,Glsl,Glm Math,Projection Matrix,我尝试缩放正交投影矩阵,但它似乎无法缩放其尺寸。我正在使用正交投影进行定向照明。但是如果主摄像机在地面上,我想使我的正交矩阵范围更大 例如,如果摄影机为零,则orho矩阵为 glm::正交(-10.0f,10.0f,-10.0f,10.0f,0.01f,4000.0f) 但如果相机在y方向移动400,我希望这个矩阵是这样的 glm::正交(-410.0f,410.0f,-410.0f,410.0f,0.01f,4000.0f) 但是我想用矩阵乘法或加法在着色器中实现这一点,矩阵可以通过以下方式计
glm::正交(-10.0f,10.0f,-10.0f,10.0f,0.01f,4000.0f)
但如果相机在y方向移动400,我希望这个矩阵是这样的
glm::正交(-410.0f,410.0f,-410.0f,410.0f,0.01f,4000.0f)
但是我想用矩阵乘法或加法在着色器中实现这一点,矩阵可以通过以下方式计算:
r = right, l = left, b = bottom, t = top, n = near, f = far
X: 2/(r-l) 0 0 0
y: 0 2/(t-b) 0 0
z: 0 0 -2/(f-n) 0
t: -(r+l)/(r-l) -(t+b)/(t-b) -(f+n)/(f-n) 1
例如,在glsl中:
float l=-410.0f;
浮子r=410.0f;
浮动b=-410.0f;
浮子t=410.0f;
浮子n=0.01f;
浮球f=4000.0f;
mat4投影=mat4(
vec4(2.0/(r-l),0.0,0.0,0.0),
vec4(0.0,2.0/(t-b),0.0,0.0),
vec4(0.0,0.0,-2.0/(f-n),0.0),
vec4(-(r+l)/(r-l),-(t+b)/(t-b),-(f+n)/(f-n),1.0)
);
此外,还可以缩放正交投影矩阵: c++
glm::mat4正交=glm::正交(-10.0f,10.0f,-10.0f,10.0f,0.01f,4000.0f);
浮子刻度=10.0f/410.0f;
glm::mat4 scale_mat=glm::scale(glm::mat4(1.0f),glm::vec3(scale,scale,1.0f));
glm::mat4 ortho_new=ortho*scale_mat;
glsl
float scale=10.0/410.0;
mat4刻度\u mat=mat4(
vec4(标度,0.0,0.0,0.0),
vec4(0.0,刻度,0.0,0.0),
vec4(0.0,0.0,1.0,0.0),
vec4(0.0,0.0,0.0,1.0)
);
mat4 ortho_new=ortho*比例_mat;
谢谢。有没有其他的解决办法,比如用另一个矩阵相乘?@aramok我扩展了答案。