个人中心

联系我们

搜索 登录 免费注册
界面美化
业务优化
开发工具
图像管理
文档管理
Parasoft

文章详情

如何开始使用 Triton(中文教程一)

2023-07-06 14:34:49

开始使用Triton


Triton包括超过60,000行的代码,但只需要几行就可以将其集成到你的应用程序中。


下面是方法。


本文为如何开始使用 Triton 中文教程第一篇,点击此处进入第二篇>>


示例项目概述


检查SDK的 "样本 "目录是一个快速入门的方法。你会发现一些简单的应用程序,说明Triton在OpenGL、DirectX9、DirectX11、C#、OpenSceneGraph和Ogre应用程序中的使用,还有一些用于初始化、更新和关闭Triton的方便功能,你可以在自己的应用程序中使用。每个样本还包括一个天空盒类,它不仅用来使样本看起来更漂亮,而且还说明了环境立方体地图与Triton的整合,以获得更真实的天空反射。


你会发现使用Triton渲染无限大的海洋的例子,以及使用用户定义的几何体的小水体。


OpenGL样本是建立在OpenGL 2.0功能之上的。然而,OpenGL样本的核心代码避免了对固定函数管道的使用,对于在OpenGL 3、4和更高版本下工作的开发者来说,应该具有说明性意义。


将Triton与osgEarth一起使用


如果你正在使用osgEarth,开始使用就更容易了。osgEarth包括一个简单的Triton驱动,可以让你快速启动和运行。你所需要做的就是


  1. 在你的开发系统上安装Triton SDK。确保TRITON_PATH环境变量被设置为指向你的安装目录。

  2. 适当地运行cmake或vcpkg,重新生成包含Triton支持的osgEarth项目文件。

  3. 重新构建osgEarth并重新安装它。

  4. 参考osgearth/src/osgEarthTriton/Shaders/README.txt中关于将osgEarth的Triton着色器文件复制到Triton以完成集成的说明。


现在你可以使用随osgEarth提供的Triton.earth样本文件来测试集成。一旦相机接近地面,Triton就应该启动了。


如果你需要扩展内置Triton驱动的功能,底层的Triton::Ocean和Triton::Environment对象可以从osgEarth的TritonContext::getEnvironment()和TritonContext::getOcean()方法获得。从这些接口中,你应该可以做任何事情,比如加入唤醒器或其他效果。


配置你的项目


在C++和Windows下与Triton链接


Triton为使用Microsoft Visual Studio 2015、2017、2019或2022(应用了最新的服务包和安全补丁)创建的win32和x64应用程序提供每个运行时库的味道。你可以在SDK的lib目录下找到这些库。在你的项目属性中,将适当的库添加到你的链接器输入中。


Triton SDK安装程序定义了环境变量TRITON_PATH,当你在项目属性中引用Triton的库和头文件时,你可以使用它。


例如,对于一个用Visual Studio 2015开发的64位应用程序,并使用 "多线程DLL "运行时,你要根据以下内容进行链接


$(TRITON_PATH)/lib/vc14/x64/Triton-MT-DLL.lib. 


Visual Studio 2015、2017或2019的库在 "lib/vc14",Visual Studio 2022的库在 "lib/vc143"。请参考下表,将适当的库文件与你的项目所使用的运行时间相匹配(你可以在项目中的 "C/C++/代码生成 "属性页下找到)。


我们的库是针对Windows SDK 10链接的,目前只支持桌面应用程序。

Runtime flavorTriton库
Multi-threadedTriton-MT.dll
Multi-threaded DebugTriton-MTD.dll
Multi-threaded DLLTriton-MT-DLL.dll
Multi-threaded Debug DLLTriton-MTD-DLL.dll

 

请注意,Visual Studio 2017和2019只有在您的应用程序在编译时禁用 "整个程序优化 "时才与VC14库向后兼容。如果你在Visual Studio 2017或2019下遇到Triton的链接器错误,请尝试禁用整个程序优化(在编译器/优化下),并将链接时代码生成设置为 "默认"(在链接器/优化下)。 另外,如果你有源代码许可证,你可以用你安装的VC141或142工具集重建Triton,这将允许使用整个程序优化。


尽管我们为各个编译器和运行时提供了特定的构建,但我们加入的一些第三方DLL却没有。如果你在使用多线程DLL以外的运行时遇到链接问题,可以尝试将MSVCRT添加到项目的 "链接器/输入 "属性页的 "忽略特定默认库 "字段中。


如果你的应用程序是用标准运行库的特殊标志建立的,如_SECURE_SCL或_HAS_ITERATOR_DEBUGGING = 0,你也可能遇到运行时的问题。如果你在编译或运行时链接有问题,请联系 https://www.dhorde.com/ 在线客服,电话 023-62585653,或邮箱 sales@dhorde.com。我们可以为你提供包括混淆源代码的SDK,允许你用任何你需要的开发环境和编译时标志构建Triton。


使用C#与Triton链接


在Samples/CSharpSample文件夹中,你会发现TritonDLL.dll。这是Triton的本地代码,被打包成一个DLL,可以从C#代码中调用。将这个DLL部署到你的C#应用程序的工作目录中。


在CSharpSample中,你会发现TritonClassLibrary项目。这是一个覆盖Triton的C++ API的C#封装,它将是你与Triton的接口。在你的解决方案中包括这个项目,并从你自己的应用程序的项目中引用它。


TritonXNA项目是一个示例,说明在一个C# XNA游戏框架4.0应用程序中使用Triton。请参考CSharpSample文件夹中的readme.txt文件,以了解更多关于它如何工作的细节,以及如何从你自己的C#项目中使用Triton。


TritonClassLibrary是由我们的C++ API自动生成的;你可以参考我们docs文件夹中的C++ API参考资料来了解C#类--它们的工作方式完全相同。


在Linux下与Triton链接


Triton for Linux的验证版本是以混淆的源代码形式发布的,你将在你自己的系统上构建它。授权用户收到的是未被混淆的源代码。


你将需要安装最新的图形驱动。值得注意的是,Ubuntu提供的开源ATI驱动,在本文写作时,已知不正确支持OpenCL/OpenGL互操作性,这将导致Triton在ATI卡上失败。如果发生这种情况,你需要卸载fglrx驱动并安装AMD网站上的最新驱动。


为Linux构建Triton需要先安装几个第三方开发包:


CMake: http://www.cmake.org/ FFTSS: http://www.ssisc.org/fftss/download.html clFFT (可选;需要在AMD和Intel的GPU上加速): https://github.com/clMathLibraries/clFFT NVidia的CUDA工具包(可选;需要在NVidia的GPU上加速): http://developer.nvidia.com/cuda-toolkit Intel的集成性能原件(可选;需要在Intel的CPU上加速): http://software.intel.com/en-us/articles/intel-ipp/#support


如果你使用的是NVidia显卡,安装CUDA工具包将带来巨大的性能提升。同样地,AMD/ATI的客户应该安装clFFT。


一旦先决条件安装完毕,以超级用户身份运行我们的安装脚本,在你的系统上构建Triton以及OpenGL示例应用程序。如果CMake给出的错误是缺少GLUT_Xi_LIBRARY或GLUT_Xmu_LIBRARY等变量,你可能需要先安装以下软件包:


sudo apt-get install libxmu-dev libxi-dev


如果你在你的系统上构建Triton时遇到问题,请不要犹豫,联系 https://www.dhorde.com/ 在线客服,电话 023-62585653,或邮箱 sales@dhorde.com


使用Triton的头文件


在你的项目的 "C/C++"属性页的 "附加包含目录 "栏下,添加以下内容:


$(TRITON_PATH)/Public Headers


有了这个,你就可以简单地


#include "Triton.h"


来获得Triton的能力。


C#开发者只需在他们自己的项目中引用TritonClassLibrary项目,并将一个


using Triton;


在引用TritonClassLibrary中的类之前。


启动Triton


为了使用Triton,你需要在启动时创建三个主要对象。


首先,你需要一个Triton::ResourceLoader。这个类允许Triton访问其着色器、DLL和纹理资源,你将用它来告诉Triton这些资源的位置。SDK包括一个你可以重新发布的 "资源 "目录,你只需要在Triton::ResourceLoader的构造函数中提供一个绝对路径或相对路径,以确定你安装这个目录的位置。如果你对将Triton与你自己的资源管理器集成感兴趣,请参阅与你自己的资源管理器集成。


接下来,你需要创建并初始化一个Triton::Environment对象,使用你刚刚制作的Triton::ResourceLoader。Triton::Environment类让你指定影响Triton水的坐标系、渲染系统和环境条件。例如,要将Triton与一个基于DirectX11的模拟程序集成,在一个使用WGS84椭球体的地心坐标系中,Z轴指向两极,你将调用Triton::Environment::Initialize(),参数为Triton::WGS84_ZUP和Triton::DIRECTX_11,以及你创建的ResourceLoader。你会发现对平地坐标系和球面系统的支持,在Z轴或Y轴上有 "向上",以及对OpenGL 2.x、3.x、4.x、DirectX9和DirectX11的支持。一定要检查Triton::Environment::Initialize()的错误代码--最可能的问题是用于创建你的ResourceLoader的资源路径不太正确。


如果你已经购买了Triton的许可证,请调用Triton::Environment::SetLicenseCode()来取消对SDK的评估限制。


然后你需要在Triton的模拟中加入一些风,否则就不会有任何波浪。创建一个或多个Triton::WindFetch对象,并通过Triton::Environment::AddWindFetch()添加它们。一个风向标代表一个特定风速和风向的区域,它可以被定位到一个椭圆区域。如果一个地点有一个以上的风向标,它们将被加在一起。另外,你可以使用Triton::Environment::SimulateSeaState()方法来快速模拟蒲福尔尺度上的一个给定状态。


最后,你将使用你所创建的Triton::Environment来创建Triton::Ocean对象本身。在构建海洋时,有三种Triton::WaterModelTypes可以选择:TESSENDORF、JONSWAP和PIERSON-MOSKOWITZ。这三种类型都使用快速傅里叶变换来同时模拟成千上万的海浪。TESSENDORF使用的算法与故事片中使用的算法相同,而JONSWAP提供了一个更真实的波谱,更适合于海事培训应用。PIERSON-MOSKOWITZ与JONSWAP相似,但不能处理风的 "流长",或风走了多远的影响。通常情况下,我们建议从JONSWAP开始。


如果Triton::Ocean::Create返回一个空指针,请参见故障排除提示,以弄清发生了什么。


下面是一个完整的初始化Triton对象的例子。


// Create the Triton objects at startup, once we have a valid GL context in place

bool InitTriton()

{

    // We use the default resource loader that just loads files from disk. You'll need

    // to redistribute the resources folder if using this. You can also extend the

    // ResourceLoader class to hook into your own resource manager if you wish.

    resourceLoader = new Triton::ResourceLoader("..\\..\\resources\\");

 

    // Create an environment for the water, with a flat-Earth coordinate system with Y

    // pointing up and using an OpenGL 2.0 capable context.

    environment = new Triton::Environment();

    Triton::EnvironmentError err = environment->Initialize(Triton::FLAT_YUP,

        Triton::OPENGL_2_0, resourceLoader);

    if (err != Triton::SUCCEEDED) {

        ::MessageBoxA(NULL, "Failed to initialize Triton - is the resource path passed in to "

            "the ResouceLoader constructor valid?", "Triton error", MB_OK | MB_ICONEXCLAMATION);

        return false;

    }

 

    // Substitute your own license name and code, otherwise the app will terminate after

    // 5 minutes. Visit www.sundog-soft.com to purchase a license if you're so inclined.

    environment->SetLicenseCode("Your license name", "Your license code");

 

    // Set up wind of 10 m/s blowing North

    Triton::WindFetch wf;

    wf.SetWind(10.0, 0.0);

    environment->AddWindFetch(wf);

 

    // Finally, create the Ocean object using the environment we've created.

    // If NULL is returned, something's wrong - enable the enable-debug-messages option

    // in resources/triton.config to get more details on the problem.

    ocean = Triton::Ocean::Create(environment, Triton::TESSENDORF);

 

    return (ocean != NULL);

}


本文为如何开始使用 Triton 中文教程第一篇,点击此处进入第二篇>>


联系我们

周一至周日 8:00-23:00

免费热线

023-62585653

Gavin:13082556879

Jillian:17558866126

Angela:13057566525

开发外包

ERP-一体化

小程序

企业微信客服二维码

企业微信客服

版权所有:重庆庚乾信息科技有限公司 ©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508

版权所有:重庆庚乾信息科技有限公司

©2025 Gengqian Information Technology Co., Ltd. 渝ICP备2022008063号-2 渝公网安备50010702505508