ar foundation_使用Foundation 5构建顶部栏的画布外导航

ar foundation



在较早的教程中,我们学习了如何使用CSS 自定义Foundation 4顶部栏 。 从那时起,ZURB发布了Foundation 5。 比其前身更快,更精简,更强大。 还值得注意的是,ZURB带来了Off Canvas功能,该功能可以在Foundation 3中找到。

今天,我们将结合使用画布功能和顶部栏导航。 结果将是为台式机用户提供一个不错的自定义导航,为平板电脑和移动用户提供一个光滑的画布菜单。

注意:此处使用的功能不适用于IE8及更低版本。 本教程末尾列出的资源中已包含IE9的修复程序。

要求

为了遵循本教程,您需要具备以下中级经验:

  • 对基础和网格系统的基本了解
  • 与Sass and Compass Foundation项目一起工作的知识

入门

搭建环境

如果尚未安装,请根据需要使用Foundation Sass文档设置Compass和Sass。 如果您已经完成了此操作,那么这里是使用命令提示符创建新Foundation 5项目的快速设置:

转到您的首选目录

cd c:/user/your-working-environment

使用此命令创建您的项目

foundation new your-project

转到您新创建的项目文件

cd your-project

并使用此命令来获取指南针以观看和编译您的Sass文件

compass watch

如果一切顺利,则目录应如下所示:

剩下的只有一件事,那就是创建我们的style.scss 。 为此,请在scss文件夹中创建一个新文件,然后将该文件命名为style.scss。 我们稍后将需要此文件。 如果您正在运行Compass,则应该已经将style.scss编译为 style.css 文件放在样式表文件夹中。 太好了,我们已完成所有设置,让我们开始编写通用HTML结构代码。

设置HTML结构

步骤1:一般标记

打开index.html并删除body标记之间的所有内容,除了</body>之前的脚本。 我们需要它们来使Foundation的所有功能正常工作。 其次,继续并在<head>添加以下代码行,以确保我们加载了CSS文件。

<link rel="stylesheet" href="stylesheets/style.css" />

设置好之后,让我们添加几个部分,并为我们的页面提供一些虚拟内容。 我们将从一些基础知识开始,添加标题,主要,服务,号召性用语,页脚和版权部分。

<!-- HEADER SECTION -->
<header>
	<div class="row">
	    <div class="small-12 medium-12 large-12 columns">
			<div class="logo">
				<h1>Foundation 5 Topbar / Offcanvas menu</h1>
			</div> <!-- END DIV.LOGO -->
		</div> <!-- END 12 COLUMNS -->
	</div> <!-- END ROW -->
</header> <!-- END HEADER -->

<!-- MAIN SECTION -->
<section class="main-section">
	<!-- CONTENT SECTION -->
	<section class="full-width content-section">
		<div class="row">
			<div class="small-12 medium-12 large-12 columns">
				<h2>Moving aside for the Offcanvas people!</h2>
				<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vitae, minus molestias dolores blanditiis esse? Quam, accusamus, quo, eum, ipsum voluptatibus aliquam perspiciatis qui porro est sit eligendi suscipit. Expedita, eligendi, laboriosam animi itaque accusantium repudiandae dicta ullam quia ipsum amet quam nesciunt non! Porro, fuga molestiae quaerat accusantium nesciunt omnis.</p>
				<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero, minima, quidem repellendus facilis dignissimos laboriosam doloribus sequi tempora iusto facere maxime quasi est ex qui commodi nobis aliquid id eius magnam consectetur. Ut deserunt repellat asperiores dolores odio! Incidunt, esse, distinctio modi ratione facilis iusto tempora saepe nisi nostrum culpa velit eaque quos dolore repellat facere accusamus architecto iure similique numquam autem asperiores error cumque eum. Dolor, minima aspernatur autem eaque ipsa officiis rem! Suscipit, esse, quos. Quos, perferendis, iure nobis modi perspiciatis enim error nulla asperiores dignissimos harum. Dolor, non rem in nobis illum id hic laboriosam blanditiis aliquid!</p>
			</div> <!-- END 12 COLUMNS -->
		</div> <!-- END ROW -->
	</section> <!-- END SECTION.CONTENT-SECTION -->

	<!-- SERVICES SECTION -->
	<section class="full-width services-section">
		<div class="row">
			<div class="small-12 medium-4 large-4 columns">
				<h3>Service #1</h3>
				<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus, veniam, asperiores fugit quas quaerat soluta in quibusdam placeat incidunt suscipit esse neque quisquam eaque rem!</p>
			</div>

			<div class="small-12 medium-4 large-4 columns">
				<h3>Service #3</h3>
				<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aliquam, nihil nemo tempore voluptatum veritatis corrupti id doloremque. Saepe, in sequi voluptatem impedit rem omnis aliquam?</p>
			</div>

			<div class="small-12 medium-4 large-4 columns">
				<h3>Service #3</h3>
				<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate ducimus aut commodi eius! Sequi, magni labore ea iusto quibusdam autem repellendus ipsum dolorem quasi maxime!</p>
			</div>

		</div> <!-- END ROW -->
	</section> <!-- END SECTION.FULL-WIDTH.SERVICES-SECTION -->

	<!-- CALL 2 ACTION -->
	<section class="full-width call-to-action">
		<div class="row">
			<div class="small-12 medium-12 large-12 columns">
				<a href="#" class="button radius">Get in touch with us!</a>
			</div>
		</div>
	</section>
</section> <!-- END SECTION.MAIN-SECTION -->

<!-- FOOTER SECTION -->
<footer>
	<div class="row">
    	<div class="small-12 medium-4 large-4 columns">
		    <h4>Foundation</h4>
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus, veniam, asperiores fugit quas quaerat soluta in quibusdam placeat incidunt suscipit esse neque quisquam eaque rem!</p>
		</div>

		<div class="small-12 medium-4 large-4 columns">
			<h4>Foundation</h4>
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus, veniam, asperiores fugit quas quaerat soluta in quibusdam placeat incidunt suscipit esse neque quisquam eaque rem!</p>
		</div>

		<div class="small-12 medium-4 large-4 columns">
			<h4>Foundation</h4>
			<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus, veniam, asperiores fugit quas quaerat soluta in quibusdam placeat incidunt suscipit esse neque quisquam eaque rem!</p>
		</div>
	</div> <!-- END ROW -->
</footer> <!-- END FOOTER -->

<!-- COPYRIGHT SECTION -->
<section class="full-width copyright-section">
	<div class="row">
	    <div class="small-12 columns">
			<p>&copy; 2014</p>
		</div> <!-- END 12 COLUMNS -->
	</div> <!-- END ROW -->
</section> <!-- END SECTION.FULL-WIDTH COPYRIGHT-SECTION -->

在这里,我们添加了带有徽标的标题部分,然后是一个主要部分,分为内容部分,三个服务和号召性用语。 最后是一个带有三列的页脚部分和一个版权部分。 到目前为止简单明了的标记,让我们进入顶部吧!

第2步:顶部栏标记

我们将把Top Bar包裹在带有navigation-section类navigation-section ,以用于样式设计。 我们还将为该部分提供另一类: show-for-large-up 。 这样可以确保仅在最小宽度和更大宽度的设备上显示顶部栏。 这是Foundation为我们提供的众多可见性类之一(您可以在Foundation组件文档中阅读有关它们的更多信息)。 现在进行标记:

<!-- LARGE SCREEN TOP BAR MENU -->
<section class="navigation-section show-for-large-up">
	<div class="row">
		<div class="large-12 columns">
			
            <!-- TOP BAR INITIALIZATION -->
			<nav class="top-bar" data-topbar>
				<ul class="title-area">
					<li class="name">
						<h1></h1>
					</li>
				</ul> <!-- END UL.TITLE-AREA -->

				<!-- TOP BAR MENU ELEMENTS -->
				<section class="top-bar-section">
					<ul class="left">
						<li class="active"><a href="index.html">Home</a></li>
						<li class="has-dropdown">
							<a href="blog.html">Blog</a>
							<ul class="dropdown">
								<li><a href="blog.html">Archive</a></li>
								<li><a href="post.html">Single</a></li>
							</ul>
						</li>
						<li class="has-dropdown">
							<a href="page.html">Page</a>
							<ul class="dropdown">
								<li><a href="page.html">Full-wdith</a></li>
								<li><a href="sidebar-left.html">Left Sidebar</a></li>
								<li><a href="sidebar-right.html">Right Sidebar</a></li>
							</ul>
						</li>
						<li><a href="portfolio.html">Portfolio</a></li>
						<li class="has-dropdown">
							<a href="#">Dropdown</a>
							<ul class="dropdown">
								<li><a href="#">First link in dropdown</a></li>
								<li><a href="#">Second link in dropdown</a></li>
								<li><a href="#">Third link in dropdown</a></li>
							</ul>
						</li>
					</ul>
				</section> <!-- END SECTION.TOP-BAR-SECTION -->
			</nav> <!-- END NAV.TOP-BAR -->

		</div> <!-- END 12 COLUMNS -->
	</div> <!-- END ROW -->
</section> <!-- END SECTION.NAVIGATION-SECTION -->

注意 : 请在导航栏中添加data-topbar。 这样,我们可以确保顶部栏JavaScript正常运行(例如,下拉菜单)。

步骤3:非画布标记

我们的画布外菜单将隐藏在视口边界之外。 当我们按下菜单键时,Offcanvas将会滑入(在我们的案例中是从左侧)并将页面内容移到右侧。 在我们的设置中,我们将排除 此运动中的页眉和页脚。 仅内容区域将移到一边,而页眉和页脚保留在原位。

另外,当向下滚动时,我们的页眉(可能包含徽标和其他内容)将固定显示在页面顶部( 注意 :该页面应包含足够的内容以使其正常工作,因为否则页脚部分也会浮动在我们的Offcanvas菜单上方)。 这意味着我们必须在主要内容部分周围“包裹”画布。 在顶部栏导航之后 部分和我们的主要内容部分之前,放置以下HTML:

<!-- OFF CANVAS SECTIONS WRAPPING THE MAIN CONTENT -->
<div class="off-canvas-wrap">
    <div class="inner-wrap">

		<!-- OFF CANVAS MENU BAR -->
		<nav class="tab-bar hide-for-large-up">

			<section class="left-small">
				<a class="left-off-canvas-toggle menu-icon" ><span></span></a>
			</section>

			<section class="right tab-bar-section">
				<h1 class="title">Menu</h1>
			</section>

		</nav> <!-- END NAV.TAB-BAR HIDE-FOR-LARGE-UP -->

		<!-- OFF CANVAS MENU -->
		<aside class="left-off-canvas-menu">
			<ul class="off-canvas-list">
				<li><label>Navigation</label></li>
				<li><a href="index.html">Home</a></li>
			</ul>
			<ul class="off-canvas-list">
				<li class="has-dropdown"><a href="blog.html">Blog</a>
					<ul class="off-canvas-list">
						<li><a href="blog.html">Archive</a></li>
						<li><a href="post.html">Single</a></li>
					</ul>
				</li>
			</ul>
			<ul class="off-canvas-list">
				<li class="has-dropdown"><a href="page.html">Page</a>
					<ul class="off-canvas-list">
						<li><a href="page.html">Full-width</a></li>
						<li><a href="sidebar-left.html">Left Sidebar</a></li>
						<li><a href="sidebar-right.html">Right Sidebar</a></li>
					</ul>
				</li>
			</ul>
			<ul class="off-canvas-list">
				<li><a href="portfolio.html">Portfolio</a></li>
			</ul>
		</aside>

让我们分解一下。 我们创建了两个div元素; 一个带有类off-canvas-wrap ,另一个带有类inner-wrap 。 画布外包裹将隐藏我们的内容,直到按下菜单按钮为止。 的 内包装包含我们的导航菜单栏,左侧的画布外菜单和主要内容部分。 我们为nav提供了一类hide-for-large-up的hide-for-large-up ,以确保它仅适用于中小型设备。 通过在旁提供一类left-off-canvas-menu ,我们确保将off-canvas菜单显示在屏幕的左侧。 “画布”菜单中的菜单项与顶部栏相似。 对于画布而言,我们使用无序列表和一类的off-canvas-list来实现魔术效果。

剩下要做的就是为用户提供一种关闭Offcanvas菜单的方法。 在那之后,我们关闭了off-canvas-wrap和inner-wrap div。 关闭主要部分后,请添加此权限。

<!-- CLOSE THE OFF-CANVAS MENU -->
    <a class="exit-off-canvas"></a>

	</div>
</div> <!-- END OFF CANVAS -->

步骤4:到目前为止的结果

让我们打开浏览器,找到我们刚刚编辑的index.html文件。 结果应类似于下面的屏幕截图(尝试一下,调整浏览器的大小!)

设置Sass

好吧,我们为桌面用户提供了一个功能齐全的顶部栏,为平板电脑和手机等较小设备的用户提供了一个漂亮,流畅的画布菜单。 但是,我们的页面看起来还不是真正的网页,所以让我们继续添加一些风味。

步骤1:一般样式

首先,我们为常规部分(页眉,导航,主要,页脚和版权)提供一些颜色。 我们还将为我们的身体提供微妙的背景色,并创建一个full-width类以将其宽度设置为100%。 在HTML中,我们已将全角类添加到不同的部分,以确保它们延伸到浏览器的边界。 看看下面的Sass:

body {
    background-color: #f1f1f1;
}

.full-wdith {
	min-width: 100%;
}

header {
	background: url('../images/stary-bg.png') #074e68;
	min-height: 175px;
	h1 {
		color: #fff;
		padding-top: 50px;
	}
}

.navigation-section {
	background-color: #333;
	.top-bar {
		li {
			text-transform: uppercase;
		}
	}
}

.main-section {
	padding: 30px 0 25px 0;
}

footer {
	background-color: #074e68;
	padding: 50px 0 40px 0;
	h4, p {
		color: #fff;
	}
}

.copyright-section {
	background-color: #333;
	color: #fff;
	padding: 25px 0 0 0;
}

注意 :要添加Starry BG,请下载源文件!

我们通过添加一些填充为我们的设计提供了更多的呼吸空间,并通过为所有部分提供背景颜色和最小宽度为100%进行了全宽设计。 我们还为菜单项提供了大写的文本转换。

步骤2:使用_settings.scss的顶部栏样式

要设置顶部栏的样式,让我们进入_settings.scss文件。 根据您使用的代码编辑器,使用查找选项并输入“ Topbar”。 在这里,您可以找到用于更改标准顶部栏的所有设置。 在本教程中,我们将使用两个不同的选项。 一个使我们的顶部栏高一些,另一个使字体大小增加一点。 取消注释并更改以下两个设置:

$topbar-height: 65px;
$topbar-link-font-size: rem-calc(15);

步骤3:使用_setting.scss脱离画布样式

我们还将使用设置文件来调整“画布”菜单。 标准的画布外标记确实非常不错,但是请确保导航栏的高度与顶部栏的导航栏的高度相同。 除此之外,我们将不得不移动汉堡包图标 一点,所以它从顶部居中。 在设置文件中,找到并键入“ Off-canvas”。 取消注释并更改以下两个设置:

$tabbar-height: rem-calc(65);
$tabbar-hamburger-icon-top: rem-calc(16);

步骤4:享受成效

保存文件,让指南针编译文件并刷新浏览器。 现在,我们的页面上有更多果汁,并且全部由出色的顶部栏和非画布提供动力! 您的结果应如下所示:

结论

我们使用Foundation的顶部栏和非画布创建了一个漂亮的响应式页面,添加了我们自己的Sass样式,以使其更加鲜活,并使用_settings.scss文件对页面进行了调整。

显然,我们刚才演示的_settings.scss可以做很多事情。 继续进行设置,以了解如何轻松自定义网站中的Foundation元素,或在此演示中进行尝试以进一步自定义顶部栏/画布菜单。 玩得开心!

翻译自: https://webdesign.tutsplus.com/articles/build-a-top-bar-off-canvas-navigation-with-foundation-5--webdesign-17767

ar foundation

Unity AR Foundation入门:从零构建移动端增强现实应用 增强现实(AR)技术通过在现实世界叠加可交互的数字信息层,实现了虚拟与现实的融合。其核心原理涉及计算机视觉、空间定位与三维注册,通过设备摄像头识别环境特征,并实时计算虚拟物体的精确位姿。这项技术的工程价值在于降低交互门槛、提升信息呈现维度,广泛应用于产品展示、互动游戏、导航与教育等场景。借助Unity引擎与AR Foundation框架,开发者无需深入底层算法,即可快速构建跨平台的AR应用。本教程基于Unity 2021 LTS与AR Foundation 4.2稳定组合,详细讲解环境配置、平面检测、物体放 阅读详情

相关推荐

Unity 3D AR室内导航开发指南:从技术选型到虚实融合实现

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验,其核心在于空间感知与虚实融合。在计算机图形学与移动开发领域,Unity 3D引擎凭借其强大的跨平台能力和成熟的AR Foundation框架,成为实现AR应用的主流工具。通过集成环境理解、平面检测与实时渲染技术,AR能够解决GPS信号薄弱的室内场景下的导航痛点,广泛应用于商场导览、博物馆解说等场景。本文聚焦于基于Unity 3D的商场AR实景导航项目,详细解析了如何利用AR Foundation进行平面检测,并通过NavMesh系统

weixin_31032799的博客 361

foundation 框架_使用Foundation 5超快速地构建网站[指南]

使用前端框架可以在许多方面改善您的Web设计工作流程。 它可以帮助您遵循现代设计原则,例如移动优先方法,语义标记和响应式设计。 您可以利用许多现成CSS和JavaScript元素 ,显着加快开发过程 ,从而腾出更多时间专注于视觉和用户体验设计。 Zurb Foundation 5是市场上功能最强大的前端框架之一。 它是逻辑构建,易于使用且完全免费的。 它使您可以使用灵活CSS网格 , 该 ...

cune1359的博客 1144

AR Foundation系列教程 - 实现AR室内导航

AR Foundation是Unity的一个功能强大的插件,它提供了跨多个AR平台的统一接口,使得开发者能够轻松地构建AR应用程序。在AR Plane Manager组件中,可以设置检测平面的相关参数,如平面的最小面积、检测到平面后是否自动创建AR Plane对象等。在本教程中,我们使用AR Foundation插件实现了AR室内导航的功能。在项目中创建一个新的场景,并将AR Session Origin和AR Session组件添加到场景中。在Unity中创建一个平面对象,并将其放置在场景中适当的位置。

CyberLynxO的博客 1355

Foundation5(二)

Foundation 起步 什么是 Foundation? Foundation 是一个免费的前端框架,用于快速开发。 Foundation 包含了 HTML 和 CSS 的设计模板,提供多种 Web 上的 UI 组件,如表单、按钮、Tabs 等等。同时也提供了多种 JavaScript 插件。 Foundation 移动优先,可创建响应式网页。 Foundation 适

shi199434的博客 247

AR Foundation系列讲解:ARKit设备兼容列表与编程实践

在Unity编辑器中,导航到"File"(文件)-> “Build Settings”(构建设置),然后选择"iOS"作为目标平台,并点击"Build"(构建)。在Unity编辑器中,导航到"File" -> “Build Settings”,然后选择"iOS"作为目标平台,并点击"Build"。在Unity编辑器中,导航到"Window"(窗口) -> “Package Manager”(包管理器),然后选择"AR Foundation"并点击"Install"(安装)。

CyberFlare的博客 523

ARFoundation系列讲解 - 99 AR室内导航四

2种AR室内导航案例详解。

a451319296的博客 2506

Foundation 5 安装使用教程

Foundation 5是由Zurb推出的响应式前端框架,提供完整的CSS/JavaScript组件体系。安装方式推荐使用CDN直接引入或下载源码部署。框架采用12栅格系统,通过small/medium/large类实现响应式布局,包含按钮、导航等常用组件。使用需确保正确加载jQuery和Foundation脚本,并调用初始化方法。学习资源包括官方文档和中文教程。本文介绍了Foundation 5的基本用法、安装配置和常见问题解决方案。(150字)

真正的大师永远怀着一颗学徒的心 1140

36、探索XR开发:从VR到AR的全面指南

本博客全面介绍了扩展现实(XR)开发,涵盖虚拟现实(VR)和增强现实(AR)的核心内容。从Unity引擎的基础设置到具体的VR设备支持和移动AR开发流程,文章详细讲解了如何构建XR应用程序。同时,还涉及场景导航、射线投射功能、Unity作为库的应用以及游戏开发的设计和营销策略,为初学者提供了从入门到实践的完整指南。

ii567的博客 153

增强现实技术初音未来AR互动DEMO实战项目

增强现实(AR)是一种将计算机生成的虚拟信息叠加到真实世界中的技术,使用户能够在现实环境中感知并交互虚拟内容。随着移动设备性能的提升和传感器技术的发展,AR正逐步渗透到娱乐、教育、医疗等多个领域。AR(Augmented Reality,增强现实)不同于VR(Virtual Reality,虚拟现实),其核心在于“增强”现实,而非完全替代。AR系统通常具备以下三大特征:虚实融合:虚拟内容与现实场景在同一空间中共存;实时交互:用户能与虚拟内容进行动态交互;

weixin_31776191的博客 554

使用foundation5为基础创建的foundation后台管理模板

使用foundation5为基础创建的foundation后台管理模板

AR小白入门指南:从零开始开发增强现实应用

定义:将虚拟信息(3D模型、文字、声音等)叠加到真实场景中,实现虚实融合的交互体验。典型应用场景零售:虚拟试衣、家具摆放预览(如IKEA Place)教育:3D解剖模型、历史场景重现(如Google Expeditions)工业:设备维修指导、远程协作(如Microsoft HoloLens 2)与VR/MR的区别VR(虚拟现实):完全沉浸虚拟环境(如Oculus Quest)MR(混合现实):虚拟与现实深度交互(如HoloLens 2)

程序边界 1万+

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3826

10分钟快速上手AR Foundation Samples:新手必备的Unity AR入门教程

想要在Unity中快速上手增强现实开发吗?AR Foundation Samples项目是Unity官方提供的增强现实示例集合,专门为新手开发者设计,让你在10分钟内就能创建出功能强大的AR应用!🚀 这个项目包含了超过30个精心设计的AR示例场景,涵盖了从基础的平面检测到高级的人脸识别、物体跟踪等完整AR功能。 ## 📱 什么是AR Foundation Samples? AR Found

gitblog_01170的博客 1129

CXL协议-第三章 CXL事务层

CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。

qq_41305217的博客 2769

ESP8266连接阿里云(STM32)

一、概述 之前通过串口调试助手+ESP8266已经连接上阿里云了 ESP8266连接阿里云(串口调试助手) 这次我们使用STM32+ESP8266来接入阿里云,其实本质上就是STM32和ESP8266进行串口通信,相当于使用STM32代替之前使用的串口调试助手来发送AT指令。只是发送的字符串数据可能有些细节需要注意一下。 二、保存连接的AT指令 定义几个字符串数据保存需要发送的AT指令 //注意: //末尾记得加\r\n //字符...

xyx0610的博客 4万+

AR开发中的跨平台挑战:Unity AR Foundation与原生SDK深度对比

本文深入对比了Unity AR Foundation与原生SDK在AR开发中的跨平台挑战,分析了性能、功能覆盖和开发效率等关键维度。文章指出,原生SDK在精度和硬件优化上优势明显,而跨平台方案更适合快速开发和碎片化市场。针对电商AR试穿和工业AR指导等场景,提供了技术选型的实践建议。

a3b4c5的博客 936

STM32串口通信实战:从CubeMX配置到printf重定向全解析

串口通信是嵌入式系统中最基础且广泛使用的数据交换方式,它基于异步串行通信原理,通过TX(发送)和RX(接收)两根信号线实现设备间的全双工通信。其技术价值在于协议简单、硬件成本低、可靠性高,是单片机与上位机调试、传感器数据采集、设备控制等场景的首选方案。在STM32等ARM Cortex-M系列MCU中,USART外设通过硬件自动处理时序,大大减轻了CPU负担。本文聚焦于嵌入式竞赛与开发中的高频需求,以STM32G431RBT6为例,详解通过CubeMX配置USART1、实现按键触发数据发送、并完成print

weixin_30603633的博客 546

Unity AR开发入门:从引擎基础到AR Foundation实战

增强现实(AR)技术通过计算机视觉与图形渲染,将虚拟内容叠加到真实世界,创造沉浸式交互体验。其核心原理在于实时环境感知与虚实融合,技术价值体现在提升用户体验、拓展应用边界。在游戏、教育、营销等场景中,AR应用广泛。本文聚焦Unity引擎与AR Foundation框架,深入讲解如何从Unity基础操作入手,掌握场景管理、C#脚本编程与预制体等核心概念,进而利用AR Foundation实现平面检测、物体放置等AR功能。文中特别针对开发中常见的性能优化与资源管理问题,如Addressables资源打包与材质丢

alince20008的博客 318

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+

栅极驱动电路设计(一)

SiC驱动电路设计需满足更高标准,重点包括:驱动电压需18~20V开通、-3~-5V关断;栅极电阻优选5~10Ω以平衡开关性能与可靠性;必须集成欠压保护(阈值11~15V)和快速短路保护。多电平驱动控制通过动态调节栅压和驱动强度优化性能,如前期弱驱动抑制振荡,后期强驱动降低损耗。以NCE120ED65VTP4为例,栅压从18V提升至20V可使导通损耗降低15%。相比传统方案,有源驱动(含数字分段和模拟闭环控制)能更灵活地提升开关速度与效率。

嵌入式老牛的博客 450

如何快速入门AR开发?Unity AR Foundation示例项目完整指南

AR Foundation示例项目是Unity官方提供的增强现实开发学习资源,包含了从基础平面检测到高级图像跟踪的丰富案例。本文将带你了解这个强大工具包的核心功能、快速上手方法以及实用场景,帮助新手轻松迈入AR开发领域。 ## 📱 什么是AR Foundation示例项目? AR Foundation是Unity推出的跨平台AR开发框架,而示例项目则是学习这一框架的最佳实践。该项目包含20+

gitblog_00660的博客 902

168、OIS光学防抖系统设计:陀螺仪标定、音圈马达驱动与滚珠式/悬丝式结构选型

本文总结了OIS光学防抖系统设计中的关键问题与解决方案。作者通过实际案例指出,陀螺仪标定需重视零偏、灵敏度和温度补偿问题,音圈马达驱动需采用电流环控制并优化相位补偿。在机械结构选型方面,滚珠式适合大角度补偿但存在回差问题,悬丝式精度高但受重力影响,需根据应用场景选择。系统联调建议从开环到闭环逐步验证,注意陀螺仪与驱动频率匹配。最后给出5条经验建议:关注陀螺仪信噪比而非分辨率、预留标定余量、重视机械结构公差、配备专业调试工具、协调OIS与电子防抖的分工配合。文章强调OIS调试需针对不同模组特性进行反复测试与标

zzfmlxs的博客 46

Unity3D AR射击游戏开发实战:从AR Foundation到FPS核心玩法

增强现实(AR)技术通过将虚拟信息叠加到真实世界,正在重塑人机交互体验。其核心原理基于计算机视觉与传感器融合,实现虚拟对象的空间定位与实时跟踪。在游戏开发领域,AR技术能够打破屏幕界限,创造深度沉浸的体验,尤其适合第一人称射击(FPS)等强调空间感的游戏类型。Unity3D作为主流的跨平台游戏引擎,结合其AR Foundation框架,为开发者提供了高效构建移动端AR应用的工具链。本文聚焦于利用Unity3D与AR Foundation,探讨如何实现AR环境下的平面检测、空间锚定等关键技术,并解决移动端FP

weixin_30444105的博客 461

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MediaPipe与Unity整合:构建行业级AR应用的AI感知核心

计算机视觉与机器学习技术为增强现实(AR)应用提供了感知现实世界的能力。其核心原理是通过神经网络模型实时解析摄像头输入,识别图像中的关键特征点(如手部关节点、人体姿态)。这项技术的价值在于将复杂的AI算法封装为易用的开发工具,大幅降低了行业应用的技术门槛。在工程实践中,开发者可以基于这些感知能力,在Unity等实时3D引擎中构建直观的交互逻辑,例如通过手势识别操控虚拟物体,或利用姿态估计驱动数字内容。本文聚焦于MediaPipe这一跨平台机器学习框架与Unity引擎的深度整合,详细解析了如何利用其内置的优化

weixin_30561177的博客 602

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 使用Photoshop设计时尚的时间轴投资组合页面
下一篇: 如何使用Bootstrap构建画布外导航布局
daique1908
博客等级 码龄10年 29粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值