gkColor parseColour(const TiXmlElement* XMLNode) { return gkColor( getAttribScalar(XMLNode, "r", 0), getAttribScalar(XMLNode, "g", 0), getAttribScalar(XMLNode, "b", 0), getAttribScalar(XMLNode, "a", 1)); }
void gkBlenderSceneConverter::convertObjectLamp(gkGameObject* gobj, Blender::Object* bobj) { GK_ASSERT(gobj->getType() == GK_LIGHT && bobj->data); gkLight* obj = static_cast<gkLight*>(gobj); gkLightProperties& props = obj->getLightProperties(); Blender::Lamp* la = static_cast<Blender::Lamp*>(bobj->data); props.m_diffuse = gkColor(la->r, la->g, la->b); if (la->mode & LA_NO_DIFF) props.m_diffuse = gkColor::Black; props.m_specular = gkColor(la->r, la->g, la->b); if (la->mode & LA_NO_SPEC) props.m_specular = gkColor::Black; props.m_power = la->energy; if (la->mode & LA_NEG) props.m_power = -props.m_power; props.m_linear = la->att1 / la->dist; props.m_constant = 1.f; props.m_quadratic = la->att2 / (la->dist * la->dist); props.m_type = gkLightProperties::LI_POINT; if (la->type != LA_LOCAL) props.m_type = la->type == LA_SPOT ? gkLightProperties::LI_SPOT : gkLightProperties::LI_DIR; props.m_spot.y = la->spotsize > 128 ? 128 : la->spotsize; props.m_spot.x = gkMax(gkRadian(la->spotblend).valueDegrees(), props.m_spot.y); props.m_falloff = 128.f * la->spotblend; props.m_casts = (la->type != LA_HEMI && ((la->mode & LA_SHAD_RAY) || (la->type == LA_SPOT && (la->mode & LA_SHAD_BUF)))); }
void gkBlenderMeshConverter::convertMaterial(Blender::Material* bma, gkMaterialProperties& gma, gkMeshHashKey& hk) { convertTextureFace(gma, hk, 0); gma.m_name = GKB_IDNAME(bma); gma.m_hardness = bma->har / 4.f; gma.m_refraction = bma->ref; gma.m_emissive = bma->emit; gma.m_ambient = bma->amb; gma.m_spec = bma->spec; gma.m_alpha = bma->alpha; gma.m_diffuse = gkColor(bma->r, bma->g, bma->b); gma.m_specular = gkColor(bma->specr, bma->specg, bma->specb); gma.m_rblend = getRampBlendType(bma->rampblend_col); if (bma->mode & MA_ZTRA) gma.m_mode |= gkMaterialProperties::MA_DEPTHWRITE; if (bma->mode & MA_SHADOW) gma.m_mode |= gkMaterialProperties::MA_RECEIVESHADOWS; if (bma->mode & MA_WIRE) gma.m_mode |= gkMaterialProperties::MA_WIREFRAME; if (!(bma->mode & MA_SHLESS)) gma.m_mode |= gkMaterialProperties::MA_LIGHTINGENABLED; // TODO: this need to be checked, as there are cases where material-alpha is set to zero to give the texture-alpha full control if (bma->alpha <= 0.f) gma.m_mode |= gkMaterialProperties::MA_INVISIBLE; if (bma->mode & MA_RAMP_COL) gma.m_mode |= gkMaterialProperties::MA_HASRAMPBLEND; if (!(bma->game.flag & GEMAT_BACKCULL)) gma.m_mode |= gkMaterialProperties::MA_TWOSIDE; if (bma->game.flag & GEMAT_INVISIBLE) gma.m_mode |= gkMaterialProperties::MA_INVISIBLE; if (bma->game.alpha_blend & GEMAT_ALPHA) gma.m_mode |= gkMaterialProperties::MA_ALPHABLEND; if (bma->game.alpha_blend & GEMAT_CLIP) gma.m_mode |= gkMaterialProperties::MA_ALPHACLIP; // textures if (bma->mtex != 0) { gma.m_totaltex = 0; for (int i = 0; i < MAX_MTEX; i++) { if (!bma->mtex[i] || !bma->mtex[i]->tex) continue; if (bma->mtex[i]->tex->type == TEX_IMAGE) { Blender::MTex* mtex = bma->mtex[i]; Blender::Image* ima = mtex->tex->ima; if (!ima) continue; gkTextureProperties& gte = gma.m_textures[gma.m_totaltex++]; gte.m_image = gte.m_name = GKB_IDNAME(ima); if (mtex->texflag & MTEX_STENCIL) { gte.m_mode |= gkTextureProperties::TM_SPLAT; gte.m_texmode |= gkTextureProperties::TX_STENCIL; } if (mtex->texflag & MTEX_NEGATIVE) gte.m_texmode |= gkTextureProperties::TX_NEGATIVE; if (mtex->texflag & MTEX_RGBTOINT) gte.m_texmode |= gkTextureProperties::TX_RGBTOINTEN; if (mtex->mapto & MAP_ALPHA) { gte.m_mode |= gkTextureProperties::TM_ALPHA; gma.m_mode |= gkMaterialProperties::MA_ALPHABLEND; } if ((mtex->mapto & MAP_NORM) || (mtex->maptoneg & MAP_NORM)) { gte.m_mode |= gkTextureProperties::TM_NORMAL; gma.m_tangentLayer = i; } if ((mtex->mapto & MAP_SPEC) || (mtex->maptoneg & MAP_SPEC)) gte.m_mode |= gkTextureProperties::TM_SPECULAR; if ((mtex->mapto & MAP_REF) || (mtex->maptoneg & MAP_REF)) gte.m_mode |= gkTextureProperties::TM_REFRACTION; if ((mtex->mapto & MAP_EMIT) || (mtex->maptoneg & MAP_EMIT)) gte.m_mode |= gkTextureProperties::TM_EMMISIVE; if (mtex->normapspace == MTEX_NSPACE_OBJECT) //else set to tagent space. gte.m_texmode |= gkTextureProperties::TX_OBJ_SPACE; gte.m_blend = getTexBlendType(mtex->blendtype); gte.m_layer = findTextureLayer(mtex); gte.m_mix = mtex->colfac; gte.m_normalFactor = mtex->norfac; gte.m_diffuseColorFactor = mtex->colfac; gte.m_diffuseAlpahFactor = mtex->alphafac; gte.m_speculaColorFactor = mtex->colspecfac; gte.m_speculaHardFactor = mtex->hardfac; gte.m_scale.x = 1/mtex->size[0]; gte.m_scale.y = 1/mtex->size[1]; gte.m_scale.z = 1/mtex->size[2]; } } } }
void gkGameLevel::loadPickup(void) { if (m_pickup) { m_pickup->reinstance(); return; } #ifndef OGREKIT_CPPDEMO_COMPILE_BLEND gkBlendFile* playerData = gkBlendLoader::getSingleton().loadFile(gkUtils::getFile(GK_RESOURCE_PLAYER), "", LEVEL_GROUP_NAME); #else gkBlendFile* playerData = gkBlendLoader::getSingleton().loadFromMemory(MOMO,MOMO_SIZE,gkBlendLoader::LO_ALL_SCENES, "", LEVEL_GROUP_NAME); #endif if (!playerData || !playerData->getMainScene()) { gkPrintf("GameLevel: Blend '%s' loading failed", GK_RESOURCE_PLAYER); return; } // log status gkPrintf("GameLevel: Blend '%s' loaded", GK_RESOURCE_PLAYER); #ifndef OGREKIT_CPPDEMO_COMPILE_BLEND gkBlendFile* mapData = gkBlendLoader::getSingleton().loadFile(gkUtils::getFile(GK_RESOURCE_MAPS), "Pickup", LEVEL_GROUP_NAME); #else gkBlendFile* mapData = gkBlendLoader::getSingleton().loadFromMemory(MAPS,MAPS_SIZE,gkBlendLoader::LO_ALL_SCENES, "Pickup", LEVEL_GROUP_NAME); #endif if (!mapData || !mapData->getMainScene()) { gkPrintf("GameLevel: Blend '%s'->Pickup loading failed", GK_RESOURCE_MAPS); return; } // log status gkPrintf("GameLevel: Blend '%s'->Pickup loaded", GK_RESOURCE_MAPS); gkScene* sc = mapData->getMainScene(); m_pickup = (gkScene*)gkSceneManager::getSingleton().create("PickupLevel"); m_pickup->setHorizonColor(gkColor(0.2f, 0.2f, 0.2f)); m_pickup->setAmbientColor(gkColor(0.5f, 0.5f, 0.5f)); gkSceneManager::getSingleton().copyObjects(sc, m_pickup); m_player = new gkGamePlayer(this); m_player->load(playerData); m_player->registerToNetwork(); m_pickup->createInstance(); /* gkGamePlayer* enemy = m_player->clone(); enemy->registerToNetwork(); enemy->setPosition(gkVector3(0,1,1)); m_enemies.push_back(enemy); enemy = enemy->clone(); enemy->registerToNetwork(); enemy->setPosition(gkVector3(1,1,1)); m_enemies.push_back(enemy); */ }