Aktuelle Zeit: 13.05.2025, 00:30

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 01.06.2009, 11:46 
Offline

Registriert: 27.09.2007, 17:16
Beiträge: 5
Ref: Probleme mit EventReceiver & keycode unter linux

hallo,
OS: suse-linux 10.3. 64 bit mit quad 4 gb
irrlicht-version 1.5.0

da ich einige programme fuer opencv und opengl fuer 3 webcams entwickle,
bin ich vor einigen tagen auf das Package:
"CvIrrCamController-0.5." gestossen.
wurde mit irrlicht 1.5 erfolgreich compiliert,
laufen tuts auch.
da ich gezwungenermassen
meistens ohne "make" compiliere
(wegen opencv & opengl & wiimote-packages)
hab ich in den letzten tagen folgendes
compile entwickelt:
- g++ -o irrTest1 irrTest1.cpp -lIrrlicht -lGL -lGLU -lm -lXxf86vm -lpng -ljpeg
funzzt praechtig: das irrTest1.cpp entspricht dem
programm aus examples : 01.HelloWorld.cpp -> main.cpp

nun zu meinen problem:
habe auch ein eigenes kleines prog entwickelt:
irrTest.cpp
Compile OK
Run auch: ABER:
ich kann das programm nicht beenden
ich moechte gerne z.B. mit der Taste <q>
das prog beenden koennen.
habe dazu (aus dem Web) die "class InputReceiver "
benutzt
Aber immernoch der gleiche Fehler;
es erscheint das irrlicht-window mit dem mouse-cursor
der cursor hat vermutlich den focus in der mitte des windows
- keine moeglichkeit den cursor zu bewegen
- bei betaetigen von <q> kommt auf der console
- "Window key not supported linux..."
konnte diesen satz leider nicht aufschreiben
da dann mein systen unbenutz bar ist Crash, und SystemRestart.

ich waere froh wenn mir jemand helfen koennte.
gruss nomad
hier ist der code:
Code:
/*
  dd. 31.05.2009
  name: irrTest.cpp
  compile with: (with opencv unterstuetzung)
  g++ -o irrTest irrTest.cpp -lIrrlicht -lGL -lGLU -lm -lXxf86vm -lpng -ljpeg

  compile OK
  RUN : NOK laeuft laesst sich aber nicht abbrechen.
        problme mit keystates

  dd. 01.06.2009
  versuche mit EventReceiver as procedure for keyboard-handling
  only <q> for exit

  01.06. - 1.versuch mit classEventReceiver.txt
           - einbau von Class eventReceiver
             - compile OK
         - Compile into main with: 
           // new eventReceiver
           InputReceiver input;
           Fehler verm.wegen input
         - da irrTestEventReceiver.cpp compile & run OK with Buttons
           - neuer versuch (1)
             - ohne new stuff input compile OK
           - neuer versuch (2)
             - wenn InputReceiver input
               - ausserhalb von while() plaziert wird
             - compile immerhin OK
         - versuch keyhandler mit <q> -> exit
           - keys look at irrKeycode.txt
             - KEY_KEY_Q            = 0x51,  // Q key           
           - compile OK
         - 1. run with q exit
         - weitere Versuche NOK SYSTEM CRASH
         - now neuer versuch mit
           - mit original 01.HelloWorld.cpp
             - as irrTest1.cpp 
           - irrTest1.cpp -> compile OK mit meinem compile
             - ./irrTest1.cpp -> RUN OK
*/
#include </irrlicht/irrlicht.h>

#include <GL/gl.h>
#include <GL/glut.h>

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include <string.h>
#include <ctype.h>
#include <setjmp.h>
#include <termios.h>
#include <unistd.h>
#include <sys/signal.h>
#include <sys/types.h>
#include <errno.h>
#include <ctype.h>
#include <sys/io.h>

#include <iostream>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;


// create device
IrrlichtDevice *device = 0; // createDevice(driverType, core::dimension2d<s32>(640, 480), 16, false);


class InputReceiver : public IEventReceiver
{
public:
   // old: bool OnEvent(SEvent event)
    virtual bool OnEvent(const SEvent& event)   
   {
      if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown) {
         switch(event.KeyInput.Key)
         {
            case KEY_KEY_Q:                    // = 0x51,  // Q key
               device->closeDevice();   
               return true;   
            break;
            case KEY_RIGHT:
            //   player->SetMoveVector(vector3df(0.15f, 0, 0));
            break;
            case KEY_LEFT:
            //   player->SetMoveVector(vector3df(-0.15f, 0, 0));
            break;
            case KEY_UP:
            //   player->SetMoveVector(vector3df(0, 0.15f, 0));
            break;
            case KEY_DOWN:
            //   player->SetMoveVector(vector3df(0, -0.15f, 0));
            break;
            default:
            break;   
         }
      }

      // return true;
      return false;
   }
};

int main()
  {
     video::E_DRIVER_TYPE driverType;
     
     printf("Please select the driver you want for this example:\n"\
            " (a) Direct3D 9.0c\n (b) Direct3D 8.1\n (c) OpenGL 1.5\n"\
            " (d) Software Renderer\n (e) Burning's Software Renderer\n"\
            " (f) NullDevice\n (otherKey) exit\n\n");
     
     char i;
     std::cin >> i;
     
     switch(i)
        {
           case 'a': driverType = video::EDT_DIRECT3D9;break;
           case 'b': driverType = video::EDT_DIRECT3D8;break;
           case 'c': driverType = video::EDT_OPENGL;   break;
           case 'd': driverType = video::EDT_SOFTWARE; break;
           case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
           case 'f': driverType = video::EDT_NULL;     break;
           default: return 0;
        }
     
     // create device
     // IrrlichtDevice *device = createDevice(driverType, core::dimension2d<s32>(640, 480), 16, false);

     // new device
     device = createDevice(driverType, core::dimension2d<s32>(640, 480), 16, false);
         

     if(device == 0)
        return 1; // could not create selected driver.
     
     // is wrong ss.oben
     // start up the engine
     // IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D8, core::dimension2d<s32>(640,480));
       
     // video::IVideoDriver* driver = device->getVideoDriver();
     // scene::ISceneManager* scenemgr = device->getSceneManager();
     // guienv::IGUIEnvironmente

     // new eventReceiver
     InputReceiver input; 
     
     IVideoDriver* driver = device->getVideoDriver();
     ISceneManager* scenemgr = device->getSceneManager();
     IGUIEnvironment* guienv = device->getGUIEnvironment();
     
     device->setWindowCaption(L"Hello World!-Irrlicht-Engine");
     
     /*
        We add a hello world label to the window, using the GUI environment.
        The text is placed at the position (10,10) as top left corner and
        (260,22) as lower right corner.
     */
     
     guienv->addStaticText(L"Hello World! This is the Irrlicht Software renderer!",
                           rect<s32>(10,10,260,22), true);
     
     // load and show quake2 .md2 model
     scene::ISceneNode* node = scenemgr ->addAnimatedMeshSceneNode( scenemgr->getMesh("sydney.md2"));
     
     // if everything worked, add a texture and disable lighting
     if(node)
        {
          // node->setMaterialTexture(0, driver->getTexture("texture.bmp"));
           node->setMaterialFlag(video::EMF_LIGHTING, false);
        }
     
     // add a first person shooter style user controlled camera
     scenemgr->addCameraSceneNodeFPS();
     
     // draw everything
     while(device->run() && driver)
        {
           // new eventReceiver
         //  InputReceiver input;

         

           driver->beginScene(true, true, video::SColor(255,0,0,255));
           scenemgr->drawAll();
           driver->endScene();
        }
     
     // delete device
     device->drop();
     
     return 0;
  }
/**********************************************************************/


Nach oben
 Profil  
 
BeitragVerfasst: 01.06.2009, 18:30 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Du musst dem Device noch den EventReceiver zuordnen mit setEventReceiver()

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 02.06.2009, 08:20 
Offline

Registriert: 27.09.2007, 17:16
Beiträge: 5
hi Sylence
danke fuer deine antwort.
entschuldige bitte, aber ich bin ein newbie, in c++ und irrlicht
wie geht das:
>>> Du musst dem Device noch den EventReceiver zuordnen mit setEventReceiver() ???? :-)
waer um einen hinweis dankbar.
gruss nomad


Nach oben
 Profil  
 
BeitragVerfasst: 02.06.2009, 08:26 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
device->setEventReceiver( &input );
Die Zeile vor die while-Schleife schreiben.

Wenn du noch neu bei C++ und Irrlicht bist, dann würde ich dir empfehlen die Tutorials von Irrlicht mal durchzulesen und auch einige Tutorials zu C++ abzuarbeiten.

Und wegen dem Cursor:
Der bleibt in der Mitte des Fensters, weil du eine FPS Kamera erstellt hast. Erstell eine normale Kamera. Dann kannst du die Maus ganz normal bewegen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 02.06.2009, 08:57 
Offline

Registriert: 27.09.2007, 17:16
Beiträge: 5
hi Sylence
vielen dank fuer die rasche antwort.
ich haette es vermutlich auch nach einiger zeit rausgefunden, aber wenn bei jeden versuch, das ganze system crasht
und jedesmal einen restart noetig ist, ist das auf die dauer sehr muehsam.
deine vorschlaege < c++ & irrlicht dokus lesen> werd ich mir zur herzen nehmen.
vielen dank
nomad


Nach oben
 Profil  
 
BeitragVerfasst: 02.06.2009, 16:21 
Offline

Registriert: 27.09.2007, 17:16
Beiträge: 5
hi Sylence.
super es laeuft so wie ich's mir vorgestellt habe.
nochmals vielen dank
nomad.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de