【发布时间】:2021-11-14 20:16:07
【问题描述】:
在我的项目中,我使用了一个相当复杂的相机玻璃,它使轨迹球/轨迹球围绕中心旋转。到目前为止效果很好。对于我使用的 MVP 矩阵的创建:
// Get a handle for our "MVP" uniform
GLuint MatrixID = glGetUniformLocation(shaderProgram, "MVP");
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 <-> 100 units
glm::mat4 projection = glm::perspective(glm::radians(45.0f), 4.0f / 3.0f, 0.1f, 50.f);
// Camera matrix
glm::mat4 view = camera->getMatrix();
// Model matrix -> identity matrix (origin)
glm::mat4 model = glm::mat4(1.0f);
// our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = projection * view * model;
VertexShader 也不足为奇(这里只展示了一部分)v_position = MVP * vec4(vPos,1); 并且到目前为止运行良好。
要获得鼠标指向的规范化方向,我使用以下代码:
direction = glm::normalize( glm::unProject(glm::vec3(mouseX,700 - mouseY, 1), model, projection, glm::vec4(0.0f, 0.0f, 700, 700))); - 这里 700 是屏幕的宽度和高度。
在其他时候,我尝试使用 glm intersectRayTriangle 函数进行交叉点测试:
glm::intersectRayTriangle(cameraPosition, direction , v0, v1, v2, intersectionPos, dist)
这就是问题所在:我没有得到正确的结果,所以我猜在 unProject 代码的某个地方存在错误。也许有人对此有想法。
【问题讨论】: