如何在顶点着色器中使用LookAt矩阵
How to use LookAt matrix in vertex shader
假设我有以下顶点着色器代码:
attribute vec4 vPos;
uniform mat4 MVP;
uniform mat4 LookAt;
void main{
gl_Position = MVP * vPos;
}
我如何在这个着色器中使用LookAt
矩阵来定位相机的眼睛?我已经尝试过LookAt * MVP * vPos
,但这似乎没有工作,因为我的三角形刚刚消失在屏幕上!
我建议将LookAt移出着色器,以防止每个顶点进行不必要的计算。着色器仍然做
gl_Position = MVP * vPos;
,然后使用glm在应用程序中操作MVP。例如:
projection = glm::perspective(fov, aspect, 0.1f, 10000.0f);
view = glm::lookAt(eye, center, up);
model = matrix of the model, with all the dynamic transforms.
MVP = projection * view * model;
LookAt
矩阵一般称为View
矩阵,与模型到世界的变换矩阵连接形成WorldView
矩阵。然后乘以投影矩阵,通常是正射影或透视。模型空间中的顶点位置与结果矩阵相乘,以便转换到剪辑空间(有点…我在这里跳过了一些您不需要执行的步骤,这些步骤由硬件/驱动程序执行。
在你的例子中,确保你在转换中使用了正确的"手性"。你也可以尝试用变换矩阵的转置逆序乘以位置,如vPos*T_MVP*T_LookAt
.
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用std::vector的OpenCL矩阵乘法
- 使用C++中的模板和运算符重载执行矩阵运算
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- GCC本机矩阵运算库
- 矩阵向量乘法(cublasDgemv)返回零
- 以螺旋方式打印矩阵的程序.(工作不好)
- OpenCV C++.快速计算混淆矩阵
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 旋转模型矩阵时的形状失真
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 如何在cuSparse中得到稀疏矩阵的对角线
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- 如何缩放使用glm::lookat()获得的矩阵
- glm-lookAt和产生奇怪行为的矩阵变换
- 如何在顶点着色器中使用LookAt矩阵