opengl中三维点如何转化为屏幕坐标?

linkfunlee 2009-08-20 11:29:36
opengl中三维数据点如何转化为屏幕坐标?我想知道三维点对应的屏幕区域
...全文
580 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
_Kwekwe_ 2010-07-16
  • 打赏
  • 举报
回复
回帖后终于可以了
_Kwekwe_ 2010-07-16
  • 打赏
  • 举报
回复
发现MSDN一个Bug,明明已经登录成功了,并且已经可以回帖了,还是提示
"如需要阅读该回复,请登录或注册CSDN!"
fanyyu 2010-04-04
  • 打赏
  • 举报
回复
正在找这方面的资料,谢谢!
liliangke 2009-09-07
  • 打赏
  • 举报
回复
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLdouble winX, winY, winZ;
GLdouble posX, posY, posZ;


glPushMatrix();

glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);

posX = vIn->x;posY = vIn->y; posZ = vIn->z;
gluProject(posX,posY,posZ,modelview,projection,viewport,&winX,&winY,&winZ);

Pout->x = (long)winX;

Pout->y = viewport[3]-(long)winY;

glPopMatrix();
Wadejr 2009-09-05
  • 打赏
  • 举报
回复
物体坐标

------->模型视图矩阵:视图变换和模型变换组成(同时,用于从场景中删除某些物体或者提供物体的裁剪视图其他裁剪平面也生效)

------->视觉坐标

------->投影矩阵:定义了视景体的大小,视景体之外的物体被裁剪掉。

------->裁剪坐标

------->透视除法:坐标(x,y,z,w)---->(x/w,y/w,z/w)

------->规范化的设备坐标

------->视口变换:可以控制视口大小从而放大缩小拉伸图形。

------->窗口坐标。

看看我的博客:http://beta.hi.csdn.net/link.php?url=http://blog.csdn.net%2Fwadejr
fandh 2009-08-20
  • 打赏
  • 举报
回复
投影,还要计算投影的方向!以及投影的平面!然后才能计算出!
WooSir 2009-08-20
  • 打赏
  • 举报
回复
视矩阵*投影矩阵*模型矩阵的变换
郑恪文 2009-08-20
  • 打赏
  • 举报
回复
概括地说有三步:
(1)经过MODELVIEW矩阵的变换(Translate, Rotate, Scalar,变换),这一步是在世界坐标系内调整顶点的位置。
(2)经过PROJECTION(投影)矩阵的变换,这一步把三维空间的点投影到进剪裁面上。
(3)投影后获得的图像在视口(Viewport)显示。这一步决定了得到的图像与窗口客户区之间的映射关系。

不知道我说清楚了没有。

如果想要直接找到一个坐标已知点映射到屏幕上以像素为单位的坐标,理论上是可行的,实际上是困难的。因为你要获得这些变换矩阵,要模拟OpenGL的流水线看起来不是很容易的,而且OpenGL在剪裁的时候好像把透视投影也经过一个畸变转换成了平行投影。
就算得到了投影后的坐标,很可能映射到客户区以后并非恰好对应着一个点。
就算得到了客户区的坐标区域,这也只是逻辑坐标,还要转换成设备坐标才行~~~


feilinhe 2009-08-20
  • 打赏
  • 举报
回复
LZ可以找些简单的例子看看
yayafu 2009-08-20
  • 打赏
  • 举报
回复
投影变换,视图变换,ok
feilinhe 2009-08-20
  • 打赏
  • 举报
回复
三维点对应的屏幕区域是由你投影坐标变换决定的,是你计算的不是固定的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧