ich hab mir das Video jetzt nicht angesehen weil ich hier keinen Zugriff auf youtube hab, aber ein Schadensmodell könnte man beispielsweise dadurch simulieren, dass man zu jedem Vertex eines Meshes eine Collision Box dazuhängt und das Mesh entsprechend physikalischer eigenschaften deformiert.
Als Physik Engine kannst Du beispielsweise JigLibX verwenden. Die Michigan State University hat einige ziemlich fortgeschrittene Artikel zum Thema XNA, darunter auch einen über Mesh Deformations und Morphings:
ich kann dir die NetBeans IDE wärmstens empfehlen wenn es um die Entwicklung von C++ geht. Ursprünglich wurde die eigentlich für Java entwickelt, vor einigen Jahren wurde allerdings C++ als offiziell unterstützte Sprache integriert.
Als GUI Framework kannst Du dich entweder für GTK (GTKMM wenn Du Objektorientiert entwickeln willst) oder Qt entscheiden. Beide sind sehr ausgereift und auf einigen Platformen verfügbar. Früher hätte ich dir zu GTK geraten da Qt nur für Open Source Projekte unter der GPL frei verfügbar war, mit dem Kauf durch Nokia wurde aber auch dies fallen gelassen. Qt bietet dir neben dem eigentlichen GUI Framework noch eine Menge drum herum (Thread Management, Networking, Localization, ...)
Grüße,
Egon
/edit: Ach ja, Qt hat nen schönen GUI Designer (Klicksi Bunti) dabei :-)
ein Konverter hat grundsätzlich mal nichts mit OpenGL, DirectX oder irgend einer anderen 3D API zu tun - der konvertiert ja nur von einem Datenformat in ein anderes. Ich denke was Du suchst ist eine möglichkeit mit den in den Geometrie-Files gespeicherten Daten weiterzuarbeiten, oder?
Bin zwar mit OpenGL nicht so fit, doch denke ich dass es sicherlich schon fertige Libraries geben wird welche alle möglichen Formate lesen und das ganze in ein VBO (Vertex Buffer Object) oder eine andere Datenstruktur bringen. Bei einer schnellen Suche nach "OpenGL load OBJ 3DS" in Google habe ich schon eine Menge links entdecken können die dir entsprechende Anhaltspunkte liefern :-)
Wenn Du eine gewisse Herausforderung suchst, kannst Du dir einen entsprechenden Importer für deine Datenstruktur auch mit einem gewissen Aufwand selbst schreiben. Wenn möglich würde ich dann als Ursprungsformat OBJ (also zuerst 3DS/MAX nach OBJ Konvertieren) wählen, da es relativ simpel aufgebaut ist (Vertices, Triangles, Materials, etc.).
Als guten Allround Konverter kann ich "3D Object Converter" empfehlen - der kostet zwar ein paar (wenige) Euros, kann dafür aber mit etlichen hunderten Formaten umgehen: http://web.axelero.hu/karpo/
früher habe ich die Kostenfreie Variante von Avast benutze, seit einiger Zeit jedoch beinahe ausschließlich Avira AntiVir. Avast machte bei mir den Eindruck als ob es nach einer gewissen Zeit (nicht Laufzeit, sondern Zeit in der es auf dem Rechner installiert ist) das ganze System total bremst.
Allerdings muss ich zugeben dass ich nicht auf allen privaten Rechnern Virescanner benutze. Ich habe eine strikte Trennung zwischen den Geräten auf denen ich im Internet unterwegs bin und den Geräten auf denen ich Entwickle (und auf denen keine Seite im Internet angesurft wird - ausser MS). Auf diesen reicht es mir die Firewall aktiviert und die Patches aktuell zu halten. Da ich lokal auch noch hinter einer simplen (NAT-Router basierten) Firewall bin sehe ich das Risiko schon ziemlich minimiert.
Zum entfernen von eventuell vorhandenener Spyware und ähnlichem, nicht erwünschtem Zeugs benutze ich den Windows Defender in Kombination mit gelegentlichem scannen durch Lavasoft's AdAware.
für Mathematische Abhandlungen würde ich auf jeden Fall TeX benutzen - ist ein über einige Jahrzente hinweg gereiftes Satzsystem mit dem im Uni Umfeld beinahe alle Wissenschaftlichen Texte verfasst werden.
Wenn Du das ganze auf Windows betreiben willst, kannst Du die MikTex Distribution nehmen, da ist alles dabei was du brauchst. Der von dir genannte Link zu LyX ist ein WYSIWYG Editor welcher dir TeX Files ausspuckt (müssen dann noch durch TeX durchgelassen werden um das Ausgabeformat zu bekommen). Würde dir allerdings empfehlen dich etwas in TeX einzulesen, es ist kein wirklich großer Aufwand und das ergebnis ist allemal besser als das was LyX bietet.
Ein schönes Tutorial zu TeX wird von der Uni-Graz angeboten:
das von dir genannte Tool basiert aber auch auf einer anderen Methodik - Manche Applikationen tragen die gespeicherten Passwörter im User/Passwort Dialog tatsächlich ein, nur das Feld (TextBox, Entrytype = Password) verhindert das sehen der PW's mit blossem auge.
Wenn ich nun der Applikation eine Message sende, mit welcher ich zu erst die Klasse des Controls auf TextBox ändere und dann den darin gespeicherten String auslese, so krieg ich das PW in Klartext -> Funktioniert aber nicht bei allen Applikationen da heutzutage normalerweise auf so was aufgepasst wird.
Und so kann ich (analog zu unsafe in C#) maschinennäher, schnellere Algorithmen bauen.
Hallo,
ohne dass ich das jetzt böse mein: Aber wenn Du wirklich des Quäntchen Performance dass Du durch nativ kompilierten Code rausholen könntest benötigst (welches schlimmstenfalls ohnehin durch Interop wieder draufgeht), solltest Du dir vielleicht überlegen ob es nicht sinnvoll wäre den Algorithmus effizienter zu gestalten - und dann direkt in einer CLI Sprache implementieren.
Grüsse,
Egon
/edit: Bezüglich deiner Frage zum Interop
1.) Wenn Du C++ mit /CLI kompilierst kriegst du eine Assembly raus -> Die kannst Du dann direkt Referenzieren und deren Klassen benutzen.
2.) Wenn Du nativ kompilierst musst Du deine C++ Klassen mittels COM ansprechen (Forumssuche)
3.) Du könntest als Einsprungspunkt eine C-Funktion schreiben (als C Export deklarieren: __declspec, siehe MSDN) und von dieser dann aus die C++ Klassen benutzen. Die C Funktion rufst du dann über P/Invoke auf.
Dieser Artikel soll einen grundlegenden Überblick über das Tool "Reflector" ([1]) und dessen benutzung geben.
Überblick
Der Reflector ist ein Tool, welches von Lutz Roeder (Microsoft) entwickelt wurde. Es handelt sich dabei um einen Inspektor und Analyser für .NET Assemblies. Das hauptsächliche Einsatzgebiet für den Reflector ist, in bestehenden Assemblies für welche kein Quellcode verfügbar ist einen tieferen Einblick zu bekommen - beispielsweise um sich selbst weiterzubilden ("Wie machen andere das") oder um Bugs aufzuspüren und gegebenenfalls um diese "herum" zu programmieren.
Abb. 1: .NET Reflector
Zu den Basisfunktionalitäten gehören unter anderem:
Betrachten der kompletten Struktur der Assembly (Klassen, Methoden, Hierachien)
Dekompilieren von Klassen und Methoden in eine .NET Sprache (C#, VB.NET, MSIL, Delphi, MC++, Chrome)
Der Reflector wurde von anfang an mit einer offenen API ausgestattet, welche es ermöglicht eigene Plug-Ins dafür zu entwickeln. Dies haben auch schon etliche Entwickler gemacht, weshalb es eine relativ große auswahl an Plug-Ins für die verschiedensten Anwendungsbereiche gibt.
Laden und Analysieren von Assemblies
Beim ersten start des Reflectors besteht die Auswahlmöglichkeit welches .NET Framework verwendet werden soll. Dies hat aber im weiteren Betrieb keine besondere Auswirkung, da aufgrund dieser entscheidung nur ein Set von Initial-Assemblys geladen wird, welche zur direkten Betrachtung bereit stehen. Wird beispielsweise eine .NET 3.5 Assembly geladen, welche auf die 3.5er mscorlib referenziert so wird diese automatisch nachgeladen auch wenn Framework 2.0 ausgewählt wurde.
Der Reflector stützt sich selbst auf den Reflectionsmechanismus welcher von .NET zur Verfügung gestellt wird.
Nachdem nun eine Assembly geladen wurde, kann man sich tiefer in deren Struktur einarbeiten. Bei einem Doppelklick auf einen Node wird das Dekompilierungsfenster geöffnet und der Quellcode in der ausgewählten Sprache dargestellt. Falls der entsprechende Node im Quellcode mittels XML Dokumentation dokumentiert wurde, so wird dieser in formatierter Form dargestellt:
Abb. 2: Reflector mit nach C# dekompilierter Methode und deren Dokumentation
Im Quellcodefenster sind Klassen und Methoden Hypertextartig verlinkt, so dass eine schnelle Navigation möglich ist. Ein nachträgliches Umschalten der Dekompilierungssprache ist ebenso möglich, das Ergebnis wird sofort dargestellt. Um sich im Navigationsbaum besser und vor allem schneller orientieren zu können, sind die entsprechenden Nodes mit einem eindeutigen Icon gekennzeichnet, welche den Type des Nodes wiederspiegeln.
Plug-Ins
Wie schon eingangs erwähnt wurden schon eine Unzahl von Add-Ins für den Reflector entwickelt ([2]). Die Gebräuchlichsten werden untenstehend mit einer kurzen Funktionsbeschreibung gelistet:
FileGenerator Schreibt das Dekompilat in ein File
Reflexil Ermöglicht das modifizieren (ersetzen/hinzufügen) von IL Code von Assemblies direkt im Reflector
AutoDiagramer Erzeugt ein Klassendiagramm der Assembly
Die Installation von Plug-Ins läuft grundsätzlich immer nach dem gleichen Schema ab:
Downloaden des Plug-Ins
Entpacken in ein beliebiges Verzeichnis
Hinzufügen im Reflector unter "View->Add-Ins->Add"
Sollte der Installationsweg von diesem Standard abweichen, so stellt der Autor üblicherweise eine gesonderte Anleitung zur verfügung.
Hilfe gegen den Reflector
Wenn man sich zum ersten mal mit dem Reflector beschäftigt wird man feststellen dass dies ein sehr mächtiges, zur gleichen Zeit jedoch gefährliches Werkzeug sein kann, da man damit relativ einfach an interne Strukturen herankommt - was nicht immer gewünscht sein kann. Von diesem Problem sind im allgemeinen beinahe alle verwalteten Sprachen betroffen (so z.b. auch Java) da der Zwischencode (IL) in einer vom ursprünglichen Programmcode relativ unabstrahierten Form vorliegt, sowie zusätzlich noch viele Metadaten in den Assemblies enthalten sind (Dokumentationen, etc.)
Will man die Internas seiner Assemblies nicht preisgeben, so bleibt einem nur der Versuch diese zu verschleiern - für diesen Zweck gibt es Obfuskatoren, welche Klassennamen, Methodennamen und ähnliches so umbenennen dass eine Analyse mit dem Reflector erschwert wird. Einen absolut wasserdichten Schutz gibt es allerdings nicht - man kann nur versuchen die Aufwandsgrenze so weit in die Höhe zu treiben dass es sich nicht mehr lohnt die notwendige Zeit zu investieren.
ich denke mir dass die Moderation in diesem Fall ihre Pflicht tat und dies auch tuen musste. Bei manchen Fragestellungen drängt sich einfach der Verdacht auf, dass das Resultat für etwas zumindest moralisch fragwürdiges benutzt wird - unabhängig davon ob dem wirklich so ist.
Da unser (euer, ich bin Ösi) lieber Gesetzgeber ja im Laufe des Jahres 2007 den "Hackerparagraphen" 202c eingeführt hat, welcher auch die Mithilfe zur Vorbereitung einer Computerstraftat unter Strafe stellt - und dazu gehört leider nun auch einmal das mitteilen offensichtlich entsprechender Informationen - muss in solchen Fällen der Mod einschreiten. Wir wollen doch schließlich nicht wegen einer Sache eventuell das ganze Forum verlieren da die Kripo den Server abholt und die Betreiber einsperrt (vielleicht etwas zu dramatisch ausgedrückt, aber dennoch nicht so realitätsfremd)
die Komponente hier gibts eigentlich (von mir) nur für Mono, da ich auf die Video4Linux API zurückgreife um an die Bilder der Kamera zu kommen.
Vor einiger Zeit hab ich aber mal einen Wrapper für Video4Windows veröffentlicht (liegt hier irgendwo im Forum unter den Projekten). Vom Prinzip her kannst Du den Algorithmus zur Motion Detection adaptieren (MotionDetection.cs). Da ich ohnehin beinahe nur mit den Rohdaten (RGB) der einzelnen Bilder arbeite ist es ein relativ leichtes diese nicht mehr von einem Gdk.Pixbuf sonder z.b. einem System.Drawing.Image oder System.Drawing.Bitmap zu nehmen.
@Herbivore:
Ja das mit der Helligkeit ist zur Zeit noch eines meiner größeren Probleme. Ich tüftle schon seit gestern rum wie ich Helligkeitsänderungen ignorieren kann - mit mehr oder weniger erfolg zur Zeit. Ich denke dass ich den gesamten Algorithmus zur erkennung von Bewegung anders implementieren werde.
für ein Projekt von mir habe ich eine Komponente benötigt welche Bewegungen in einem Video erkennen kann. Das Ergebnis findet Ihr hier ;-)
Das ganze basiert auf einer modifizierten Video4Mono Library welche ich schon vor einigen Monaten mal veröffentlicht habe (ist im Source hier inkludiert). Ich verwende einen relativ simplen Algorithmus zur erkennung der Bewegung:
Das derzeitige Bild wird in ein Raster unterteilt
Die einzelnen Blöcke des Rasters werden mit dem vorherigen Bild verglichen
Für jeden Pixel gibt es einen Abweichungsschwellwert. Pro Block einen Threshold wieviele Abweichungen es maximal geben darf
Für jedes Bild des Videos wird ein Array mit Rectangles zurück gegeben in welchem Bewegung festgestellt wurde. Sieht dann so aus wie am beiliegenden Screenshot.
so nun isses so weit. Das Ding hat seinen Geist aufgegeben und seine sterblichen Überreste vegetieren hinter dem Frontpanel dahin.... Kein Schütteln, kein Rütteln hat geholfen. Ich hoffe nur dass es austrocknet und dann runterplumpst.
Inzwischen hab ich auf einigen Seiten von dem Problem gelesen - und man glaubt es kaum: Es handelt sich dabei um einen Produktionsfehler, da normalerweise dieser Bereich absolut dicht sein müsste. Allerdings weigern sich beinahe alle Hersteller das ganze auf garantie zu reparieren.... Also: Ich werd das Teil mit zu nem Freund von mir nehmen der sich damit auskennt und es ihn zerlegen und reinigen lassen ;-)
Hab mal ein Foto gemacht wie so was aussieht. Is nicht gut geworden da meine Kamera einen ziemlichen Moire-Effekt in das Bild geworfen hat.
ich habe ein unglaubliches Problem. Irgendein so ein abgef****** Insekt ist hinter die Scheibe meines TFT Schirms gekrochen und will da jetzt nimma raus.
Hört sich verwegen an, isses auch. Ich hoffe nur dass das Ding nicht im Schirm verreckt und ich dann permanent nen kleinen "Pixelfehler" im Panel habe.
Hattet ihr so was auch schon mal? Fallen die Dinger runter wenn die den Löffel abgeben? Wie kann man sich helfen? Fragen über fragen....
erstelle nur ein Random Objekt und hole dir aus diesem die Zufallszahlen raus. Das Problem ist, dass der Zufallszahlengenerator mit einem Seed gefüttert werden muss damit er anschließend zufällige Zahlen ausspuckt (geschieht automatisch beim instanzieren des Objekts).
Ich weiss jetzt nicht genau mittels welchen Werts Random initialisiert wird, ich denk aber dass es irgendwelche Zeiten sind (z.b. Aktuelle Zeit im MS Takt, etc). Wenn Du also zwei Random Objekte zu schnell hintereinander erstellst, liefern die die gleichen Werte.
Grüsse,
Egon
/edit:
Zitat von MSDN
The random number generation starts from a seed value. If the same seed is used repeatedly, the same series of numbers is generated. One way to produce different sequences is to make the seed value time-dependent, thereby producing a different series with each new instance of Random. By default, the parameterless constructor of the Random class uses the system clock to generate its seed value, while its parameterized constructor can take an Int32 value based on the number of ticks in the current time.
er meint dass es zur Netique gehört dass, wenn man eine Frage im Forum stellt und diese dann aber selber löst auch die entsprechende Lösung posten sollte - damit wenn jemand ein ähnliches Problem hat dieser darauf zugreifen kann.
Du übergibst eine Instanz vom Typ "Auto" an die Methode "foo" - by Value. Dementsprechend ändert sich die Instanz selbst nicht beim Aufrufer wenn Du ihr ein neues Objekt vom Typ Auto zuweisen würdest (tust du auch nicht, nur der verständnis halber).
Du veränderst in der Methode "foo" die Public Variable "m_AnzahlReifen" innerhalb der übergebenen Instanz (ganz ordinäre Zuweisung)
Das eine (Ref/Value) hat in deinem Fall eigentlich nichts mit dem Ergebnis zu tun.
Grüsse,
Egon
/edit: Noch was:
Beim Call by Value wird eine Kopie der Referenz auf das eigentliche Objekt übergeben. Das Objekt selbst ("dereferenziertes Objekt") wird NICHT kopiert.
Parameter nur dann als ref (oder out) markieren wenn dies notwendig ist. Ansonsten immer default (by Value) lassen.
Grüsse,
Egon
/edit: Call by Reference kostet ungefähr um Faktor 7 mehr als call by Value. Sollte aber in der Regel nicht auffallen (bei einem Test den ich grad gemacht hab: 10 Mio Method calls by Reference: 3,5 sek - das gleiche by Value: 0,5 sek)
Ich finde diese Optionen irgendwie merkwürdig wenn ich das ganze mit JAVA vergleiche.
Hier gibt es nichts dergleichen und man kann einfach davon ausgehen, dass der JAVA JIT
-Compiler den für die entsprechende Plattform notwendigen Code generiert???
Hallo,
bei Java hast Du aber auch nur deshalb nicht diese entscheidungsmöglichkeit da Du von vornherein überlegen musst welche JRE du auf den Rechner knallst :-)
Java hat dabei genau das gleiche "Problem". Wenn Du auf ner x64 Maschine ein 64-Bit JRE hast und eine Applikation mittels JNI auf 32-Bit DLL's zugreift gibts auch ärger.
IrDA ist das Stichwort. Du musst mittels P/Invoke die Win32 Funktionen nutzen um darauf zuzugreifen. Fernbedienungen schicken die Kommandos mittels eines eigenen Protokolls namens RC5 (oder RC6 bei MCE Fernis).
Im endeffekt musst Du folgendes machen:
Die eingehenden Kommandos der Fernbedienung "lernen" (user drückt die Taste auf der Fernbedienung, dein Programm fängt das ganze ab)
Die gelernten Kommandos mit Aktionen versehen (z.b. Herunterfahren des Rechners wenn die Fernbedienung den Code für Power-Off sendet)
eines vorweg - du kannst keine selbst gebrannten DVD's in deiner XBox360 benutzen auf denen Programmcode ist. Grund hierfür ist dass die XBox360 überprüft um welchen Medientyp es sich handelt - wird ein nicht gepresstes Medium vorgefunden so findet keine ausführung statt.
In der Homebrew Szene gibts einige Mittel wie man das umgehen kann - weiter gehe ich hier nicht darauf ein.