Java 扩展网格顶点位置
我有一个物理库不断更新的2d点。我知道它们的局部位置,并将其存储在Java 扩展网格顶点位置,java,geometry,mesh,Java,Geometry,Mesh,我有一个物理库不断更新的2d点。我知道它们的局部位置,并将其存储在顶点数组中: for (int i = 0; i < bodies.size(); i++) { Vec2 pos = bodies.get(i).getLocalPoint(center); vertices[i * 2] = -pos.x; vertices[i * 2 + 1] = -pos.y; } for(int i=0;i
顶点数组中
:
for (int i = 0; i < bodies.size(); i++) {
Vec2 pos = bodies.get(i).getLocalPoint(center);
vertices[i * 2] = -pos.x;
vertices[i * 2 + 1] = -pos.y;
}
for(int i=0;i
每个点通过弹簧与其相邻点相连,并且可以向任何方向移动。由于每个实体都是连接的,因此多边形作为一个整体也可以旋转和移动。网格示例:
我使用这些多边形位置来映射纹理,并在稍后进行一些绘制。现在我想扩展(生长)每个顶点位置,以便缩放贴图纹理。我正在尝试实现这样的结果(蓝色点表示扩展的顶点,还要注意内部顶点也会扩展):
我所尝试的:
- 将每个顶点乘以偏移值,如果实体旋转,顶点位置将变形李>
- 根据距中心的距离,通过偏移值增加每个顶点向量的大小。如果主体是静止的,则此操作有效,但如果主体旋转,则其变形与缩放相同
- 使用图形库进行缩放也会得到与以前尝试类似的结果。由于要进行缩放,需要旋转绘制的网格,但是网格已经旋转和变形
均匀乘以顶点坐标和旋转不会使系统变形。你是如何完成这个过程的?如果我正确理解你的问题,你是在谈论第一点吗?如果是这样,在创建网格时,我会存储一个值,该值表示我希望在
x
和y
方向上扩展每个顶点的程度,然后在更新顶点
数组时,我会执行顶点[I*2]=-pos.x*scale.x;顶点[i*2+1]=-pos.y*scale.y那么X和Y的系数是不同的?在这种情况下(旋转+非均匀缩放)应发生变形。要使形状正确,必须先旋转到零角度,然后再缩放、缩放和向后旋转(构建适当的仿射矩阵)@MBo是的,它们可以变化。我一直在玩旋转,我用了3个点(左上角、右上角和中心点)来获得角度,虽然它非常粗糙,因为形状可以弯曲和挤压,所以我放弃了这个想法。也许你有一些线索,我可以得到这样的形状准确的旋转角度?如果旋转和缩放是由于用户交互,你最好在每一刻只做一个操作。对于刚性旋转,使用两个点(一个“固定”-旋转中心,第二个-旋转“控制柄”均匀乘以顶点坐标即可,旋转不会使系统变形。你是如何完成这个过程的?如果我正确理解你的问题,你是在谈论第一点吗?如果是这样,在创建网格时,我会存储一个值,该值表示我希望在x
和y
方向上扩展每个顶点的程度,然后在更新顶点
数组时,我会执行顶点[I*2]=-pos.x*scale.x;顶点[i*2+1]=-pos.y*scale.y那么X和Y的系数是不同的?在这种情况下(旋转+非均匀缩放)应发生变形。要使形状正确,必须先旋转到零角度,然后再缩放、缩放和向后旋转(构建适当的仿射矩阵)@MBo是的,它们可以变化。我一直在玩旋转,我用了3个点(左上角、右上角和中心点)来获得角度,虽然它非常粗糙,因为形状可以弯曲和挤压,所以我放弃了这个想法。也许你有一些线索,我可以得到这样的形状准确的旋转角度?如果旋转和缩放是由于用户交互,你最好在每一刻只做一个操作。对于刚性旋转,使用两个点即可-一个“固定”-旋转中心,第二个-旋转“手柄”