Aktuelle Zeit: 10.11.2024, 20:49

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kreis oder Toroid darstellen ?
BeitragVerfasst: 16.10.2007, 20:11 
Offline

Registriert: 01.10.2007, 07:17
Beiträge: 3
Hiho,

bin neu in der Irrlicht Community und find die Engine recht gut und ich nutze
sie für meine Bachelor Arbeit :) ... spiele zur Zeit ein wenig rum um mich in
der Engine einzugewöhnen und habe da mal ein paar Fragen, die ich nirgends
in der API Doc. und in allen Irrlicht Foren finden konnte...

aso vielleicht noch kurz ...
... ich progge einen Sonnensystem Simulator, nix komplexes
einfach nur um mit der Engine klarzukommen :)

nu zu den Fragen:

1. Wie zeichne ich am einfachsten einen Kreis (nicht ausgefüllt... von mir aus
auch einen Toroid) in einen 3D Raum ?

2. Ich benutze die FPS Kamera ... nun hab ich einen EventReceiver integriert und
muss jetzt wohl die Kamera Bewegung dort selbst abfangen und bearbeiten, da meine
Cam jetzt ned mehr auf die Keys reagiert...., wenn das korrekt ist, wie mach ich das
am dümmsten ? Muss ich die Bewegungsvektoren dann selbst berechnen und die
Kameraposition dann setzen ?

3. Ich hab 2 Texturen für die Erde, eine colormap und dann noch ne Heightmap...
mit denen mach ich dann ein Parallax (Solid) Mapping auf dem Kugelmesh. Allerdings
spannt er die Color Texture irgendwie nicht richtig auf, ... es hängt irgendwie mit den
Parametern dieser beiden Funktionen zusammen :

smgr->getMeshManipulator()->makePlanarTextureMapping(Mesh->getMesh(0), 0.001f);

driver->makeNormalMapTexture(bump, 1.0f);

erhöhe ich den Wert beim PlanarTextureMapping wird die Textur gekachelt angezeigt...
bei zu kleinen Werten ist sie dann zu groß "gestretcht"... wie find ich da den richtigen Wert ?!

das wars erstmal ;-)

Vielen Dank schonma !!!

Grüße
paddy


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 16.10.2007, 23:21 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
1. mit einem model (toroid) oder einfach einer simplen fläche mit textur.
2. gibst du auch false in deiner onEvent-funktion zurück?
3. ka, probieren?!

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 17.10.2007, 07:22 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
viewtopic.php?f=1&t=77&view=next

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 20.10.2007, 11:46 
Offline

Registriert: 01.10.2007, 07:17
Beiträge: 3
jo ok dann schau ich nach nem toroid model, trotzdem stellt mich das nicht 100% zufrieden ;)
weiß jemand wie ne Lösung über ein Trianglefan aussehen würde ?

zu 2. bin ich selbst schuld das die Cam Steuerung nicht mehr ging :? ... hatte den ITimer
für meinen Pixelshader angezapft, und der wird wohl auch von der Cam benutzt, auf jedenfall
ging die Cam wieder als ich den ITimer unberührt ließ....

was mich nun allerdings zu einem anderen Problem führt ;) ... wie bekomme ichs hin das der
Shadereffekt (lässt die Sonne so "wabbeln" ;)...) auf unterschiedlichen Systemen gleich schnell
abläuft wenn ich nun auf den ITimer verzichten muss ? Hier aufm Lappi (Celeron / IGP ;)) läuft der Effekt so wie ichs mir vorstell, drüben aufm Desk PC (C2D, 8800gtx) allerdings viel zu schnell...
Soll ich mir da nen eigenen Timer schreiben oder bietet die Irrlicht Engine da doch noch eine
Funktion mit der ich das so hinbekomme ?

aso und eins noch, für die die sich das Parallax Mapping Tut schon angesehen haben (Per Pixel Lightning Tut)... das Problem ist, ich habe keine schönen Kugel Meshes, allerdings brauch
ich ja n Mesh um die Transformationen fürs Parallax Mapping durchzuführen.

Hab bisher meine Planeten mit addSphereSceneNode() dargestellt.
Allerdings gibt die Funktion nur ein ISceneNode zurück und ich hab keinen Schimmer wie ich von da aus zu dem erstellten Sphere Mesh komme um darauf dann MakePlanarTextureMapping etc. durchführen zu können. Hab auch schon
probiert in IrrEdit ne schöne Kugel zu modellieren und als irrmesh zu exportieren, allerdings
erzeugt dann genau die Funktion von oben (MakePlanar...) ne schöne Ausnahmebehandlung, warum
weiß ich nicht.

Viele Grüße :)
paddy


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 20.10.2007, 12:06 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
hm hier, einfach eine kugel erstellen und per subdivide schön rechnen.. geht ganz schnell..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 22.10.2007, 02:53 
Offline

Registriert: 01.10.2007, 07:17
Beiträge: 3
da hab ich schon mit rumgespielt :), ging auch ganz gut, bis auf das das so erzeugte
Mesh viel dunkler war, als Kugeln die ich mit createSphereSceneNode erstellt hab, woran
liegt das ? Muss ich in Anim8or noch mehr machen ausser nur die Kugel zu erstellen, subdivide
und dann export als Mesh ? NORMALIZE_NORMALS Flag hab ich auf true gesetzt, daran
kanns also ned liegen, ist bestimmt nur was ganz dummes nur ich komm ned drauf ;)

Übrigens bin ich bei meinem 3D Kreis weitergekommen, bestimmt nicht die komfortabelste
Funktion aber sie funzt ;-) Und da ich mich die letzten beiden Tage nur damit rumgeplagt
hab und nun endlich ne Lösung hab poste einfach mal den Quellcode:

(hab noch nirgends zu dem Kreisthema was brauchbares gefunden, weder hier noch im
engl. Irrlicht Forum, hoffe das den Code vielleicht auch mal wer anders brauchen kann :)

Code:
enum PLANE
{
    XY = 0,
    XZ = 1, 
    YZ = 2
};

void draw_circle3D(vector3df c, PLANE plane, f64 rot_x, f64 rot_y, f64 rot_z,
           SColor color, f32 radius, u8 smoothness)
{
   vector3df start, end,  // Start und Endpunkt einer Linie
              u, v;        // Spannvektoren der Kreisebene

   switch (plane)          // Spannvektoren für den Einheitskreis
   {                       // in der gewählten Ebene erzeugen
      case XY: u = vector3df(1,0,0);
              v = vector3df(0,1,0);
              break;

      case XZ: u = vector3df(1,0,0);
              v = vector3df(0,0,1);
              break;

      case YZ: u = vector3df(0,1,0);
              v = vector3df(0,0,1);
              break;
   }

   // Rotation der Ebenenvektoren auf den gewählten Winkel
   u.rotateYZBy(rot_x, vector3df(0,0,0));
   u.rotateXZBy(rot_y, vector3df(0,0,0));
   u.rotateXYBy(rot_z, vector3df(0,0,0));

   v.rotateYZBy(rot_x, vector3df(0,0,0));
   v.rotateXZBy(rot_y, vector3df(0,0,0));
   v.rotateXYBy(rot_z, vector3df(0,0,0));

   // Radius setzen
   u *= radius;
   v *= radius;

   // smoothness = Anzahl der Linien aus denen der Kreis gezeichnet ist, k = Teilwinkel für jede Linie
   f32 k = (360.f / smoothness);
   
   for (f32 i=0; i <= smoothness-1; i++)
   {
      // Start und Endpunkt der i-ten Linie berechnen
      start = c + u*cos(DEGTORAD*(i*k)) + v*sin(DEGTORAD*(i*k));
      end = c + u*cos(DEGTORAD*((i+1)*k)) + v*sin(DEGTORAD*((i+1)*k));

      driver->draw3DLine(start, end, color);  // und malen ;)
   }
}


so habs auch ein wenig dokumentiert, ich denke es ist nicht schwer zu verstehen.
N Dank geht an mYthos ausm matheboard.de, von dem hab ich nämlich heut die schicke
Parameterdarstellung für einen Kreis in 3D geklaut :D

X = M + U*cos(t) + V*sin(t)

M = Mittelpunkt
U, V = Sind die Vektoren die die Ebene aufspannen in der der Kreis liegt (lol lustiger Satz) :)
t ... von 0-360°


X ist dann der Punkt für den jeweiligen t - Wert.

n Beispiel zu der Funktion oben sähe z.B. so aus:

Code:
   

void senseless_rotation()
{
    static f64 i = 0.f;

    draw_circle3D(vector3df(0,0,0), XY, i, 0, 0, SColor(255, 255, 255, 255), 200, 80);
    draw_circle3D(vector3df(0,0,0), XZ, 0, 0, i, SColor(255, 255, 255, 255), 200, 80);
    draw_circle3D(vector3df(0,0,0), YZ, 0, i, 0, SColor(255, 255, 255, 255), 200, 80);

    if((i += 1.f) > 360.f) i = 0.f; // Je nach Rechenpower einstellen, grad kein Timer da ;)
}


jo das zw. begin- und endScene() gepackt lässt 3 schöne Kreise rotieren ;)

so nu kann ich beruhigt schlafen ;) gn8 all

paddy


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kreis oder Toroid darstellen ?
BeitragVerfasst: 13.01.2009, 16:11 
Offline

Registriert: 12.01.2009, 11:01
Beiträge: 7
das sieht fein aus....wow...

Das kann ich gebrauchen allerdings erweitert.


Wenn ich moechte das nur ein Teil des Kreises gezeichnet
wird(bsw. 90grad) wie kann man das anstelln?
Also ich moechte den Radius der beiden Kreise
einstellen koennen und dann daraus ein endproduk zeichnen lassen.

Hab das mal kurz notduerftig visualisiert.
Bild

hat einer eine idee wie man das gut hinkriegen kann?
Der Code oben sieht eigentlich ganz brauchbar dafuer aus ausser das die Flaechen der Kreise nicht ausgefuellt werden(was cool waere)...


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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