[翻译Building the Game: Part 5 – Static Level Geometry

科技中介服务机构如何利用数智工具提升服务效率?.docx 科技中介服务机构如何利用数智工具提升服务效率? 立即下载

还不错的文章,今天木有翻译完,原因是没心情了,明天翻译完,谢谢

Building the Game: Part 5 - Static Level Geometry

See the code for this post, or all posts in this series.

See the live demo.




(WARNING! The live demo for this post will probably take a while to load and will most likely not run at 60 FPS! Optimizations will come in later posts.)

警告:这篇文章的demo可能会需要很长的载入时间,而且可能会不太流畅,可能低于60FPS,优化版稍后贴出来

Sorry about the long gap in posts, but this has proven to be one of the more challenging things I've attempted so far. That's primarily been because I wasn't too familiar with how Unity handled things behind the scenes until I started working on this particular post. I've found some surprising (and occasionally disappointing) things about how Unity handles it's levels, and it's forced me to rethink a couple of aspects of this project, but I think I've got a decent handle on it now and at this point the order of the day is progress in small increments.

很抱歉这么长时间一直没有更新,但是这被证明是我认为我做过的最具有挑战性的事情之一,最开始的时候我不知道unity如何处理场景,一直到我开始写这些帖子,我发现一些关于unity如何处理层的特别有趣,同时也让人伤透脑筋的事情,它驱使着我重新思考这些问题,
这些天也一直在慢慢的有所进展

To that end, we're going to start talking about exporting, displaying, and interacting with levels from Unity, but we're going to do so one step at a time. Today's step is simply going to be getting the level geometry and lighting information exported and rendering brute force. We're not going to be worrying about collision detection, visibility culling, or anything else right now than just getting those triangles out of Unity and into our browser! 
最后,我们开始讨论关于unity'是如何处理层的输出,展现和交互的一些事情,但是我们只能一步一步前进,今天我们取得的进步是使用unity的强大的野兽式的力量渲染了几何体和光源的层,关于碰撞检测,几何体的透明度选取,还有一些现在对于我们把我们的四面体放到我们的浏览器中没有关系的事,我们倒不是怎么着急。

Most of the level formats that I have worked with in the past have had contained most of the geometry needed to display them in a large internal mesh that's been broken up by visibility (the traditional "BSP Tree"), and then occasionally will have instances of common meshes (like crates or lights, etc) that need to be placed throughout the level. (The Source engine uses these and refers to them as "props") Typically the tools that you use to build these levels start by having you block out the large geometry with "brushes", convex polygons that typically make up the floor and walls of your level. Then you can go and place high detail meshes, usually imported from an external tool, to give the level some more detail and texture.
过去我的作品中用到的许多层的格式包含有许多几何体需要在很大的内部网格中显示的时候都会遭到破坏(通常的是 bsp树,就是一个八叉树的推广,用于碰撞检测,译者注),然而通常的网格的实例比如箱子和光线等需要通过层贴图上去,(源引擎通常把他们当成道具),你通常用的建立层的工具都是把你的几何体“刷”上去的,具有凹凸面的多边形通常在你的层中做地面,墙什么的,然后你可以贴高质的材质,

As such, I was surprised to learn that in Unity everything in the level is treated as, essentially, a "detail prop". What I mean by this is that even large scale geometry such as the floor or walls is defines by placing instances of a mesh throughout the level. Those instances may simply be of a texture cube that you created in-editor, or of a mesh that was imported from Blender or Maya, but Unity treats them all the same.


This approach has some upsides and some downsides, which I'm not going to dissect here, but it does give us one big advantage in that it's easier to get the basic rendering in place because everything is going to be rendered the same way! All we really need to do is put together a format that lets us define the positions, size, and rotations of mesh instances, and then we'll render them using the instancing technique described in  the last BtG. We'll be sticking to JSON for this part of our format, and it's going to be dead simple for right now:



{
    "levelVersion": 1,
    "name": "Sample Level",
    "props": [ 
        {
            "model": "root/model/Barrel_Large",
            "instances": [
                { 
                    "pos": [28, 3, -30],
                    "rot": [-1.2, -0.38, -0.05, 0.9],
                    "scale": 1
                },
            
                { 
                    "pos": [7, 2.14, -62],
                    "rot": [0, 0, 0, 1],
                    "scale": 1.2
                },
            ]
        },
        {
            "model": "root/model/Barrel_Small",
            "instances": [ ... ]
        }
    ]
}
As you can see, all that our "level" really contains is paths to mesh files and then information about the transform of each mesh instance. Utilizing our previous post's instancing code, it's super easy to load the appropriate data into memory, as we show in  level.js:



for (var i in this.props) {
    var prop = this.props[i];
    var url = prop.model;
    prop.model = new model.Model();
    prop.model.load(gl, url);
    
    for(var j in prop.instances) {
        instance = prop.instances[j];
        instance.modelInstance = prop.model.createInstance();


        // Set up the instance transform
        instance.modelInstance.matrix = mat4.fromRotationTranslation(instance.rot, instance.pos);
        mat4.scale(instance.modelInstance.matrix, [instance.scale, instance.scale, instance.scale]);
    }
}


And drawing those instances is equally simple:



for (var i in this.props) {
    var prop = this.props[i];
    prop.model.drawInstances(gl, viewMat, projectionMat);
}
Assuming that we have some way of exporting to this new format, we've can now render an entire level! Check it out!




This, of course, is just a small segment of a level, (in this case, the "AngryBots" sample level included with Unity). And it's really cool to look at that and say "Hey! That actually looks like something!" We've made a jump from random floating crates to a full blown environment in just a few lines of code! (Mostly, anyway. We're ignoring the export for the moment.)


A key element is missing from our scene, however, and that's lighting. There are several different options for lighting. We could, for example, go with nothing but dynamic lights, a technique famously employed in  Doom 3 (which is o pen source now! Sweet!) But the most common technique, and what we'll be using here, is static lighting via lightmaps. Lightmapping has been in use since the original Quake, and is alive and kicking in modern marvels like Modern Warfare 3, and it should serve use well in our game too. And, fortunately for us, Unity will build the lightmaps we want!


Unity's lightmaps work a bit differently than most others that I've seen, but I kinda like the way they're set up so for the moment I'm going to be sticking to how they do it for my own code too. Typically anything that gets lighmapped in a level will have a unique set of lightmap coordinates, even if that mesh is instanced several times throughout the level. This can mean you end up storing the same mesh with different lighting UVs over and over again. In Unity, and subsequently in our renderer, each mesh gets a single set of lightmaps UVs, as if it were just another normal texture. Each instance of the mesh within the level contains a lightmap index, a UV offset, and a UV scale. The meshes lightmap UVs are transformed in a shader by that offset and scale to line up with the rect on the lightmap that has been reserved for this mesh instance. The lighting information for the mesh is laid out the same way for each instance, just shifted around the texture.


The lightmaps color information is also a bit different, and it took me a moment to figure out how to display it correctly. The lightmap itself looks like this, but it will be hard too see much because there's a lot of alpha:


If you try to simply multiply your texture colors by the lightmap RGB values like you might expect to be able to you'll just get an over-bright mess. What you actually need to do is modulate the RGB values by the alpha value multiplied by a brightness factor (I've found that 9 seems to match the Unity rendering reasonably closely.) I'm not 100% sure why they do this, aside from maybe some higher precision on brighter lights. It does give you some nice effects where the lighting can be really strong and starts to wash out the diffuse colors, though. Kind of a "psuedo-HDR". The shader code is pretty simple:



void main(void) {
    vec4 color = texture2D(diffuse, vTexCoord);
    vec4 lightValue = texture2D(lightmap, vLightCoord);
    float brightness = 9.0;
    gl_FragColor = vec4(color.rgb * lightValue.rgb * (lightValue.a * brightness), 1.0);
}



We also have to add the approriate lighting info to our level format. This means an array of lightmap paths at the beginning of the file


"lightmaps": ["root/texture/level1/light0.png","root/texture/level1/light1.png"]


And the lightmap index, offset, and scale for each instance



{ 
    "pos": [0, 0, 0],
    "rot": [0, 0, 0, 1],
    "scale": 1,
    "lightmap": {
         "id": 1,
         "scale": [0.0126953, 0.0126953],
         "offset": [0.566791, 0.587325]
    }
}
We'll also tweak our instance rendering to give us a way to render lightmapped instances (see  drawLightmappedInstances  in model.js). The result?  Not too shabby looking!




What a difference a few textures can make, huh? Now we have a nicely lit scene that we can fly around in and build the rest of our level information (collision, item positions, etc) on top of. The entire scene weighs in at about 32 Mb, which isn't spectacular but is far better than the 200Mb I was seeing for the Source Engine demo.


There are a couple of other implementation details that may be of interest here. I've implemented a simple Texture Manager (in  texture.js) to do simple checks to see if a requested texture has already been loaded and if so return a reference to the existing one. This helps improve performance quite a bit, since this particular level tends to share textures between a lot of different meshes.


I've also gone and fixed some issues with the flying camera ( camera.js), since this is the first demo to really use it. I had made a few really stupid mistakes in earlier versions that caused the camera to lock up if you were looking straight up or down. (doh!) That's fixed here, though you'll want to avoid the flying camera from earlier posts code.


Of course, I've avoided talking about the export process for this the whole time and, um... I'm mostly going to keep avoiding it. Fact is, it's kinda ugly and I'm still working out wether or not I want to keep doing things the way I'm doing them now. If you really want to see all the gory details feel free to dive into  WebGLExport.cs and look at the logic in ExportLevel. There are a few quirks that deserve special mention at this point, though:


I'm basically just looping through every mesh in the scene and exporting any that are visible and static. Anything that has a dynamic component to it is simply being skipped right now. This does leave a couple of gaps if you export a complicated scene like the one above, but handling dynamic scene components is a subject for another day.


Also, I'm kinda cheating on mesh scale at the moment. Unity stores instance scales as a 3 dimensional vector, and I'm boiling it down to a scalar value. Most of the time this will work fine, since scaling unevenly leads to squashed looking meshes, but if anyone is doing that intentionally in a Unity scene we'll loose it during the export. I'm doing it this was to keep my transform matrices  orthogonal, which has various nice properties in terms of inverting and so on, but I may change my mind on this restriction later if a compelling reason presents itself.


Another thing worth mentioning about the export is a leak that I've run into and am really not sure how to fix. If you try to export a large scene with a lot of textures (like AngryBots) the export will die part way through and spit "Too many files open" out onto the console, at which point Unity basically needs to be restarted. Preventing texture exports will allow the entire level to be output without issue. Obviously I've got a file handle leak, but I can't see where, and nobody on  Unity's Stack Overflow imposter seems to know (or care) either. Interestingly, it seems to perform better on OSX Lion but I can still get it to crash after a few exports. I'd appreciate anyone that cares to give any suggestions in this area.


Oh, and finally I should mention that Unity apparently hates the way that the rest of the world orients their X axis, so they've flipped it. Yeah, I was happy about that too. I'm still deciding wether or not I want to fix this, but the immediate consequence is that everything we export is mirrored for now. The easiest thing to do if this gets to be a problem would be to invert X on our projection matrix, but I'm gonna just leave it be for now.


So, where does this leave us? Well, we can render all the static, lightmapped geometry in a level just fine, but we are rendering ALL of it. There's no visibility culling yet. I was able to get away with that in  Quake 3, but it probably won't fly here. (Note that on my MacBook I can render the whole AngryBots level at 60fps, but without much wiggle room. We need better performance if we want to start adding game logic.)


Beyond simple visibility culling, however, I'd like to try to optimize how some of the geometry is handled. There are some meshes that appear in the levels that don't really need to be "instanced", since they only appear once and won't be applicable to other levels. (Many of the floors and walls will meet this criteria.) It would be more efficient to pack this geometry into a level specific buffer and do some additional state sorting on it. That will be a nice future optimization at some point.


We also don't have any collision information in our export, and that will obviously be critical moving forward, as will be adding things like triggers for doors and items like health packs or weapons. And we're still sidestepping the whole material issue by rendering everything with a single shader. So... yeah. Long ways to go yet. This is a decent step in the right direction, though!


I'm hoping that the next post won't take as long as this one did, but sadly with Christmas just around the bend, a new project starting up at my work, and a  WebGL Camp to prepare for I think that it's best to brace for a bit of a delay. Sorry in advance!
支付对账系统|Spring Cloud Alibaba微服务架构 分库分表+双边账比对引擎 一套基于 Spring Cloud Alibaba 的微服务支付对账系统完整工程,解决支付业务中"本地账与渠道账不一致"这一核心问题。技术栈为 JDK 8 + Spring Boot 2.7 + Spring Cloud 2021 + Nacos + OpenFeign + MyBatis-Plus + ShardingSphere 5.3 + Redisson + RocketMQ,共 8 个 Maven 模块、104 个 Java 文件、约 8800 行代码,含建表脚本与中间件编排文件。 工程按商户中心、渠道中心、结算中心、对账中心、调度中心、网关分层。核心实现有四块:一是双边账比对引擎,支持渠道单号优先、商户订单号回退的匹配主键,分位容差抹平,自动判定本地多单、渠道多单、金额不一致、状态不一致四类差异;二是差异处置策略,覆盖查单补偿、本地账补记、人工工单与挂账结转下期,并内置防资损约束——渠道查单接口失败时不判定为"渠道无此单",避免把超时误判成掉单而错误关闭已收款订单;三是分库分表落地,4 库 × 32 表,自定义按账期落表的分片算法,跨账期范围查询可精确裁剪表;四是渠道账单适配器,处理 GBK 编码、表头按列名定位、CSV 引号切分与金额元转分。网关侧实现了商户 HMAC-SHA256 签名验签加时间戳防重放、运营台 JWT 加登出黑名单双身份鉴权。另有雪花 ID、账期 T+N 计算、幂等切面、统一错误码与异常体系、对账任务状态机配分布式锁与乐观锁双保险。 立即下载

相关推荐

科技中介服务机构如何实现服务流程的标准化与高效化?.docx

科技中介服务机构如何实现服务流程的标准化与高效化?

h5游戏接入googleplay时遇到的问题总结

github上的总结 1.关于androidStudio相关的配置环境问题。 因为之前AndroidStudio已经配置过sdk路径,不需要java的配置了,接入的google signin 服务,尽量保持AndroidStudio是最新版本,然后把Android sdk 中相关的 sdk , tools 等都更新到最新。 2.遇到加入google service依赖时androi...

只爱艾薇儿 2959

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)

基于非对称纳什谈判的多微网电能共享运行优化策略(Matlab代码实现)内容概要:本文档标题为《Plecs全桥LLC谐振变换器仿真模型.txt》,但实际上内容并未围绕Plecs或全桥LLC谐振变换器展开详细论述,而是罗列了大量基于Matlab/Simulink和Python的科研仿真项目标题及相关技术方向,涵盖电力系统、无人机控制、微电网优化、路径规划、状态估计、信号处理、电动汽车调度、电力电子变换器等多个领域。其中包括多种优化算法(如粒子群、遗传算法、NSGA-II)、控制策略(如PID、MPC、滑模控制)、仿真建模(如LLC谐振变换器、DAB变换器、PWM整流器)以及具体应用场景的研究实现。尽管提及“隔离型全桥LLC谐振变换器建模及参数设计资料”,但全文缺乏对该主题的具体描述、模型细节或仿真分析,仅作为条目之一出现。因此,该文档实质是一份科研项目资源清单或代码合集目录,而非针对某一主题的深入文章。; 适合人群:具备一定Matlab/Simulink或Python编程基础,从事电气工程、自动化、控制科学、电力电子、新能源系统等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①为科研工作者提供丰富的课题参考与复现资源,涵盖优化调度、控制系统设计、电力电子仿真等方向;②辅助完成硕士/博士论文、期刊论文复现、课程设计或项目开发,提升研究效率与创新性;③通过已有模型和代码快速搭建仿真平台,聚焦算法改进与性能优化。; 阅读建议:此文档应作为科研资源索引使用,读者可根据自身研究方向筛选相关条目,结合配套代码与参考资料进行深入学习与实践。对于希望研究全桥LLC谐振变换器的用户,需注意本文档未提供完整内容,建议查找标注的“仿真+设计报告+计算书”等附件资源以获取详细信息。

游戏号常见必看问题

1.收到拳头游戏号后立刻修改密码邮箱,否则出问题概不负责。首先打开网站 https://account.leagueoflegends.com/jp/ja/protect 然后看以下图文教程 https://img.alicdn.com/imgextra/i3/891368544/O1CN015XqxLs2CzCcUcFJbH_!!891368544.jpg 2.游戏登录步骤图文教程 https://img.alicdn.com/imgextra/i1/891368544/O1CN011ZmC5w2CzCc

TeNeT69的博客 607

高校技术转移办公室在推动成果转化过程中,如何高效完成技术成果的信息整合与价值挖掘.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员,如何精准挖掘并分析企业的技术需求?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

(十二)nodejs循序渐进-高性能游戏服务器框架pomelo之创建一个游戏聊天服务器

上个章节我们简单介绍了下pomelo的安装和目录结构,有读者可能觉得有点吃不消,为什么不再深入讲一讲目录结构和里边的库,这里我就不费口舌了,大家可以去官网参考文档说明,本文只告诉大家如何利用这个框架来开发自己的东西。 随着文章的后续不断推进,我相信大家会越来越熟悉pomelo,对猪场框架的使用也会越来越得心用手。 新建gate和chat服务器 在app/servers目录下新建gate和chat服务器。 gate服务器: 在一般情况下用户量一台机器就可以支撑,但用户量多...

yolo模型训练找我,AI游戏合作找我 1451

隔离型全桥LLC谐振变化器建模及参数设计资料【仿真+设计报告+计算书】

内容概要:本文档是一套关于隔离型全桥LLC谐振变换器的综合性技术资料,系统涵盖了拓扑建模、参数设计、闭环控制策略及仿真验证等关键环节。资料整合了Simulink仿真模型、详细设计报告、Mathcad计算书以及控制算法说明文档,深入探讨了恒压恒流双闭环控制、变频与移相混合控制、软启动机制等核心技术,并提供了多应用场景实例,包括双向全桥LLC、多相交错LLC以及电动汽车V2G系统中的CLLC变换器设计。此外,配套资源还包含了多种先进控制与状态估计算法(如EKF、UKF、PF及其与神经网络融合算法)的Matlab实现代码,强化了科研复现与工程实践能力。; 适合人群:适用于电气工程、电力电子及相关专业的研究生、科研人员,以及从事高频开关电源、新能源变换器开发的工程师;需具备扎实的电路理论基础与一定的仿真软件操作经验。; 使用场景及目标:①支持全桥LLC变换器的高效参数设计与动态性能优化;②服务于高校或企业的科研项目,助力拓扑创新与控制系统开发;③作为毕业设计、学术论文或工业级产品原型开发的重要技术参考,提升系统效率、稳定性和响应速度。; 阅读建议:建议结合Simulink仿真模型与Mathcad计算书同步学习,重点关注谐振元件匹配、控制环路设计与系统稳定性分析,充分利用提供的Matlab/Simulink环境进行仿真调试与二次开发,深化理论认知与实际工程应用的融合。

Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)

我之前的爬虫博客,爬的都是网页的信息,什么下载小说啊,下载动漫啊,下载帅哥图、妹子图啊。玩这些东西的时候,你想过爬取手机APP里面的东西吗?

Jack-Cui 13万+

三相交错并联Buck变换器+低纹波输出+双闭环控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的三相交错并联Buck变换器仿真模型,重点实现了低输出纹波特性和双闭环控制策略。通过三相交错并联结构有效抑制输入与输出电流的纹波成分,显著提升电源系统的稳定性和电能质量;控制系统采用电压外环与电流内环相结合的双闭环架构,增强了系统的动态响应能力和抗干扰性能。资源包涵盖完整的Simulink仿真模型、技术说明文档及参考文献,具有较强的工程实践价值,适用于电力电子变换器的科研开发与教学实验。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校本科生、研究生及科研人员,尤其适合从事直流变换器拓扑结构与先进控制策略研究的专业人士,具备电路理论基础和Simulink仿真操作经验者更佳。; 使用场景及目标:①用于高效低纹波DC-DC变换器的拓扑创新与控制算法研究;②支撑科研项目中对多相并联技术与双闭环控制系统的性能验证;③作为课程设计、毕业设计或实验教学的技术范例,帮助深入理解交错并联的工作机理与闭环系统的设计方法。; 阅读建议:建议结合所提供的参考文献系统学习控制策略的理论依据,并动手调整仿真参数以观察系统在不同工况下的动静态响应特性,进一步掌握模型搭建、控制器设计与性能优化的全流程,强化理论与工程实践的融合能力。

产业园区运营负责人如何依托平台系统提升科技资源的集聚与转化效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

SOP 配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)

内容概要:本文档是一份关于Plecs全桥LLC谐振变换器仿真模型的技术资料汇总,重点介绍了隔离型全桥LLC谐振变换器的建模、仿真与参数设计方法。文档包含完整的仿真模型、设计报告和计算书,并基于顶级EI期刊研究成果进行复现,系统阐述了谐振变换器的工作原理、关键参数设计、软开关实现、效率优化以及动态性能分析等内容。通过Simulink/Plecs平台实现仿真,支持对变频控制、移相控制及模式切换等先进控制策略的研究,适用于电力电子变换器的科研与教学实践。; 适合人群:具备电力电子与电力系统基础知识,从事新能源、电源设计、微电网等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高校或研究机构开展LLC谐振变换器的教学实验与课题研究;②支撑科研论文复现与创新性拓扑结构的验证;③为企业研发高效率DC-DC变换器提供仿真基础和技术参考; 其他说明:文档配套资源丰富,包含仿真文件、设计报告与参考文献,建议结合MATLAB/Simulink或Plecs软件进行实操演练,重点关注谐振参数匹配、软开关边界分析与闭环控制策略的设计。

高校技术转移办公室如何提升技术成果的精准推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务机构如何建立标准化、可复制的服务流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员在成果推介过程中,如何提升推介材料的专业性与吸引力.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

三电平Buck直流变换器双闭环、单闭环、开环仿真【附参考文献】(Simulink仿真实现)

内容概要:本文系统介绍了三电平Buck直流变换器在Simulink环境下的开环、单闭环及双闭环控制系统的建模仿真与性能对比分析,深入探讨了不同控制策略对系统动态响应、稳态精度、抗扰能力及鲁棒性的影响。通过构建完整的仿真模型,详细阐述了各控制结构的设计思路、关键模块实现方法及PI控制器参数整定过程,并结合仿真波形对比分析了三种控制方式在启动过程、负载突变等工况下的输出电压表现,充分验证了双闭环控制在抑制电压波动、提升调节速度和负载适应性方面的显著优势。文档还提供了详尽的参数设置指南和参考文献,便于读者复现结果并开展进一步研究。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的本科生、研究生,以及从事直流变换器设计、控制算法开发和系统仿真的科研人员与工程技术开发者。; 使用场景及目标:①掌握三电平Buck变换器的工作原理与数学建模方法;②理解电压模式控制与电流模式控制的差异与应用场景;③学习双闭环PI控制器的设计流程与参数整定技巧;④为电力电子装置的控制器设计、性能优化及科研项目提供仿真验证平台与技术参考。; 阅读建议:建议读者结合Simulink软件动手搭建仿真模型,分步实现开环、单闭环与双闭环控制系统,通过调整控制器参数并观察不同工况下的系统响应,深入理解控制策略对系统性能的影响机制,同时结合提供的参考文献强化理论基础,实现从仿真到实际应用的有效过渡。

上一篇: 10个迷惑新手的Cocoa,Objective-c开发难点和问题
下一篇: Java靠强大的JVM维护了一个蓝领级语言?
程序员迈克
博客等级 码龄16年 36粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值