原理介绍:https://learnopengl-cn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/

代码实现

为了获取模型中的顶点在窗口中显示的坐标。我们可以借用glm库对模型坐标进行转换。代码如下:

struct GLW_POINT{double x = 0.0;double y = 0.0;double z = 0.0;void clear(){x = 0.0;y = 0.0;z = 0.0;}GLW_POINT(){clear();}};
GLW_POINT modelPosTo2D(const GLW_POINT &point)
{GLW_POINT p;glm::mat4 mat4Model;glm::mat4 mat4Projection;glm::mat4 mat4View;mat4Model = glm::mat4(1.0);mat4Projection = glm::perspective(glm::radians(45),w / h, 0.1f, 100.0f);mat4View = glm::mat4(1.0);glm::vec4 pos = glm::vec4(point.x,point.y,point.z,1.0);glm::vec4 res = mat4Projection * mat4View * mat4Model * pos;float w = glm::value_ptr(res)[3];if(w != 0){p.x = glm::value_ptr(res)[0] / w;p.y = glm::value_ptr(res)[1] / w;p.z = glm::value_ptr(res)[2] / w;}return p;
}

其中w与h是显示区域的大小,mat4View为观察矩阵。

Qt+OpenGL——3D坐标转2D坐标相关推荐

  1. Solidworks二次开发-3D坐标转2D坐标

    一.3D坐标转2D坐标指在零件层面获得的点坐标,在进入草图编辑状态时,该点转换为在草图中的坐标值,只有XY轴: 注:如需将装配体层面的坐标转换为零件草图的坐标,需先将绝对坐标转换为零件的相对坐标,然后 ...

  2. qt opengl 3d基本形状-圆柱

    圆柱的顶面和底面都是一个圆形,其顶点坐标为(R*cos(弧度),y,R*sin(弧度))其中R分别为圆柱高的峰值,比如正放于中心时y就是h/2或者-h/2,h/2表示顶面,-h/2表示底面.其纹理坐标 ...

  3. qt opengl 3d基本形状-螺旋管

    螺旋管的做法和上一节的圆柱非常类似,就是在大圆径每转过一定角度时,将y值加上一定值.另个其纹理坐标生成的方法也和上一节一致.我做出的效果如下 其渲染器实现如下 #ifndef LUOXUANGUANR ...

  4. qt opengl 3d基本形状圆锥

    圆锥与上一节的圆柱很相似,其侧面的顶点坐标同样拆分成很多个小三角形,顶点位于一点,底面顶点和圆柱计算底面顶点的方法一样,都是(r*cos(弧度),-h/2,r*sin(弧度));底面顶点纹理坐标的计算 ...

  5. OpenGL: 3D坐标到屏幕坐标的转换逻辑(gluProject的实现)(转)

    OpenGL: 3D坐标到屏幕坐标的转换逻辑(gluProject的实现) 遇到需要将3D坐标转换到屏幕坐标的问题,在网上很多朋友也在寻找答案,下面是glu中gluProject函数的实现.(实际上就 ...

  6. 将3D坐标转成2D坐标的方法

    将3D坐标转成2D坐标的方法.3D坐标在Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子: ...

  7. 麒麟子Cocos Creator 3D研究笔记八:3D坐标转2D人物血条

    夜深了,咱就直接进入正题吧,容麒麟子先上张图. 截自cc.d.ts 我们主要用到的就是这个CameraComponent中的converToUINode函数.它这个注释有点问题. 第一个参数 wpos ...

  8. OpenGL(十八)——Qt OpenGL绘制一个3D世界

    OpenGL(十八)--Qt OpenGL绘制一个3D世界 一.说明 本篇介绍构建一个3D的世界. 二.简介 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游. ...

  9. UGUI_UI子节点在Canvas的2D坐标

    首先我们要搞清楚 transform.postion 和 rectTransform.anchoredPosition  这两个坐标是完全不一样的.前面的是3D坐标,后面的是2D在Rect里的坐标,并 ...

最新文章

  1. 遍历Stream并设置属性值
  2. CPU和软件模拟异常的执行流程
  3. Java多线程(九)之ReentrantLock与Condition
  4. 二叉树分析(两点最大距离)
  5. Spring框架中的控制反转和依赖注入
  6. BZOJ1086 [SCOI2005]王室联邦(树分块)
  7. UVALive 3135
  8. java音乐网站论文_基于Java web的音乐网站的设计与实现论文(含源文件).doc
  9. 小技巧:Win7屏保变梦幻桌面
  10. springboot 神通数据库
  11. html中对应Word中的字体和字号
  12. 大学生旅游风景主题dreamweaver网页设计大作业-陕西渭南HTML+CSS制作网页
  13. 北京大学肖臻老师《区块链技术与应用》公开课-ETH
  14. 单点登录(SSO)-- 实现单点登录的几种方式
  15. Adv-Makeup:一种新颖不易察觉且可迁移的人脸识别攻击方法
  16. 【华为OD机试-按身高和体重排队-Java】
  17. ROS远程连接Turtlebot3并进行简单的移动控制
  18. StarUML的使用
  19. 让子盒子水平和垂直居中的五种方法
  20. 解决url中times被转成×的问题

热门文章

  1. navicat mac 找不到钥匙串_Mac新手扫盲教程:苹果Mac电脑使用小技巧
  2. AI 收藏夹 Vol.001:当你的语音助手不再温顺
  3. android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
  4. 极客战记怎么换成java_「网易官方」极客战记(codecombat)攻略-森林-矮人蜂拥而至-munchkin-swarm...
  5. python提取pdf中的图片_提取PDF中内容(表格篇)
  6. MySQL 实现一个简单版搜索引擎,真是绝了!
  7. 将阿拉伯数字转换为大写人民币
  8. Ceph rbd的寻址(rbd块文件的下载)
  9. 桌面支持--修改佳能扫描地址
  10. 7-23 LC的绝地求生分数 25