浏览 299 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2024-01-02  
ios
网盘地址:https://pan.baidu.com/s/1z2ftiwj6nxxvgvmayuxnkw 提取码:12so
腾讯微云下载地址: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> createasync(
    int currentpage, int pagesize, iqueryable result)
{
    // 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(currentpage, pagesize, items);
}
最后,在返回数据的时候,删掉分页处理的部分,返回类型使用paginationlist的实例创建工厂。
private readonly appdbcontext _context;
private readonly ipropertymappingservice _propertymappingservice;

public touristrouterepository(
    appdbcontext appdbcontext,
    ipropertymappingservice propertymappingservice
)
{
    _context = appdbcontext;
    _propertymappingservice = propertymappingservice;
}
本文到此结束,感谢大家的观看!!
 
global site tag (gtag.js) - google analytics
网站地图