OpenGL: 3D坐标到屏幕坐标的转换逻辑

到需要将3D坐标转换到屏幕坐标的问题,在网上很多朋友也在寻找答案,下面是glu中gluProject函数的实现。

步骤/方法

  • 01

    矩阵按行优先存储 GLint gluProject(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble model[16], const GLdouble proj[16], const GLint viewport[4], GLdouble * winx, GLdouble * winy, GLdouble * winz) {

  • 02

    /* matrice de transformation */ GLdouble in[4], out[4]; /* initilise la matrice et le vecteur a transformer */ in[0] = objx; in[1] = objy; in[2] = objz; in[3] = 1.0;

  • 03

    transform_point(out, model, in); transform_point(in, proj, out); /* d’ou le resultat normalise entre -1 et 1 */ if (in[3] == 0.0) return GL_FALSE; in[0] /= in[3]; in[1] /= in[3]; in[2] /= in[3]; /* en coordonnees ecran */ *winx = viewport[0] + (1 + in[0]) * viewport[2] / 2; *winy = viewport[1] + (1 + in[1]) * viewport[3] / 2; /* entre 0 et 1 suivant z */

  • 04

    *winz = (1 + in[2]) / 2; return GL_TRUE; } /* * Transform a point (column vector) by a 4x4 matrix. I.e. out = m * in * Input: m - the 4x4 matrix * in - the 4x1 vector * Output: out - the resulting 4x1 vector. */ static void transform_point(GLdouble out[4], const GLdouble m[16], const GLdouble in[4]) {

  • 05

    #define M(row,col) m[col*4+row] out[0] = M(0, 0) * in[0] + M(0, 1) * in[1] + M(0, 2) * in[2] + M(0, 3) * in[3]; out[1] = M(1, 0) * in[0] + M(1, 1) * in[1] + M(1, 2) * in[2] + M(1, 3) * in[3]; out[2] = M(2, 0) * in[0] + M(2, 1) * in[1] + M(2, 2) * in[2] + M(2, 3) * in[3]; out[3] = M(3, 0) * in[0] + M(3, 1) * in[1] + M(3, 2) * in[2] + M(3, 3) * in[3]; #undef M }

(0)

相关推荐

  • DiskGenius中如何转换逻辑分区和主分区

    DiskGenius是一款硬盘分区及数据恢复软件,今天我来和大家分享一下在DiskGenius中如何转换逻辑分区和主分区 操作方法 01 首先打开DiskGenius,选择需要操作的硬盘 02 单击右 ...

  • cad大地坐标转换施工坐标(cad怎么转换大地坐标为施工坐标)

    大家都知道施工的cad结构图纸中的平面图,例如桥梁,地铁车站,涵洞等,这些平面图纸是没有坐标系的.但是由于种种原因,我们可能会用到这个图纸的某些坐标,这样会更直观的看到图纸到坐标点位的分布情况.那下面 ...

  • 普通电视看3D电影 3D视频转换盒

    操作方法 01 虽然现在各大品牌都在猛打3D电视和3D投影的立体视觉效果,力图通过3D的特殊视效来吸引消费者,但对于早期购入普通电视的用户来说花高价再买一台3D电视或3D投影仪是很不划算的.如果能有一 ...

  • solidwoks中3d草绘怎么快速制作3d立体模型?

    solidwoks中3d草绘可以快速绘制立体图形,下午我们就来看看详细的教程. 1.打开solidworks并建立一个模型进入绘图工作界面,如下. 2.如下图所示,点击“草图绘制”旁的三角弹出下拉菜单 ...

  • 什么是坐标,屏幕,制图,游戏坐标按键精坐标选择

    坐标就是这个点的物体上的X :横 Y:纵 Z高 坐标  (平面就是 X Y ) 位置 计算机上常用坐标用:屏幕坐标,制图坐标,游戏坐标 1.屏幕坐标就是这个点在屏幕的位置,如下图(1024*760的分 ...

  • 如何在手机上观看3D电影?

    现在大家已经逐渐开始感受到了3D电影给我们带来的那种视觉体验,所以很多人为了一场电影专门跑去电影院观看,因为网络上或者电视里那种呆板的平面模式已经满足不了我们的要求,但是现在电影数量太多了,隔三差五就 ...

  • 如何在极米Z4系列机型上观看3D电影

    很多朋友收到极米超级无屏电视后,不知道如何观看3D电影,现在,我以图文的形式,做一个辅助教程,其实很简单,看图就能明白,以连接外埠存储设备(比如U盘或者移动硬盘)为例,进入播放界面都需要进行第一次3D ...

  • Windows XP系统内核文件分析

    regsvc.dll .....远程注册表服务REGWIZ.EXE .....(注册向导). 令注册 XP 的过程自动化.regwizc.dll .... 注册向导的相关模块 rend.dll ... ...

  • Gentoo全局USE标记简介

    非原创,只是汇总一下网上比较杂乱的资料,希望对刚接触的朋友有帮助 USE是Gentoo的特色 gentoo下的软件安装由源代码编译,所以可以自由选择哪些功能需要哪别不需要,很简单的一个例子就是比如你使 ...