glTranslatef的问题
初学OpenGL有些基本问题不甚明白,请指教。
glTranslatef(x,y,z)
中的x、y、z不是表示沿x、y、z轴的移动距离吗?
我初始化窗口大小为500×500
但我绘图时按下面方式可以绘出图来
glPushMatrix();
glTranslatef(0,0,-8);
glutSolidTorus(0.275,0.85,30,40);
glPopMatrix();
glFlush();
但如果改为glTranslatef(5,0,-8);时则图形移出窗口了
请问glTranslatef中x、y、z的值到底是个什么单位,如果以象素为单位,改变一点点也不会移动那么多吧。还有好多其他的函数也是如此改变一点就大不一样。
问题点数:50、回复次数:5Top
1 楼zhucde(【風間苍月】★<==>★【虚拟闲人】)回复于 2003-12-01 10:10:41 得分 50
它的坐标定义不是以象素,
形象的说,它的坐标范围是[-1,1]
也就是说,如果Z轴为0时,
x=-1,则在最左端,x=1,则在最右端.
当然,这也和你的投影矩阵有关系,比如:
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);//建立透视投影矩阵
这样,只有z轴为0.1-100之间的用户才能看得到,
所以,这时的z必须是(0.1-100)之间才能看得到.Top
2 楼UPCCPU(最低奋斗目标:农妇、山泉、有点田)回复于 2003-12-01 11:05:22 得分 0
如楼上所言按下面的方式做
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
然后
glPushMatrix();
glTranslatef(0,0,0);
glutSolidTorus(0.275,0.85,30,40);
glPopMatrix();
glFlush();
上面glTranslatef中的z为0在[0.1,100.0]之间为什么就显示不出来呢?
再就是如果我gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,10.0f,20.0f);
我再这样写:
glTranslatef(0,0,15);
也显示不出图形,但这样写就有了图形,就是添了一个负号
glTranslatef(0,0,-15);
请再给予解答,谢谢!Top
3 楼zhucde(【風間苍月】★<==>★【虚拟闲人】)回复于 2003-12-01 11:14:00 得分 0
对不起,偶写错了,没把我的意思表达出来.
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
最后两个参数第一个是nearplane,最后一个是farplane,
意思是最近看到的和最远的,
相对于屏幕就是向屏幕里延伸,
表现在z轴上就是负值,
所以0.1-100表现在z轴上应该是[-0.1~~~-100]Top
4 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-01 11:28:32 得分 0
都是对矩阵进行变换操作,可以参考:
http://expert.csdn.net/Expert/topic/2280/2280775.xml?Top
5 楼wangweintk(枫杨)回复于 2003-12-01 11:33:06 得分 0
opengl初始视点(眼睛)位置在(0,0,0),从这个点向Z轴的负方向看。
你的视景体在0.1f到100.0f内,
Translatef(0,0,15),是将你在原点画的图形向Z轴正方向移动15(在你眼睛的后面),所以你就看不见了。
关于移动的单位到底是什么,这要看你自己的定义,如果你定义了视景体和视口,它们会有一个自动的映射(x,y),Z为深度,也在于你自己的定义(米,分米,公里等都可以),关键在于要确定你整体场景的比例一致。Top




