Opengl 如何基于场景最大和最小坐标设置glm::ortho的边界?

Opengl 如何基于场景最大和最小坐标设置glm::ortho的边界?,opengl,math,glm-math,Opengl,Math,Glm Math,我有一个三角形,在空间的任何地方有3个顶点 我试图得到它的最大和最小坐标 void findBoundingBox(glm::vec3 & minBB, glm::vec3 & maxBB) { minBB.x = std::min(minBB.x, mCoordinate.x); minBB.y = std::min(minBB.y, mCoordinate.y); minBB.z = std::min(minBB.z, mC

我有一个三角形,在空间的任何地方有3个顶点

我试图得到它的最大和最小坐标

void findBoundingBox(glm::vec3 & minBB, glm::vec3 & maxBB)
{
        minBB.x = std::min(minBB.x, mCoordinate.x);  
        minBB.y = std::min(minBB.y, mCoordinate.y);
        minBB.z = std::min(minBB.z, mCoordinate.z);
        maxBB.x = std::max(maxBB.x, mCoordinate.x);
        maxBB.y = std::max(maxBB.y, mCoordinate.y);
        maxBB.z = std::max(maxBB.z, mCoordinate.z);
    }
}
现在我试着设置 :

我尝试通过以下方式将正交视图设置为包裹三角形:

myCamera.setProjectionMatrix(min.x, max.x, max.y,min.y, 0.0001f, 10000.0f);
但在我看来,这并不是三角形的完美边界

我已经被难住一天了,有什么建议吗

错误:输出:(我希望视图整齐地绑定三角形)

编辑:

基于注释(我尝试用视图矩阵更新边界(模型是identity,所以现在忽略它) 还是不走运:(


计算边界框时,需要将透视变换之前的所有变换应用于输入点

在您的代码片段中,看起来您正在应用具有任意视点(50、200、200)的查看转换作为渲染的一部分。在将输入点输入到
findBoundingBox()函数之前,您需要将此转换应用于输入点

在更数学的术语中,顶点着色器中通常有类似的内容,
InputPosition
是原始顶点坐标:

gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * InputPosition;

要确定将所有点映射到给定范围的投影矩阵,您需要查看投影矩阵应用到的所有点。使用上述符号,这些点是
ViewMatrix*ModelMatrix*InputPosition
。因此,在计算边界框时,模型和视图矩阵(或者模型视图矩阵,如果您将它们组合起来的话)需要应用于输入点。

我想这类似于为阴影映射获得一个好的边界……好的方面我一直在尝试:glm::vec4 minSS=((myCamera.getViewMatrix())*glm::vec4(minWS,0.0));glm::vec4 maxSS=((myCamera.getViewMatrix())*glm::vec4(maxWS,0.0));myCamera.setProjectionMatrix(mins.x,maxSS.x,maxSS.y,mins.y,0.0001f,10000.0f);不不不不……你的权利!!!不是最小-最大值,而是坐标本身在到达之前!是的!!!
glm::vec4 minSS = ((myCamera.getViewMatrix()) * glm::vec4(minWS, 0.0));
glm::vec4 maxSS = ((myCamera.getViewMatrix()) * glm::vec4(maxWS, 0.0));

myCamera.setProjectionMatrix(minSS.x, maxSS.x, maxSS.y, minSS.y, -200.0001f, 14900.0f);
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * InputPosition;