作者zxwxz (zxwxz)
看板GameDesign
标题Re: [程式] openGL关於旋转座标
时间Fri Dec 15 01:13:53 2006
※ 引述《Yehsb (史摩布莱克)》之铭言:
: 首先感谢你进来观看
: 我是OPENGL的新手
: 最近卡住一个问题
: 我画的是一个杆件
: 现在想让这个赶件
: 以点o为旋转中心
: ________________________
: | .o .c .b|
: |________________________|
: 但是我以下方的方法写
: 它是以点c来旋转
: 那我应该要增加什麽吗??
: glPushMatrix();
: RotateCurrentAxis();
: glTranslatef(25.0f, 25.0f, 68.0f);
: static float s_rot1 = 0.0f;
: static float s_rotdelta = 2.0f;
: s_rot1 += s_rotdelta;
: glRotatef(s_rot1, 1.0f, 0.0f, 0.0f);
: glCallList(nPART_2);
: glPopMatrix();
: ==============================以上为第一个问题====================
: 第二问
: 我现在想要o点延一个圆的圆周移动
: 并且
: r点延着一个水平方向移动
: 那我又应该要怎麽写呢?
: 感谢你的解答
第一个问题
应该是你对於3D绘图整体架构要搞清楚
首先要先确定你动的是一个(物件)
要动(物件)的时候 一定有一个中心点(绘图中心点)
这就会是你对於这一个(物件)MATRIX的定位了
所以你绘图的想法就有误差了
首先你应该是想画一个长条(你这边是用CALL图形)
但是这个长条根整个绘图座标的相对应应该是
O是在绘图的中心点才对(但是你CALL的图形绘图中心点却不一样)
Rotate的用法是转基底作标喔
不是针对某一个图形转喔
如果不是的话
则必须要先把整个物件
移动到其相对应位置(移动)
才开始旋转
也就是说Rotate必须要在Translate之前做
很吊诡是吧! 但是你要知道
以上这些动作都是属於座标转移
3D绘图在这边是用经过转换後的座标绘图的
所以 所有的程式步骤都会变成是要倒着来的
以下是数学解释
Rotate(Translate(x))=y
你在画图的步骤其实是X
而实际展现却是在Y
所以X要先经过Translate移动图形才轮到Rotate转图形
但是程式却不是这样写的
因为绘图软体只会根据既定的座标绘图
因此转成数学式只能定位目前存在的座标空间
比较深入一点的可能要去查线性代数
而为了在绘图上有所谓的物件的概念
利用了许多线性系统的概念
创造出了对单一物件的线性体系
这样绘图的物件之间自然会产生其从属关系
所以才会有GLPUSH跟GLPOP用来暂存矩阵的必要性
而第二个问题
就是所谓的物件从属的问题了
你可以利用以上这些规则想想看
其中的从属关系
而怎样达成这样的效果
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.171.48.4
※ 编辑: zxwxz 来自: 218.171.48.4 (12/15 01:33)
1F:推 adms:上了一课~感谢!! 12/15 10:50