Hi!
 
I'm use CS version 0.99 now and modified my program a little. It's load the shading and material information from a file. But the wall and sprite creation remain in the program.  I can see the wall and the sprite, but I can't see any shadow:-(. I think I have to turn on something. But what?
 
Greetings,
 
Miki
 
//ez mindig az elso, es mindig a cppben kell lennie
#include "VR.h"

CS_IMPLEMENT_APPLICATION

//Globalis mutato az alkalmazasra

VR::VR ()
{
        SetApplicationName ("CrystalSpace.VR");
}

VR::~VR ()
{
}

bool VR::OnKeyboard (iEvent &ev)
{
        csKeyEventType eventtype = csKeyEventHelper::GetEventType(&ev);
        if (eventtype == csKeyEventTypeDown)
        {
                utf32_char code = csKeyEventHelper::GetCookedCode(&ev);
                if (code == CSKEY_ESC)
                {
                        csRef<iEventQueue> q =
                        CS_QUERY_REGISTRY(GetObjectRegistry(), iEventQueue);
                        if (q.IsValid()) 
q->GetEventOutlet()->Broadcast(cscmdQuit);
                }
        }
        return false;
}

bool VR::OnInitialize (int argc, char* argv[])
{
        if (!csInitializer::RequestPlugins (GetObjectRegistry (),
                CS_REQUEST_VFS,
                CS_REQUEST_OPENGL3D,
                CS_REQUEST_ENGINE,
                CS_REQUEST_FONTSERVER,
                CS_REQUEST_IMAGELOADER,
                CS_REQUEST_LEVELLOADER,
                CS_REQUEST_REPORTER,
                CS_REQUEST_REPORTERLISTENER,
                CS_REQUEST_END))
        return ReportError("Failed to initialize plugins!");
        //Esemenykezelo inicializalasa
        if (!RegisterQueue(GetObjectRegistry()))
    return ReportError("Failed to set up event handler!"); 
        //van-e parancssori help
        if (csCommandLineHelper::CheckHelp (object_reg))
        {
                csCommandLineHelper::Help(object_reg);
                return false;
        }
        return true;
}

bool VR::Application () {
        //A fo rendszer betoltese. Megynitja az osszes korabban betoltott 
plugint
        if (!OpenApplication(GetObjectRegistry()))
    return ReportError("Error opening system!");


        //Virtualis ora
        vc = CS_QUERY_REGISTRY(GetObjectRegistry(), iVirtualClock);
        if (!vc) return ReportError("Failed to locate Virtual Clock!");

        g3d = CS_QUERY_REGISTRY(GetObjectRegistry(), iGraphics3D);
        if (!g3d) return ReportError("Failed to locate 3D renderer!");

        
        //Az Enginere mutato pointer megkeresese
        engine = CS_QUERY_REGISTRY(GetObjectRegistry(), iEngine);
        if (!engine) return ReportError("Failed to locate 3D engine!");

        loader = CS_QUERY_REGISTRY(GetObjectRegistry(), iLoader);
        if (!loader) return ReportError("Failed to locate Loader!");


        kbd = CS_QUERY_REGISTRY(GetObjectRegistry(), iKeyboardDriver);
        if (!kbd) return ReportError("Failed to locate Keyboard Driver!");

        csReport (object_reg, CS_REPORTER_SEVERITY_NOTIFY,
                "crystalspace.application.VR",
                "VR version 0.1");

        //Letrehozunk egy nezetet
        view.AttachNew (new csView (engine, g3d));
        //A nezethez tartozik egy vagasi tartomany, mely az ablak egy 
reszterulete
        //Tetszoleges konvex polygon lehet
        iGraphics2D* g2d = g3d->GetDriver2D ();
        //A vagasi tartomany egy ablak meretu teglatest
        view->SetRectangle (0, 0, g2d->GetWidth (), g2d->GetHeight ());

        //A vialgitas cacheelesenek kikapcsolasa.
        //Eleg egyszeru az app ahhoz, hogy ezt megtehessuk
        //Ha pl. terkepfjlbol olasnank be, akkor
        //elhagynank ezt a sort.
        engine->SetLightingCacheMode (0);

        LoadMap();

        CreateRoom () ;

        CreateSprites();

        //Felkeszite az engine-t a renderelesre
        //Elokesziti a texturakat, es elkesziti a fenyterkepeket
        //Ezutan lehet csak renderelni
        engine->Prepare ();

        rotY = rotX = 0;

        //A nezethez tartozik egy sector
        view->GetCamera ()->SetSector (room);
        //A kameranak van pozicioja
        view->GetCamera ()->GetTransform().SetOrigin (csVector3 (0, 5, -3));

        //Meghivja a default runloopot, alpabol ez csak
        //process eventeket sugaroz
        Run ();

        return true;
}
void VR::LoadMap () {
        csRef<iVFS> vfs (CS_QUERY_REGISTRY (GetObjectRegistry(), iVFS));
//      if (!vfs->Mount( "/lev/fs", "fs.zip")) ReportError("Baj van");

        // Load the level file which is called 'world'.
//      if (!vfs->ChDir( "/lev/fs")) ReportError("Baj van2");
        if (!loader->LoadMapFile ("/lev/fs/myworld"))
        {
                ReportError ("Error loading 'myworld' map!");
        }
}
void VR::CreateRoom () {

        iMaterialWrapper *tm = engine->GetMaterialList ()->FindByName ("stone");
        room = engine->CreateSector ("room");
        //Gyakori a fallal korulvett sector, ezert a falak letrehozasahoz van 
kulon metodus
        //Ezutan meg hozza kell adni a falmesh-hez a falak polygonjait
        csRef<iMeshWrapper> walls (
                engine->CreateSectorWallsMesh (room, "walls"));
        
        //A thingunk(walls) jellemzoit irja le a thing_state altal mutatott 
objektum
        csRef<iThingState> thing_state ( 
                SCF_QUERY_INTERFACE (walls->GetMeshObject (), iThingState));
        //A ThingState-bol megkapjuk a FactoryState-et
        //Amit mar hasznalhatunk a polygonok elkeszitesere
        csRef<iThingFactoryState> walls_state = thing_state->GetFactory ();
        //Letrehoz egy belulrol lathato teglatestet
        //AKKOR LATHATO EGY POLYGON, HA A VERTEXEI ORAIRANYBAN VANNAK
        //A megadott koordinatak objektumter beliek
        walls_state->AddInsideBox (
                csVector3 (-5, 0, -5), csVector3 (5, 20, 5));
        //A Polygonok materialjat allitja be
        //A CS_POLYRANGE_LAST jelentese: az utoljara keszitett polygonokra 
vonatkozik
        //Jelen esetben ez az AddInsideBox-al keszitett polygonokra vonatkozik
        walls_state->SetPolygonMaterial (CS_POLYRANGE_LAST, tm);
        //A texturemapping-nek az egyik legegyszerubb valtozatat hasznaljuk
        //Megpedig:
        //Minden polygon elso ket vertexe hatarozza meg az u tengelyt
        //A v tengely pedig erre meroleges lesz
        //A masodik parameter azt jelenti, hogy a texture at lesz meretezve
        //Jelen esetben egy texturalap 3*3as lesz a vilag koordinatarendszerben
        walls_state->SetPolygonTextureMapping (CS_POLYRANGE_LAST, 3);

        //Egy fenyforrast reprezentalo interface
        csRef<iLight> light;
        //A fenyforrasok listaja
        iLightList* ll = room->GetLights ();
        //Statikus, mozgasra keptelen, konstans intenzitasu lampakat hozunk 
letre
        //P 1: a fenyforras neve, altalaban nem hasznaljuk, ezert 0
        //P 2: a fenyforras pozicioja
        //P 3: a fenyforras hatasanak sugara
        //P 4: a fenyforras szine
        //P 5: itt nem hasznalt. Azt hatarozza meg, hogy pszeudodinamikus 
legyen a fenyforras vagy nem
        //              alapesetben nem pszeudodinamikus a fenyforras, azaz nem 
tud intenzitast valtoztatni
/*      light = engine->CreateLight (0, csVector3 (-3, 5, 0), 10,
                csColor (1, 0, 0));
        ll->Add (light);

        light = engine->CreateLight (0, csVector3 (3, 5, 0), 10,
                csColor (0, 0, 1));
        ll->Add (light);
        
        light = engine->CreateLight (0, csVector3 (0, 5, -3), 10,
                csColor (0, 1, 0));
        ll->Add (light);
*/
        //Hozzaadok meg egy lampat, mert azt akarom, hogy az objektumom 
arnyekot vessen
        light = engine->CreateLight (0, csVector3 (-3, 10, 0), 20,
                csColor (1, 1, 1));
        ll->Add (light);
  csRef<iLight> statuelight = engine->CreateLight ("statuelight",
    csVector3 (-4.7f, 1.0f, 5.5f), 4, csColor(1.2f,0.2f,0.2f));
  statuelight->CreateNovaHalo (1278, 15, 0.3f);
  ll->Add (statuelight);




}


//2 reszre osztjuk a kirajzolast azert, mert a megjelenites elott
//igy lehetoseg nyilik a renderelt kepre rajzloni ha az szukseges
//Amikor egy framet renderelni kell, a CrystalSpace keretrendszer 4 uzenetet 
kuld
//cscmdPreProcess
//cscmdProcess
//cscmdPostProcess
//cscmdFinalProcess
//1. resz: A renderelt kep elkeszitese

void VR::CreateSprites () {

        //Betoltjuk a sprite sablont a lemezrol
        csRef<iMeshFactoryWrapper> imeshfact (loader->LoadMeshObjectFactory (
                "/lib/std/sprite1"));
        if (imeshfact == 0)
                ReportError ("Error loading 'sprite1' sprite!");

        //Hozzaadjuk a spriteot az enginehez
        csRef<iMeshWrapper> sprite (engine->CreateMeshWrapper (
                imeshfact, "MySprite", room,
                csVector3 (-3, 5, 3)));
        csMatrix3 m;
        m.Identity ();
        //5-szorosere noveljuk az objektum meretet, maskor ne igy tegyuk
        //mert az utkozesdetektalas es a lathatosagi vagas nem mukodik helyesen
        //az atmeretezett objektummal
        //Helyette a HardTransform () hasznalata javasolt
        m *= .5;
        sprite->GetMovable ()->SetTransform (m);
        sprite->GetMovable ()->UpdateMove ();
        //A mesh vizualis attributumainak beallitasa
        //A SetAction fugvennyel  az animacios frameket lehetne definialni
        //Jelen esetben 1 frame van, ezert a default action-t allitjuk be
        csRef<iSprite3DState> spstate (
                SCF_QUERY_INTERFACE (sprite->GetMeshObject (), iSprite3DState));
        spstate->SetAction ("default");
        //A Z-Buffer hasznalati modjanak beallitasa, jelen esetben teljes 
hasznalat
        //CS_ZBUF_FILL pl. egy sector kulso falaihoz ajanlott
        sprite->SetZBufMode ( CS_ZBUF_USE);
        //Megmondjuk, hogy mikor renderelodjon az objektum a kepre
        //4 alapprioritas van: `sky', `wall', `object', es `alpha'
        //Lehet csinalni sajatokat is
        //Az object a default
        sprite->SetRenderPriority (engine->GetObjectRenderPriority ());
}

void VR::ProcessFrame ()
{
        //Csak hogy lassam, itt megszerzem a spriteom adatait
        //es bevezetek ra egy mozgatast a WASD billentyukombinaciokkal
        csRef<iMeshWrapper> sprite (engine->FindMeshObject ("MySprite"));
        
        //Lekerjuk a virtualis oratol az eltelt idot
        csTicks elapsed_time = vc->GetElapsedTicks ();
        //Elforgatjuk a kamerat a billentyuzet allapotanak megfeleloen
        float speed = (elapsed_time / 1000.0) * (0.06 * 20);

        iCamera* c = view->GetCamera();

        if (kbd->GetKeyState (CSKEY_SHIFT))
        {
    // Ha a SHIFT lenyomva akkor Strafe uzemmod
    if (kbd->GetKeyState (CSKEY_RIGHT))
      c->Move (CS_VEC_RIGHT * 4 * speed);
    if (kbd->GetKeyState (CSKEY_LEFT))
      c->Move (CS_VEC_LEFT * 4 * speed);
    if (kbd->GetKeyState (CSKEY_UP))
      c->Move (CS_VEC_UP * 4 * speed);
    if (kbd->GetKeyState (CSKEY_DOWN))
      c->Move (CS_VEC_DOWN * 4 * speed);
  }
  else
  {
        // left and right cause the camera to rotate on the global Y
    // axis; page up and page down cause the camera to rotate on the
    // _camera's_ X axis (more on this in a second) and up and down
    // arrows cause the camera to go forwards and backwards.
    if (kbd->GetKeyState (CSKEY_RIGHT))
      rotY += speed;
    if (kbd->GetKeyState (CSKEY_LEFT))
      rotY -= speed;
    if (kbd->GetKeyState (CSKEY_PGUP))
      rotX += speed;
    if (kbd->GetKeyState (CSKEY_PGDN))
      rotX -= speed;
    if (kbd->GetKeyState (CSKEY_UP))
      c->Move (CS_VEC_FORWARD * 4 * speed);
    if (kbd->GetKeyState (CSKEY_DOWN))
      c->Move (CS_VEC_BACKWARD * 4 * speed);
        //Az objektum mozgatasa
        if (kbd->GetKeyState (119))
                sprite->GetMovable()->MovePosition(CS_VEC_FORWARD * 4 * speed);
                sprite->GetMovable()->UpdateMove();
        if (kbd->GetKeyState (97))
                sprite->GetMovable()->MovePosition(CS_VEC_LEFT * 4 * speed);
                //sprite->GetMovable()->UpdateMove();
        if (kbd->GetKeyState (115))
                sprite->GetMovable()->MovePosition(CS_VEC_BACKWARD * 4 * speed);
                sprite->GetMovable()->UpdateMove();
        if (kbd->GetKeyState (100))
                sprite->GetMovable()->MovePosition(CS_VEC_RIGHT * 4 * speed);
                sprite->GetMovable()->UpdateMove();

  }

  // We now assign a new rotation transformation to the camera.  You
  // can think of the rotation this way: starting from the zero
  // position, you first rotate "rotY" radians on your Y axis to get
  // the first rotation.  From there you rotate "rotX" radians on the
  // your X axis to get the final rotation.  We multiply the
  // individual rotations on each axis together to get a single
  // rotation matrix.  The rotations are applied in right to left
  // order .
  csMatrix3 rot = csXRotMatrix3 (rotX) * csYRotMatrix3 (rotY);
  csOrthoTransform ot (rot, c->GetTransform().GetOrigin ());
  c->SetTransform (ot);


        
        //Megmondjuk a drivernek, hogy 3Ds dolgokat fogunk megjeleniteni
        if (!g3d->BeginDraw(
                engine->GetBeginDrawFlags() | CSDRAW_3DGRAPHICS))
                return;
        //Megmondjuk a kameranak, hogy renderelje a framebufferbe
        //Barmi egyeb rajzolast is elvegezetunk itt
        

        view->Draw ();
}
//2. resz: Kirajzolas
void VR::FinishFrame ()
{
        g3d->FinishDraw ();
        g3d->Print (0);
}

void VR::OnExit()
{
} 
//Main metódus
int main (int argc, char* argv[])
{
        return csApplicationRunner<VR>::Run (argc, argv); 
}








<!-- This file was generated from c:/Transfer/blender/isotest.blend with 
blend2cs 0.2.4 -->
<!-- http://projects.blender.org/projects/blend2cs -->
<world>
    <addon>
        <plugin>crystalspace.renderloop.loop.loader</plugin>
        <paramsfile>/shader/std_rloop_shadowed.xml</paramsfile>
    </addon>
    <settings>
        <clearzbuf>yes</clearzbuf>
        <clearscreen>yes</clearscreen>
        <lightmapcellsize>16</lightmapcellsize>
        <renderloop>std_rloop_shadowed</renderloop>
    </settings>
  <plugins>
    <plugin name="thing">crystalspace.mesh.loader.thing</plugin>
    <plugin name="null">crystalspace.mesh.loader.null</plugin>
    <plugin name="genmesh">crystalspace.mesh.loader.genmesh</plugin>
    <plugin name="sprite3d">crystalspace.mesh.loader.sprite.3d</plugin>
    <plugin name="thingfact">crystalspace.mesh.loader.factory.thing</plugin>
    <plugin name="genmeshfact">crystalspace.mesh.loader.factory.genmesh</plugin>
  </plugins>
  <textures>
    <texture name="stone">
      <file>"/lib/std/stone4.gif"</file>
    </texture>
    <texture name="spark">
      <file>/lib/stdtex/spark.png</file>
    </texture>
  </textures>
  <shaders>
        <shader><file>/shader/ambient.xml</file></shader>
        <shader><file>/shader/light.xml</file></shader>
        <shader><file>/shader/light_bumpmap.xml</file></shader>
        <shader><file>/shader/parallax/parallax.xml</file></shader>
  </shaders>
  <materials>
    <material name="stone">
      <texture>stone</texture>
        <shader type="ambient">ambient</shader>
      <shader type="diffuse">light</shader>
    </material>
    <material name="spark">
      <texture>spark</texture>
      <shader type="ambient">ambient</shader>
      <shader type="diffuse">light</shader>
    </material>
  </materials>
</world>

Reply via email to