如何实现形状的原位旋转和旋转状态下的运动? 我想将旋转的形状移向看到的屏幕的x和y轴。
按键时,形状已经沿x轴和y轴方向移动。 但是我无法按照自己的意愿前进。有点奇怪。 如何设置代码以改变我想要的方式? 我现在将代码放起来。
Sub h100_monthyear_ALTERNATIVE()
Dim rs As Worksheet
For Each rs In Worksheets
If rs.Name = "x01st" Or rs.Name = "x02nd" Or rs.Name = "x03rd" Or _
(rs.Name Like "x??th" And Val(Mid(rs.Name, 2, 2)) >= 4 And Val(Mid(rs.Name, 2, 2)) <= 31) Then
rs.Name = rs.Range("h100")
End If
Next rs
End Sub
我编写了代码以使其旋转到位。
代码顶部和底部的代码是移动到形状中心然后将其返回到其位置的代码。
我应该添加什么? 应该修改哪一部分?
我英语不好。 我很抱歉 你能帮我吗?
答案 0 :(得分:2)
请注意,数十年来,不赞成使用glBegin
/ glEnd
序列(固定功能管线矩阵堆栈)进行绘制。
阅读有关Fixed Function Pipeline的信息,并参阅Vertex Specification和Shader了解最新的渲染方式。
如何在适当位置实现形状旋转?
如果阴影应绕其局部轴旋转,则必须在平移之前进行旋转。在代码中,这意味着旋转指令必须在翻译指令之后:
glTranslatef(2.5 + puzX1, 2 + puzY1, 0);
glRotatef(puzang1, 0.0, 0.0, 1.0);
glRotatef(100, 0.0, 0.0, 1.0);
另请参阅OpenGL translation before and after a rotation
说明:
翻译:请参见glTranslate
的文档:
glTranslate
产生x y z
的翻译。当前矩阵(请参见glMatrixMode
)与此转换矩阵相乘,乘积代替当前矩阵。
轮换:请参见glRotate
的文档:
glRotate
围绕向量x y z
产生角度度旋转。当前矩阵(请参见glMatrixMode
)与旋转矩阵相乘,乘积替换当前矩阵。
翻译矩阵如下所示:
Matrix4x4 translate;
translate[0] : ( 1, 0, 0, 0 )
translate[1] : ( 0, 1, 0, 0 )
translate[2] : ( 0, 0, 1, 0 )
translate[3] : ( tx, ty, tz, 1 )
围绕Z轴的旋转矩阵如下:
Matrix4x4 rotate;
float angle;
rotate[0] : ( cos(angle), sin(angle), 0, 0 )
rotate[1] : ( -sin(angle), cos(angle), 0, 0 )
rotate[2] : ( 0, 0, 1, 0 )
rotate[3] : ( 0, 0, 0, 1 )
translate * rotate
的结果是这样的:
glTranslate( ..... );
glRotate( ..... );
model[0] : ( cos(angle), sin(angle), 0, 0 )
model[1] : ( -sin(angle), cos(angle), 0, 0 )
model[2] : ( 0, 1, 0, 0 )
model[3] : ( tx, ty, tz, 1 )
rotate * translate
的结果是:
glRotate( ..... );
glTranslate( ..... );
model[0] : ( cos(angle), sin(angle), 0, 0 )
model[1] : ( -sin(angle), cos(angle), 0, 0 )
model[2] : ( 0, 0, 1, 0 )
model[3] : ( cos(angle)*tx - sin(angle)*tx, sin(angle)*ty + cos(angle)*ty, tz, 1 )