2013-05-11 81 views

回答

4

这不是一个旋转,而是一个剪切操作,以及这样的仿射变换 - 所以它可以由固定功能流水线使用的通常的4x4变换矩阵表示。您可以通过旋转,平移和非均匀比例的组合来实现这种效果,或者您可以直接指定剪切矩阵并通过glLoadMatrix/glMultMatrix使用它。

在您的绘图中,您只需沿着一个轴使用剪切,因此x坐标保持不变。这一般可以完成与像一个矩阵:

1 0 0 0 
v 1 0 0 
0 0 1 0 
0 0 0 1 

留下X,Z和W,因为它是和变换y以Y + V * X,所以视频控制剪切的量。

+0

我不得不把我的v放在第0行第2列,我在旋转之后和翻译之前使用剪切 - 它有效,但给出了奇怪的结果:[v = 0](http://screenshooter.net/1003588/ ltkuote),[v = 0.1f](http://screenshooter.net/1003588/tbjuamh),[v = 1f](http://screenshooter.net/1003588/wivritw) - 可能是什么原因以及如何解决这个问题? – Mac70 2013-05-12 10:02:45

+0

@ Mac70:好吧,您从未指定过坐标系,我只是假设您提供的2D图形上的标准数学定义来说明我的观点,所以实际的A可能会有所不同。此外,可能还有众所周知的排长问题与排球问题。 v = 1的结果确实非常奇怪。但是没有看到一些真实的代码,没有人可以告诉你发生了什么。 – derhass 2013-05-12 15:43:52

2

该变换不是旋转,它被称为剪切。这也是一个线性转换,因此您可以使用glMultMatrix来实现它。你将不得不弄清楚哪个矩阵需要与之相乘。 Google剪切。