- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有一个命令可以标记/启用给定场景管理器中所有节点的阴影?
目前我可以从所有节点转换阴影,但我必须为每个场景节点一遍又一遍地调用相同的函数 addShadowVolumeSceneNode();。这对于小玩具代码来说没问题,但随着代码复杂性和大小的增加,它可能并不理想。
这是我正在玩的代码:
#include <irrlicht.h>
#include "driverChoice.h"
using namespace irr;
using namespace scene;
using namespace core;
using namespace video;
int main()
{
/* create device */
IrrlichtDevice *device = createDevice(video::EDT_OPENGL, core::dimension2d<u32>(640, 480), 16, false, true);
if (device == 0)
return 1;
/* create engine and camera */
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
smgr->addCameraSceneNode(0, core::vector3df(0,-100,0), core::vector3df(0,0,0));
smgr->addLightSceneNode(0, core::vector3df(0,0,400), video::SColorf(1.0f, 1.0f, 0.0f, 0.0f), 800.0f);
/* Add cube */
scene::IMeshSceneNode* node_cube = smgr->addCubeSceneNode(30);
smgr->setShadowColor(video::SColor(150,0,0,0));
node_cube->setPosition(core::vector3df(0,0,-80));
node_cube->setMaterialFlag(video::EMF_LIGHTING, true);
node_cube->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
node_cube->addShadowVolumeSceneNode();
/* Another cube */
scene::IMeshSceneNode* node_cube2 = smgr->addCubeSceneNode(20);
smgr->setShadowColor(video::SColor(150,0,0,0));
node_cube2->setPosition(core::vector3df(0,0,-45));
node_cube2->setMaterialFlag(video::EMF_LIGHTING, true);
node_cube2->setMaterialFlag(video::EMF_BILINEAR_FILTER, true);
node_cube2->addShadowVolumeSceneNode();
/* And another cube */
scene::IMeshSceneNode* node_cube3 = smgr->addCubeSceneNode(10);
smgr->setShadowColor(video::SColor(150,0,0,0));
node_cube3->setPosition(core::vector3df(0,0,-20));
node_cube3->setMaterialFlag(video::EMF_LIGHTING, true);
node_cube3->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
node_cube3->addShadowVolumeSceneNode();
/* Now draw everything and finish */
u32 frames=0;
while(device->run())
{
driver->beginScene(true, true, video::SColor(0,100,100,100));
smgr->drawAll();
driver->endScene();
if (++frames==100)
{
core::stringw str = L"Irrlicht Engine [";
str += driver->getName();
str += L"] FPS: ";
str += (s32)driver->getFPS();
device->setWindowCaption(str.c_str());
frames=0;
}
}
device->drop();
return 0;
}
谢谢!
最佳答案
创建一个工厂函数:
scene::IMeshSceneNode* CreateCubeWithShadow(scene::ISceneManager* smgr, const core::vector3df &pos)
{
scene::IMeshSceneNode* node_cube = smgr->addCubeSceneNode(10);
node_cube->setPosition(pos);
node_cube->setMaterialFlag(video::EMF_LIGHTING, true);
node_cube->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
node_cube->addShadowVolumeSceneNode();
return node_cube;
}
然后每当你想要一个新节点时调用它:
scene::IMeshSceneNode* node_cube1 = CreateCubeWithShadow(smgr, core::vector3df(0,0,-80));
scene::IMeshSceneNode* node_cube2 = CreateCubeWithShadow(smgr, core::vector3df(0,0,-45));
scene::IMeshSceneNode* node_cube3 = CreateCubeWithShadow(smgr, core::vector3df(0,0,-20));
也无需为每个节点调用 smgr->setShadowColor(video::SColor(150,0,0,0));
,这是一个全局设置。
关于c++ - Irrlicht:如何在场景管理器中启用所有节点的阴影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52059906/
是否有一个命令可以标记/启用给定场景管理器中所有节点的阴影? 目前我可以从所有节点转换阴影,但我必须为每个场景节点一遍又一遍地调用相同的函数 addShadowVolumeSceneNode();。这
我想创建一个函数,使用 Irrlicht 引擎在空间中定位自由 float 的 2D 光栅图像。其灵感来自函数 rgl::show2d在 R 包 rgl 中。可以找到 R 中的示例实现 here .
我正在使用 Irrlicht 编写游戏。我有问题。 我在 /home/m4tx/Projects/Discoverer/Discoverer/bin/Debug/ 中有游戏,在 /home/m4tx/
这是我的粒子系统 Irrlicht 代码,其中 sceneManager 是场景管理器: irr::scene::IParticleSystemSceneNode *snow = sceneManag
我正在开展一个项目,在该项目中我使用了外部库 IrrLicht。我遇到的问题是我包含的外部头文件中也有定义。链接器不太喜欢这个,它提示重新定义。我应该去另一个图书馆还是这是解决这个问题的方法?哦,顺便
在我目前正在开发的游戏中,我只需要非常基础的物理知识,所以我不需要 Newton、ODE、Bullet 或类似的东西。只要没有节点(所有大小相同的 block )在我下面,我基本上只想掉下来。我试图从
我目前正在开发一个使用 irrlicht 库的软件。 我想使用GUIEditor来设计菜单,但是我无法在我的项目中导入GUIEditor导出的文件。 这是我进行的方式: gui->loadGUI("x
我写了一个在按钮上进行鼠标输入的例子。我的意思是当用户点击屏幕时,我想查看鼠标位置 x 和鼠标位置 Y。但是 X 和 Y 总是有垃圾值。这是我的代码: #include #include usin
当用户使用鼠标滚轮时,我想获取鼠标滚轮的状态或被触发。 我已经有一个像示例中那样的事件接收器(从 IEventReceiver 扩展)但是我看不到/找不到鼠标滚轮的方法。 是否有其他接收器/事件处理程
我的电脑上有 irrlicht 1.6,我使用 codeblocks + tdm-gcc MinGW 4.7。情况是,当我编译一个示例程序时,它编译得很好,但是当我尝试运行它时,它总是给我一个段错误。
我一直在尝试(几个小时以来)正确加载、显示和动画化 b3d 模型。该模型在第 0 帧和第 45 帧之间有一个动画,它是在 blender 中制作和绘制的(整个套件)作为测试模型。只显示了一半的模型,完
我正在用 Irrlicht (C++) 制作我的第一款游戏,这是一款带有鼠标控制的即时战略游戏 当您选择一个图 block (通过单击它)时,它会亮起并且屏幕上会出现一些 gui 按钮(请注意,不是在
当我在 Xcode 中运行 Irrlicht 应用程序时,我无法使用键盘 输入: 如果我在应用程序运行时按一个键,我最终会在应用程序之前打开的任何窗口上写下该字母,例如:我正在编辑我的代码,然后按“构
我在 iPhone 中使用 Irrlicht 引擎(branch-ogles 和 svn 最新版本 4389)并选择 opengl-es2 驱动程序。 不过好像不支持非二次幂的图像纹理渲染。我已经在
我在 Irrlicht 中做了一些项目,它编译得很好,但是当我尝试运行它时,它给了我以下错误 The procedure entry point ?IdenttityMatrix@core@irr@@
我在 MSVC++ 10 中开发了一个应用程序。它是一个 Irrlicht 项目。该应用程序绘制了两个简单的按钮。在我阅读的教程中,它使用了一个类 MyEventReceiver。该类与主类位于同一文
我正在尝试将 Eclipse C++ 和 Irrlicht 用于学校的项目。我的问题是设置操作环境。 我用过这个http://irrlicht3d.org/wiki/index.php?n=Main.
我目前正在使用 MinGW 编译 C++ 程序。我下载了 irrlicht-1.8 并正在尝试做第一个教程。它正在查找头文件,但是当我尝试编译时出现以下错误: C:\Users\E5DC9~1.MAR
我知道你可以在 lrrlicht 中做同样的事情,但我想使用 SDL 代码/函数在 Irrlicht 中绘制文本、图像(以处理 2d)并使用 Irrlicht 来做核心 3D 事情,你如何应用文本或从
尝试将 Irrlicht 静态库包含到我的 cmake 项目中时出现编译错误 编译错误: max@max-MS-7369:~/Desktop/survival/build$ make Scanning
我是一名优秀的程序员,十分优秀!