ich wollt mal von euch hören ob ihr vorschläge habt wie ich am besten eine analoge uhr realisieren könnte?
damit ich nicht ellenlang in der falschen gegend suche könnt ihr mir vielleicht ja tipps geben?
denke wir fangen mal mit nur einem zeiger an
hab da schon ein bisschen was geschafft mit den tutorials und ein bisschen rum-probieren...
1.te frage:
mein programm ist total simpel...
-formcreate
-->init
-onidle
-->zeiger mit glVertex3f erstellen und drehen
-->rendern
muss mann objekte wirklich bei jedem onidle->rendern neu erstellen?
könnte man evtl. beim createform den zeiger erstellen und dann beim onidle
nurnoch drehen???
2.te frage:
mein zeiger (angehängt als anlage) sieht total pixelig aus... kann man den irgendwie glätten? so anti-alias oder sowas?
oder muss man dazu einfach eine andere form machen (mehr ecken)? mein zeiger ist eben eigentlich ein nur objekt mit vier ecken.
3.te frage:
könnte man eine uhr so machen, dass man eine scheibe zeichnet und da drauf in der mitte den zeiger und diesen zeiger dann
verbindet mit der scheibe? also wie wenn mann eine holzscheibe nemen würde, da nen zeiger drüberlegt und dann nen nagel
reinhaut, dass der zeiger nun fix immer an dieser stelle ist und man ihn einfach nurnoch drehen kann (uhrzeiger/gegenuhrzeigersinn).
4.te frage:
kann man eine scheibe + zeiger in nem 3d-programm moddelieren und dann im eigenen programm sagen es soll nur der zeiger bewegt werden?
oder anders gesagt: wenn ich modelle aus nem format importiere, kann mann da zwischen den objekten unterscheiden und auf
nur ausgewählte zugreiffen/manipulieren/drehen?
ihr müsst mir keine kompletten anleitungen geben oder machen/codeschippsel oder was auch immer,
schliesslich will ich's ja selber auch lernen und nicht nur kopieren ;o)
also will ich nicht wissen wie bones funktionieren, wenn mann das dann nicht so einsetzen kann wie ich will
oder parktikel brauch ich wohl auch noch keine... solche sachen kann ich dann später dazulernen
ich wäre einfach froh um hinweise wie was am besten gemacht werden könnte? damit ich dann zielgerichtet
an die sache rangehen kann... denn bis jetzt wars leider nur frustration
grüsse
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi Noobster und willkommen hier,
Noobster hat geschrieben:
1.te frage: mein programm ist total simpel... -formcreate -->init -onidle -->zeiger mit glVertex3f erstellen und drehen -->rendern
muss mann objekte wirklich bei jedem onidle->rendern neu erstellen? könnte man evtl. beim createform den zeiger erstellen und dann beim onidle nurnoch drehen???
Genaugenommen erstellst du die Objekte ja nicht. Also, erstmal etwas grundlegendes. Wenn du zwischen glBegin und glEnd irgendeine variante von glVertex aufrufst, werden die Koordinaten an die Grafikkarte übertragen. Je nach dem, welche form von glBegin du verwendest, werden die einzelnen Punkte, auch genannt Vertices oder in der Einzahl Vertex, interpretiert. Wenn du z.B. GL_QUADS angibst, wartet er auf vier Punkte und zeichnet dir daraus ein Viereck (wobei er es genaugenommen erst in zwei dreiecke unterteilt und die dann zeichnet, weil Grafikkarten auf Dreiecke spezialisiert sind).
Noobster hat geschrieben:
2.te frage: mein zeiger (angehängt als anlage) sieht total pixelig aus... kann man den irgendwie glätten? so anti-alias oder sowas? oder muss man dazu einfach eine andere form machen (mehr ecken)? mein zeiger ist eben eigentlich ein nur objekt mit vier ecken.
Ja kann man. Dafür musst du bei der Initialisierung ein bestimmtes Pixelformat anfragen, such mal nach Multisampling hier im Forum, ich habe da irgendwo eine Funktion gepostet, die das ganze erleichtert.
Noobster hat geschrieben:
3.te frage: könnte man eine uhr so machen, dass man eine scheibe zeichnet und da drauf in der mitte den zeiger und diesen zeiger dann verbindet mit der scheibe? also wie wenn mann eine holzscheibe nemen würde, da nen zeiger drüberlegt und dann nen nagel reinhaut, dass der zeiger nun fix immer an dieser stelle ist und man ihn einfach nurnoch drehen kann (uhrzeiger/gegenuhrzeigersinn).
Auch das geht. Hierfür empfehle ich dir, dir mal den Wikiartikel zu glBegin anzuschauen und dich mit GL_TRIANGLE_FAN vertraut zu machen, um damit die Scheibe zu zeichnen. Diese zeichnest du in einem Rutsch zwischen einem glBegin und glEnd. Danach veränderst du die Rotation und zeichnest in einem neuen glBegin und glEnd den Zeiger. Wichtig ist, dass du nicht beides in einem Block zeichnest, weil du die Matrix in einem glBegin/glEnd-Block nicht verändern kannst, also keine rotation durchführen kannst.
Noobster hat geschrieben:
4.te frage: kann man eine scheibe + zeiger in nem 3d-programm moddelieren und dann im eigenen programm sagen es soll nur der zeiger bewegt werden? oder anders gesagt: wenn ich modelle aus nem format importiere, kann mann da zwischen den objekten unterscheiden und auf nur ausgewählte zugreiffen/manipulieren/drehen?
Machbar. Aber diese Frage überlasse ich anderen leuten, da ich mich damit noch nicht befasst habe.
Noobster hat geschrieben:
ich wäre einfach froh um hinweise wie was am besten gemacht werden könnte? damit ich dann zielgerichtet an die sache rangehen kann... denn bis jetzt wars leider nur frustration
Das gibt sich. Wenn du dann erstmal einen sich drehenden Zeiger auf deiner Uhr hast, wirst du ganz anders darüber denken
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
1. Erstellen musst du es nicht jedes mal neu, nur die Vertices übergeben und sagen, das es ein dreieck (viereck) werden soll.
also quasi:
Code:
glbegin(gl_triangles)
glvertex3f(...);
...
glend;
Es gibt zwar auch Displaylisten, da Erstellst du das quasi nur einmal und dann kannst du das immer wieder anzeigen. Ist dann allerdings nicht mehr veränderlich.
Mir fällt gerade ein, das ich neulich auch noch irgendwas gelesen hatte, wie man veränderliche Vertexarrays i Grafikram lassen kann, aber ich fids grad nicht mehr.
2. mir war als hätte OpenGL ne Antialias-Funktion... musst du mal ins Wiki schauen.
3. Du renders erst die "Unterlage" bzw die Uhr und dann machst du deine Drehung und Renderst den Zeiger. Dann hast du die Uhr ungedreht und den Zeiger in gedrehter Form. Schau die mal die Einsteiger Tutorials an ...
4. Kannst du. Am einfachsten wäre es, einfach in 2 seperate Models zu exportlieren. Eins für den Zeiger und eins für die Uhr. So hab ichs schon gemacht.
edit: da war wer schneller ...
_________________ Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau rausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch etwas noch Bizarreres ersetzt.
Es gibt eine andere Theorie, die besagt, dass das schon passiert ist.
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Hallo Noobster,
Ich kann meinen Vorrednern nur beipflichten. Allerdings mit einer Anmerkung:
Zitat:
Es gibt zwar auch Displaylisten, da Erstellst du das quasi nur einmal und dann kannst du das immer wieder anzeigen. Ist dann allerdings nicht mehr veränderlich.
Das stimmt nicht ganz. Du kannst es verändern, und zwar mit glTranslate/glRotate/glScale. Man kann mit Displaylisten auf diese Weise auch Animationen realisieren. Ich würde Dir aber empfehlen, das Ganze jetzt noch ohne Displaylisten zu machen. Bei bloss einer Scheibe und einem Zeiger sind keine Probleme bei der Framerate (= Geschwindigkeit beim Zeichnen) zu erwarten.
NACHTRAG:Ich habe eine Art Lehrstück aus meinem Code ausgegraben, das Dir ermöglicht ganz leicht eine Scheibe herzustellen, ohne einen Modeller bemühen zu müssen, denn die Sache mit dem Modeller ist ein mühsames Kapitel von Import/Exportformaten, und ich dachte mir, dass Du mit dem folgenden Code schneller zu Deiner Uhrenscheibe kommst. Texturkoordinaten werden mitgeliefert, das heisst, Du könntest die Uhrenscheibe auch gleich mit einer Textur verzieren.
DrawPolygon zeichnet JEDES regelmäßige Polygon, das man in einen Kreis einschreiben kann. Wenn der Parameter AngleStep immer kleiner wird, nähert es sich einem Kreis an. Mit der Bounding Box kann man das Ding verschieben und jeder Größe anpassen, so ähnlich wie StretchDraw.
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.