Este blog esta em reforma no momento.

Adaptando objetos clicáveis do Blender


Comecei o mecanismo dos diálogos. Por enquanto uma tela simplezinha mas operacional.
No Blender eu define 3 propriedades no Logic Editor para cada personagem NPC.
"click" avisando que ele pode ser clicado;
"avatar" o nome da imagem do personagem;
"texto" o caminho de um arquivo texto embutido no próprio .blend ou na base de dados.
O bom é que posso usar marcação HTML para deixar tudo mais bonito.
O mecanismo esta simples, mas assim que eu começar a conexão com a IA os textos irão interagir melhor.

Deu um pouco a mais de trabalho doque deveria porque cometi um erro bobo!
Simplesmente não prestei atenção na forma que a OGRE recebe o valor do mouse para fazer o Ray na cena.

Explicando: A OGRE tem uma função chamada getCameraToViewportRay que recebe um valor entre 0 e 1 (0 o canto esquerdo da tela e 1 o canto direito).
A questão é que eu confundi ela com outras engines e usei um valor entre -1 e 1... resultando num vai e vem de troca de código insano que me fez perder uma boa parte do dia até perceber a "cagada".
        gkScene* scene = gkEngine::getSingleton().getActiveScene();
 Ogre::Camera* camera =scene->getMainCamera()->getCamera();
 Ogre::Ray ray = camera->getCameraToViewportRay(x,y);//(v1, v3.normalisedCopy());
 Ogre::RaySceneQuery* query = camera->getSceneManager()->createRayQuery(ray);

 Ogre::RaySceneQueryResult &result = query->execute();

 lua_pushnumber(L,result.size());
 if (result.size()>0)
 {
  int i = 1;
  lua_newtable(L);
  for( Ogre::RaySceneQueryResult::iterator itr = result.begin(); itr != result.end(); itr ++ )
  {
   lua_pushnumber(L,i);
   lua_pushstring(L, itr->movable->getName().c_str() );
   lua_settable(L,-3);
   i++;
  }
 }

 camera->getSceneManager()->destroyQuery(query);
 query = 0;

Comentários