SDK内容
SilverLining SDK包括以下子目录:
lib:针对各种运行时库建立的SilverLining库。你需要将其中一个链接到你的项目中,如下表所述。
include:与SilverLining库一起使用的公共头文件。
samplecode:使用SilverLining的简单OpenGL和Direct3D应用程序的示例代码。你还会发现一个修改过的 "osgviewer "应用程序,它在OpenSceneGraph下集成了SilverLining。
资源:图形、着色器和其他SilverLining所需要的资源,包括OpenGL特有的DLL,OpenGL 3.2核心,以及Windows用户的DirectX9、10、11或11.1。这些文件必须与你的应用程序一起重新分发。
docs:SilverLining的文档(你正在读它!)。
lib目录包含了几个版本的SilverLining库,用于与使用不同运行时库的项目进行链接。在lib/vc14和lib/vc143目录中,分别有用于Microsoft Visual Studio 2015-2019和Visual Studio 2022的构建。在14和143目录中,你会发现x64和win32子目录,分别包含64位和32位构建。Linux开发者在用 "make "构建SDK后,会在这里找到静态库linux/libSilverLining.a。
如果你需要Visual Studio 2010、2012或2013的库,支持这些编译器的评估版可以在http://media.sundog-soft.com/silverlining-sdk-623.exe。如果你拥有源代码的授权,请联系support@sundog-soft.com,我们可以为你提供该版本的源代码。
Windows构建设置
Windows SDK的安装程序将设置环境变量SILVERLINING_PATH,你可以用它来安全地指定SilverLining库和头文件的绝对路径。
要检查你在Visual Studio中使用的是什么运行库,打开项目属性,查看C/C++"代码生成 "设置。根据下图添加库,把它添加到你的链接器/输入设置中的 "附加依赖 "中。最后,确保你的链接器路径被设置为包括适合你的开发环境的lib目录(例如,lib/vc14/win32--见链接器/常规标签下的 "附加库目录")。
另外,你将需要链接系统库winmm.lib,以便获得timeGetTime()的定义。
DirectX11用户需要在第三方/Effects11目录下链接你的运行时间和编译器所特有的D3DX11Effects.lib的构建。在使用DirectX11.1渲染器时,不需要这样做,因为我们的DirectX11.1支持对特效库、D3DX接口或D3Dcompiler DLL没有依赖性。
DirectX 9-11用户应该使用2010年6月版本的DirectX SDK构建。DirectX 11.1的用户可以用Windows 8.1+ SDK中的DirectX支持来构建。
项目文件和库包括Visual Studio 2015/2017/2019(VC14)和Visual Studio 2022(VC143)。我们的库是在为每个版本的Visual Studio安装了最新的服务包后建立的;如果你的Visual Studio不是最新的,你可能会遇到运行时链接错误。
请确保你是针对你所使用的编译器的正确库进行链接的。
| Visual Studio版本 | SilverLining库版本 |
| 2015, 2017, 或 2019 | VC14 |
| 2022 | VC143 |
| 运行时库 | SilverLining库 |
| Multi-threaded | SilverLining-MT.lib |
| Multi-threaded Debug | SilverLining-MTD.lib |
| Multi-threaded DLL | SilverLining-MT-DLL.lib |
| Multi-threaded Debug DLL | SilverLining-MTD-DLL.lib |
请注意,Visual Studio 2017和2019只有在你的应用程序在 "整个程序优化 "被禁用的情况下进行编译时,才会向后兼容VC14.0库。如果你在Visual Studio 2017或2019下遇到SilverLining的链接器错误,请尝试禁用整个程序优化(在编译器/优化下),并将链接时的代码生成设置为 "默认"(在链接器/优化下)。 另外,如果你有源代码许可证,你可以用你安装的VC141工具集重建SilverLining,这将允许使用整个程序优化。
这些库是以默认的字节对齐方式建立的。如果你对你的应用程序有特定的字节对齐要求,请联系 support@sundog-soft.com 以获得你可能需要的任何专门构建。
如果你在调用SilverLining方法时遇到异常或崩溃,那么你很可能是在链接一个与SilverLining不同的C标准运行时库。如果你在你的链接器设置中忽略了特定的运行时库,以解决其他第三方库的链接器问题,这就特别有可能。通常情况下,通过忽略引起麻烦的msvcrt库的变体,这种情况就会得到解决。如果你遇到这种麻烦,不要犹豫,请联系support@sundog-soft.com。在SilverLining中的迭代器或互斥对象中的崩溃是这类问题的症状。
上面列出的库会在运行时动态链接到一个DirectX9、DirectX10、DirectX11或OpenGL渲染库。有些开发者喜欢避免运行时的DLL依赖性;而对于将SilverLining移植到游戏机上的客户来说,这可能是必须的。拥有完整源代码的授权用户可以在其项目文件中找到SilverLining库的构建配置,用于静态链接这些渲染器,避免对我们的渲染器DLL的运行时依赖。
Linux 构建设置和依赖性
要成功地与Linux的SilverLining链接,你必须在你的系统上安装OpenGL。确保你的显卡安装了最新的驱动程序。
在使用 "make "构建SDK后,SilverLining的库将在lib/linux子目录中。所提供的OpenGL示例代码包括一个makefile,它说明了如何在SilverLining中链接。你会在这里找到三个库:
libSilverLiningOpenGL.a - 适用于1.4以上版本的任何OpenGL上下文的SilverLining;也兼容3.2及以上版本的上下文,并启用向后兼容性。
libSilverLiningOpenGL32Core.a - 与OpenGL 3.2及以上版本的核心语境兼容的SilverLining。
libSilverLining-norenderer.a - 完全没有连接渲染调用的SilverLining。当使用这个库时,你必须实现你自己的渲染器,它实现SilverLiningDLLCommon.h中定义的接口。
简而言之,将sdk的lib目录添加到你的库路径中(-L),将include目录添加到你的include路径中(-I),并包含SilverLining、GL和pthreads库(-l)。
这就是它的全部内容了。拥有完整源代码的授权用户会收到未被混淆的源代码来进行构建。
用C#构建
你可以在样本应用程序中的C#实例文件夹中找到一个C#与SilverLining集成的例子。它由三个不同的项目组成,你可以使用Visual Studio 2017社区版来构建这些项目。还为你提供了预编译的C#接口的DLL,用于64位的Visual Studio 2017。
SilverLiningInt - 这是一个SilverLining本地库的DLL封装器,它也可以用来与其他解释语言集成。
SilverLiningCLR - 这是对本地DLL的一个C#包装器,提供C#对我们的非托管代码的访问。你会发现Atmosphere、CloudLayer和AtmosphericConditions类的包装器,使你能够在C#中做几乎所有你能用C++公共接口做的事情。请参考C++类的文档,了解更多关于暴露的方法的细节。
OpenGLExample - 这个C#应用程序的例子使用SilverLiningCLR来创建一个包含动态天空盒和积云的场景。你需要安装OpenTK.GLControl(可以通过NuGet包管理器获得,或者在www.opentk.net)来构建这个示例。
如果你使用的是Managed DirectX,唯一的诀窍是把设备对象的UnmanagedComPointer成员作为AtmosphereCLR::Initialize()的最后一个参数传递出去。
当使用SilverLining重新发布一个C#应用程序时,确保SilverLiningInt.dll在应用程序的路径中,并确保资源文件夹的正确路径被传入Atmosphere::Initialize()。
将SilverLining与你的应用程序一起分发
你必须把资源子目录的全部内容与你的应用程序一起发送。当你调用Atmosphere::Initialize()时,你将指定这个子目录的安装位置。
如果你的项目是与动态链接的运行时库相连接的,请确保所需的微软DLL也与你的应用程序一起分发。
DirectX用户必须安装最新的DirectX运行库(2010年6月或更新)。DirectX11用户必须进一步使用D3D11InstallHelper或同等方案在没有Direct3D11 dll的系统上安装Direct3D11 dll。更多信息请见http://msdn.microsoft.com/en-us/library/ee416805(VS.85).aspx和http://msdn.microsoft.com/en-us/library/ee416644(VS.85).aspx。
如果你使用Visual Studio 2015或更新版本和Windows 8 SDK开发,并使用DirectX,你还需要在你的应用程序的可执行文件旁边重新发布运行时着色器编译DLL。你可以在Windows 8 SDK的%ProgramFiles(x86)%\Windows Kits\8.0\Redist\D3D\<arch>下找到这些,其中<arch>是x86和x64。你还必须安装2010年6月的DirectX DLL的运行时,以确保Windows 8 SDK中没有包含的D3DX方法可用。
Linux应用程序开发人员必须确保在目标系统上安装OpenGL,以及3D视频卡的最新图形驱动。
如果你要用SilverLining发布商业应用程序,请记得在你的应用程序中包括SilverLining所需的版权声明。更多的细节见你的许可协议。我们也希望在你的其他中间件信用中包括我们的名字和/或标志。
Class概述
使用SilverLining并不复杂,只需要了解一些类以及它们如何相互作用。在用SilverLining开发一个应用程序时,你可能会按照这个顺序遇到这些类:
首先,你将创建一个SilverLining::Atmosphere对象,它是你的应用程序与SilverLining的主要接口。在实例化它之后,需要对它进行初始化,以便它知道你是使用OpenGL、OpenGL 3.2 Core、DirectX 9,还是DirectX 11。
接下来,你要创建一个SilverLining::AtmosphericConditions对象,以便按照你的喜好来配置你的大气层。
你要在AtmosphericConditions中配置的第一件事是你希望模拟的时间和地点。要做到这一点,你需要实例化并配置一个LocalTime和Location类,并将它们传递给SilverLining::AtmosphericConditions::SetTime() 和SilverLining::AtmosphericConditions::SetLocation()。
如果你想在你的场景中模拟风来使你的云移动,只要设置一个SilverLining::WindVolume类,并把它传入SilverLining::AtmosphericConditions::SetWind()。
如果你想在你的场景中添加云,最简单的方法是使用SilverLining::AtmosphericConditions::SetPresetConditions()。这将让你用一行代码快速设置晴天、部分多云、大部分多云或阴天的条件。
为了对云层条件进行更多的控制,你需要创建一些SilverLining::CloudLayer对象,并将它们传入SilverLining::AtmosphericConditions::AddCloudLayer()。云层对象是通过SilverLining::CloudLayerFactory类创建的,它允许你创建积云congestus、积云mediocris、积雨云、stratus、nimbostratus或卷云甲板。在创建了你想要的CloudLayer之后,为所需的尺寸、降水和云层覆盖进行配置,调用SilverLining::CloudLayer::SeedClouds()来用云层填充云层,然后把它传递到你的AtmosphericConditions中。
一旦你的AtmosphericConditions被设置成你喜欢的样子,就用SilverLining::Atmosphere::SetConditions()把它们传入你的Atmosphere。
这就是所需的所有设置。现在,要在你的场景中实际看到模拟的天空和云彩,只需要再做三件事:在每一帧的开始,使用SilverLining::Atmosphere::SetCameraMatrix()和SilverLining::Atmosphere::SetProjectionMatrix()将你的模型视图和投影矩阵传入SilverLining。然后,在渲染场景中的物体之前,调用SilverLining::Atmosphere::DrawSky(),并在你的帧结束时调用SilverLining::Atmosphere::DrawObjects()。
这就是真正的全部内容;我们已经讨论了你需要知道的每一个类。想利用SilverLining提供的照明和雾气模拟的用户可以从Atmosphere类中获得这些信息。这方面的细节可以在使用SilverLining中找到。
渝公网安备50010702505508