Beiträge von Christoph R.

    Danke für die Antworten!

    Dann werde ich mir wohl eine andere Funktion suchen müssen.

    Zur Frage ob mein Grafikcode pattformunabhängig ist: ich habe eine Schicht eingeführt die ein paar plattformabhängige Initialisierungen vornimmt (z.B. Fenster erzeugen, OpenGL starten; GLUT und SDL wollte ich bewusst vermeiden). Darauf setzen dann weitere Schichten auf die vollkommen plattformunabhängig sind.

    Hallo!

    Ich verwende die Funktion clock() in ctime um damit die Geschwindigkeit der Animationen meiner Grafikapplikation zu steuern. Die Applikation soll unter Windows, Linux und MacOS X laufen. Unter Windows läuft sie problemlos. Unter Linux und MacOS X gibt es Probleme mit der Ablaufgeschwindigkeit, die ich in folgendem Beispielprogramm simuliert habe:


    Es sollten nun ständig Zahlen ausgegeben werden, die im Sekundentakt um genau 1 hochzählen. Unter Windows ist das auch so, unter Linux und MacOS zählen sie aber deutlich langsamer hoch (etwa alle 3 Sekunden um 1).

    Wenn ich das Programm so ändere dass die Ausgabe mit std::cout nur z.B. alle 100.000 Schleifeniterationen stattfindet, dann ist der Fehler deutlich geringer. Es sieht für mich jetzt so aus als ob clock() nur die Clocks im aktuellen Prozess misst und nicht systemweit (diese Vermutung habe ich nicht zuletzt deswegen, weil die Zeit, die während eines sleep()-Aurufs vergeht, offensichtlich nicht mitgezählt wird). Da std::cout sicher eine Kernelfunktion aufruft wird diese Zeit wohl auch nicht mitgezählt. Dabei sollte ja clock() soweit ich weiß pro Sekunde um genau CLOCKS_PER_SEC hochzählen, und zwar unabhängig von der Systemauslastung, dem aktuellen Prozess und sonstigen Gegebenheiten - zumindest gibt das ein Beispiel im Buch "Die C++-Programmiersprache" so zu verstehen. Dort wird angepriesen dass man mit dieser Funktion Zeitintervalle messen kann. Wenn aber Aufrufe von Kernelfunktionen nicht mitgezählt werden ist die Funktion ja für diesen Zweck nicht brauchbar.

    Wie kann ich Zeitintervalle zuverlässig und plattformunabhängig messen? Und vor allem soll wirklich die Zeit gemessen werden, und nicht wie lange der Prozess bearbeitet wurde. Schön wäre es auch noch, wenn es ein wenig exakter ginge als mit clock(), denn selbst wenn ich oben genanntes Problem nicht hätte wäre mir die Genauigkeit von 1/100 Sekunde unter MacOS zu ungenau (CLOCKS_PER_SEC ist dort 100, unter Windows ist es 1000; unter Linux sogar 1.000.000 - funktioniert aber wie gesagt nicht).

    mfg

    Assoziative Arrays würden sich in PHP anbieten, wobei ich aber nicht weiß wie gut oder schlecht da die Performance ist. Ich würde es einfach mal ausprobieren.

    Mit Hash-Werten wäre ich eher vorsichtig, weil die u. U. nicht eindeutig sind, wodurch ein Eintrag im String-Array in seltenen Fällen den falschen Zähler im 2. Array hochzählen kann. Es kommt jetzt darauf an ob es exakt stimmen muss oder ob es reicht wenn es "fast stimmt" (wenn es z.B. eine Statistik ist).

    Ich verwende den gcc 4.0.3 und ich möchte ein Warning deaktivieren. Konkret geht es um die Warnung dass /* innerhalb eines Kommentars verwendet wird.

    Weiß jemand wie ich (nur) diese Warnung unterdrücke? Müsste mit -Wno gehen, aber da brauche ich ja die Nummer des Warnings.

    Ich musste jetzt feststellen, dass mein ATI-Treiber doch noch nicht ganz funktioniert. Zwar ist der Treiber gelaufen, aber die Hardwarebeschleunigung durch OpenGL hat noch nicht funktioniert.

    Daher habe ich nochmal ein ein wenig herumkonfiguriert und habe jetzt folgendes Problem: Wenn ich das System normal starte bricht der Start des X-Servers ab und es wird ständig die Meldung "scheduling while atomic: Xorg/00000001/4543" ausgegeben. Davor steht noch eine Nummer die nach oben zählt.

    Wenn ich jedoch das System im recovery mode starte (Eintrag im Boot-Manager) komme ich vorerst in die textbasierte Konsole. Gebe ich dort startx ein, dann startet der X-Server ohne Probleme. Sogar OpenGL funktioniert dort.

    Woran kann das liegen? Was mir vermutlich weiterhelfen würde ist eine Antwort auf die Frage: Was ist der genaue Unterschied zwischen einem "normalen" Start und dem recovery mode?

    Du hast aber alles mit apt installiert und somit nicht selber kompiliert ;)

    Nicht mir apt: ich habe von der ATI-Homepage so eine run-Datei runtergeladen. Wenn man die entpackt bekommt man ein Skript mit dem man es installieren kann. Die Kernel-Headers und den gcc braucht man aber trotzdem, weil das Skript das Kernel Modul erst komplieren muss falls - so wie in meinem Fall - keine der Binaries passt.

    Das Problem ist gelöst. Es hat die stdc++5-Library gefehlt. Hätte nicht gedacht dass es daran liegen kann, weil ich eigentlich den gcc und alles das dazu gehört installiert habe. Da müsste doch eigentlich auch die C++-Lib. dabei sein. Aber egal, es geht jetzt jedenfalls.

    Nachdem ich nicht einmal die Kernel-Headers installieren konnte (MD5-Summe stimmt nicht), habe ich jetzt das ganze System neu installiert.

    Ich habe jetzt die Kernel-Headers, den gcc 4.irgendwas und alles andere das man braucht erfolgreich installiert. Der ATI-Treiber (ati-irgendwas.run) hat sich dann installieren lassen und auch das Kernel-Modul konnte ich erstellen und installieren.

    Dann habe ich aticonfig --initial ausgeführt, wodurch sich der Treiber (fglrx) in /etc/X11/xorg.conf eingetragen hat. In der Hoffnung dass es jetzt endlich funktioniert habe ich startx ausgeführt. Der Versuch endete aber mit der Meldung "Failed to load module fglrx".

    lsmod | grep "fglrx" hat das genannte Modul nicht ausgegeben, daher habe ich es mit modprobe fglrx geladen (danach wurde es auch von lsmod aufgelistet). Trotzdem bricht startx mit der gleichen Fehlermeldung ab. Erst nachdem ich wieder den vesa-Treiber in die xorg.conf eingetragen hatte konnte ich den X-Server wieder starten.

    Danke, man musste noch die Headers nachinstallieren. Funktioniert leider nicht weil er meint dass die MD5-Summe falsch ist. Die richtige Version habe ich aber angehängt und das Paket findet er auch, er kann es dann aber nicht installieren.

    Warum installierst du die ATI-Treiber nicht über die Paketverwaltunghttp://wiki.ubuntuusers.de/ATI?

    Weil ich mich, wenn es um Treiberinstallation geht, in Linux nicht so gut auskenne und ich in einem Forum gelesen habe dass man das so machen soll. Es gibt da nämlich 2 Treiber: ein Open Source-Treiber und den offiziellen von ATI. Über die Paketverwaltung bekomme ich soweit ich weiß nur den inoffiziellen, weil es vom proprietären Treiber keine fertigen Pakete gibt. Ich erwarte mir vom offiziellen Treiber eine bessere Performance, werde aber, wenn ich das Problem nicht lösen kann, wohl einfach mal den anderen ausprobieren.

    Ich versuche unter Ubuntu 6.06 (64 Bit) den offiziellen ATI-Treiber zu installieren. Wenn ich die run-Datei von der ATI-Homepage in der Konsole starte kommt am Ende der Installation eine Fehlermeldung.

    Den genauen Wortlaut habe ich jetzt nicht mehr im Kopf, aber sinngemäß sagt sie aus dass die Installation nur teilweise abgeschlossen werden konnte und dass im Logfile Details zu finden sind. Darin steht dann dass die Kernel Module nicht erstellt werden konnten weil kein "Kernel Module Build Environment" gefunden wurde. Was ist das und woher bekomme ich das (bzw. wie heißt das entsprechende deb-Package genau)?

    Muss ich bei der Installation sonst noch was beachten? Man liest ja immer wieder dass die Installation von ATI-Treibern alles andere als einfach ist.

    Danke!

    mfg

    Irgendwie will das einfach nicht funktionieren. Anscheinend muss man es selbst kompilieren, weil es noch keine fertigen Pakete für 64 Bit gibt (steht auf der Wine-HP). Ich werde einfach noch warten bis es eine Binary-Version für 64 Bit gibt. So dringend brauche ich es nicht.

    Ich habe es jetzt doch mit dem APT-Paketmanager probiert, so wie das unter http://www.winehq.org/site/download-deb (Installing from the WineHQ APT Repository with the console) beschrieben ist. "apt-get install wine" liefert aber diese Meldung:
    Paket wine ist nicht verfügbar, wird aber von einem anderen
    Paket referenziert. Das kann heißen, dass das Paket fehlt, dass es veraltet
    ist oder nur aus einer anderen Quelle verfügbar ist.

    Die Paketquelle habe ich in sources.list sicher eingetragen.

    Meinst du dass ich Wine direkt mit dem Paketmanager installieren soll? Wäre eine Möglichkeit, aber ich habe es jetzt schon als Sourcecode runtergeladen und möchte wenn möglich nicht noch einmal das ganze Paket laden müssen (mein Transfervolumen ist schon fast verbraucht). Daher würde ich gerne nur noch die fehlenden Libs installieren. Aber ich weiß da nicht wirklich wonach ich im Paketmanager suchen soll. Suchbegriffe wie "x86" bringen mich nicht weiter (die Ergebnisliste ist ziemlich lang und ich weiß nicht was genau fehlt).

    Ich habe die 64 Bit-Version von Ubuntu 6.06 installiert und versuche nun Wine 0.9.18 zu installieren (direkt vom Sourcecode).

    configure lässt sich noch ausführen. Zuerst hatte ich das Problem dass er den gcc nicht akzeptiert hat (die Meldung war "can not create executeables" oder so ähnlich). Nachdem ich die x86-Version einiger libs nachinstalliert habe läuft configure jetzt.

    Dafür bekomme ich anschließend bei "make depend" einige Fehler der Art "undefined reference to `dlclose@GLIBC_2.0'". Ich gehe davon aus dass weitere libs in der x86-Version fehlen, weiß aber nicht genau um welche es sich dabei handeln könnte.

    Kann mir jemand weiterhelfen?

    Danke. Ich löse es jetzt mit Quaternionen weil man dort die Achse und den Winkel am leichtesten wieder extrahieren kann. Sonst wären mir Matrizen lieber gewesen (mehr als normale Rotationen brauche ich momentan ohnehin nicht und der Gimbal Lock kann ja bei Matrizen wie mir scheint auch nicht auftreten; nur bei Verwendung der Eulerschen Winkel), aber da ist es wesentlich komplizierter die Achse und den Winkel wieder herauszulesen.

    Hallo!

    (Ich hoffe ich bin hier im richtigen Forum, ich habe kein passenderes gefunden)

    Es gibt doch ein Theorem dass jede Folge von Rotationen im 3D-Raum auch durch eine einzige Rotation um eine beliebige Achse beschrieben werden kann.

    Bei der Verwendung von Rotationsmatrizen kann man diese einfach durch Multiplikation aller Matrizen der einzelnen Rotationen finden.

    Ich verwende aber die Axis-Angle-Repräsentation für die Speicherung der Rotationen (ein 3-elementiger Vektor gibt die Rotationsachse an, ein Skalar den Rotationswinkel um diese Achse). Frage: Wie kombiniere ich dort mehrere Rotationen zu einer einzelnen?

    Eine einfache Möglichkeit (zu der mir auch schon jemand geraten hat) wäre natürlich die einzelnen Rotationen in die Matrix-Darstellung zu konvertieren, dort die Rotationen durch Matrixmultiplikation zusammenzusetzten und schließlich die Rückkonvertierung in die Axis-Angle-Darstellung durchzuführen. Aber das gefällt mir nicht und ist außerdem nicht performant.

    Weiß jemand wie ich die Rotationen direkt in der Axis-Angle-Darstellung zusammensetze?

    mfg

    Hallo!

    Ich möchte mir einen neuen PC kaufen und bin mir da beim Monitor noch nicht ganz sicher. Momentan tendiere ich zu diesem:

    Monitor TFT 20" SAMSUNG SyncMaster 204B, silber
    Auflösung: 1600x1200
    Kontrastverhältnis: 800:1
    Reaktionszeit: 5ms
    Anschlüsse: Analog/Digital
    Garantie: 3 Jahre Bring IN in Österreich

    Der kostet dort wo ich ihn kaufen würde 500 Euro. Was haltet ihr von dem?

    Ich habe mal im c't (oder war's iX?) gelesen, dass Samsung bei Reklamationen (auch bei berechtigten) eher nicht sehr entgegenkommend ist und sich viel Zeit lässt. Andererseits habe ich im Internet viele gute Kritiken über den genannten Monitor gelesen. Falls jemand einen anderen empfehlen kann: 1600x1200 sollte er schon unterstützen.

    mfg