本文整理汇总了C++中ISceneManager::addPointLight方法的典型用法代码示例。如果您正苦于以下问题:C++ ISceneManager::addPointLight方法的具体用法?C++ ISceneManager::addPointLight怎么用?C++ ISceneManager::addPointLight使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ISceneManager
的用法示例。
在下文中一共展示了ISceneManager::addPointLight方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setupScene
ISceneManager* setupScene(IDevice* device) {
// create scene manager
ISceneManager* smgr = device->createSceneManager();
// get mesh manager
IMeshManager* meshManager = IMeshManager::getInstance();
// set up ground.
ISimpleMesh* groundMesh = meshManager->createPlaneMesh("ground", 100.0f, 100.0f, 10, 10, 50, 50);
IMeshNode* groundNode = smgr->addMeshNode(groundMesh, "ground_material", nullptr, true);
// create a sphere
ISimpleMesh* sphereMesh = meshManager->createSphereMesh("sphere", 1.0f, 100, 100);
IMeshNode* sphereNode = smgr->addMeshNode(sphereMesh, "sphere_material", nullptr, true, XMFLOAT3(-1.2f, 1.0f, 0));
// create a box
ISimpleMesh* boxMesh = meshManager->createCubeMesh("box", 1.2f, 3.0f, 1.2f);
IMeshNode* boxNode = smgr->addMeshNode(boxMesh, "box_material", nullptr, true, XMFLOAT3(1.0f, 1.5f, 1.0f));
// create a teapot
IModelMesh* teapotMesh = meshManager->getModelMesh("teapot.mesh");
IMeshNode* teapot = smgr->addModelMeshNode(teapotMesh, nullptr, true, XMFLOAT3(1.2f, 0, -1.0f));
teapot->setMaterialName("teapot_material");
// add 100 point light
for (u32 i = 0; i < 100; i++) {
XMFLOAT3 pos(math::RandomFloat(-20.0, 20.0f), math::RandomFloat(3.0, 10.0f), math::RandomFloat(-20.0, 20.0f));
XMFLOAT4 diffuse(math::RandomFloat(0, 0.3f), math::RandomFloat(0, 0.3f), math::RandomFloat(0, 0.3f), 1.0f);
XMFLOAT4 specular(math::RandomFloat(0, 0.3f), math::RandomFloat(0, 0.3f), math::RandomFloat(0, 0.3f), 32.0f);
ILightNode* light = smgr->addPointLight(i, nullptr, false, pos, 20.0f);
light->setSpecular(specular);
light->setDiffuse(diffuse);
light->setAttenuation(1.0f, 0.05f, 0);
}
sphereNode->addShadow(1);
boxNode->addShadow(1);
teapot->addShadow(1);
// create a fps camera node
IFpsCameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 1.0f, -6.0f),
XMFLOAT3(0, 1.0f, 0.0f), XMFLOAT3(0, 1.0f, 0));
camera->setNearZ(1.0f);
camera->setFarZ(1000.0f);
// set ambient in the environment.
smgr->setAmbient(XMFLOAT4(0.8f, 0.8f, 0.8f, 1.0f));
return smgr;
}
示例2: main
int main()
{
SDeviceContextSettings settings;
settings.MultiSamplingCount = 4;
settings.MultiSamplingQuality = 32;
IApplication* device = gf::createDevice(EDT_DIRECT3D11, SCREEN_WIDTH, SCREEN_HEIGHT, EWS_NONE, true, settings);
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->createSceneManager();
IMeshManager* meshManager = driver->getMeshManager();
IMaterialManager* materialManager = driver->getMaterialManager();
ITextureManager* textureManager = driver->getTextureManager();
IPipelineManager* pipelineManager = driver->getPipelineManager();
IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager();
resourceGroupManager->init("Resources.cfg");
const f32 groundSize = 1000.0f;
ISimpleMesh* groundMesh = meshManager->createPlaneMesh("ground", groundSize, groundSize, 100, 100, 100.0f, 100.0f);
IMeshNode* groundNode = smgr->addMeshNode(groundMesh, nullptr, nullptr, false);
groundNode->setMaterialName("ground_material");
// add point lights
const u32 lightColNum = 10;
const u32 lightRowNum = 10;
f32 xLightSpace = groundSize / (lightColNum - 1);
f32 zLightSpace = groundSize / (lightRowNum - 1);
for (u32 i = 0; i < lightRowNum; i++)
{
for (u32 j = 0; j < lightColNum; j++)
{
u32 id = i * lightColNum + j;
f32 x = -groundSize * 0.5f + xLightSpace * j;
f32 z = groundSize * 0.5f - zLightSpace * i;
ILightNode* light = smgr->addPointLight(id, nullptr, true, XMFLOAT3(x, 50.0f, z), 200.0f);
light->setSpecular(XMFLOAT4(12.0f, 12.0f, 12.0f, 32.0f));
light->setDiffuse(XMFLOAT4(0.8f, 0.8f, 0.8f, 1.0f));
light->setAttenuation(1.0f, 0.1f, 0);
}
}
/*
IModelMesh* carMesh = meshManager->getModelMesh("myfirst.mesh");
IMeshNode* carNode = smgr->addModelMeshNode(carMesh, NULL, false);
carNode->translate(0, 0.1f, 0);
carNode->setNeedCulling(false);
carNode->scale(0.05f, 0.05f, 0.05f);
carNode->pitch(XM_PIDIV2);
*/
IModelMesh* carMesh = meshManager->getModelMesh("car B red.mesh");
IMeshNode* carNode = smgr->addModelMeshNode(carMesh, NULL, false);
carNode->translate(0, 1.0f, 0);
//carNode->setNeedCulling(false);
//carNode->scale(0.05f, 0.05f, 0.05f);
//carNode->pitch(XM_PIDIV2);
IModelMesh* wheelleftFrontMesh = meshManager->getModelMesh("wheel front left.mesh");
IMeshNode* wheelleftFront = smgr->addModelMeshNode(wheelleftFrontMesh, carNode, false);
//carNode->setNeedCulling(false);
ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 1.0f, -4.0f), XMFLOAT3(0, 1.0f, 0.0f));
camera->setFarZ(3000.0f);
smgr->setAmbient(XMFLOAT4(0.8f, 0.8f, 0.8f, 1.0f));
char caption[200];
ITimer* timer = device->getTimer();
timer->reset();
const f32 color2[] = { 1.0f, 0.0f, 0.0f, 1.0f };
while (device->run())
{
const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
driver->beginScene(true, true, clearColor);
u32 ms = timer->tick();
float dt = ms * 0.001f;
updateCamera(camera, dt);
//updateCarPosition(dt, carNode, camera);
smgr->update(ms);
smgr->drawAll();
driver->endScene();
f32 fps = getFps(dt);
sprintf_s(caption, "FPS:%f, delta:%f", fps, 1000.0f/fps);
device->setWindowCaption(caption);
}
//.........这里部分代码省略.........