opengl 先旋转后平移和先平移后旋转解惑

博客探讨了在OpenGL中,旋转和平移操作顺序对模型位置的影响。通过示例代码展示,无论先旋转后平移还是先平移后旋转,模型的旋转角度保持不变,但位移会有所不同。文章解释了数学上的原理,并指出两者区别在于位移是否绕原点旋转。同时澄清了关于矩阵乘法顺序的理解,并强调旋转的三种表达形式在本质上的等价性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们知道,在opengl中,如果模型中点不在原点,先平移后旋转会导致模型的位移发生变化。但在项目中遇到这么一个问题,如果不知道模型中点,或者知道模型中点一定不在原点,但我们也只需要模型方向,那么我们直接将模型旋转会得到我们想要的方向吗?即如果先平移后旋转能不能得到想要的方向?

       这个地方我疑惑了很久,因为轴只有方向没有位置,默认的旋转会朝着原点计算,当时的想法是不能,想着可能整个模型会绕着原点旋转,相当于位移了,而本身形状不会变化,但结果显然是错的。

       首先做了一个demo,一个中心在原点的正方形(灰色)先绕z轴旋转30度,再沿x轴平移0.5个单位(红色),另一个正方形则相反(蓝色):

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    //原图
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glBegin(GL_QUADS);
    glColor3f(0.5,0.0,0.0);
    glVertex3f(-0.1,0.1,0.0);
    glVertex3f(0.1,0.1,0.0);
    glVertex3f(0.1,-0.1,0);
    glVertex3f(-0.1,-0.1,0);
    glEnd();

    //先旋转再平移
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.5,0.0,0.0);
    glRotatef(30.0,0.0,0.0,1.0);
    glBegin(GL_QUADS);
    glC
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值