OpenGL的正交投影转换透视投影问题

我是在MFC单文档下使用OpenGL。利用OnPaint()绘制图形。OnSize()控制窗口。
读取一些坐标绘制图形,坐标都很大例如(87226.35 ,12607.87, 43.81)。
我的正交投影参数为

 glOrtho(87200, 88000, 12250.0, 13050.0, -50, 50);

这样可以完整的看到图形。
但是换到透视投影

 glFrustum(87200, 88000, 12250.0, 13050.0, 1, 60);

就没法显示出图形了。求解应该怎样正确设置透视投影的参数。
因为我需要做图形的放大缩小(镜头拉近的感觉)。在正交投影情况下难以实现。

2个回答

glFrustum不但决定了投影方式,也决定了视野。看不到图形,说明图形超出了视野之外。你设置一下观察矩阵,使得物体落在视野当中就可以看到物体了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
透视投影 in OpenGL
<p>n 该课程是《计算机图形学基础》的后续课程,主要讲解了计算机图形学中经典的固定渲染管线的概念,包括:n</p>n<p>n - 固定渲染管线的概念n</p>n<p>n - 固定渲染管线的矩阵变换n</p>n<p>n - 固定渲染管线中每个阶段矩阵变换的数学原理n</p>n<p>n - <span>固定渲染管线中每个阶段矩阵变换对应的OpenGL函数</span>n</p>n<p>n <span>- OpenGL函数原理验证</span>n</p>
墨卡托投影转换、兰勃特投影转换OpenGl
在opengl下实现了墨卡托投影和兰伯特投影,数据在data文件夹下,实现了自动投影
OpenGL ES 透视投影
图元装配 剪裁坐标 透视除法 视口变换 利用w分量产生三维效果 透视投影 透视投影背后的数学原理 透视投影例子前面我们知道了一个顶点要想显示到屏幕上,它的x、y、z分量都要在[-1,1]之间,我们回顾一下渲染管线的图元装配阶段,它实际上做了以下几件事:剪裁坐标、透视分割、视口变换。图元装配的输入是顶点着色器的输出,抓哟是物体坐标gl_Position,之后到光栅化阶段。图元装配剪裁坐标当顶点着色器写
安卓OpenGL ES——透视投影
OpenGL ES 透视投影
OpenGL中透视投影的距离问题
现实世界的摄影距离与OpenGL中的投影距离有什么一一对应的关系吗?rn比如在现实世界的投影距离是1m,在OpenGL中应该是多大?
opengl 平行投影透视投影
opengl 圆球 光照 平行投影 透视投影 光照 源代码
OpenGL ES 正交投影与透视投影
正交投影与透视投影的源码; 该源码是 OpenGL 示例源码集合. OpenGL 需要依赖 v7 包
OpenGL透视投影小程序(源码)
本程序提供给OpenGL初学者使用, 该程序中描述了如何实现透视投影。代码中如有疑问请指出,会为你一一解答。
OpenGL 正交投影、透视除法、透视投影
正交投影(Orthographic projection)、透视除法(perspective division)、透视投影(Perspective Projection) 在3D世界中正交投影矩阵 被 透视投影矩阵所代替。 归一化设备坐标 OpenGL的坐标空间是[-1, 1],x,y轴超过该区域的都将被切掉 看不见。 手机像素是 1280 X 720,归一化后 坐
OpenGL学习之路10----透视投影
代码放在github上 本文根据教程:ogldev进行扩充学习,一步步从零开始,记录学习历程 一、透视投影 1.1 透视投影定义 中心投影法: - 光线照射物体时,可在预设的地面或墙面上产生影子,根据这一自然现象,经科学的抽象总结,产生了投影法。 - 投射线通过物体,向选定的面投射,并在该面上得到图形的方法称为投影法 - 投射线汇交于投射中心的投影法叫做中心投影法 中心投影法示...
请教高手关于OpenGL中的透视投影问题
具体代码如下:(节选)rn//设置透视投影rnglMatrixMode(GL_PROJECTION);rnglLoadIdntity();rngluPerspective(0.0f,width/height,0.1f,100f);//width和height分别代表屏幕宽和高度rn//图形绘制rnglTranslatef(0.0f,0.0f,-1.0f);//或者glTranslatef(0.0f,0.0f,-6.0f)rnglBegin(GL_QUADS)rnglVertex3f(-1.0f,-1.0f,0.0f);rnglVertex3f(1.0f,-1.0f,0.0f);rnglVertex3f(1.0f,1.0f,0.0f);rnglVertex3f(-1.0f,1.0f,0.0f);rnglEnd();rnglFinish();rnrn以上代码为在Visual C++下利用Win32 Application生成空项目,添加*.cpp文件,编译后可以运行。rn主要问题是集中在glTranslatef那句话,后面的或者部分就是把视点的平移从向屏幕内平移一个单位改成了向屏幕内平移六个单位,但是前者图形可以显示,而后者则不显示,应该是投影区域不在屏幕范围内而被裁剪掉了。但是我认为从前后透视面而言(分别为0.1f和100.0f),视点只要不落在其中就可以在屏幕上显示图形的。我认为可能是对透视投影设置的理解不足,请高手赐教!
透视投影的问题
如下是某个图形学书上的一段话 一直不是很理解:“只有位于视截体(两个截面之间的棱台)的顶点才进行透视投影(这句理解),为了简化剪裁的判断处理,实际上寻找一个具有透视投影性质,同时又可将视截体转换为立方体的变换………… rn 我就是不明白了 这个立方体怎么保持透视投影的性质啊 透视投影的性质是近大远小吧(在原来的椎体上我理解怎么得到的),在一个立方体里 同样大小物体 一个Z大 一Z小 算是远近不同了 可是在立方体投影之后还是一样大的啊 ! rnrn请大家帮我解释下吧 不明白立方体里物体怎么投影会变成近大远小呢
透视投影
深度插值 http://blog.csdn.net/lysc_forever/article/details/17767645 透视投影,很详细,各种变换 http://www.doc88.com/p-372483160734.html 透视投影 http://www.360doc.com/content/14/0403/13/10724725_36607
投影转换
/// /// 定义单位与投影转换类 /// public class UnitAndPrjConvert { /// /// 米转换成为度 /// /// /// public static double CovertMeterToDegree(double
在opengl的透视投影中,怎么控制坐标呢?
我们在平行投影下,用以下代码:rn glViewport( 0, 0, 100f, 100f);rn glOrtho( 0.0f, 1000.0f, 0.0f, 1000.0f, 0.0f, 1.0f);rn glRectf(100.0f,100.0f, 10000.0f, 10000.0f);rn可以在距离窗口10个象素的地方画一个90*90象素的正方形,为什么以glFrustum(0.0f, 1000.0f, 0.0f, 1000.0f, 0.0f, 1.0f);方式投影后就看不到图象了,是不是视角不对?rn还有透视投影的裁剪区单位和屏幕象素的对应与平行投影是一样的 呢?rn请高手指点!rn
OpenGL学习十:视口,正投影,透视投影
正投影:将物体直接投影到屏幕上,不改变其大小 glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); 透视投影:远处的东西看起来要小一些,近处的东西看起来会大一些,这就是透视原理 gluPerspective(GLdouble fovy
OpenGL的透视视图和正交视图
也就是透视投影和正投影rn看段代码:rnpublic void onSurfaceChanged(GL10 gl, int width, int height) rn // TODO Auto-generated method stubrn gl.glViewport(0, 0, width, height); rn float ratio = (float) width / height;rn gl.glMatrixMode(GL10.GL_PROJECTION); rn gl.glLoadIdentity();rn gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);rn rn这段代码能看懂不?rn这是代码的一部分rn问题是最后一句,为什么换成GLU.gluOrtho2D(gl, 0, width, 0, height);rn或GLU.gluPerspective(gl, 45, width/height, width/5, height/5);图片就不显示了啊???
透视投影,坐标系转换的问题。
大家好,rn我在做3d正方体。rn步骤是将正方体在世界坐标的顶点转换成相机坐标系内顶点,我已完成。rn然后将相机坐标系内的顶点通过透视投影转换到规则观察体中(Canonical View Volume)rn问题来了。rn我的正方体在世界坐标系内的顶点为:rnrn[code=C/C++]rn Vertex v1(5.0, 5.0, 10.0, 1.0, 5.0, 5.0, 5.0,1.0);//001rn Vertex v2(10.0, 5.0, 10.0, 1.0, 5.0, 5.0, 5.0,1.0);//101rn Vertex v3(5.0, 10.0, 10.0, 1.0, 5.0, 5.0, 5.0,1.0);//011rn Vertex v4(10.0, 10.0, 10.0, 1.0, 5.0, 5.0, 5.0,1.0);//111rn Vertex v5(5.0, 10.0, 5.0, 1.0, 5.0, 5.0, 5.0,1.0);//010rn Vertex v6(10.0, 10.0, 5.0, 1.0, 5.0, 5.0, 5.0,1.0);//110rn Vertex v7(5.0, 5.0, 5.0, 1.0, 5.0, 5.0, 5.0,1.0);//000rn Vertex v8(10.0, 5.0, 5.0, 1.0, 5.0, 5.0, 5.0,1.0);//100rn[/code]rn经过转换,现在在相机坐标系中的位置为:rn-3.53553, -2.04124, -14.4338rn0, -4.08248, -11.547rn-3.53553, 2.04124, -11.547rn0, 0, -8.66025rn0, 4.08248, -14.4338rn3.53553, 2.04124, -11.547rn0, 0, -17.3205rn3.53553, -2.04124, -14.4338rnrn现在我要定义一个视锥体:rn[code=C/C++]rnvoid CameraCoord::frustum(int l, int r, int b, int t, int n, int f)rnrn //这是投影矩阵。rn double perspective[] = rn 2*n/(r-l), 0, (r+l)/(r-1), 0,rn 0, 2*n/(t - b), (t+b)/(t-b), 0,rn 0, 0, -(n+f)/(n-f), -2*n*f/(n-f),rn 0, 0, -1, 0rn ;rnrn for(int i = 0; i < 16; i++)rn perspectiveMatrix.push_back(perspective[i]);//投影矩阵rnrn[/code]rn然后我把我的相机坐标系内的正方体的点也就是rn-3.53553, -2.04124, -14.4338|rn0, -4.08248, -11.547 |rn-3.53553, 2.04124, -11.547 |rn0, 0, -8.66025| 乘以perspectiveMatrix应该得到透视除法(perspective division)之前的点。rn0, 4.08248, -14.4338|rn3.53553, 2.04124, -11.547 |rn0, 0, -17.3205|rn3.53553, -2.04124, -14.4338|rnrn代码如下:rn[code=C/C++]rnvoid RGBCube::projectionTransformation(Vertex *v)rnrn CameraCoord camera;rn camera.frustum(-5,5,-5,5,-5,-25);rnrn double vx = v->x;rn double vy = v->y;rn double vz = v->z;rn double vw = v->w;rn rn v->x = vx * camera.perspectiveMatrix[0] + vy * camera.perspectiveMatrix[1] + vz * camera.perspectiveMatrix[2] + vw * camera.perspectiveMatrix[3];rn v->y = vx * camera.perspectiveMatrix[4] + vy * camera.perspectiveMatrix[5] + vz * camera.perspectiveMatrix[6] + vw * camera.perspectiveMatrix[7];rn v->z = vx * camera.perspectiveMatrix[8] + vy * camera.perspectiveMatrix[9] + vz * camera.perspectiveMatrix[10] + vw * camera.perspectiveMatrix[11];rn v->w = vx * camera.perspectiveMatrix[12] + vy * camera.perspectiveMatrix[13] + vz * camera.perspectiveMatrix[14] + vw * camera.perspectiveMatrix[15];rn rn cout<x<<","<y<<","<z<
关于投影转换的问题
利用投影矩阵之后, 顶点出现了w值不为1的情况.rnd3d是不是这个时候把x, y, z的值都除以w, 以把rn顶点的坐标转换成规格化的坐标?rnrn之后是不是利用d3d文档中介绍的视口转换矩阵把rn顶点坐标转换成视口坐标(也就是大多数情况下的rn屏幕)?rnrn在光栅化的时候, 对于图元中的像素, d3d是如何rn知道它的z值的? 是对图元顶点的坐标进行插值吗?rn
透视投影以及分辨率的问题
最近我在做我的基于VTK的分布式数据的分布式渲染的时候遇到一个非常奇怪的问题: 我在算出一个包围盒在透视平面的透视投影的结果都是对的,所有点的坐标在相对位置上都是对的但是最后画出来的结果竟然看上去有问题,其中两个点都是对的,有一个点确出问题了,竟然到了整个屏幕的边上。如下图,左边是现实情况,右边是应该的正确情况: 这样的结果让我觉得很诧异,我就开始猜想错误的原因,然后我认为可能是我在算
透视投影比例因子问题
透视投影比例因子问题
透视投影的设置问题
有个问题要请教大家 (没有找到opengl的斑块,sorry)rn模型坐标系 是Z指向屏幕内,视点坐标系 是Z指向屏幕外的 初始的时候,他们的原点是重合的rn在做投影的时候rnvoid myReshape(GLsizei w,GLsizei h)rnrnglViewport(0,0,w,h);rnglMatrixMode(GL_PROJECTION);rnglLoadIdentity();rnif(w <= h)rngluPerspective(45, (GLfloat) h/(GLfloat) w, 1.0f, 400.0f);rnelserngluPerspective(45, (GLfloat) w/(GLfloat) h, 1.0f,400.0f);rnrn//-------- 设置了投影,我知道投影是向视点坐标系的-Z方向的 也就是说我能rn看到模型坐标系中的 1,400这个空间的东西,而在外面的东西都看不到rnvoid myDisplay(void)rnrn glBegin( GL_TRIANGLE );rn ..... 画了一个在z=20 平行与x-y平面的3角行rn glEnd();rnglFlush();rnglutSwapBuffers();rnrn//------------rn为什么我看不到呢?rn每一次都是执行myDisplay(),重新绘制,只有初始化和窗体大小发生变化的时候才调用了myReshape()rn我实验了一下,好象视野(就是我只能看到距离在单位1内的东西,其它的都看不见)rn请教了...rn
透视投影opengl程序
用OPENGL实现的旋转立方体,实现透视投影的OPNEGL的两个函数。
3D透视投影
3D透视投影
PointCloud透视投影
PointCloud透视投影,OpenGL实现读取点云数据并显示,透视投影。
projnet-69709投影转换
北京54,西安80等国际上通用的坐标系统之间转换
栅格数据投影转换
栅格数据投影转换 作者:阿振 邮箱:tanzhenyugis@163.com 博客:https://blog.csdn.net/theonegis/article/details/80089375 修改时间:2018-06-01 声明:本文为博主原创文章,转载请注明原文出处 使用GDAL提供的命令行工具进行转换 GDAL提供了gdalwarp命令可以方便地让我们进行影像拼接,...
透视投影中
相机定位问题的求解,利用世界坐标系与相机坐标系的转化
投影转换.txt
VB.net写的投影转换源码!
UTM投影转换
国外工程中经常遇到UTM投影变形的问题,用以处理变形量
坐标投影转换
已知平面上的点(x,y,z),求它在xOy面上的投影坐标以及投影矩阵?谢谢
Openlayers之投影转换
1、投影转换 所谓投影转换,就是将具有某种投影坐标系的地图转换到另一种投影坐标系上显示,一般可以将具有某种平面投影坐标系的地图转换到某种球面坐标系上,也可以将具有某种球面坐标系的地图转换到平面坐标系下; 2、代码实现 body,html,div{ border:none;padding:0;ma
ENVI的投影转换
《ENVI 5.X 遥感影像处理入门实战教程》以ENVI5.3版本进行实战教学(适用ENVI5.X各版本学习),从软件界面开始,到最后的高级应用,适合入门级、初级、中级的人员学习、工作、教师教学参考。
地图投影转换
兰伯特投影F、空港中心城 黄陂区盘龙城巨龙大道157号 黄陂区 3室2厅 93.00 低层(共28层) 2014年建造 朱华俊 127.00 13655.00 30.71555319 114.2654696 114.375743 30.882557 F、阳光城 黄陂区盘龙城巨龙大道特8号 黄陂区 2室2厅 71.00 中层(共16层) 2004年建造 殷灵灵 90.00 12676.00 30.71930515 114.266783 114.375743 30.882557 F、阳光城 黄陂区盘龙城巨龙大道特8号 黄陂区 2室2厅 90.00 低层(共18层) 2011年建造 汤志武 110.00 12127.00 30.71930515 114.266783 114.375743 30.882557 F、雅园 黄陂区盘龙城巨龙大道27号 黄陂区 2室2厅 85.00 高层(共11层) 2012年建造 戴铁 106.00 12470.00 30.70407908 114.3024232 114.375743 30.882557 F绿岛 黄陂区盘龙城腾龙大道 黄陂区 3室2厅 108.00 中层(共19层) 2010年建造 沈博文 130.00 11989.00 30.71930515 114.266783 114.375743 30.882557 F绿岛 黄陂区盘龙城腾龙大道 黄陂区 3室2厅 108.00 高层(共15层) 2014年建造 王鹏程 130.00 12037.00 30.71930515 114.266783 114.375743 30.882557 F绿岛 黄陂区盘龙城腾龙大道 黄陂区 3室2厅 108.00 高层(共15层) 2015年建造 耿承艳 130.00 12037.00 30.71930515 114.266783 114.375743 30.882557 F绿岛 黄陂区盘龙城腾龙大道 黄陂区 3室2厅 108.00 高层(共16层) 2014年建造 王学洪 127.00 11759.00 30.71930515 114.266783 114.375743 30.882557 F绿岛 黄陂区盘龙城腾龙大道 黄陂区 3室2厅 110.00 高层(共15层) 2015年建造 程红霞 130.00 11818.00 30.71930515 114.266783 114.375743 30.882557 ICC铂庭 江汉区武广松园青年路59号 江汉区 1室1厅 80.00 中层(共27层) 2016年建造 杨毅 262.00 32750.00 30.59664194 114.2691026 114.270871 30.60143
投影转换工具
CoordMG,投影转换工具,可以实现单点投影相互转换,如将投影坐标转换为平面坐标等
矢量数据投影转换
矢量数据投影转换 作者:阿振 邮箱:tanzhenyugis@163.com 博客:https://blog.csdn.net/theonegis/article/details/80089375 修改时间:2018-06-03 声明:本文为博主原创文章,转载请注明原文出处 案例说明 接着上一篇博文中,我们得到了WGS84坐标系下的中国省区图,而我们一般中国地图中使用的是割圆...
MOD13投影转换
IDL语言实现MOD13或者MYD13数据重投影
地图投影转换公式地图投影转换公式
地图投影转换公式地图投影转换公式地图投影转换公式地图投影转换公式地图投影转换公式地图投影转换公式
proj4js 投影转换
proj4 javascript投影坐标转换 已测试 可用 准确proj4 javascript投影
投影转换 难题!
我想用高斯投影公式将经纬度转换成直角坐标。用vb实现rn谁有代码发过来下啊 谢谢了rn祝大家新年快快!
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池