`
dato0123
  • 浏览: 936149 次
文章分类
社区版块
存档分类
最新评论

一点小疑问

 
阅读更多
记得我第一次看Nehe教程里第9课的时候,就被他下面这段代码弄晕了:
glRotatef(tilt,1.0f,0.0f,0.0f);//TiltTheView(UsingTheValueIn'tilt')
glRotatef(star[loop].angle,0.0f,1.0f,0.0f);//RotateToTheCurrentStarsAngle
glTranslatef(star[loop].dist,0.0f,0.0f);//MoveForwardOnTheXPlane
glRotatef(-star[loop].angle,0.0f,1.0f,0.0f);//CancelTheCurrentStarsAngle
glRotatef(-tilt,1.0f,0.0f,0.0f);//CancelTheScreenTilt

他给出的解释更是让我摸不着头脑:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

现在我们来移动星星。星星开始时位于屏幕的中心。我们要做的第一件事是把场景沿Y轴旋转。如果我们旋转90度的话,X轴不再是自左至右的了,他将由里向外穿出屏幕。为了让大家更清楚些,举个例子。假想您站在房子中间。再设想您左侧的墙上写着-x,前面的墙上写着-z,右面墙上就是+x咯,您身后的墙上则是+ z。加入整个房子向右转90度,但您没有动,那么前面的墙上将是-x而不再是-z了。所有其他的墙也都跟着移动。-z出现在右侧,+z出现在左侧,+x出现在您背后。神经错乱了吧?通过旋转场景,我们改变了xz平面的方向。
第二行代码沿x轴移动一个正值。通常x轴上的正值代表移向了屏幕的右侧(也就是通常的x轴的正向),但这里由于我们绕y轴旋转了坐标系,x轴的正向可以是任意方向。如果我们转180度的话,屏幕的左右侧就镜像反向了。因此,当我们沿 x轴正向移动时,可能向左,向右,向前或向后。

接着的代码带点小技巧。星星实际上是一个平面的纹理。现在您在屏幕中心画了个平面的四边形然后贴上纹理,这看起来很不错。一切都如您所想的那样。但是当您当您沿着y轴转上个90度的话,纹理在屏幕上就只剩右侧和左侧的两条边朝着您。看起来就是一条细线。这不是我们所想要的。我们希望星星永远正面朝着我们,而不管屏幕如何旋转或倾斜。
我们通过在绘制星星之前,抵消对星星所作的任何旋转来实现这个愿望。您可以采用逆序来抵消旋转。当我们倾斜屏幕时,我们实际上以当前角度旋转了星星。通过逆序,我们又以当前角度"反旋转"星星。也就是以当前角度的负值来旋转星星。就是说,如果我们将星星旋转了10度的话,又将其旋转-10度来使星星在那个轴上重新面对屏幕。下面的第一行抵消了沿y轴的旋转。然后,我们还需要抵消掉沿x轴的屏幕倾斜。要做到这一点,我们只需要将屏幕再旋转-tilt倾角。在抵消掉xy轴的旋转后,星星又完全面对着我们了。

今天又复习到这一课了,还是理解不了他干嘛要旋转坐标轴,接着又逆向旋转回去,就和susu讨论了下:

phinecos15:53:12
我感觉他是多余了,我修改了下代码
phinecos
15:53:22
效果也差不多呀
susu
15:53:31
是不是仅在距离上有点变化
phinecos
15:53:38
//glRotatef(tilt,1.0f,0.0f,0.0f);//TiltTheView(UsingTheValueIn'tilt')
glRotatef(star[loop].angle,0.0f,0.0f,1.0f);//RotateToTheCurrentStarsAngle

glTranslatef(star[loop].dist,
0.0f,0.0f);//MoveForwardOnTheXPlane

//glRotatef(-star[loop].angle,0.0f,1.0f,0.0f);//CancelTheCurrentStarsAngle
//glRotatef(-tilt,1.0f,0.0f,0.0f);//CancelTheScreenTilt
susu15:53:49
我看他唯一没有抵消的快乐能是dist了
phinecos
15:54:17
没必要抵消嘛,他把坐标轴转了个90度,我认为没必要
susu
15:54:31
是啊,转来转去的
phinecos
15:54:41
glRotatef(star[loop].angle,
0.0f,0.0f,1.0f);
glTranslatef(star[loop].dist,
0.0f,0.0f);
phinecos
15:55:05
我就这两句,让星星围着z轴转个角度,再平移个距离
susu
15:55:32
那又没有那个四边形没有正对着照相机?
phinecos
15:56:05
好像没有呀
phinecos
15:56:21
我再比对下效果看看
susu
15:56:27
对,前面坐标轴没有动
phinecos
15:56:44
哪个坐标轴没动呢?
susu
15:57:01
//glRotatef(tilt,1.0f,0.0f,0.0f);
phinecos15:57:38
这个坐标轴转个90度到底有啥用处吗?让四边形对着视点?
phinecos
15:58:02
它这是绕x轴转90度,我想不通
susu
15:58:11
对阿
phinecos
15:59:10
绕x轴转90度,那y,z轴就互换了,对吗?
susu
15:59:26

phinecos
15:59:34
这里转90度,是坐标轴转,还是物体转呢?
phinecos
15:59:42
我认为是坐标轴呢
susu
15:59:46
坐标轴吧
phinecos
16:00:31
那y,z轴既然已经换了,那这句:glRotatef(star[loop].angle,
0.0f,1.0f,0.0f);//旋转至当前所画星星的角度;到底是围着哪条轴转的?
phinecos16:01:02
本来应该是绕y轴,可现在z轴在它的位置上,不是变绕z了?
susu
16:01:09
应该是
phinecos
16:02:06
glTranslatef(star[loop].dist,
0.0f,0.0f);//沿X轴正向移动,这里又绕x轴平移,本来x轴就没动过,所以前面做的坐标轴变换不是白搭了。。。
phinecos16:02:37
我试下两种代码的效果区别先
susu
16:02:45
是啊
phinecos
16:05:42
汗,我是看不出效果的区别。。。
susu
16:06:00
呵呵
susu
16:06:14
glTranslatef(star[loop].dist,
0.0f,0.0f);是不是只做了一遍
phinecos
16:06:28
恩,是的
susu
16:06:43
它应该是使星星分散开的
susu
16:06:58
想明白就可以了,呵呵
phinecos
16:07:08
哦,那下面还有的:star[loop].dist
-=0.01f;
if(star[loop].dist<0.0f)
{
star[loop].dist
+=5.0f;
star[loop].r
=rand()%256;
star[loop].g
=rand()%256;
star[loop].b
=rand()%256;
}

phinecos
16:07:23
先让它归中,然后抛出去
susu
16:07:34
形成动画
phinecos
16:08:01
恩,我修改后的代码和Nehe的效果没什么区别,但没有刚才那么难理解了
phinecos
16:08:15
刚才它旋转来,又旋转回去,晕掉了
susu
16:08:16
呵呵,他可能当时有点晕了

我觉得他先把坐标轴绕X轴转了个90度,这不就让y,z轴互换了吗?再让四边形绕y轴(我理解这里应该是旋转后的z轴了)转自己的角度,最后平移自己到中心的距离,可最终他又反向旋转回去,真是让人晕,那这样旋转坐标轴到底有什么用处呢?不转还不是一样,我下面就修改了他的代码,根本不去转那个该死的坐标轴,好像最终效果也差不多呀:

glRotatef(star[loop].angle,0.0f,0.0f,1.0f);//RotateToTheCurrentStarsAngle
glTranslatef(star[loop].dist,0.0f,0.0f);//MoveForwardOnTheXPlane

我就让星星绕Z轴转自己的角度,再绕X轴平移自己距中心的距离,这样有什么问题呢?至少我是想不通。。。

分享到:
评论

相关推荐

    疑问的白色小人PPT素材下载.rar

    “3d小人”标签进一步证实了这一点,3D小人是现代PPT设计中常见的视觉元素,能够吸引观众注意力并传达复杂概念。 “PPT素材下载”说明这些资源是为PowerPoint用户准备的,可用于快速构建有吸引力的幻灯片。PPTX格式...

    关于小程序wxml引用js中变量的疑问

    我是个入门小程序的新手,最近遇到了一点疑惑,请各路大神解答一下,十分感谢。 xxx.wxml 垃圾桶实时剩余容量 {{list.recy_left}} 可回收垃圾 有害垃圾 干垃圾 湿垃圾 在这个代码中,第三行可以取出来值,但是...

    关于JSP的一点疑问小结

    让我来帮你解析和解答这些疑问。 首先,我们来看一下`register.html`部分。这是一个HTML表单,用于收集用户输入的用户名和密码。表单通过POST方法提交到`register.jsp`。在HTML中,你已经正确地设置了字符编码为UTF...

    清华图书馆机器人小图介绍

    在问答环节中,小图以幽默的方式解答关于自己设计的疑问,例如解释自己为何没有手指或是少了颗牙。这些对话不仅展示了小图的幽默感,也让它更加生动和亲切。 小图的才艺和人生哲学也是一大亮点。它会唱歌和跳舞,并...

    雷声大雨点小,《微信》小程序真的被高估了?.zip

    然而,随着时间的推移,有人提出疑问:“雷声大雨点小,《微信》小程序真的被高估了吗?”这个问题值得我们深入探讨。 首先,小程序的核心优势在于其轻量化和便捷性。用户无需下载安装即可使用,极大地节省了手机...

    一点计算机技巧

    它通常包含了计算机的基本操作方法、常见故障排除指南以及一些提高工作效率的小技巧。 #### 2. PUYAKU(未知术语)的理解 - **定义**:PUYAKU作为标签出现在文档中,可能是某个特定领域内的术语或简称,但由于信息...

    小升初英语面试自我介绍句型精选.doc

    - "请随时打断我,如果有任何疑问。" - "如果你有任何问题,请随时停下来。" - "我会在一会儿后谈到这一点。" - "是的,这是一个非常好的问题。" 通过这些精心挑选的开场白、结尾语和过渡句,孩子们可以更加...

    外研版小升初英语宾语从句的语序用法总结.docx

    下面是对外研版小升初英语宾语从句语序用法的详细总结: 1. 宾语从句的语序通常是“主句+引导词+陈述语序的从句”。例如题目中的第1题和第3题,正确的选项C和C分别展示了这个规则,即疑问词后接陈述语序(you ...

    2021小学生冀教版5下.pdf

    标题“2021小学生冀教版5下.pdf”和描述“2021小学生冀教版5下.pdf”仅表明了文件是2021年的小学生教材,使用的是冀教版,且为五年级下学期的内容,标签“小学”进一步确认了这一点。 如果要针对具体的冀教版五年级...

    基于matlab围绕中心点的图像旋转.m

    该程序将图像围绕某⼀指定点旋转⼀定的⻆度。 如有疑问,请联系博主。

    中考英语情态动词用法小结.doc

    【中考英语情态动词用法小结】 情态动词在英语中扮演着至关重要的角色,它们在表达能力和意愿、请求、许可、可能性、义务和建议等方面具有独特的语法功能。以下是中考英语中常见的几个情态动词的用法总结: 1. **...

    绘图插件TeeChart

    小弟最近2个多月一直在做... 包含TeeChart中文版的使用说明,这一点非常好。 还有一个pdf格式的TEECHART应用技术详解。 其他还有很多的小例子和各种属性的介绍。 希望可以帮助到大家,如果有什么疑问可以咨询我。

    小学英语连词成句的解题技巧PPT学习教案.pptx

    理解这一点是正确构建句子的第一步。 第二步是分类句子类型。对于问句,首先要找出现有的疑问词,如what(什么),where(在哪里),when(何时),who(谁),why(为什么),whose(谁的),how(如何),how old...

    一个SSH+ExtJs实现的简单文章管理系统(免积分)

    之前有上传一份需要5积分下载,后来发现CSDN新注册的不给积分了,怕很多同学想要下载却没有积分,再传一个免积分的版本,并且在原来的基础上做了一点小修正。希望对同学们有所帮助。如果有空会继续完善功能。

    九年级数学下册2.5切线长定理第3课时教案新版湘教版

    课堂小结部分,教师引导学生回顾所学,强调切线长的定义以及切线长定理,同时鼓励学生提出疑问,确保每个学生都能扎实掌握这些重要知识点。课后的作业和练习册进一步强化了对切线长定理的运用。 总的来说,这节教案...

    2014高考英语完形填空抓分练习精品题(64).doc

    4. 母亲的回应:母亲最初说她们会等到雨小一点再走,用的是"it slows down",即雨势减缓,符合语境。 5. 再次提议:小女孩坚持提议,这次用的是"repeated",表示她再次提出同样的建议。 6. 等待的时间:小女孩等了...

    山东省龙口市七年级英语下学期期中试题(五四制) 试题.doc

    5. **不定代词的使用**:第5小题考察了不定代词"a little"和"little"的区别,"a little"表示"一点",用于肯定句,"little"表示否定含义,意为"几乎没有",此处表示没有剩下多少食物,所以答案是B。 6. **形容词与...

    2020春六年级英语下册Unit3Ahealthydiet练习7新版牛津译林版20200429363

    - 喝一点水:Drink a little water - get out:出去 - 每天迟睡觉:Stay up late every day - take a small bottle:拿一小瓶 - 一次吃得很少:Eat very little at a time - keep …clean and tidy:保持…...

    吉林省伊通满族自治县高中物理第一章静电场1.5电势差学案无答案新人教版选修3_1.doc

    最后,课程结束时的反思和质疑环节,鼓励学生主动思考,深化理解,对知识进行总结,并提出可能存在的疑问,促进自我学习的进步。 总之,理解和掌握电势差是高中物理静电场部分的基础,通过系统学习,学生能够运用...

Global site tag (gtag.js) - Google Analytics