浏览 299 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
|
发表时间:2024-01-02
腾讯微云下载地址:https://share.weiyun.com/i2heklpo 密码:b36r5s 今天给大家讲讲关于opengl的知识,以及结合opengl自主高性能三维gis平台架构与实现的全流程。我将从2d->2.5d->3d立体球,全程零代码到完全实现,带着大家一步步学习。 首先,我们先来看看什么是opengl? opengl(英语:open graphics library,译名:开放图形库或者“开放式图形库”)是用于渲染2d、3d矢量图形的跨语言、跨平台的应用程序编程接口(api)。 opengl es(opengl for embedded systems)是 opengl 三维图形 api 的子集,针对手机、pda和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的api接口。 如果用一句话来描述 opengl 的话,我想应该是基于c/s结构设计的模板模式(设计模式里的那个);在 图形渲染管线 这节,主要介绍的是其模板设计,在 opengl 里我们称之为 pipeline;在 c/s结构 这节,则介绍 opengl c/s 结构给 opengl 带来的一些对于初学者看起来可能觉得奇奇怪怪的东西。 我们知道,automapper的映射是基于语法糖和语法约定的,他会自动映射两个对象中名字相同的字断,而默认情况下,找不到匹配的字断将会被忽略,使用null,使用空来代替。除了使用automapper的自动映射,我们也可以手动添加映射关系。比如,dto中的价格,相当于模型中原价乘以折扣,我们可以把这个计算过程放在automapper中进行,对这样的映射过程有一个专有名词,叫做投影,projection。投影是个数学概念,所谓投影,就是把资源对象中的某一个或几个数据,进过一定的变化和计算,然后传递给目标对象。在autompeer中,我们可以使用formember函数做字断的投影。 public touristrouteprofile() { createmap .formember( dest => dest.price, opt => opt.mapfrom(src => src.originalprice * (decimal)(src.discountpresent ?? 1)) ) .formember( dest => dest.traveldays, opt => opt.mapfrom(src => src.traveldays.tostring()) ) .formember( dest => dest.triptype, opt => opt.mapfrom(src => src.triptype.tostring()) ) .formember( dest => dest.departurecity, opt => opt.mapfrom(src => src.departurecity.tostring()) ); } 这次validationcontext 所访问的不再是属性级别的数据,而是class类级别的数据,然后再通过class来访问属性。所以如果我们想访问touristrouteforcreationdto的话,代码可以这么写,本地变量 var touristroute 等于 validationcontext 点 objectinstance,因为这个时候获取的数据类型是普通的对象,所以我们还需要进行类型转换,(),把它转化为“(touristrouteforcreationdto)”,当然,我们还需要引入dto的命名空间。 public class touristroutetitlemustbedifferentfromdescriptionattribute: validationattribute { protected override validationresult isvalid( object value, validationcontext validationcontext ) { var touristroutedto = (touristrouteforcreationdto)validationcontext.objectinstance; if (touristroutedto.title == touristroutedto.description) { return new validationresult( "路线名称必须与路线描述不同", new[] { "touristrouteforcreationdto" } ); } return validationresult.success; } } 拿到用户数据,我们就可以开始配置jwt数据了,首先,在claims数组中,把假数据替换为真数据。 接着,继续使用usermanager 来获得用户的角色的字符串。 // 3. 添加用户 var adminuserid = "90184155-dee0-40c9-bb1e-b5ed07afc04e"; applicationuser adminuser = new applicationuser { id = adminuserid, username = "admin@fakexiecheng.com", normalizedusername = "admin@fakexiecheng.com".toupper(), email = "admin@fakexiecheng.com", normalizedemail = "admin@fakexiecheng.com".toupper(), twofactorenabled = false, emailconfirmed = true, phonenumber = "123456789", phonenumberconfirmed = false }; 那这种 c/s 结构对于我们使用 opengl 有什么影响呢? 最大的影响就是在于我们只能在 opengl context 所在的线程调用 opengl 的接口,详细阅读 egl 标准你会知道所有 opengl 接口都存在一个阴式的入参,就是 opengl context public static async task int currentpage, int pagesize, iqueryable { // pagination // skip var skip = (currentpage - 1) * pagesize; result = result.skip(skip); // 以pagesize为标准显示一定量的数据 result = result.take(pagesize); // include vs join var items = await result.tolistasync(); return new paginationlist } 最后,在返回数据的时候,删掉分页处理的部分,返回类型使用paginationlist的实例创建工厂。 private readonly appdbcontext _context; private readonly ipropertymappingservice _propertymappingservice; public touristrouterepository( appdbcontext appdbcontext, ipropertymappingservice propertymappingservice ) { _context = appdbcontext; _propertymappingservice = propertymappingservice; } 本文到此结束,感谢大家的观看!! 声明:iteye文章m6手机网页版登录的版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|