+- +-

Benutzer

Welcome, Guest.
Please login or register.
 
 
 
Forgot your password?

Autor Thema: TriBase Engine  (Gelesen 4469 mal)

Ulk

  • Trident Vollmitglied
  • Buchstabenmillionär
  • Beiträge: 1.406
    • Profil anzeigen
TriBase Engine
« am: 02. November 2011, 10:16:39 »
Aloha!

Wir beschäftigen uns dieses Semester in Softwaretechnologie II: Simulation und 3D-Programmierung mit der TriBase Engine bzw. programmieren auf Basis dieser.

Daher mal die Frage in die Runde: Kennt die jemand? Hat jemand Erfahrungen damit gesammelt?

Bevor mir wieder das grüne Ding an die Kehle springt: Es geht nicht um die Lösung meiner Hausaufgaben durch Dritte, sondern um einen Austausch und möglicherweise eine Vertiefung ins Thema.  :tinfoil6:

Ansonsten noch 'nen schönen guten Morgen!
Ulk

dgalien

  • Trident Vollmitglied
  • Textkönig
  • Beiträge: 1.883
    • Profil anzeigen
    • Twitter Feed
Re: TriBase Engine
« Antwort #1 am: 02. November 2011, 10:50:03 »
TriBase?? Gibt es da etwa ein Trident Projekt, dass ohne unseres Wissens an den Markt gegangen ist? ;)

Ulk

  • Trident Vollmitglied
  • Buchstabenmillionär
  • Beiträge: 1.406
    • Profil anzeigen
Re: TriBase Engine
« Antwort #2 am: 03. November 2011, 02:01:18 »
TriBase?? Gibt es da etwa ein Trident Projekt, dass ohne unseres Wissens an den Markt gegangen ist? ;)
Wahrscheinlich. Wir sollten die bzw. den Macher verklagen. Oder zu einer Runde Quake herausfordern.

Ulk

  • Trident Vollmitglied
  • Buchstabenmillionär
  • Beiträge: 1.406
    • Profil anzeigen
Re: TriBase Engine
« Antwort #3 am: 08. Dezember 2011, 02:40:25 »
Sooo...mal hochschieben.

Vllt hat ja das Alien Spaß am Knobeln:

Ziel ist es, dass eine Textur im Rechteck verschoben wird. Also nach rechts, dann nach unten, dann nach links und anschließend wieder nach oben.
Hierfür werden jedes Mal die vier Vertizes durchlaufen.
Die Bewegung bzw. die "Zustände" (nach rechts, nach unten, nach links, nach oben) will ich über Kosinus & Sinus bezogen auf die Stoppuhr festlegen.

m_ftime ist eine "Stoppuhr", bedient also Sinus & Kosinus optimal
0.05f ist die maximale Bewegung

Habe ich da irgendwo einen Fehler drin?
Die Textur verhält sich leider absolut nicht so, wie sie sich nach meinem Verständnis verhalten sollte.
Beispielsweise wandert die Textur zuerst nach links, obwohl Sinus & Kosinus eine positive Zahl ergeben (müssten) UND Sinus anwächst/steigend ist.

Nach meinem Kopf müsste also:
x-Koordinate + 0.05*Sinus(Timer) auch steigend sein, da sich Sinus(Timer) 1 annähert und sich somit 0.05*Sinus(Timer) 0.05 annähert. Somit sollten die Vertizen in diesem Zustand nach und nach nach rechts verschoben werden.

Zitat

   // Vertexformat und Titelbildtextur setzen, Z-Buffer aus
   D3D.SetFVF(STitleVertex::dwFVF);
   D3D.SetTexture(0, m_pTitle);
   D3D.SetRS(D3DRS_ZENABLE, D3DZB_FALSE);

   // Die vier Vertizes des Titelbilds erstellen (Rechteck)
   // Links unten
   aVertex[0].vPosition = tbVector3(0.0f, D3D.GetScreenSize().y, 0.5f);
   aVertex[0].fRHW = 1.0f;
   aVertex[0].Color = tbColor(1.0f, 0.8f, 0.8f);
   aVertex[0].vTex0 = tbVector2(0.0f, 1.0f);

   // Links oben
   aVertex[1].vPosition = tbVector3(0.0f, 0.0f, 0.0f);
   aVertex[1].fRHW = 1.0f;
   aVertex[1].Color = tbColor(0.8f, 1.0f, 0.8f);
   aVertex[1].vTex0 = tbVector2(0.0f, 0.0f);

   // Rechts unten
   aVertex[2].vPosition = tbVector3(D3D.GetScreenSize().x, D3D.GetScreenSize().y, 0.5f);
   aVertex[2].fRHW = 1.0f;
   aVertex[2].Color = tbColor(0.8f, 0.8f, 1.0f);
   aVertex[2].vTex0 = tbVector2(1.0f, 1.0f);

   // Rechts oben
   aVertex[3].vPosition = tbVector3(D3D.GetScreenSize().x, 0.0f, 0.5f);
   aVertex[3].fRHW = 1.0f;
   aVertex[3].Color = tbColor(1.0f, 1.0f, 0.8f);
   aVertex[3].vTex0 = tbVector2(1.0f, 0.0f);


//mein Teil

   // Texturkoordinaten rechteckig verschieben
   //funktioniert nicht! => Wieso?
   //sin(x) verhält sich unerwartet
   //Zuweisung zu x/y-Koordinate ergibt nicht den erwarteten Effekt
   if((sin(g_pBreakanoid->m_fTime)>0) && (cos(g_pBreakanoid->m_fTime )>0)) // sin(x) positiv&steigend und cos(x) positiv&fallend // = 0 bis pi/2
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += 0.05f * sin(g_pBreakanoid->m_fTime); //Bewegung nach rechts = x nimmt zu
            //y bleibt unverändert
         }
   }

   if((sin(g_pBreakanoid->m_fTime)>0) && (cos(g_pBreakanoid->m_fTime)<0)) //sin(x) positiv&fallend und cos(x) negativ&fallend // = pi/2 bis pi
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += (0.05f * 1); //maximale Bewegung nach rechts
            aVertex[dwVertex].vTex0.y += 0.05f - (0.05f * sin(g_pBreakanoid->m_fTime)); //Bewegung nach unten = y nimmt zu
         }
   }

   if((sin(g_pBreakanoid->m_fTime)<0) && (cos(g_pBreakanoid->m_fTime)<0)) //sin(x) negativ&fallend und cos(x) negativ&steigend // = pi bis 3pi/2
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += 0.05f * sin(g_pBreakanoid->m_fTime); //Bewegung nach links = x nimmt ab
            aVertex[dwVertex].vTex0.y += (0.05f * 1); //maximale Bewegung nach unten
         }
   }

   if((sin(g_pBreakanoid->m_fTime)<0) && (cos(g_pBreakanoid->m_fTime)>0)) //sin(x) negativ&steigend und cos(x) positiv&steigend // 3pi/2 bis 2pi
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            //x bleibt unverändert
            aVertex[dwVertex].vTex0.y += 0.05f - (0.05f * sin(g_pBreakanoid->m_fTime)); //Bewegung nach oben = y nimmt ab
         }
   }

abye

  • Trident Vollmitglied
  • Textkönig
  • Beiträge: 2.414
    • Profil anzeigen
Re: TriBase Engine
« Antwort #4 am: 08. Dezember 2011, 03:18:22 »
Dumme Frage, schaust du die Z-Achse in der richtigen Richtung runter ? Dann wäre ja die X-Achse gespiegelt.

Ulk

  • Trident Vollmitglied
  • Buchstabenmillionär
  • Beiträge: 1.406
    • Profil anzeigen
Re: TriBase Engine
« Antwort #5 am: 08. Dezember 2011, 09:17:48 »
Dumme Frage, schaust du die Z-Achse in der richtigen Richtung runter ? Dann wäre ja die X-Achse gespiegelt.

!
Das ist 'ne Idee, danke!
Werde ich mir nochmal anschauen. Hatte vorausgesetzt, dass da nichts verdreht ist.


---

Das hier habe ich von einer Stelle, an der der Text abwechselnd nach links und rechts bewegt wird:
Zitat
if(m_iCursor == iEntry) vPosition.x += 0.05f * sinf(g_pBreakanoid->m_fTime);

Der Timer wird zuvor wieder auf 0 gestellt.
Der Text bewegt sich zuerst nach rechts.

---

An den Zuständen liegt es auch nicht, der Timer startet also nicht "irgendwo". Habe die erste For-Schleife gerade ohne if laufen lassen. Verhielt sich auf gleiche Weise "falsch"/unerwartet.

---

Gnaaaah.  :wall:
« Letzte Änderung: 08. Dezember 2011, 09:39:00 von Ulk »

abye

  • Trident Vollmitglied
  • Textkönig
  • Beiträge: 2.414
    • Profil anzeigen
Re: TriBase Engine
« Antwort #6 am: 08. Dezember 2011, 09:53:02 »
Hast du geprüft was aus der sinusfunktion rauskommt ? Vielleicht kommt ja was anderes da raus als das was ein Mathematiker erwartet.

Ulk

  • Trident Vollmitglied
  • Buchstabenmillionär
  • Beiträge: 1.406
    • Profil anzeigen
Re: TriBase Engine
« Antwort #7 am: 08. Dezember 2011, 11:38:15 »
Das hier funktioniert jetzt:

Zitat
   //im Uhrzeigersinn
   if((sin(g_pBreakanoid->m_fTime)>0) && (cos(g_pBreakanoid->m_fTime )>0)) // sin(x) positiv&steigend und cos(x) positiv&fallend // = 0 bis pi/2
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += -0.05f * sinf(g_pBreakanoid->m_fTime); //Bewegung nach rechts = x nimmt zu
            //y bleibt unverändert
         }
   }

   if((sin(g_pBreakanoid->m_fTime)>0) && (cos(g_pBreakanoid->m_fTime)<0)) //sin(x) positiv&fallend und cos(x) negativ&fallend // = pi/2 bis pi
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += -0.05f; //maximale Bewegung nach rechts
            aVertex[dwVertex].vTex0.y += -0.05f + (0.05f * sinf(g_pBreakanoid->m_fTime)); //Bewegung nach unten = y nimmt zu
         }
   }

   if((sin(g_pBreakanoid->m_fTime)<0) && (cos(g_pBreakanoid->m_fTime)<0)) //sin(x) negativ&fallend und cos(x) negativ&steigend // = pi bis 3pi/2
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            aVertex[dwVertex].vTex0.x += -0.05f - (0.05f * sinf(g_pBreakanoid->m_fTime)); //Bewegung nach links = x nimmt ab
            aVertex[dwVertex].vTex0.y += -0.05f; //maximale Bewegung nach unten
         }
   }

   if((sin(g_pBreakanoid->m_fTime)<0) && (cos(g_pBreakanoid->m_fTime)>0)) //sin(x) negativ&steigend und cos(x) positiv&steigend // 3pi/2 bis 2pi
   {
         for(DWORD dwVertex = 0; dwVertex < 4; dwVertex++)
         {
            //x bleibt unverändert
            aVertex[dwVertex].vTex0.y += 0.05f * sinf(g_pBreakanoid->m_fTime); //Bewegung nach oben = y nimmt ab
         }
   }



Dass die Sinusfunktion ein anderes Ergebnis liefert, als ich das erwarte, habe ich auch vermutet.
Das hier würde die Vermutung ja stützen:
Zitat
   aVertex[dwVertex].vTex0.x += -0.05f * sinf(g_pBreakanoid->m_fTime); //Bewegung nach rechts = x nimmt zu
"-0.05f * sinf(g_pBreakanoid->m_fTime)" nähert sich offensichtlich 0 und verschiebt x nach links.
"sinf(g_pBreakanoid->m_fTime)" scheint also fallend und positiv zu sein.



Wie auch immer...ich muss in die Uni. Nachher werde ich die Lösung hoffentlich erfahren. ;)

 

Benutzer Online

490 Gäste, 0 Mitglieder
Powered by EzPortal