叶韵菲

来自CGTWiki
跳转至:导航搜索
Yyf.jpg

目录

个人简介

生于1997年7月25日,籍贯福建省南平市政和县。

2015级 北京邮电大学 电信工程及管理 本科
2019级 北京邮电大学 电子与通信工程 硕士研究生

主要从事三维显示和计算机图形学方面的工作.

Yunfei Ye received her bachelor's degree from Beijing University of Posts and Telecommunications and is currently pursuing a master's degree from Beijing University of Posts and Telecommunications. She is currently engaged in 3D display and computer graphics.

Tel: 18813150857
Email: 504749819@qq.com

四级成绩:511
六级成绩:472

电脑配置

电脑型号 技嘉 Z370 HD3 台式电脑 (扫描时间:2020年01月02日)

操作系统 Windows 10 专业版 64位 ( 4.09.00.0904 )

处理器 英特尔 Core i7-8700K @ 3.70GHz 六核

主板 技嘉 Z370 HD3-CF ( 英特尔 PCI 标准主机 CPU 桥 - 200 Series 芯片组 Family - A2C9 )

内存 16 GB ( 威刚 DDR4 2400MHz )

主硬盘 三星 SSD 860 PRO 256GB ( 256 GB / 固态硬盘 )

显卡 Nvidia GeForce GTX 1060 6GB ( 6 GB / 影驰 )

显示器 三星 SAM0C1A S24E390 ( 23.5 英寸 )

声卡 瑞昱 ALC892 @ 英特尔 High Definition Audio 控制器

网卡 英特尔 Ethernet Connection I219-V / 技嘉

615项目

标书任务要求:

  1.能够通过图形化界面进行场景初始化设置,如友方设施和敌方目标物类型、位置、属性; 

具体任务:

  1.先熟悉目前三维平台的标注功能的具体实现,有需要的话可以花些时间学习一下osg的相关知识【预计时间:一周】(目前三维平台的标注功能存在问题,没有成功实现,暂时无法进行熟悉,因此先进行osg相关知识的学习,等张泷他们那边把标注功能改好后,即可开始了解熟悉标注功能的具体实现方式)
2.完善三维平台中的标注功能,增加几种标注图标【预计时间:两周】

周报

2021.04.30

本周完成了20个三维矢量标号的绘制与渲染。
遇到的问题:最开始用visio进行三维矢量标号的绘制,但visio无法导出flt格式文件,网上也没有找到将visio本身提供的格式转化为flt格式的插件。
解决方案:改用3dmax进行三维矢量标号的绘制,学习完3dmax的基本使用后,将基础模型组合、分割、上色,最终完成20个三维矢量标号的绘制与渲染(已上传至ftp及wiki模型列表供使用)。

2021.04.23

遇到的问题:平台目前仅支持.flt、.osgb、.ive格式的三维模型,网上基本找不到osgb与ive格式的模型,于是一开始以收集.flt格式的模型为主,但测试之后发现绝大多数下载的.flt模型均无效,无法在平台中正常加载。
解决方案:重新收集.max格式的模型,但使用3dmax直接转换格式会导致纹理丢失,于是按https://www.pianshen.com/article/4908316738/ 文章中提到的方法进行纹理的重新渲染,将.max格式模型逐一渲染并导出为.flt格式模型,22个有效模型已上传至ftp及wiki供使用。

2021.04.09

完成Web端裸眼3D播放系统在服务器上的部署
网页部署.png

2021.04.02

进行网页界面及操作的优化:
①修改网页代码,令三个程序在改变窗口大小时始终居中
②删除原先用于测试的分辨率文本框
③添加系统操作的说明性文字
④更改获取参数成功后的提示方式,删除一切不必要的弹窗

2021.02.26

本周完成了对《webgl编程》后五章的学习。

2021.01.29

本周使用片元数少的模型对模型播放器Webgl导出进行测试,皆失败,因此判断导出失败不是因为之前用于测试的模型片元数过大。
在网上也没查到有效的解决方法,估计要修改代码会比较麻烦,因此决定按师兄的建议用Webgl重写代码,因此开始了对《Webgl编程》这本书的学习(已完成前五章的学习)。

2021.01.15

①尝试配置平台调试环境,在网上查了相关资料,试了以下链接中提供的方法,皆失败。准备下周根据师兄提供的代码写一个winform的程序实现一键添加和删除环境变量。
https://blog.csdn.net/jiasu6905/article/details/106711851/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
https://www.freesion.com/article/843368190/
https://blog.csdn.net/jiasu6905/article/details/107717004?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai
②尝试直接将原本unity版本的模型播放器输出为webgl,但网页无法正常运行,并且没有报具体的错误。于是对原有Unity版本的代码进行分析和理解,准备搞懂之后对代码进行改写。
③进行716文档的逐字校验并改写三维态势文档,帮助师姐修改论文的部分段落。

2021.01.08

本周整理了目前构建Web端裸眼3D播放系统的过程,及构建过程中遇到的问题和解决方案,编写至[Web端裸眼3D播放系统]
进行裸眼播放系统的网页部署,详见[Web端裸眼3D播放系统]的[网页部署]部分


2020.12.25

本周进行Web端裸眼3D视频播放器的构建,修改原本的Unity播放器代码,改变视频路径获取方式,调整屏幕分辨率获取方式,使视频在Web端能够成功播放
到裸眼3D显示器实验后发现2dz视频格式的播放效果不好,下一步准备用九宫格格式视频进行实验

2020.12.18

本周完善网页登录和注册的功能,利用Cookie实现光栅参数的存储与读取,在原本实现的Web端光栅参数测量页面添加第二个Demo进行参数存取的测试

下一步计划研究Web端裸眼3D视频播放器的实现

2020.12.11

1.撰写开题报告
2.搭建php+apache+mysql环境。遇到的问题及解决方案如下:
问题①:安装php时报错:Can't locate API module structure `php8_module' in file E:/php8/php8apache2_4.dll: No error
解决方案:将php8_module改为php_module
问题②:启动apache失败
启动apache失败.png
解决方案:将apache的监听端口从80改为8080
问题③:从html表单提交信息到PHP界面出现的是PHP的源码
解决方案:将打开html的方式从直接双击打开改为在网页地址栏中规矩输入http://localhost:8080/login.html
问题④:php链接不到数据库
解决方案:将php.ini文件中extension_dir = "E:\php8\ext" 这句前面的分号去掉,详见https://blog.csdn.net/www121104115/article/details/75006164?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control
3.利用数据库初步实现登录和注册的功能

下一步计划研究如何将光栅数据存到数据库中

2020.10.30

①更改图标选择方式:将原来的下拉框改为更直白的图片按钮,并添加选中时的高亮效果
标注图标高亮.png
②修复bug:连续标注会在xml中添加一样的名字
③尝试将标注列表显示方式改为和矢量图层一样的复选框形式,但发现需要先实现经纬度的保存才能进行这步修改,仍在继续尝试中。

2020.10.23

①对专利《一种在WPF、OSG及Unity三者之间进行融合与通信的方法》进行修改
②添加从xml文件读、写标注内容的功能
读xml.png 写xml.png
③添加标注详情框(目前只保存了标注名和图标信息,下一步计划进行经纬度的保存)
标注详情框.png
④添加标注重命名功能
标注重命名.png

2020.10.16

①修复了中文标注添加后无法删除的问题
②添加功能:创建标注列表到场景树,在列表中点击右键可以直接删除标注
标注列表.jpg
③添加标注名重复性检测
④添加功能:创建标注时可以选择想要使用的图标,目前随便添加了四张图片作为图标进行测试,之后可以替换成真正需要的图标
标注图标.png

2020.10.09

①学习了《OSG快速入门》,chongfcho由于标注功能和Handler相关,因此还学习了《OpenSceneGraph三维渲染引擎设计与实践》中的“人机交互与图形用户接口”章节。
②熟悉目前三维平台的标注功能的具体实现,发现无法正常显示中文标注,对其进行修改,成功显示中文标注。
修改前:
中文标注修改前.png
修改后:
中文标注修改后.png

2020.08.14

本周继续进行三维平台压力测试,以及撰写了文物平台软件著作权

2020.07.24

本周修改了数据可视化的wpf界面,以及对平台进行了测试

2020.07.17

本周搜集学校、学院、团队的相关数据资料,制作了数据可视化的wpf界面

2020.07.03

本周阅读了论文 文件:The method for real-time cloud rendering.pdf
及关于这篇论文的分析资料:https://zhuanlan.zhihu.com/p/82640480

2020.06.19

本周照着维基百科做了铜奔马的html表格 并收集了一些铜奔马的相关资料
文件:铜奔马资料.docx

2020.05.29

本周将猴子模型替换成别的模型进行尝试,但渲染出现了问题,暂时不知道如何解决。

2020.05.22

本周对多视点源码进行熟悉,并将整套源码动手敲了一遍。下周准备找别的obj模型替换猴子模型尝试进行渲染。

2020.05.15

本周先是尝试对多视点源码进行修改,但没能修改成功,最后李远航师兄帮助进行了修改。然后就是对修改后的代码进行熟悉。

2020.05.08

1.搭建完毕nuget服务器
2.这几天尝试实现网络通信,目前实现了UI界面和服务器之间命令的发送与接收,接下来准备尝试实现:通过服务器,让UI界面与另一个将用于播放视频和图片的客户端之间进行通信与控制。
服务器.png
UI客户端.png

2020.04.30

1.搭建nuget服务器,但遇到了如下问题:
①按照wiki上的教程Nuget进行搭建,但由于是十年前的教程,编译运行时报错,查了一下是由于缺少MVC3,但下载MVC3之后依旧报错,似乎是现在的版本不支持MVC3,于是没有找到解决方法。
错误1.png
②按照网上找到的新教程进行搭建,http://www.mamicode.com/info-detail-2893552.html,但进行到发布项目时VS报错,没有找到解决方法。
错误2.png
2.实现点击不同按钮显示不同文件夹中所包含图片的功能。

3.查找关于C#网络通信的资料:
https://blog.csdn.net/lizhenxiqnmlgb/article/details/82720388
https://blog.csdn.net/tanmengwen/article/details/8639244?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1
https://www.jianshu.com/p/a591f85dbcd4
遇到的问题:阅读资料后发现C#网络通信是用TCP或UDP协议进行,不明白Ap在网络通信中要如何使用;对于具体应该如何建立服务器、手机、两块屏幕这三者之间的连接想不清楚;以及现在不清楚下一步应该先做什么。

2020.04.24

①对悬浮系统管理的研发思路进行了梳理 文件:悬浮系统管理梳理.docx
②搜集学习相关资料 其中包括:
Ap的建立:
https://zhuanlan.zhihu.com/p/26054240
https://blog.csdn.net/juniorkang/article/details/22866537
UGUI基础教程
Unity读取图片:
https://blog.csdn.net/li1214661543/article/details/105437267
https://blog.csdn.net/vv___/article/details/79533413
③尝试使用UGUI的各个控件 从文件夹中读取图片
读取图片.png

2020.04.17

①阅读了两篇论文 文件:Multi-view Rendering using GPU for 3-D Displays.pdf 文件:Efficient Stereoscopic Rendering of Building Information Models (BIM).pdf
阅读笔记: 文件:Multi-view Rendering笔记.pptx 文件:Efficient Stereoscopic Rendering笔记.pptx
②联系郑健平师兄,了解了原716项目程序包含了哪些功能,其中涉及到碰撞检测与文字渲染,与2D游戏Breakout中的功能有部分类似,因此学习了关于2D游戏Breakout如何实现的opengl教程。

2020.04.10

进行多视点源码分析 文件:多视点opengl源码分析.pptx

2020.04.03

修改多视点立体渲染的代码 使其能够在我的屏幕上完整实现
本周没有收到具体的任务 于是学习了Unity3D快速入门以及Unity3D特效系统之基础篇(学习笔记已上传)

2020.03.27

①本周看了邢师兄发的关于多视点立体渲染的代码具体是怎么实现的
②看了立体渲染词条 在网上查了查关于多视点立体渲染的内容
在网上查的关于多视点立体渲染具体资料:
https://www.cnblogs.com/unicornsir/p/12497115.html 按该内容将代码用cmake编译跑通
https://www.jianshu.com/p/c8e2347f2bea 早期OpenGL立体渲染
https://teddybearfp.github.io/2018/12/23/3D-Volume-Rendering/ OpenGL 3D立体渲染
http://kns.cnki.net/kcms/detail/detail.aspx?filename=SJSJ201409036&dbcode=CJFQ&dbname=CJFD2014&v= 多视角图像对的生成及渲染优化技术
https://blog.csdn.net/tulun/article/details/5537750 OpenGL中的多视口
https://gameinstitute.qq.com/community/detail/117284 OpenGL进阶(一):多视口
③将多视点相关代码从源代码包中摘出来传到了对应的svn

2020.03.20

学习完了opengl教程系列视频及《Learn OpenGL》教程

2020.03.13

3.13周报.png

2020.03.06

3.6周报.png

2020.02.28

文件:2.22-2.28.docx

2020.02.21

文件:周报.docx

《WebGL编程》学习笔记

WebGL入门

在<cavas>上绘制的步骤:
1.获取<canvas>元素﹔
2.向该元素请求二维图形的“绘图上下文”﹔
3.在绘图上下文上调用相应的绘图函数,以绘制二维图形。
Canvas坐标系统:
Canvas坐标系统.png
WebGL坐标系统:Z轴正方向向外
Webgl坐标系统.png
WebgL坐标与<canvas坐标的对应关系:
<canvas>的中心点:(0.0,0.0,0.0)
<canvas>的上边缘和下边缘:(一1.0,0.0,0.0)和 (1.0,0.0,0.0)
<canvas>的左边缘和右边缘:(0.0,-1.0,0.0)和(0.0,1.0,0.0)
对应关系.png

程序执行流程:
颜色缓冲区的内容会自动显示在浏览器中
程序执行流程.png
Main()函数执行流程:
Main执行流程.png

Gl_Position和gl_pointsize是内置在顶点着色器中的,gl_fragcolor是内置在片元着色器中的,不需要初始化定义。Gl_position变量必须被赋值。
片元就是显示在屏幕上的一个像素,包括这个像素的位置、颜色和其他信息。
attribute变量传输的是那些与顶点相关的数据,而uniform变量传输的是那些对于所有顶点都相同(或与顶点无关)的数据。
attribute变量被用来从外部向顶点着色器内传输数据,只有顶点着色器能使用它。

绘制和变换三角形

使用缓冲区对象向顶点着色器传输多个顶点数据的步骤:
1.创建缓冲区对象 (gl.createBuffer())。
2.绑定缓冲区对象(gl.bindBuffer () )。
3.将数据写入缓冲区对象(gl.bufferData() )。
4. 将缓冲区对象分配给一个attribute变量(gl.vertexAttribPointer () )。
5.开启attribute变量(gl.enablevertexAttribArray () )。

类型化数组:
类型化数组.png
逆时针旋转公式:
逆时针旋转公式.png
角度ANGLE转弧度:var radian = Math.PI * ANGLE / 180.0;
旋转矩阵:
矩阵1.png 矩阵2.png
平移矩阵:
矩阵3.png
缩放矩阵:
矩阵4.png
Webgl中矩阵是列主序的,所以程序中旋转矩阵写法应为:
矩阵5.png

颜色与纹理

BYTES_PER_ELEMENT:获知类型化数组中每个元素所占的字节数。
Varying变量:用于从顶点着色器向片元着色器传输数据。(只能是float类型的)
过程1.png
过程2.png
一旦一个顶点的坐标被赋值给了gl_Position,它就进入了图形装配区域,并暂时储存在那里。
显示在屏幕上的三角形是由片元(像素)组成的。
光栅化结束后,程序就开始逐片元调用片元着色器。

纹理映射的作用,就是根据纹理图像,为之前光栅化后的每个片元涂上合适的颜色。
纹理映射的步骤:
1.准备好映射到几何图形上的纹理图像。
2.为几何图形配置纹理映射方式。
3.加载纹理图像,对其进行一些配置,以在 WebGL中使用它。
4.在片元着色器中将相应的纹素从纹理中抽取出来,并将纹素的颜色赋给片元。

图形的顶点坐标用来确定屏幕上哪部分被纹理图像覆盖;纹理坐标用来确定纹理图像的哪部分将覆盖到几何图形上。

WebGL纹理坐标系统中的t轴的方向和PNG、BMP、JPG等格式图片的坐标系统的y轴方向是相反的:
反向1.png
反向2.png
对纹理图像进行Y轴反转:g1.pixelstorei (g1. UNPACK_FLIP_Y_WEBGL,1);

在顶点着色器中为每个顶点指定纹理坐标,在片元着色器中根据每个片元的纹理坐标从纹理图像中抽取纹素颜色。

加载图像是异步的,一旦浏览器加载完成图像,就调用image.onload绑定的监听事件。

Jpg:rgb
Png:rgba
Bmp:rgb

OpenGL ES着色器语言

程序是大小写敏感的,每一个语句都应该以;结束。
着色器程序必须有且仅有一个main()函数,并且该函数不能接收任何参数。

变量:首字母不能是数字;不能以gl_、wegl_或_webgl_开头
Float f3 = 8.0f;是不被允许的

GLSL ES只支持一维数组 例如float floatArray[4];
只有整型常量表达式和uniform变量可以被用作数组的索引值。并且数组不能再声明时被一次性初始化,必须显式地对每个元素进行初始化。

通过取样器这个类型变量访问纹理(sampler2D、samplerCube)
取样器变量只能是uniform变量或需要访问纹理的函数(如texture2D()函数的参数)。
uniform sampler2D u_Sampler;
唯一能赋值给取样器变量的就是纹理单元编号,例如 gl.uniform1i(u_Sampler,0)将纹理单元编号0传给着色器。

continue 中止包含该语句的最内层循环和执行循环表达式(递增/递减循环变量然后执行下一次循环。
break 中止包含该语句的最内层循环,并不再继续执行循环。
discard只能在片元着色器中使用,表示放弃当前片元直接处理下一个片元。

不能在一个函数内部调用它本身,也就是不能进行递归调用。
如果函数定义在其调用之后,那么必须在进行调用之前先声明该函数的规范。规范声明包含函数的参数、参数类型、返回值等等。
如果变量声明在函数的外面,那么它就是全局变量,如果声明在函数内部,那就是局部变量。

限定精度:precision mediump float;//所有的float类型都是中精度的
只有片元着色器中的float类型没有默认精度

进入三维世界

视图矩阵:表示观察者的状态,包含观察者的视点、观察目标、上方向。
<视图矩阵>×<模型矩阵>×<原始顶点坐标>

注册键盘事件响应函数
document.onkeydown = function (ev){ keydown (ev,gl,n, u_ViewMatrix, viewMatrix); };

盒状可视空间

长方体可视空间(盒状空间),由正射投影产生。
<canvas>上显示的是可视空间中物体在近裁剪面上的投影。
如果某个物体的一部分在可视空间内,一部分在其外,就只显示空间内的部分。
盒状可视空间.png

设置投影矩阵:Matrix4.setOrtho(left,right,bottom,top,near,far)正射投影矩阵

Js修改html元素中的内容:
nf .innerHTML= 'Good Morning,Marisuke-san ! ';

<正射投影矩阵>×<视图矩阵>×<原始顶点坐标>

将近裁剪面的宽度和高度改为了原来的一半,保持宽高比,结果三角形变成了之前大小的两倍,表示可视空间缩小了一半;把近裁剪面的宽度缩小为原先的一半,保持其高度不变,结果三角形宽度变成之前大小的两倍。

四棱锥/金字塔可视空间

该可视空间由透视投影产生。(近大远小)
金字塔可视空间.png
定义透视投影空间:Matrix4.setPerspective(fov,aspect,near,far)透视投影矩阵
Aspect宽高比应当与canvas保持一致,即canvas.width/canvas.height
<投影矩阵>×<试图矩阵>×<模型矩阵>×<原始顶点坐标>

处理对象的前后关系

WebGL在默认情况下会按照缓冲区中的顺序绘制图形,而且后绘制的图形覆盖先绘制的图形。

隐藏面消除

1.开启隐藏面消除功能。
gl.enable (gl.DEPTH_TEST);
2.在绘制之前,清除深度缓冲区和颜色缓冲区。
gl.clear (gl.DEPTH_BUFFER_BIT| gl.COLOR_BUFFER_BIT);
在绘制任意一帧之前,都必须清除深度缓冲区,以消除绘制上一帧时在其中留下的痕迹。

深度冲突

当几何图形或物体的两个表面极为接近时,会出现深度冲突(Zfighting)。Webgl提供多边形偏移的机制来解决这个问题,该机制将自动在Z值加上一个偏移量,偏移量的值由物体表面相对于观察者视线的角度来确定。
1.启用多边形偏移。
gl.enable(gl. POLYGON_OFFSET_FILL);
2.在绘制之前指定用来计算偏移量的参数。
gl.polygonoffset (1.0, 1.0 );

光照

着色:根据光照条件重建物体各表面明暗不一的效果的过程。

光源类型

平行光:指定方向和颜色
点光源光:指定位置和颜色。光线方向根据光源的位置和被照射之处的位置计算出来。
环境光:指定颜色。从各个角度照射物体,其强度都是一致的。

反射类型

<表面的反射光颜色>=<漫反射光颜色>+<环境反射光颜色>

漫反射

针对平行光或点光源而言。
<漫反射光颜色>=<入射光颜色>×<表面基底色>×cosθ入射角

环境反射

环境反射中,反射光的方向就是入射光的反方向。
<环境反射光颜色>=<入射光颜色>×<表面基底色>

根据光线和物体表面的方向计算入射角

cosθ=<光线方向>·<法线方向> ·表示点积
<漫反射光颜色>=<入射光颜色>×<表面基底色>×(<光线方向>·<法线方向>) 【后两者必须是归一化的】
光线方向矢量和表面法线矢量的长度必须为1。
光线方向实际上是入射方向的反方向,即从入射点指向光源方向。

一个平面只有一个法向量,即平面的任意一点都具有相同的法向量。

运动物体的光照效果

将变换之前的法向量乘以模型矩阵的逆转置矩阵就可以得到变换后的法向量。
获得逆转置矩阵:
normalMatrix.setInverseof (modelMatrix);
normalMatrix.transpose();

点光源光

在对点光源光下的物体进行着色时,需要在每个入射点计算点光源光在该处的方向。
顶点处的光线方向:点光源光坐标-顶点坐标

层次模型

Initshader()函数的步骤:
1.创建着色器对象(gl.createshader () )。
2.向着色器对象中填充着色器程序的源代码(gl.shaderSource ())。3.编译着色器(gl.compileShader ( ) )。
4.创建程序对象(gl.createProgram () )。
5.为程序对象分配着色器(gl.attachShader () )。
6.连接程序对象(g1.linkProgram ( ) )。
7.使用程序对象(gl.useProgram () )。

高级技术

雾化

线性雾化:距离视点越远,雾化程度越高。
雾化因子:某一点的雾化程度。
<雾化因子>=(<终点>一<当前点与视点间的距离>)/(<终点>一<起点>)
<片元颜色>=<物体表面颜色>×<雾化因子>+<雾的颜色>× (1一<雾化因子>)

Clamp():将第一个参数的值限制在第二个和第三个参数的构成区间内。
Mix():x*(1-z)+y*z

ɑ混合

1.开启混合功能:
gl.enable (gl.BLEND);
2.指定混合函数:
gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);

实现隐藏面消除和半透明效果:
1.开启隐藏面消除功能。
gl.enable(gl. DEPTH_TEST);
2.绘制所有不透明的物体(α为1.0)。
3.锁定用于进行隐藏面消除的深度缓冲区的写入操作,使之只读。
gl.depthMask (false) ;
4.绘制所有半透明的物体(α小于1.0),按照深度排序,从后向前绘制。
5.释放深度缓冲区,使之可读可写。
gl.depthMask (true) ;

渲染到纹理

绘制操作不是直接发生在帧缓冲区,而是发生在帧缓冲区所关联的对象上。

1.创建帧缓冲区对象( gl.createFramebffer() )。
2.创建纹理对象并设置其尺寸和参数(gl.createTexture()、gl.bindTexture() 、gl.texImage2D()、gl.Parameteri () )。
3.创建渲染缓冲区对象(gl.createRenderbuffer ( ) )。
4.绑定渲染缓冲区对象并设置其尺寸(gl.bindRenderbuffer()、gl.renderbuffer-Storage () )。
5.将帧缓冲区的颜色关联对象指定为一个纹理对象(gl.frambufferTexture2D())。
6.将帧缓冲区的深度关联对象指定为一个渲染缓冲区对象(gl.framebufferRenderbuffer () )。
7.检查帧缓冲区是否正确配置(gl. checkFramebufferstatus () )。
8.在帧缓冲区中进行绘制(gl.bindFramebuffer () )。

加载三维模型

1.准备Float32Array类型的数组vertices,从文件中读取模型的顶点坐标数据并保存到其中。
2.准备Floar32Array类型的数组colors,从文件中读取模型的顶点颜色数据并保存到其中。
3.准备Float32Array类型的数组normals,从文件中读取模型的顶点法线数据并保存到其中。
4.准备Uint16Array(或uint8Array)类型的数组indices,从文件中读取顶点索引数据并保存在其中,顶点索引数据定义了组成整个模型的三角形序列。
5.将前4步获取的数据写入缓冲区中,调用gl.drawElements()以绘制出整个立方体。

Web端裸眼3D播放系统

环境搭建

遇到的问题及解决方案

问题1:Can't locate API module structure `php8_module' in file E:/php8/php8apache2_4.dll: No error
解决方案:将`php8_module'改为`php_module'
参考链接:https://stackoverflow.com/questions/63400240/httpd-conf-on-windows-cant-locate-api-model-structure-php8-module

问题2:启动apache失败
解决方案:问题原因是80端口被占用,因此将端口号改为8080
参考链接:https://jingyan.baidu.com/article/ceb9fb10d909c48cac2ba06c.html

问题3:从html表单提交信息到PHP界面出现的是PHP的源码
解决方案:问题原因是打开网页的方式为直接右键浏览器打开,这样就导致了整个处理过程并没有经过Apache服务器,也就没有用到php,浏览器自己无法解析php代码,所以直接显示出了源代码。因此改为用在地址栏输入http://localhost:8080/loginversion2.html的方式打开网页即可
参考链接:https://blog.csdn.net/cnds123321/article/details/98211545?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242

问题4:PHP中出现error:Call to undefined function mysqli_connect()
解决方案:把 php.ini中extension_dir = "E:\php8\ext" 这句前面的分号去掉
参考链接:
https://blog.csdn.net/www121104115/article/details/75006164?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.control
https://www.cnblogs.com/song-zmin/p/11391041.html

登录模块

Web端光栅参数测量

  • 参考资料:

https://blog.csdn.net/weixin_42126934/article/details/105434391?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242
https://blog.csdn.net/sinat_39291423/article/details/103402825?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5
http://blog.sina.com.cn/s/blog_1808558f70102znxx.html
https://blog.csdn.net/qq_36058268/article/details/103918732
https://blog.csdn.net/yuan9a/article/details/90640498
https://blog.csdn.net/qq_33994566/article/details/96281193?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.not_use_machine_learn_pai
https://blog.csdn.net/weixin_42685022/article/details/103783076

Web端裸眼立体视频播放器

遇到的问题及解决方案

问题1:SendMessage函数只支持传递一个参数,导致无法传递线数和倾角
解决方案:在unity中写两个函数,分两次传递,且类型为string(而不是float)

function PassValue()
      {
              var linenum = getCookie('linenum');
              var incangle = getCookie('incangle');

              gameInstance2.SendMessage("Image","ReceiveLinenum",linenum);
              gameInstance2.SendMessage("Image","ReceiveIncangle",incangle);

              alert("获取光栅数据成功");
      }
public void ReceiveLinenum(string linenum)
    {
        //print("Cookie中的线数:" + linenum);
        LineNum = float.Parse(linenum); 
    }
public void ReceiveIncangle(string incangle)
    {
        //print("Cookie中的倾角:" + incangle);
        InclinationAngle = float.Parse(incangle);
    }


问题2:获取到的屏幕分辨率不正确
解决方案:在update函数中每帧重新获取分辨率

if (initHeight != Screen.height && initWidth != Screen.width)
        {
            mat.SetFloat("_Width", Screen.width);
            mat.SetFloat("_Height", Screen.height);
            initWidth = Screen.width;
            initHeight = Screen.height;
            GetComponent<RectTransform>().sizeDelta = new Vector2(Screen.width, Screen.height);
        }//刷新分辨率


问题3:WebGL平台不支持System.IO命名空间下的所有类,无法用原先的unity代码获取视频路径
解决方案:改变视频路径的获取方式

public string getAllvideoInDictionary()
    {
        string video_Path = Application.streamingAssetsPath + "/" + "Test9grid.ogv";
        return video_Path;
    }


  • 文件读取问题:

一度认为WebGL不支持使用StreamAssetsPath路径,但测试发现是可以正常使用的,使用System.IO.File读取该路径下的配置文件会失败是因为,使用File类相关函数时,我们真实填入的WebGL平台下的路径参数,是以file:///开头的,但是File读取后的路径开头却是/file:/ 所以结论是,在WebGL平台下不要使用System.IO.File类。

网页部署

部署php项目参考链接:https://www.cnblogs.com/YangJieCheng/p/8119505.html

遇到的问题及解决方案

问题1:HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
解决方案:参照链接:https://blog.csdn.net/weixin_43817994/article/details/90145227

问题2:不知道www.cgt3d.cn服务器上mysql的密码
解决方案:一开始参照链接
https://blog.csdn.net/weixin_42721957/article/details/90765197?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-2&spm=1001.2101.3001.4242
https://blog.csdn.net/qq_33337277/article/details/81454700
想以MD5解密的方式找回mysql密码,经过尝试解密失败,决定购买阿里云mysql数据库解决问题。
购买后进行了数据库的配置及搭建。参考链接:https://blog.csdn.net/explormt/article/details/108040093?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
https://blog.csdn.net/u013082989/article/details/50441981
https://blog.csdn.net/lgq2016/article/details/97237837

问题3:配置好云数据库后,在服务器上进行网页部署,但启动Apache一直失败,提示:the requested operation has faild.
解决方案:尝试https://blog.csdn.net/qq_36686681/article/details/53175504?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai 及https://blog.csdn.net/qq_41934478/article/details/80718395?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai 中的解决方法,四种解决方法皆失败。
最终通过查看Apache的log日志,发现错误原因为:[Mon Jan 11 16:32:57.452757 2021] [core:warn] [pid 11524:tid 708] AH00098: pid file D:/Apache24/logs/httpd.pid overwritten -- Unclean shutdown of previous Apache run? PHP Warning: 'C:\\Windows\\SYSTEM32\\VCRUNTIME140.dll' 14.0 is not compatible with this PHP build linked with 14.28 in Unknown on line 0 [Mon Jan 11 16:32:57.487589 2021] [:emerg] [pid 11524:tid 708] AH00020: Configuration Failed, exiting
即服务器上的Microsoft Visual C++ Redistributable for Visual Studio版本与配置所需的PHP8不兼容,于是到https://visualstudio.microsoft.com/downloads/ 下载所需要的版本重新安装,问题得以解决,Apache启动成功。

网站优化

修改代码,令三个程序在改变窗口大小时始终居中。
简化登录功能,取消“登录成功”弹窗。
删除分辨率文字框。

光栅参数测量:提示按Z保存参数
视频播放器:点击获取参数后不弹窗,出现字体提示(设置simhei字体)
模型播放器:调整“播放”按钮的位置,取消弹窗;不同显示器的rgb排列以及子图像排列不同,添加反转rgb和反转视点功能,以适应不同显示器

Web端裸眼立体模型播放器

本来想根据Unity工程的代码重新写webgl代码,但是尝试后发现Webgl读取模型特别麻烦,并且多次修改代码的效果都不对,于是又开始研究unity的代码,对代码进行了以下几部分修改,最终成功:
1.隐藏camera相机
2.修改渲染代码,令其只在初始时渲染一次,提高渲染效率

#if UNITY_WEBGL&&!UNITY_EDITOR
    if(!isrender)
    {
#endif
    _mvdisplay.RenderQuilt();
#if UNITY_WEBGL&&!UNITY_EDITOR
    isrender = true;
    }
#endif

3.改变纹理的默认渲染格式,因为Webgl不支持Unity默认的R8纹理格式

#if UNITY_WEBGL&&!UNITY_EDITOR
    quiltDepthDesc.colorFormat = RenderTextureFormat.ARGB32;
#else
    quiltDepthDesc.colorFormat = RenderTextureFormat.R8;
#endif


网址链接

http://gis.cgt3d.cn:76/

学习笔记

文件:Learn Opengl笔记.docx
文件:学习笔记 Unity3D.docx

2020年终总结

工作总结:
1.进行小组学习资料的收集与整理,包括:游戏程序员的学习之路第六部分电子书、2019年三维技术团队SCI论文、编制 2019年三维技术团队SCI论文表格。(1/2月)
2.配置平台SVN-VS插件,添加禁止提交和更新目录。(3月)
3.搭建nuget服务器。(4/5月)
4.制作铜奔马的html表格。(6月)
5.搜集学校、学院、团队的相关数据资料,制作数据可视化的wpf界面。(7月)
6.三维平台压力测试及视频录制。(7/8月)
7.撰写文物平台软件著作权。(8月)
8.撰写WPF,OSG,UNITY融合与通信方法专利《通信方法、装置和存储介质》。(9/10月)
9.连云港出差(9/10月)
10.参与多源信息融合三维可视化项目平台构建,为平台添加标注功能(9/10/11月)
11.搭建Web端裸眼3D播放系统(进行中)

占用资源:
1.学位名额。
2.实验室工位。

自我评价:
1.功劳加苦劳约等于占用实验室资源。
2.代码基础不好,学习OpenGL仅停留在用眼睛看相关教程,没有动手写代码练习,以至于没能顺利完成连云港的项目。

2019年终总结

编写平台启动界面

绘制属性框

搜集小组所需视频

启动界面
启动界面代码
属性框1
属性框2
属性框3
属性框4
搜集视频