轩辕剑在线这个游戏的MODEL有很多以PLY作为扩展名的文件,这个文件为三维模型文件,该文件进行了lzo算法的压缩(swdol很多文件都是这样干的),解压后从这个文件中可读取到模型的顶点数、每个顶点的坐标、三角形面的个数、以及三角形面的三个点使用的是那几个顶点的坐标、然后是三角形面对应的纹理贴图文件的编号,以及在播放动画时(见软件中的Q键效果),这些顶点是怎么变化的。

贴图文件位于和MODEL同级的TEX目录,以ALL加上5位数的变化命名,以TEX结尾。例如:ALL00002.TEX

这种TEX文件经过lzo解压后,得到的就是位图格式的图片文件。

早先得到一个 "回梦"的一份代码,编译出来的结果和下面这个二进制版本接近。

http://download.csdn.net/detail/q3020025470/6795453
"回梦"这个QT版本的浏览器,其核心代码基本来自于"谁伴我一生闯荡"的VC6.0的代码工程。

这两个版本,都存在贴图错误和显示控制的问题。

测试了几个模型都使用了2个贴图文件,修改代码,要不然就使用第一个贴图文件的内容,要不就是第二个。
仔细看了下通过三角形面索引找贴图索引的逻辑存在问题。这个是对ply文件数据结构的理解不正确导致。
再有就是代码中paintGL函数,先调用glBegin(GL_TRIANGLES); 再调用的glBindTexture,这个调用顺序有问题,会导致bind的纹理不生效。

原始版本中对模型显示的控制方法非常别扭,见下图的基本操作,也进行了修改。

原始版本:

修正后版本

代码放在:

https://git.oschina.net/swdol/plyViewer

编译好的工具从这里下载:

https://git.oschina.net/swdol/plyViewer/attach_files

http://download.csdn.net/detail/jerryutscn/9577437

在翻阅资料时,找到下面这个链接,从浅入深,讲的比较详细
OpenGL入门学习
http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html

使用GL_TRIANGLES绘制一个三角形面,然后贴纹理:
           glBegin(GL_TRIANGLES);
            glTexCoord2f(pp[face[i].index1].U,pp[face[i].index1].V );
            glVertex3f(pp[face[i].index1].x/scaled,pp[face[i].index1].y/scaled,pp[face[i].index1].z/scaled);//上顶点坐标
            glTexCoord2f(pp[face[i].index2].U,pp[face[i].index2].V );
            glVertex3f(pp[face[i].index2].x/scaled,pp[face[i].index2].y/scaled,pp[face[i].index2].z/scaled);//左下角坐标
            glTexCoord2f(pp[face[i].index3].U,pp[face[i].index3].V );
            glVertex3f(pp[face[i].index3].x/scaled,pp[face[i].index3].y/scaled,pp[face[i].index3].z/scaled);//右下角坐标
            glEnd();

glTexCoord2f函数用来从当前纹理,利用U.V这两个浮点型的x,y坐标,完成贴图动作。
glVertex3f是绘制三角形面。

下面这个例子观察起来比较直观:

上图是正确的情况,下图故意将一个三角形的面的纹理弄错:

轩辕剑在线(swdol)3D模型浏览器相关推荐

  1. 3D API,快速展示模型,实现3D模型在线可视化展示,还能进行各种测量视图等操作......

    如果你是一名从事3D建模相关的代码开发者,是否经常会遇到以下问题: 渲染效果不及预期 模型展示不够直观 测量视图等操作难以实现 ..... 由此带来的结局大多是: 造成客户对模型理解不清晰,增加双方的 ...

  2. 照片转3d模型_在线搭建3D场景

    小编分享一个很有意思的可以在线搭建3D场景网站,像是玩积木一样简单,首先我们看一下网站是什么样的. 网站首页 有很多场景.模型可以选择,把自己喜欢的模型往场景里摆放进行搭建,所选择的模型都有链接可以打 ...

  3. 3D模型在线查看利器【多种格式】

    BimAnt 3DViewer网站可以 打开多种 3D 文件格式并在你的浏览器中可视化展示3D模型,支持 obj.3ds.stl.ply.gltf.glb.off. 3dm.fbx 等等. 1.支持的 ...

  4. 3D模型在线云转换和在线展示

    迪威模型(www.3dwhere.com)是供网友在线分享与3D模型交易的平台.目前,迪威模型提供的3D模型组件逾两百万条.自上线以来,迪威模型已先后为数万名从业者提供优质.完美的3D模型资料以及迪威 ...

  5. WebGL在线模型浏览器

    前几年做的基于WebGL在线模型浏览器,用的threejs引擎,可以在各方向观察.动态剖切.添加热点. demo 网址:模型浏览器 Demo

  6. 在你的网站、浏览器中集成3D模型预览功能,使用开源项目Online3DViewer

    开源项目Online3DViewer # 通过url参数形式预览模型 https://3dviewer.net/#[3D模型URL] Online3DViewer 是一个免费.开源的web解决方案,可 ...

  7. 3D模型Cad格式免费在线转换

    3D模型Cad格式免费在线转换 亲测,完美转换各格式 http://www.3dwhere.com/conv

  8. three.js加载3d模型_基于WebGL的3D技术在网页中的运用 ThingJS 前端开发

    Three.js.ThingJS这些引擎库可以加载3D制作软件的模型,大幅度提高了制作效率,改变WebGL开发困难的局面,让Web开发者享受便捷的3D开发服务.三者的难度对比如下: ThingJS(框 ...

  9. smart3D、acute3D、three3D等技术网页浏览3D模型注意事项

    smart3D.acute3D.three3D等技术网页浏览3D模型注意事项 smart3D.acute3D.three3D等技术在网页中浏览3D模型注意事项: 1.浏览器必须支持WebGL(全写We ...

最新文章

  1. Python两个内置函数——locals 和globals
  2. 一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建...
  3. 一个C/C++程序从编译到最终生成可执行文件的全过程分析
  4. Linux内核社区是数字军火商、斯拉夫兵工厂甚至NSA的最爱
  5. zookeeper 分布式协调服务
  6. 腾讯商业数据分析师培养计划
  7. mongo shell连接到mongoDB及shell提示符下执行js脚本
  8. git 分支推送项目
  9. .NET GC 实时监控工具 dotnet gcmon 介绍
  10. java 继承示例_Java中的继承类型以及示例
  11. mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
  12. php1500,圆周率1500多位
  13. Exp5 MSF基础应用 ——20164316张子遥
  14. 贪心字典序最小问题poj3617
  15. matlab做高斯滤波,matlab高斯滤波自定义函数怎么做
  16. python基础教程十进制_Python基础教程(四)
  17. 基于ros单线激光雷达的坐标读取
  18. iframe如何发送请求_如何实现高性能的在线 PDF 预览
  19. Excel 对比两个表的相同列内容是否一致
  20. 苹果花期行情结束见顶?铁矿石认沽次末日25倍,纯碱09-01季节性反套?2022.5.10

热门文章

  1. 全国计算机软件985专业排名,全国计算机软件专业大学排名TOP20,清华居然不是第一!...
  2. 构建高性能微服务架构(网易)
  3. 为不同大小的图片添加纯色背景
  4. 【已解决】将CentOS7系统安装至U盘(二):配置打印机
  5. 解决VisualVm的Profiler一直转圈:正在连接到目标 VM...
  6. 知网的html查重报告看不了,知网查重报告单怎么看
  7. 根据浏览器内核区分微信、QQ、QQ浏览器
  8. ArcGIS打开山东天地图WMTS服务
  9. Mojarra JSF ViewState 反序列化漏洞复现
  10. Android圆盘控件,DiscView 圆盘控件 动态展示百分比等数据 @codeKK Android开源站