gpt4 book ai didi

c++ - Opengl 对象挤压

转载 作者:行者123 更新时间:2023-11-28 01:00:38 24 4
gpt4 key购买 nike

我在 opengl 中绘制了一个 3d 框,有人可以解释如何在 opengl 中拉伸(stretch)对象吗?我是否只是在每个框的 z 轴上向后平移?

最佳答案

这种方法可行,但您必须计算每一步要翻译的量。不过,我建议以更智能的方式生成挤压几何体。

例如,您不应为中间框绘制框盖(地板和天花板)。您还必须确保两侧完美接触,否则会出现伪影。

我建议使用路径来确定每组顶点所在的平面。该路径应由一系列点和每个点的方向 vector 组成,它确定围绕方向 vector 旋转多少。有了它,您可以非常轻松地计算 4 个环顶点,只需使用基本的 vector 数学。

例如,您从上限 [(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0),(0.5,-0.5,0)] 开始并沿着路径移动它(第一个是中心点,第二个是右 vector )[(0,0,0),(1,0,0)],[(0,5,10),(1,1,0 )],[(10,5,12),(0,1,0)]

现在,您首先计算所有三个方向 vector 。法线是当前点和下一个点之间的差异,因此 (0,5,10) - (0,0,0) = (0,5,10)。右 vector 必须投影到法线定义的平面上,因此我们首先使用叉积计算上 vector :(0,5,10) x (1,0,0) = (0,10,-5) .作为最后一步,我们计算右投影 vector ,它是法线和向上的叉积:(0,5,10) x (-2,4,-2) = (-125,0,0)。然后所有三个 vector 都必须归一化,如果你将它们并排放置,你将得到一个很好的转换矩阵,你可以将其应用于 cap vector ,产生当前步骤的 4 个顶点:

|-1  0        0       |   |0.5|   |-0.5     || 0  0.894427 0.447214| * |0.5| = | 0.447213| etc.| 0 -0.447214 0.894427|   |0  |   | 0.223607|

(我可能把符号弄乱了一点,你可能需要交换叉积因子才能得到正确的结果)

然后对路径上的每一步重复相同的过程,每次绘制 4 个环形四边形。

关于c++ - Opengl 对象挤压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com