CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

glTranslatef的问题

楼主UPCCPU(最低奋斗目标:农妇、山泉、有点田)2003-12-01 09:55:49 在 VC/MFC / 基础类 提问

初学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

相关问题

  • OpenGL:1、法向量到底有什么用?? 2、用glTranslatef进行模型变换,灯光位置会移动吗??
  • OPENGL中 glTranslatef的作用到底是什么? 另外使用以后对于glVertexf的坐标的影响遵循什么规律?
  • glTranslatef到底是移动模型还是照相机?再说又怎么确定的移动哪个模型?我真是糊涂了。HELP。。。

关键词

  • 矩阵
  • 图形
  • 移动
  • gltranslatef
  • glfloat
  • gluperspective
  • 定义
  • 单位
  • height
  • width

得分解答快速导航

  • 帖主:UPCCPU
  • zhucde

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo