如何获得 glm::mat4 的镜面反射?
How I can I get the mirror reflection of a glm::mat4?
所以我正在使用着色器在 OpenGL 中绘制一个 2D 场景,到目前为止看起来像这样
为了得到这个图像,我在着色器中使用了一个相机来乘以顶点的坐标。
相机代码:
glm::mat4 projection =
glm::perspective(glm::radians(45.0f), app.aspectRatio, 0.0f, 100.0f);
glm::vec3 camera = glm::vec3(0.0f, 0.0f, -2.0f);
glm::mat4 uCameraView = glm::translate(world.projection, world.camera);
着色器代码:
#version 330 core
layout(location = 0) in vec2 vPosition;
layout(std140) uniform ubo
{
mat4 uCameraView;
};
void main()
{
gl_Position = uCameraView * vec4(vPosition.x, vPosition.y, 0.0f, 1.0f);
}
如果我在着色器中乘以 -1 vPosition.y
我会得到下面的图像,这就是我想要的结果
能否以某种方式将这种“镜像翻转变换”应用于 glm::mat4 uCameraView
以避免在每个着色器上都必须这样做?
用 glm::scale
镜像相机的 y 轴。比例必须是 (1, -1, 1):
glm::mat4 projection =
glm::perspective(glm::radians(45.0f), app.aspectRatio, 0.0f, 100.0f);
glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -2.0f));
view = glm::scale(view, glm::vec3(1.0f, -1.0f, 1.0f));
glm::mat4 uCameraView = projection * view;
你只想要一个翻转变换矩阵,其通用版本是shown here。
在您的情况下,您想要翻转 L = (1, 0)
,因此变换矩阵 A
变为:
[1 0 0 0]
[0 -1 0 0]
[0 0 1 0]
[0 0 0 1]
正如@Rabbid76 指出的那样,实际上也可以将其视为缩放矩阵
所以我正在使用着色器在 OpenGL 中绘制一个 2D 场景,到目前为止看起来像这样
为了得到这个图像,我在着色器中使用了一个相机来乘以顶点的坐标。
相机代码:
glm::mat4 projection =
glm::perspective(glm::radians(45.0f), app.aspectRatio, 0.0f, 100.0f);
glm::vec3 camera = glm::vec3(0.0f, 0.0f, -2.0f);
glm::mat4 uCameraView = glm::translate(world.projection, world.camera);
着色器代码:
#version 330 core
layout(location = 0) in vec2 vPosition;
layout(std140) uniform ubo
{
mat4 uCameraView;
};
void main()
{
gl_Position = uCameraView * vec4(vPosition.x, vPosition.y, 0.0f, 1.0f);
}
如果我在着色器中乘以 -1 vPosition.y
我会得到下面的图像,这就是我想要的结果
能否以某种方式将这种“镜像翻转变换”应用于 glm::mat4 uCameraView
以避免在每个着色器上都必须这样做?
用 glm::scale
镜像相机的 y 轴。比例必须是 (1, -1, 1):
glm::mat4 projection =
glm::perspective(glm::radians(45.0f), app.aspectRatio, 0.0f, 100.0f);
glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -2.0f));
view = glm::scale(view, glm::vec3(1.0f, -1.0f, 1.0f));
glm::mat4 uCameraView = projection * view;
你只想要一个翻转变换矩阵,其通用版本是shown here。
在您的情况下,您想要翻转 L = (1, 0)
,因此变换矩阵 A
变为:
[1 0 0 0]
[0 -1 0 0]
[0 0 1 0]
[0 0 0 1]
正如@Rabbid76 指出的那样,实际上也可以将其视为缩放矩阵