MFC中,如何将获取的二维坐标转换公式成三维坐标

CAD中怎样将二维坐标系转换成三维坐标系 - CAD之家
您的位置:>>>
CAD中怎样将二维坐标系转换成三维坐标系
Auto CAD中,你看见的界面其实也是三维坐标系,是世界坐标系
只是你看见的只有x、y轴,而z轴是指向用户的
如果你换为用户UCS坐标系,那样的话,位置可以调动,
你才能看见你所谓的二维坐标系转换成三维坐标系
其实不用转换◇本站云标签actionscript
flex 中三维坐标和屏幕(二维)坐标的转换 - 小白 - ITeye技术网站
博客分类:
flash.display.DisplayObject
类包含 z 属性和新的旋转和缩放属性,这些属性用于操作 3D 空间中的显示对象。DisplayObject.local3DToGlobal
() 方法提供了一种将 3D 几何图形投影到 2D 平面
的简单方式
var p:Point = _sprite.local3DToGlobal(new
var p:Vector3D = _sprite.globalToLocal3D(new
Point(mouseX, mouseY));
_sprite.transform.matrix3D.pointAt(new
Vector3D(mouseX, mouseY,
flash.geom.Vector3D
类可用作管理 3D 点
的数据结构
。该类还支持矢量数学运算。
flash.geom.Matrix3D
类支持复杂的 3D 几何转换
,例如旋转、缩放和平移。
flash.geom.PerspectiveProjection
类控制着将 3D 几何图形映射到 2D 视图
的相关参数
在 ActionScript 中,有两种不同的模拟 3D 图像的方式:
在 3D 空间
中排列平面对象并进行动画处理
。这种方式需要使用显示对象的 x、y 和 z 属性来对显示对象进行动画处理,或者使用 DisplayObject 类设置旋转和缩放属性。使用DisplayObject.transform.matrix3D
对象可以实现更为复杂的运动
。DisplayObject.transform.perspectiveProjection
对象可自定义显示对象在 3D 透视
中的绘制方式
。如果需要对主要包含平面的 3D 对象进行动画处理,可以使用这种方式。这种方式的例子包括 3D 图库或者 3D 空间中排列的 2D 动画对象。
从 3D 几何图形生成 2D 三角形
,然后用纹理呈现这些三角形。要使用这种方式,必须首先定义和管理有关 3D 对象的数据,然后将这些数据转换成
要呈现的 2D 三角形
。可以将位图纹理映射到这些三角形,然后使用 Graphics.drawTriangles
()方法将三角形绘制为图形对象。这种方式的例子包括从文件中加载 3D 模型数据
并将模型呈现到屏幕上,或以三角形网格形式生成和绘制 3D 图形。
原帖地址:/Study/Topic/840272
baixiaozhe
浏览: 280550 次
来自: 北京
没图啊!!楼主
不知道怎么用
step6是Foo, step7是Bar。(foo和bar 中 ...
谢谢!太感谢,我还以为flex3不能实现用组件导出excel呢 ...
问下,用infoWindowRenderer怎样才能监听到in ...矩阵论在Direct3D中三维坐标变换的运用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
矩阵论在Direct3D中三维坐标变换的运用
矩​阵​论​在​D​i​r​e​c​tD​中​三​维​坐​标​变​换​的​运​用
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢MFC向OpenGL坐标转换
方法一,该方法单纯的为转换坐标
GetOGLPos 屏幕坐标转换成OPENGL坐标
int GetOGLPos(int x, int y, double * posX, double * posY, double *
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );
winX = (float)x;
winY = (float)viewport[3] - (float)y;
glReadPixels( x, int(winY), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT,
gluUnProject( winX, winY, winZ, dModelview, projection, viewport,
posX, posY, posZ);
return TRUE;
方法二,该方法可以解决OpenGL若干作图问题
class GLVECTOR3D
float x,y,z;
GLVECTOR3D(){ x=y=z=0.0; }
GLVECTOR3D(float tx,float ty,float tz){ x= y= z= }
class POINT3D
float x,y,z;
POINT3D(){x=0.0; y=0.0; z=0.0;}
POINT3D(float fx,float fy,float fz){ x= y= z= }
bool operator==(POINT3D pt)
&& if(pt.x==x
&& pt.y==y
&& pt.z==z)
GLVECTOR3D operator - (POINT3D pt){
&& GLVECTOR3D
&& vec.x=x-pt.x;
&& vec.y=y-pt.y;
&& vec.z=z-pt.z;
GLfloat distanceto(POINT3D pt){
&& if(*this==pt) return
&& GLfloat
dx=(float)fabs(x-pt.x);
&& GLfloat
dy=(float)fabs(y-pt.y);
&& GLfloat
dz=(float)fabs(z-pt.z);
&& return GLfloat(sqrt(dx*dx+
dy*dy+ dz*dz));
以上是两个类,下面为坐标转换函数
glMatrixMode(GL_MODELVIEW);&
glPushMatrix();&
GLint viewport[4];&
GLdouble modelview[16];&
GLdouble projection[16];&
GLfloat winX, winY, winZ;&
GLdouble posX, posY, posZ;&
POINT3D pot3d;
glGetDoublev( GL_MODELVIEW_MATRIX, modelview
glGetDoublev( GL_PROJECTION_MATRIX, projection
glGetIntegerv( GL_VIEWPORT,viewport );&
winX = (float)point.x;&
winY = (float)m_viewport[3] -
(float)point.y;&
glReadPixels( point.x, int(winY), 1, 1, GL_DEPTH_COMPONENT,
GL_FLOAT, &winZ );&
&& gluUnProject( winX, winY,
winZ, modelview, projection,viewport, &posX,
pot3d.x = (float)posX;
pot3d.y = (float)posY;
pot3d.z = (float)posZ;
return pot3d;
原文地址:
-------------------------------------------
屏幕坐标转换成OpenGL坐标系坐标【转自songyun870】
注:本方法是在使用gluPerspective(GLdouble fov,GLdouble aspect,GLdouble
near,GLdouble far);
定义视野的前提下将屏幕坐标转换为OpenGL坐标系坐标.
首先要理解gluPerspective函数
fov参数标示y轴方向上的展角度数
aspect标示屏幕宽度与高度之间的比例
near与far表示近剪裁平面与远剪裁平面的距离
现在来考虑一个问题如果进行平移变换
glTranslatef(0,0,-1);
从(0,0,0)点开始,沿y轴,每格0.01个单位长度绘制一个点,那么在屏幕中能开到几个点?
我们知道真跟fov参数息息相关.
如果我们的fov参数取90
那么y轴正方向的视角与z轴负方向夹角是45
那么在glTranslatef(0,0,-1)下,能够观察到得y轴正方向的长度为 1/tan(45度) = 1
所以能够绘制1/0.01个点
这等同于我们以gluLookAt(0,0,0,0,0,-1,0,1,0)观察任意的平移变换绘制完图形
这样的情况下y轴正方向可以观察到1个单位长度
现在可以计算转换坐标需要的比例了
既然y轴正方向长度为1那么,显示屏幕的宽的一半,就表示1个OpenGL单位长度,计算这个值
获取当前窗口的屏幕长度可以在WM_SIZE消息下,lParam高位为高,低位为宽
height& = HIWORD(lParam);
&&&int width =
LOWORD(lParam);
这样计算出单位像素unit_pixel
= (height / 2 )/ tan ((fov/2)的弧度值)
现在假设要转换屏幕坐标(10,20)
屏幕宽度的一半用half_w长度的一半用half_h表示
则转换之后的OpenGL坐标系下的x,y坐标为用(ox,oy)表示
ox = (10 - half_w)/unit_
oy = (half_h - 20)/unit_
要注意,我们的unit_pixel是在glTanslatef(0,0,-1)的条件下测得的,所以
我们实际得到的OpenGL坐标为(ox,oy,-1);
或者先做平移变换
glTranslatef(0,0,-1)
然后OpenGL坐标为(ox,oy,0)
本人习惯上一直用(ox,oy,-1)表示
当屏幕大小变动时,更新uint_pixel即可
已投稿到:

我要回帖

更多关于 二维坐标转换 的文章

 

随机推荐