第二节 ogre sdk 配置使用

news2024/7/6 19:39:53

上一节,我们介绍过了ogre源码的编译学习,在实际项目中,我们并不需要如此复杂的编译安装过程,可以直接使用官网提供的sdk库进行项目环境配置。下面简单介绍下配置过程。

一 OgreSDK下载

https://dl.cloudsmith.io/public/ogrecave/ogre/raw/versions/v13.6.4/ogre-sdk-v13.6.4-msvc141-x64.zip
在这里插入图片描述

二 项目配置

本文使用的版本为Microsoft Visual Studio Enterprise 2019 版本 16.11.26,新建一个OgreTest的空项目,这里主要有三个地方需要配置:

  1. 项目->配置属性->常规->输出目录,选择OgreSDK的bin目录。
    在这里插入图片描述
  2. 配置属性->VC++目录,
    在这里插入图片描述包含目录这里选择 :

${OgreSDK}/include/OGRE
${OgreSDK}/include/OGRE/Bites
${OgreSDK}/include/OGRE/RTShaderSystem

库目录这里选择:

${OgreSDK}/lib

  1. 链接器->输入->附加依赖项,输入
OgreMain.lib
OgreOverlay.lib
OgreBites.lib
OgreRTShaderSystem.lib

在这里插入图片描述

三 测试代码

BasicTutorial2.cpp

/*-------------------------------------------------------------------------
This source file is a part of OGRE
(Object-oriented Graphics Rendering Engine)
For the latest info, see http://www.ogre3d.org/


Copyright (c) 2000-2013 Torus Knot Software Ltd
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:


The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.


THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE
-------------------------------------------------------------------------*/

//! [starter]

#include <exception>
#include <iostream>

#include "Ogre.h"
#include "OgreApplicationContext.h"
#include "OgreInput.h"
#include "OgreRTShaderSystem.h"
#include "OgreCameraMan.h"

using namespace Ogre;
using namespace OgreBites;

class TutorialApplication
        : public ApplicationContext
        , public InputListener
{
public:
    TutorialApplication();
    virtual ~TutorialApplication();

    void setup();
    bool keyPressed(const KeyboardEvent& evt);
};


TutorialApplication::TutorialApplication()
    : ApplicationContext("OgreTutorialApp")
{
}


TutorialApplication::~TutorialApplication()
{
}


void TutorialApplication::setup()
{
    // do not forget to call the base first
    ApplicationContext::setup();
    addInputListener(this);

    // get a pointer to the already created root
    Root* root = getRoot();
    SceneManager* scnMgr = root->createSceneManager();

    // register our scene with the RTSS
    RTShader::ShaderGenerator* shadergen = RTShader::ShaderGenerator::getSingletonPtr();
    shadergen->addSceneManager(scnMgr);

    // -- tutorial section start --
    //! [cameracreate]
    SceneNode* camNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    Camera* cam = scnMgr->createCamera("myCam");
    //! [cameracreate]

    //! [cameraposition]
    camNode->setPosition(200, 300, 400);
    camNode->lookAt(Vector3(0, 0, 0), Node::TransformSpace::TS_WORLD);
    //! [cameraposition]

    //! [cameralaststep]
    cam->setNearClipDistance(5);
    camNode->attachObject(cam);
    //! [cameralaststep]

    //! [addviewport]
    Viewport* vp = getRenderWindow()->addViewport(cam);
    //! [addviewport]

    //! [viewportback]
    vp->setBackgroundColour(ColourValue(0, 0, 0));
    //! [viewportback]

    //! [cameraratio]
    cam->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
    //! [cameraratio]

    //! [lightingsset]
    scnMgr->setAmbientLight(ColourValue(0, 0, 0));
    scnMgr->setShadowTechnique(ShadowTechnique::SHADOWTYPE_STENCIL_ADDITIVE);
    //! [lightingsset]

    //! [ninja]
    Entity* ninjaEntity = scnMgr->createEntity("ninja.mesh");
    ninjaEntity->setCastShadows(true);

    scnMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ninjaEntity);
    //! [ninja]

    //! [plane]
    Plane plane(Vector3::UNIT_Y, 0);
    //! [plane]

    //! [planedefine]
    MeshManager::getSingleton().createPlane(
            "ground", RGN_DEFAULT,
            plane,
            1500, 1500, 20, 20,
            true,
            1, 5, 5,
            Vector3::UNIT_Z);
    //! [planedefine]

    //! [planecreate]
    Entity* groundEntity = scnMgr->createEntity("ground");
    scnMgr->getRootSceneNode()->createChildSceneNode()->attachObject(groundEntity);
    //! [planecreate]

    //! [planenoshadow]
    groundEntity->setCastShadows(false);
    //! [planenoshadow]

    //! [planesetmat]
    groundEntity->setMaterialName("Examples/Rockwall");
    //! [planesetmat]

    //! [spotlight]
    Light* spotLight = scnMgr->createLight("SpotLight");
    //! [spotlight]

    //! [spotlightcolor]
    spotLight->setDiffuseColour(0, 0, 1.0);
    spotLight->setSpecularColour(0, 0, 1.0);
    //! [spotlightcolor]

    //! [spotlighttype]
    spotLight->setType(Light::LT_SPOTLIGHT);
    //! [spotlighttype]

    //! [spotlightposrot]
    SceneNode* spotLightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    spotLightNode->attachObject(spotLight);
    spotLightNode->setDirection(-1, -1, 0);
    spotLightNode->setPosition(Vector3(200, 200, 0));
    //! [spotlightposrot]

    //! [spotlightrange]
    spotLight->setSpotlightRange(Degree(35), Degree(50));
    //! [spotlightrange]

    //! [directlight]
    Light* directionalLight = scnMgr->createLight("DirectionalLight");
    directionalLight->setType(Light::LT_DIRECTIONAL);
    //! [directlight]

    //! [directlightcolor]
    directionalLight->setDiffuseColour(ColourValue(0.4, 0, 0));
    directionalLight->setSpecularColour(ColourValue(0.4, 0, 0));
    //! [directlightcolor]

    //! [directlightdir]
    SceneNode* directionalLightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    directionalLightNode->attachObject(directionalLight);
    directionalLightNode->setDirection(Vector3(0, -1, 1));
    //! [directlightdir]

    //! [pointlight]
    Light* pointLight = scnMgr->createLight("PointLight");
    pointLight->setType(Light::LT_POINT);
    //! [pointlight]

    //! [pointlightcolor]
    pointLight->setDiffuseColour(0.3, 0.3, 0.3);
    pointLight->setSpecularColour(0.3, 0.3, 0.3);
    //! [pointlightcolor]

    //! [pointlightpos]
    SceneNode* pointLightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    pointLightNode->attachObject(pointLight);
    pointLightNode->setPosition(Vector3(0, 150, 250));
    //! [pointlightpos]
    // -- tutorial section end --
}


bool TutorialApplication::keyPressed(const KeyboardEvent& evt)
{
    if (evt.keysym.sym == SDLK_ESCAPE)
    {
        getRoot()->queueEndRendering();
    }
    return true;
}


int main(int argc, char **argv)
{
    try
    {
        TutorialApplication app;
        app.initApp();
        app.getRoot()->startRendering();
        app.closeApp();
    }
    catch (const std::exception& e)
    {
        std::cerr << "Error occurred during execution: " << e.what() << '\n';
        return 1;
    }

    return 0;
}

//! [starter]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs

Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs Rakshit Trivedi 1 Hanjun Dai 1 Yichen Wang 1 Le Song 1 知识背景 Temporal Knowledge Graph : facts occur,recur or evolve over time in these graphs,and each edge in the graphs have temporal …

FPGA基于XDMA实现PCIE X8视频采集HDMI输出 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#xff09;采用了目前业内流行的点对点串行连接&#xff0c;比起 PC…

【翻译一下官方文档】之uniapp的数据缓存

uni.setStorage(OBJECT) setstorage | uni-app官网 uni.setStorage(OBJECT) 将数据存储在本地缓存中指定的 key 中&#xff0c;会覆盖掉原来该 key 对应的内容&#xff0c;这是一个异步接口。 参数名类型必填说明keyString是本地缓存中的指定的 keydataAny是需要存储的内容&am…

git workflow

git workflow 讲一下常用的 workflow&#xff0c;这个主要是根据自己个人工作经验&#xff0c;每个项目在实践上总会有些许的不同&#xff0c;求同存异。 单分支工作 最糟糕的 workflow 是所有人全都在 main/master 上干活&#xff0c;如果只是两三个人的 team 可能还能存活…

忆暖行动|“四方食事,不过人间一碗烟火”

四方食事,不过人间一碗烟火 外婆&#xff0c;如果要您选择一个乡村很有代表的食物&#xff0c;您会选择什么&#xff1f; 当然是米饭&#xff0c;人要吃饭&#xff0c;没有米饭就没有力气劳作&#xff0c;而且大米还能做很多美食&#xff0c;比如米饼&#xff0c;米糕&#x…

亚马逊测评有哪些误解?

亚马逊平台是全球性的互联网电商网络平台&#xff0c;成立至今&#xff0c;平台站点覆盖了全球多个国家&#xff0c;各个地区之间的商品交易也变得更加频繁&#xff0c;随着平台商家增多&#xff0c;为了提高自身排名&#xff0c;越来越多的商家开始找人为他们的店铺和产品进行…

Git比较好用的一些操作

git stash 可以缓存一些修改&#xff0c;不用做提交。例如当前分支做了修改&#xff0c;不想提交&#xff0c;有需要切换分支时候。 常用命令&#xff1a; git stash list&#xff1a;查看缓存列表 git stash list git stash save “备注信息”: 缓存当前分支所有修改 git …

快乐数链表篇

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1&#xff…

【数据库数据恢复】ORACLE常见数据灾难的数据恢复可能性分析

Oracle数据库常见数据灾难&#xff1a; 1、ORACLE数据库无法启动或无法正常运行。 2、ORACLE ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件损坏。 5、ORACLE DUMP文件损坏。 Oracle数据库常见数据灾难的数据恢复可能性分析&#xff1a; 1、O…

正则表达式 - 简单模式匹配

目录 一、测试数据 二、简单模式匹配 1. 匹配字面值 2. 匹配数字和非数字字符 3. 匹配单词与非单词字符 4. 匹配空白字符 5. 匹配任意字符 6. 匹配单词边界 7. 匹配零个或多个字符 8. 单行模式与多行模式 一、测试数据 这里所用文本是《学习正则表达式》这本书带的&a…

统计学习方法第二章——感知机

x.1 前言 perceptron感知机是二分类的线性分类模型&#xff0c;输入为实例的特征向量&#xff0c;输出为实例类别(取-1&#xff0c;1)。perceptron旨在求出将训练数据进行线性划分的分离超平面&#xff0c;属于classification判别模型&#xff0c;策略为基于误分类的损失函数&…

MCU短按长按的功能

.外设&#xff1a;一个io口、一个定时器。 为了降低上手的门槛&#xff0c;本文仅使用一个IO口作演示。 实现思路 使用定时器&#xff0c;定时20ms来读取简化的按键状态机。 这里简化了状态机&#xff0c;大家只需明白三个概念。 状态&#xff1a;数量为有限个&#xff0c;记…

css初入门:网页布局之网格布局-grid

文章目录 网格布局-grid1、设置网格布局2、网格布局介绍3、网格容器grid-template-columns属性grid-template-rows 属性justify-content 属性justify-items属性align-content 属性 4、网格项目grid-column-start、grid-column-start、grid-column属性grid-row-start、grid-row-…

ChatGPT来了,必须紧跟时代潮流!

大家好&#xff0c;我是瓜叔。 正如标题所示&#xff0c;最近几周令人难以置信的兴奋。几乎每天都有surprise的新AI产品发布&#xff0c;特别是ChatGPT-4和AI绘画。这是一种科幻即将成为现实的感觉。例如&#xff0c;看看下面的网络图像&#xff0c;它是由AI生成的。当我看到它…

我的HackerOne漏洞赏金平台漏洞挖掘流程

简介 高强度在hackerone平台挖了一周的漏洞&#xff0c;在这里分享一下经验 选定目标 hackerone有两种src&#xff0c;一种是给钱的&#xff0c;一种是免费的&#xff0c;我一般都是选的有钱的去挖 假如我选择了这个作为今天的挖洞目标 首先需要往下滑&#xff0c;看他不收…

银行系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 ​​​​​​​ 本系统源码地址&#xff1a;​​​​​​​https://download.csdn.net/download/qq_50…

科大讯飞的2022:夯实“根据地”业务,以技术创新点燃大模型产业落地的“星星之火”...

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 4月20日晚&#xff0c;科大讯飞正式公布2022年度及2023年度第一季度业绩报告。财报数据显示&#xff0c;公司2022年度实现营业收入188.20亿元&#xff0c;同比增长2.77%&#xff0c;实现毛利76.84亿元&#xff0c;较上年增长…

局域网 - CSMA/CD

文章目录 1 概述1.1 局域网的拓扑结构 2 CSMA/CD2.1 三种监听算法2.2 冲突检测原理2.3 二进制指数后退算法 3 扩展3.1 网工软考真题 1 概述 1.1 局域网的拓扑结构 2 CSMA/CD 对 总线型、星型 和 树型 拓扑访问控制协议是 CSMA/CD&#xff08;Carrier Sense Multiple Access/ …

Android硬件通信之 WIFI通信

一&#xff0c;简介 1.1 随着网络的普及和通信技术的发展&#xff0c;网络的传输速度也越来越快&#xff0c;wifi技术也还成为手机设备最基本的配置。我们可以通过wifi实现手机与手机之前的信息传输&#xff0c;当然也可以与任意一台有wifi模块的其它设备传输。 1.2 wifi与蓝…

mysql 命令集

数据库操作 查看库命令 show databases; 使用某个库&#xff08;可以不用分号 &#xff1b;&#xff09; use 库名 查看库下所有的表 show tables; 显示一个表下的所有字段和类型 desc user(表名); 查看一个表的建表语句 show create table user\G 创建数据库db1 cre…