围绕任意锚点的OpenGL变换

问题描述 投票:0回答:1

我正在使用可编程管线(OpenGL 4)。问题如下。我有一个名为“ plane”的默认图元,该图元有4个顶点-在剪辑空间坐标[-1,1]范围内定义。我从不直接移动那些来缩放平面,而是将缩放应用于模型矩阵。因此,例如,要获得一个宽度为100,height = 50的平面,可以缩放该平面:

_modelMatrix.scale(100/2,50/2,1);

[另外,我还有一个锚点,它定义了平面的中心,并且可以向四周移动以偏移局部中心。问题:一切正常,直到在移动枢轴后开始缩放平面为止。例如,如果平面的width = 100和height = 100,并且我想将中心偏移到平面的左上角,则平移将模型矩阵添加到当前位置+添加x和y偏移值(分别为50和-50)。我得到的中心就可以了。但是,当我再次缩放平面时,枢轴中心不会相对于新的比例保持不变我知道在固定管线中可以通过在顶点上添加锚点偏移量来轻松解决该问题,以确保已定义的锚点相对于新比例尺进行调整是正确的方法?通过API调用直接定义顶点时,但是在我的情况下,我不想在每个渲染循环上重新创建顶点缓冲区,也不想这样做,因为我必须为在Shaders中所做的某些事情保留默认顶点号范围。

math opengl 3d
1个回答
2
投票

这是standard order-of-transforms problem。解决方案是应用转换以正确的顺序。如果要缩放然后偏移,则可以这样做。如果要偏移,然后相对于新偏移进行缩放,则可以这样做。都不是“正确的”。这完全取决于您想要的。

对于您的情况,在翻译之前,您需要先应用比例尺。假设您正与列主矩阵右乘,则表示您要提供标度last

© www.soinside.com 2019 - 2024. All rights reserved.