Objekt auf einem anderen Objekt
-
Hi,
ich wuerde so herangehen, dass die Tasten einfach Membervariablen des Keyboards sind. Bei Erstellung des Keyboards bestimmt dieses die Lage und Groesse der Tasten (kennt ja seine eigene Groesse und die Anzahl der Tasten) und erstellt diese.class Key { private: ... public: Key(x, y, width, height); }; class Keyboard { private: typedef std::vector<Key*> Keys; Keys m_keys; .. public: Keyboard(int width, int height) { // vector mit Tasten fuellen } ~Keyboard() { // alle Elemente im Vector loeschen } void Resize(int new_width, int new_height) { // Lage und Groesse der Tasten neu berechnen und setzen // bzw. gleich einfach neu erstellen (also wie im Konstruktor) } };Ist nur ein unvollstaendiges Beispiel, aber ich denke das Prinzip sollte klar werden.
Ggf. kann man noch eine Z-Koordinate einbauen, aber ich denke eine Bildschirmtastatur wird wohl 2D bleiben.
Gruss,
DeSoVoDaMu
-
Hey erstmal danke für die Hilfe.
Genau so dachte ich mir das auch. ALso ich erstelle zwei Klassen eine für die Tasten und eine für die Tastatur. Im Konstruktor werden diese dann erstellt. Soweit habe ich das auch schon gemacht.Nur mein Problem ist jetzt wie kann ich das Grundobjekt Tastatur zeichnen und die Tasten da rein setzen? Also ich habe mal gehört das man mit Pushmatrix etc. arbeiten muss damit er das grundmodel Tastatur als Ausgang für das Zeichnen der Tasten benutzt? Aber ich weiß nicht wie ich das hinbekommen. Wüsste da noch jemand eine möglichkeit wie ich das realisieren kann?
-
Ah, dann habe ich deinen Eingangspost wohl etwas missinterpretiert.
Offensichtlich haengt es bei dir schon bei den Grundlagen durch. Ich schlage vor du liest dir erstmal ein OpenGl-Tutorial durch, etwa http://www.codeworx.org/opengl_tuts.php .
Damit sollte klar werden, wie das Keyboard und die Tasten, welche ja (zumindest vereinfacht) nichts weiter als Quadrate/Quader sind, gezeichnet werden koennen.Du kannst die Objekte in OpenGl dabei relativ problemlos uebereinander zeichnen, du musst nur auf die korrekt Reihenfolge achten (tiefere Objekte zuerst, naeher zum Bildschirm hin danach).
Gruss,
DeSoVoDaMu
-
ALso ich habe mir schon die Tutorials angeguckt und es ist auch kein Problem die Objekte zu zeichnen auch mit den Ebenen, Texturen anzeigen, Maus etc. etc.. Nur mein Problem ist das ich zwar die Objekte zeichnen kann aber kein Schimmer habe wie ich das hinbekomme das die Tasten nur in dem Objekt Tastatur bleiben und dieses Objekt nicht verlassen können also über die Ränder hinaus.
-
Breite und Länge der Tasten addieren, eventuelle Zeichenabstände mit einberechnen, schauen ob sie über die Bildschirmtastatur herausgehen und gegebenenfalls einen Umbruch einfügen oder die Tastatur vergrößern? Oo
-
Hey erstmal nochmal danke für die postings also ich habe mich nochmal rangesetzt und kapiert wie ich das machen muss. ich hatte total falsche denkansätze aber nun funzt alles.
Öhm aber ich hätte noch eine andere frage. ist es möglich einem objekt ein raste zu weisen kann? also ich erstelle ein object quader und dieser quader ist unterteilt in z.b 10 weitere. diese lassen sich dann mit irgendwelchen anderen objekten füllen. also es gibt wohl eine möglichkeit wie man das machen kann. das ist auch eine nette art eine tastatur zu zeichnen.
-
Lenni schrieb:
Hey erstmal nochmal danke für die postings also ich habe mich nochmal rangesetzt und kapiert wie ich das machen muss. ich hatte total falsche denkansätze aber nun funzt alles.
Öhm aber ich hätte noch eine andere frage. ist es möglich einem objekt ein raste zu weisen kann? also ich erstelle ein object quader und dieser quader ist unterteilt in z.b 10 weitere. diese lassen sich dann mit irgendwelchen anderen objekten füllen. also es gibt wohl eine möglichkeit wie man das machen kann. das ist auch eine nette art eine tastatur zu zeichnen.
Ich denke du meinst "Taste".
Eigentlich jede Grafik-Api sollte Tastendrücke mit x, y-Koordinaten auslesen können, oder es sollte in einer Erweiterung enthalten sein.
Mit den x und y Koordinaten kannst du dann ja schauen, ob der Klick innerhalb einer bestimmten Taste deiner Tastatur liegt.
So würde ich es machen^^
-
nee das meine ich nicht.. kla also sobald ich die tasten auf das keyboard gezeichnet habe, kann ich einfach abfragen welche es denn ist.
Ich meinte mit meiner letzten Frage ob es möglich ist ein Objekt zu zeichnen (Tastatur). Auf dieser Tastatur ein unsichtbares Raster zu erstellen und in jedem von diesen einzelnen Rasterblöcken zum Beispiel ein neues Objekt zu zeichnen. Das sollte irgendwie möglich sein. Ich hoffe meine Frage ist verständlich
-
Also irgendwie ist das ganze ein einziges Raetselraten...
Du willst ein (unsichtbares) Raster? Genau das brauchst du doch schon, um die Tasten zu zeichnen (ich dachte das geht mittlerweile?).
Erstell eine for-Schleife (oder zwei..) mit konstanter Schrittweite und zeichne die Objekte in Abhaengigkeit von der (/den) Laufvariable(n).for (int x = 0; x < keyboard.Width(); ++x) { for (int y = 0; y < keyboard.Height(); ++y) { // Render den Objekt an x, y (ggf. nur als relative Koordinaten betrachten) key.Render(x, y); } }Entweder du drueckst dich sehr unklar aus (zumindest fuer mich) oder dir fehlen entscheidene Grundlagen, die man zum Lösen eines Problems benoetigt

Edit: Am besten du postest mal etwas Code von der Stelle wo es haengt.
Gruss,
DeSoVoDaMu
-
Also nochmal zur besseren Verständnis^^
Ich will eine Bildschirmtastatur für einen Multotouchscreen erstellen!
Da war mir zuerst unklar, wir ich eine Tastatur zeiche und auf diesem Objekt die einzelnen Tasten anordne, sodass sie auch beim verschieben der Tastatur in ihrer Position bleiben. Wie mir selber kla geworden ist waren meine Denkansätze falsch. Ich kann einfach ein Objekt zeichnen und durch eine Schleiße die einzelnen Tasten mit Hilfe der x,y,w und h Werte der Tastatur zeichnen. Das ist alles kein Thema.
Jetzt zu dem zweiten was ich meine.
Es soll eine möglichkeit geben durch einen spezielen Konstruktor ein Raster auf ein Objekt zu zeichnen. In den einzelnen Rasterblöcken lassen sich dann zum Beispiel weitere Objekte zeichnen oder z.B gleich Texturen laden. Das war meine Frage ob jemand weiß ich so ein Raster erstellen kann? Ich kann das auch nicht näher beschreiben, da ich das nur von einem bekannten kenne, der das so gemacht hat. Nur leider habe ich immo kein Kontakt mit dem.
Es war halt nur eine Idee und es hätte mich mal interesiert wie das funktioniert.
mfg Lenni
-
Vielleicht handelt es sich um irgendein OpenGl-Feature, das ich nicht kenne.
Aber Fakt ist, du kannst in OpenGl an jede beliebige Stelle Sachen rendern lassen - Raster hin, Raster her. Wenn du ein Raster moechtest dann zeichnen dir eins mit oben gezeigten Code und GL_LINE (zuvor sollte es ja noch unsichtbar sein...).Ansonsten kannst du mit Matrizen arbeiten (in dem Fall der Worldmatrix - kam mir jetzt nur der Gedanke, weil du in irgendeinem Post was von PushMatrix geschrieben hast). Es aendert sich aber rein garnichts an dem eigentlichen Sachverhalt: du hast bestimmte Abstaende in denen du deine Objekte zeichnest, ob du nun die Worldmatrix (das Koordinatensystem) verschiebst, oder einfach die Koordinaten, an denen deine Objekte gerendert werden, veraenderst, das Ergebnis bleibt das gleiche.
Hier ist z.B. ein Tutorial zum Umgang mit den Matrizen in OpenGl: http://wiki.delphigl.com/index.php/Tutorial_Lektion_3Gruss,
DeSoVoDaMu
-
Wenn Du ein Raster brauchst, dann mach eines.
OpenGL bietet Dir ja viele möglichkeiten eines darzustellen.
Um zu begreifen wie Du das genau programmierst um die gewünschte Funktionalität zu erhalten, solltest Du dir vielleicht als erstes ein gutes Buch über C/C++ kaufen, lesen und durcharbeiten.