GameDesign 板


LINE

在写程式的过程我不断遇到对单一轴旋转另两轴跟着转的问题 也就是 glRotatef( angle, x,y,z ); 这个函数 转glRotatef( 90, 1,0,0 ); 後,y轴和z轴 也一起对x轴转了九十度 所以之後y z的转动就不是原本坐标轴的y和z了。 上次发问後有个人推荐我去看一篇为平衡环锁的文章 http://www.programmer-club.com.tw/ShowSameTitleN/opengl/2000.html 以上为网址,照跑出来的的确是我想要的结果,但我看不太懂。 -------------------网页上的程式码-------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <GL/glut.h> float mo[16]; void init_mo(); void update_mo( float angle, float x, float y, float z ); void display(); void keyboard( unsigned char key, int x, int y ); void main( int argc, char **argv ) { glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH ); glutInitWindowSize( 512, 512 ); glutCreateWindow( "gimbal_lock" ); glutDisplayFunc( display ); glutKeyboardFunc( keyboard ); init_mo(); glutMainLoop(); } void display() { GLint viewport[4]; glGetIntegerv( GL_VIEWPORT, viewport ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glClearColor( .1, .2, .3, 1 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( 45, double(viewport[2])/viewport[3], 0.1, 10 ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0,0,3, 0,0,0, 0,1,0 ); glMultMatrixf(mo); glutSolidTeapot(.7); glutSwapBuffers(); } 这是为什麽目的存在的? 怎麽用? void init_mo() { memset( mo, 0, sizeof(mo) ); mo[0]=mo[5]=mo[10]=mo[15]=1; glutPostRedisplay(); } 这个函数的作用? 为什麽这样写? void update_mo( float angle, float x, float y, float z ) { glPushMatrix(); glLoadIdentity(); glRotatef( angle, x,y,z ); glMultMatrixf(mo); //这行是做什麽? glGetFloatv( GL_MODELVIEW_MATRIX, mo ); //这行是做什麽? glPopMatrix(); glutPostRedisplay(); } 我知道push pop用来存取状态 但到底状态是什麽型态东西? push pop实际的的使用方式我也还是不懂,希望善心人士讲解。 void keyboard( unsigned char key, int x, int y ) { switch( key ) { case 27: init_mo(); break; case '1': update_mo( -5, 1,0,0 ); break; case '2': update_mo( 5, 1,0,0 ); break; case '3': update_mo( -5, 0,1,0 ); break; case '4': update_mo( 5, 0,1,0 ); break; case '5': update_mo( -5, 0,0,1 ); break; case '6': update_mo( 5, 0,0,1 ); break; } } ------------------------------------------------------ 或是有什麽其他的解决方法也请多指教, 希望可以指教的详细一点,拜托大家了。 -- 邮差又来送羊奶了 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.90.37 ※ 编辑: prjryu 来自: 118.160.90.37 (05/16 05:08)
1F:推 Bencrie:init_mo是把mo这个矩阵初始化成Identity 05/16 08:52
2F:→ Bencrie:update_mo只是利用OpenGL算旋转矩阵并且存到mo 05/16 08:54
3F:→ Bencrie:glMultMatrix() 把目标矩阵跟现在的矩阵相乘 05/16 08:55
4F:→ Bencrie:glGetFloatv是从OpenGL状态机拿出某些float资料,程式中 05/16 08:56
5F:→ Bencrie:是取Modelview矩阵。 05/16 08:57
6F:→ Bencrie:push跟pop是堆叠的操作,在OpenGL里有所谓的矩阵堆叠, 05/16 08:58
7F:→ Bencrie:也就是说所有的存取单位是一个矩阵。如果你不知道堆叠是 05/16 08:59
8F:→ Bencrie:什麽,请翻阅你的资料结构课本。 05/16 08:59







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP