所需E币: 0
时间: 2024-1-2 13:49
大小: 2.95KB
今天给大家讲讲关于OpenGL的知识,以及结合OpenGL自主高性能三维GIS平台架构与实现的全流程。我将从2D->2.5D->3D立体球,全程零代码到完全实现,带着大家一步步学习。首先,我们先来看看什么是OpenGL?OpenGL(英语:OpenGraphicsLibrary,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGLES(OpenGLforEmbeddedSystems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的API接口。如果用一句话来描述OpenGL的话,我想应该是基于C/S结构设计的模板模式(设计模式里的那个);在图形渲染管线这节,主要介绍的是其模板设计,在OpenGL里我们称之为PipeLine;在C/S结构这节,则介绍OpenGLC/S结构给OpenGL带来的一些对于初学者看起来可能觉得奇奇怪怪的东西。我们知道,automapper的映射是基于语法糖和语法约定的,他会自动映射两个对象中名字相同的字断,而默认情况下,找不到匹配的字断将会被忽略,使用null,使用空来代替。除了使用automapper的自动映射,我们也可以手动添加映射关系。比如,dto中的价格,相当于模型中原价乘以折扣,我们可以把这个计算过程放在automapper中进行,对这样的映射过程有一个专有名词,叫做投影,projection。投影是个数学概念,所谓投影,就是把资源对象中的某一个或几个数据,进过一定的变化和计算,然后传递给目标对象。在autompeer中,我们可以使用ForMember函数做字断的投影。publicTouristRouteProfile(){CreateMap<TouristRoute,TouristRouteDto>().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的话,代码可以这么写,本地变量vartouristRoute等于validationContext点ObjectInstance,因为这个时候获取的数据类型是普通的对象,所以我们还需要进行类型转换,(),把它转化为“(TouristRouteForCreationDto)”,当然,我们还需要引入dto的命名空间。publicclassTouristRouteTitleMustBeDifferentFromDescriptionAttribute:ValidationAttribute{ protectedoverrideValidationResultIsValid( objectvalue, ValidationContextvalidationContext ) { vartouristRouteDto=(TouristRouteForCreationDto)validationContext.ObjectInstance; if(touristRouteDto.Title==touristRouteDto.Description) { returnnewValidationResult( "路线名称必须与路线描述不同", new[]{"TouristRouteForCreationDto"} ); } returnValidationResult.Success; }}拿到用户数据,我们就可以开始配置jwt数据了,首先,在claims数组中,把假数据替换为真数据。接着,继续使用userManager来获得用户的角色的字符串。//3.添加用户varadminUserId="90184155-dee0-40c9-bb1e-b5ed07afc04e";ApplicationUseradminUser=newApplicationUser{ 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有什么影响呢?最大的影响就是在于我们只能在OpenGLcontext所在的线程调用OpenGL的接口,详细阅读EGL标准你会知道所有OpenGL接口都存在一个阴式的入参,就是OpenGLContextpublicstaticasyncTask<PaginationList<T>>CreateAsync( intcurrentPage,intpageSize,IQueryable<T>result){ //pagination //skip varskip=(currentPage-1)*pageSize; result=result.Skip(skip); //以pagesize为标准显示一定量的数据 result=result.Take(pageSize); //includevsjoin varitems=awaitresult.ToListAsync(); returnnewPaginationList<T>(currentPage,pageSize,items);}最后,在返回数据的时候,删掉分页处理的部分,返回类型使用PaginationList的实例创建工厂。privatereadonlyAppDbContext_context;privatereadonlyIPropertyMappingService_propertyMappingService;publicTouristRouteRepository( AppDbContextappDbContext, IPropertyMappingServicepropertyMappingService){ _context=appDbContext; _propertyMappingService=propertyMappingService;}本文到此结束,感谢大家的观看!!