继续OpenGL的一些问题的探讨
glPushMatrix();
glPopMatrix();
探讨此两个函数使用的局限性
我们很容易理解 上面的函数组合使用可以保持物体旋转而原坐标系不变
就是说当你实现了物体的旋转以后,原坐标系归位
举一个成功应用的例子:
glRotatef( xRot1, 1.0, 0.0, 0.0 ) = M11; 目的是实现物体1按xRot1量旋转
glRotatef( xRot2, 1.0, 0.0, 0.0 ) = M22; 目的是实现物体2按xRot2量旋转
我们绘制2个物体,这两个物体的初始矩阵都为M;
将2者都放在paiterGL函数里
结果为M1=M11*M (没问题)
M2=M22*M11*M (有问题了,继承了M11,使得物体2为xRot1和xRot2的叠加)
此时将
glPushMatrix();
glPopMatrix();应用于物体1的绘制
将屏蔽掉M11,使其在M2的绘制中不起作用了
对于以上问题这种方法很有效!!告一段落
接着往下看……
这两天研究OpenGL,上网查了很多资料,也想了很多,基本的思路算是清楚了
我发现网上不少人问OpenGL物体旋转引起的坐标轴的混乱,我看到好多人不由分说就引入
glPushMatrix();
glPopMatrix();
的使用
那么现在的问题是:
对于同一个物体使用
glRotatef( 45, 1.0, 0.0, 0.0 );=M11
glRotatef( 45, 0.0, 1.0, 0.0 );=M22
绕2个轴的依次旋转(其实我想实现的是物体分别按照原世界坐标系x y来分别进行旋转)
好吧 那么M1=M22*M11*M
看起来好像很正确
其实不然,以上公式是分部进行的,也就是说首先M1=M11*M
这时候,图形引起的变化是除了X轴上的点不动以外
其他点均朝向屏幕外翻45度,好吧,具体点就是如果是一个球,这个球朝向你滚动了45度(应该能理解吧)
这之后,令人不爽的是Y轴由指向上,变为了指向你,这时候M22无论如何是乘在了M11*M的基础上的
所以,球绕Y轴的转动变成了向右滚动45度角
而我本意想实现的是球在朝向你滚动了45度之后,能够原地打转45度(这时候Y轴还向上呢)
这时候要求M1=M22*M(M11是被屏蔽掉了)
但是绘制同一个物体
glPushMatrix();
glPopMatrix();
无法通过这两个函数实现绕x旋转后坐标归位,然后再实现绕y轴的旋转
那么有什么其他的好方法么?
好不容易想明白了,但是目前苦于找不到解决方案
问问题的同时,希望我这个帖子讲的还算清楚,让那些仍苦于思索这个问题的兄弟们能明白一点
glPopMatrix();
探讨此两个函数使用的局限性
我们很容易理解 上面的函数组合使用可以保持物体旋转而原坐标系不变
就是说当你实现了物体的旋转以后,原坐标系归位
举一个成功应用的例子:
glRotatef( xRot1, 1.0, 0.0, 0.0 ) = M11; 目的是实现物体1按xRot1量旋转
glRotatef( xRot2, 1.0, 0.0, 0.0 ) = M22; 目的是实现物体2按xRot2量旋转
我们绘制2个物体,这两个物体的初始矩阵都为M;
将2者都放在paiterGL函数里
结果为M1=M11*M (没问题)
M2=M22*M11*M (有问题了,继承了M11,使得物体2为xRot1和xRot2的叠加)
此时将
glPushMatrix();
glPopMatrix();应用于物体1的绘制
将屏蔽掉M11,使其在M2的绘制中不起作用了
对于以上问题这种方法很有效!!告一段落
接着往下看……
这两天研究OpenGL,上网查了很多资料,也想了很多,基本的思路算是清楚了
我发现网上不少人问OpenGL物体旋转引起的坐标轴的混乱,我看到好多人不由分说就引入
glPushMatrix();
glPopMatrix();
的使用
那么现在的问题是:
对于同一个物体使用
glRotatef( 45, 1.0, 0.0, 0.0 );=M11
glRotatef( 45, 0.0, 1.0, 0.0 );=M22
绕2个轴的依次旋转(其实我想实现的是物体分别按照原世界坐标系x y来分别进行旋转)
好吧 那么M1=M22*M11*M
看起来好像很正确
其实不然,以上公式是分部进行的,也就是说首先M1=M11*M
这时候,图形引起的变化是除了X轴上的点不动以外
其他点均朝向屏幕外翻45度,好吧,具体点就是如果是一个球,这个球朝向你滚动了45度(应该能理解吧)
这之后,令人不爽的是Y轴由指向上,变为了指向你,这时候M22无论如何是乘在了M11*M的基础上的
所以,球绕Y轴的转动变成了向右滚动45度角
而我本意想实现的是球在朝向你滚动了45度之后,能够原地打转45度(这时候Y轴还向上呢)
这时候要求M1=M22*M(M11是被屏蔽掉了)
但是绘制同一个物体
glPushMatrix();
glPopMatrix();
无法通过这两个函数实现绕x旋转后坐标归位,然后再实现绕y轴的旋转
那么有什么其他的好方法么?
好不容易想明白了,但是目前苦于找不到解决方案
问问题的同时,希望我这个帖子讲的还算清楚,让那些仍苦于思索这个问题的兄弟们能明白一点
...全文
相关推荐
基于opengl es 的显示gif的例子
在移动设备上,OpenGL ES是开发图形应用的重要工具,它允许开发者创建复杂的视觉效果和高性能的游戏。本示例将探讨如何在OpenGL ES环境中实现GIF动图的显示。首先,了解GIF格式至关重要。
iphone下opengl射线拾取
本文将深入探讨在iPhone上实现OpenGL的射线拾取,以及如何支持贴图模型的拾取。一、OpenGL基础知识OpenGL是一种跨语言、跨平台的编程接口,用于渲染2D和3D图形。
OPENGL 模拟DLA 3D效果
让我们深入探讨一下DLA、OpenGL以及如何将它们结合在一起。
visual studio 2008 OpenGL开发配置
在进行OpenGL开发时,不断查阅官方文档和在线资源,将有助于你解决遇到的问题和学习新的技术。
OpenGL 与W indows 坐标转换技术的研究
然而,在开发基于OpenGL的应用程序时,尤其是在需要与用户进行复杂图形交互的场景中,会遇到OpenGL坐标系统与Windows窗口坐标系统的差异问题。


