Aktuelle Zeit: 11.05.2024, 09:49

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 22.09.2008, 19:14 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Hi,

ich hab mal ein paar Fragen.

1.)
Gibt es ne Möglichkeit eine Sphere zu zeichnen oder geht das nur mit nem Modell das ich laden und entsprechend anzeigen muss?
Und ist das richtig das ist jedes Objekt, in diesem Fall, als "IAnimatedMeshSceneNode" laden/einfügen muss?
Mir irrEdit hab ich sowas hinbekommen. Hab mein Model angezeigt und dann die Scene praktisch geladen, aber das ist ja eher statisch wie erzeuge ich das dynamisch?

2.)
Wenn ich meine Sphere habe, wie sorge ich dafür das meine Camera beim Start auf die Sphere zeigt? Irgendwie muss ich die doch ausrichten können.

3.)
Zoomen.
Wie macht man das? :-) Also eigentlich will ich was bestimmtes. Gehört vielleicht auch ein bischen mit zu Punkt 1.
Ich hab bei nem Kumpel Spore gesehen und dort kann man aus dem Weltraum (Ansicht ala Master of Orion) in ein System zoomen (Man sieht dann die Planeten etc.) und kann dann weiter bis auf einen Planeten zoomen, allerdings scheint dazwischen etwas geladen zu werden.

Wie macht man sowas?
Sphere basteln und dann mit ner Highmap oder sowas belegen? Soll aber schon rund aussehen wie ein Planet eben.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 22.09.2008, 19:21 
Offline

Registriert: 23.07.2008, 15:42
Beiträge: 41
1.)irr::ISceneManager::addSphereSceneNode() funktioniert genauso wie addCubeSceneNode

2.)leg dir ne instanz von ISceneNode mit addSphereSceneNode an.
mit get Position holst du dir die Position dieses scenenodes
und richtest die Kamera dementsprechend aus.

3.)Einfach die z-koordinate der Kamera verändern

_________________
Lebe jeden Tag als wäre es dein letzter-
irgentwann wirst du Recht haben.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 06:46 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Du kannst mit Irredit die Szene bauen und dir dann (weiß die Funktion im Augenblick nicht auswendig) die einzelnen Objekte der Szene holen und einfach damit weitermachen (damits dynamisch wird ;) ). Dazu sollte jedes Objekt, auf das du zugreifen willst, einen eindeutigen Namen oder eine ID haben.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 17:45 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Ok ich spiele gerade etwas herum, zwei Spheren erzeugen und anzeigen funktioniert ohne Probleme.
Nun habe ich mir zwei Bilder gemacht *.png jeweils 256x256Pixel gross, das eine ist grün das andere rot.

Code:
  irr::scene::ISceneNode *sphere = smgr->addSphereSceneNode(10,                              // radius
16,                             // polys
0,                              // parent
10001,                          // id
irr::core::vector3df(0, 0, 0),  // position
irr::core::vector3df(0, 0, 0),  // rotation
irr::core::vector3df(1.000000,1.000000,1.000000));
  irr::video::ITexture *eins = driverValue->getTexture(".\\data\\green.png");
  sphere->setMaterialTexture(0, eins);

  irr::scene::ISceneNode *sphere1 = smgr->addSphereSceneNode(10,                              // radius
16,                             // polys
0,                              // parent
10002,                          // id
irr::core::vector3df(50, 50, 0),  // position
irr::core::vector3df(0, 0, 0),  // rotation
irr::core::vector3df(1.000000,1.000000,1.000000));
    irr::video::ITexture *zwei = driverValue->getTexture(".\\data\\red.png");
    sphere1->setMaterialTexture(1, zwei);



Meine Sphere(n) sind aber immer noch schwarz, weder die eine wird grün angezeigt noch die andere rot. Muss ich dabei noch irgendwas beachten?


EDIT:
Und die zweite Frage, wenn ich einen Würfel aus Spheren zeichne

Code:
  for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 10; y++) {
      for (int z = 0; z < 10; z++) {
        int xX = x *100;
        int yY = y *100;
        int zZ = z *100;
        irr::scene::ISceneNode *sphere = smgr->addSphereSceneNode(10,                              // radius
                                                                  16,                             // polys
                                                                  0,                              // parent
                                                                  10001,                          // id
                                                                  irr::core::vector3df(xX, yY, zZ),  // position
                                                                  irr::core::vector3df(0, 0, 0),  // rotation
                                                                  irr::core::vector3df(1.000000,1.000000,1.000000));
      }
    }
  }

Wieso bricht meine FPS dann so ein?
Zwei Sphären werden noch mit ~6000 FPS angezeigt, diese 100 hier nur noch mit 38?
Muss ich mich selbst darum kümmern was in Sichweite ist und entsprechend gerendert werden soll?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 18:23 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Du musst entweder noch eine Lichtquelle hinzufügen, oder die Beleuchtung für die Spheren deaktivieren => setMaterialFlag()

Zu 2:
Aktivier mal VBOs => setHardwareMappingHint() oder so. 1600 Polygone jedes Frame zur Grafikkarte schicken, ist nicht grad perfomant ;)

_________________
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  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 18:53 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Also allein durch das setzen eines Lichts hat sich die Framerate schon verdoppelt. Das mit den VBO's habe ich aber nicht verstanden, in einem anderen Thread habe ich ein Beispiel von Dir gesehen

Code:
IMesh* mesh = smgr->getMesh("mesh.x")->getMesh(0);
for(u32 i=0; i<mesh->getMeshBufferCount(); ++i) {
     mesh->getMeshBuffer(i)->setHardwareMappingHint(EHM_STATIC);
}


Nun sind meine Spähren, sind das Meshes(?), aber ja nicht aus einer Datei, wie komme ich also an die Ran?
Ist MeshCache das richtige für mich?

EDIT:

Ich glaube jetzt habe ichs verstanden, ich mache jetzt folgendes in einer init Funktion
Code:
  irr::scene::ISceneManager *smgr = this->deviceValue->getSceneManager();

  irr::video::ITexture *t = driverValue->getTexture(".\\data\\water.jpg");
  irr::video::ITexture *green = driverValue->getTexture(".\\data\\green.png");
  irr::video::ITexture *red = driverValue->getTexture(".\\data\\red.png");
  // Sykbox
  irr::scene::ISceneNode *skyBox = smgr->addSkyBoxSceneNode(t, t, t, t, t, t, 0, -1);

  irr::scene::IAnimatedMesh *mesh = smgr->addSphereMesh("sphere", 10, 10, 10);

  for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 10; y++) {
      for (int z = 0; z < 10; z++) {
        int xX = x *100;
        int yY = y *100;
        int zZ = z *100;
        irr::scene::IMeshSceneNode *s = smgr->addMeshSceneNode(mesh, 0, -1,
                                                               irr::core::vector3df(xX, yY, zZ),
                                                               irr::core::vector3df(0, 0, 0),
                                                               irr::core::vector3df(1.000000,1.000000,1.000000),
                                                               false);
        s->setMaterialTexture(0, red);
        }
    }
  }
  smgr->addLightSceneNode(0, irr::core::vector3df(0, 0, 0), irr::video::SColorf(1.000000, 1.000000, 1.000000), 100.000000, -1);

Die Framerate ist nun schonmal bei 100. Diese Methode "setHardwareMappingHint" die gerufen werden soll gibts bei mir, ich hab Irrlicht 1.4.1


Zuletzt geändert von Zerotag am 23.09.2008, 19:08, insgesamt 2-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 19:06 
Offline

Registriert: 23.07.2008, 15:42
Beiträge: 41
Klar sind sphären meshs.
Ein mesh ist eine Sammlung von Vertices,texturen und
Animationen. Die Sphäre wird von irrlicht ausgerechnet.
Wenn du mal setMaterialFlag(EMF_WIREFRAME) machst
siehst du die einzelnen Punkte die um den in addSphereSceneNode
angegebenen Mittelpunkt gruppiert sind.
Du kannst dir die kugel natürlich auch aus einem model laden
was evt. performancemäßig ungünstig ist(ladezeiten)

_________________
Lebe jeden Tag als wäre es dein letzter-
irgentwann wirst du Recht haben.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 19:15 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Wenn ich die Sphären weiter verteile, dann liegts bei ~200 fps.
Ich hab allerdings keine Ahnung was da passiert, also wo ist der Unterschied zwischen so nem Mesh und einem normalen SceneNode?

Benutzt man einen Mesh für ein statisches Objekt und einen SceneNode für ein dynamisches Objekt?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 19:29 
Offline

Registriert: 23.07.2008, 15:42
Beiträge: 41
Ein mesh ist ein polygonnetz,das heisst es besteht aus vielen kleinen
koordinaten(vertices).
Ein SceneNode kann ein mesh,eine scene etc.
enthalten. Irrlicht basiert auf scenenodes d.h
du kannst diesen scenenodes eigenschaften etc. zuweisen.

Es gibt animierte meshs (animatedMeshSceneNode),
man kann sie aber auch fü statische sachen benutzen,da gibt es keinen unterschied.

Ein SceneNode ist der "Container" eines meshs.

_________________
Lebe jeden Tag als wäre es dein letzter-
irgentwann wirst du Recht haben.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 19:39 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Doch doch die methode setHardwareMappingHint gibts schon ;)

Du hast ein IAnimatedMesh, die methode ist aber in IMesh.
du musst noch getMesh(0) auf deine 'mesh' variable aufrufen.

Also
Code:
IMesh* m = mesh->getMesh(0);

_________________
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  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 23.09.2008, 21:09 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Sylence hat geschrieben:
Doch doch die methode setHardwareMappingHint gibts schon ;)

Du hast ein IAnimatedMesh, die methode ist aber in IMesh.
du musst noch getMesh(0) auf deine 'mesh' variable aufrufen.

Also
Code:
IMesh* m = mesh->getMesh(0);

Also bei mir gibts die nicht, hab jetzt Version 1.4.2.

Code:
  irr::scene::IAnimatedMesh *mesh = smgr->addSphereMesh("sphere", 10, 10, 10);
  irr::scene::IMesh *m = mesh->getMesh(0);

// Methode gibt es nicht
//  m->getMeshBuffer(0)->setHardwareMappingHint(EHM_STATIC);
1>c:\_daten\temp\irrspheretest\irrspheretest.cpp(86) : error C2039: 'setHardwareMappingHint': Ist kein Element von 'irr::scene::IMeshBuffer'
1>        c:\_daten\dev\extern\irrlicht\include\imeshbuffer.h(61): Siehe Deklaration von 'irr::scene::IMeshBuffer'


// Methode gibt es nicht
//  m->setHardwareMappingHint(EHM_STATIC);
1>c:\_daten\temp\irrspheretest\irrspheretest.cpp(87) : error C2039: 'setHardwareMappingHint': Ist kein Element von 'irr::scene::IMesh'
1>        c:\_daten\dev\extern\irrlicht\include\imesh.h(21): Siehe Deklaration von 'irr::scene::IMesh'


Benutzt Du vielleicht die SVN-Version?

Und noch eine zusätzliche Frage. :P
Kann ich eigentlich dynamisch die Polygon-Anzahl solch einer Sphäre verändern? z.B. dicht am Objekt viele weit wenig wenige?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Sphere bauen/zeichnen und zoomen
BeitragVerfasst: 24.09.2008, 07:15 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Ja klar SVN.
VBOs kommen in 1.5, also der aktuellen svn.

Die Polygonanzahl kann man mit LOD ändern.

_________________
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  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de