Habs mal probiert, indem ich von 3 verschiedenen Stellen auf meine Kriegsdrohne "geschossen" habe. Sieht doch Strahlentechnisch ganz gut aus oder?
@Siassei: Das ist die Funktion, die ich vorher verwendete, die aber bei einem gewissen Grad an Polys einen gewaltigen slowdown verursacht.
@Blacal:
Allerdings wäre es eher schlecht, grundsätzlich alle Polygone auf Kollission abzufragen. Du solltest in einem ersten Schritt nur ein ein BoundingVolume (z. B. einer BoundingBox) für jedes Objekt verwenden. Wenn das getroffen ist, kannst du die Polygone testen (oder eventuell nur untergeordnete BoundingVolumes, je nachdem, wie genau man es haben will).
Das ist mir schon klar. Ich prüfe, wenn ich das dann hinbekomme, nur eine Strucktur aus 3 Kreisobjekten, die ich um den Mittelpunkt des Modells lege.
Und prüfe dann mit dieser Funktion
public bool Intersects(Vector3 target)
{
switch (Format)
{
case AxisFormat.XY:
return ((float)Math.Pow((target.X - Origin.X), 2) + (float)Math.Pow((target.Y - Origin.Y), 2) == Math.Pow(Radiant, 2));
case AxisFormat.XZ:
return ((float)Math.Pow((target.X - Origin.X), 2) + (float)Math.Pow((target.Z - Origin.Z), 2) == Math.Pow(Radiant, 2));
case AxisFormat.YX:
return ((float)Math.Pow((target.Y - Origin.Y), 2) + (float)Math.Pow((target.X - Origin.X), 2) == Math.Pow(Radiant, 2));
case AxisFormat.YZ:
return ((float)Math.Pow((target.Y - Origin.Y), 2) + (float)Math.Pow((target.Z - Origin.Z), 2) == Math.Pow(Radiant, 2));
case AxisFormat.ZX:
return ((float)Math.Pow((target.Z - Origin.Z), 2) + (float)Math.Pow((target.X - Origin.X), 2) == Math.Pow(Radiant, 2));
case AxisFormat.ZY:
return ((float)Math.Pow((target.Z - Origin.Z), 2) + (float)Math.Pow((target.Y - Origin.Y), 2) == Math.Pow(Radiant, 2));
default: throw new FormatException();
}
}
ob sich der mommentane Strahlenwert innerhalb der 3 Kreise befindet. wenn dies der Fall ist, so habe ich einen Treffer erzielt.
Um die Positionen des Strahls zu prüfen, dachte ich mir, dass ich die Funktion verwende, die ich bereits für die Kamerabewegung verwende. Allerdings weiß ich gerade nicht, ob ich nun Sinus oder Cosinus für die Bewegung auf der Y-Achse verwenden soll?
v.X -= (float)Math.Sin(-camera.Rotation.Y * Math.PI / 180.0) * playerSpeed;
v.Z -= (float)Math.Cos(-camera.Rotation.Y * Math.PI / 180.0) * playerSpeed;
Zudem ist es keine schlechte Idee die komplette Szene in Bereiche einzuteilen. So brauchst du nur die Objekte überprüfen, die in Bereichen Stecken, die dein "Ray" durchquert.
Ich prüfe nur die Objekte, die sich durch meinen Clipping-Algorithmus eh in der Kamerasicht befinden und die vom Spiel her als "Interagierbar" gelten. Von daher habe ich jetzt auch nicht gerade großen Objektaufwand.
- Nach Mausklick eine "Ray" erzeugen
Ich würde den Kollisionsstrahl nach jedem Rendern erzeugen, da dann entschieden wird, ob sich ein geeignetes Objekt innerhalb des Bildschirmmittlepunkts befindet.
Wäre es eine Funktion , die nur beim Klicken ausgelöst würde, so wäre auch die OpenGL eigene Funktion ausreichend schnell.
Moin,
ich habe eine Scene in OpenGL gerendert, in dieser Scene steht Objekt mit etwa 8000 Polys. Nun habe ich die OpenGL-Picking Technik verwendet, um zu prüfen, ob sich das Objekt innerhalb der Mausposition befindet. Das hat allerdings einen gewaltigen slowdown zur Folge, der mich trotz Displaylist von 42 auf 28 FPS runterbricht.
Es wird aber nur dieses Objekt im SelectionMode gerendert.
Nun möchte ich wissen, ob ein manueller RayTrace bis zur Sichtgrenze das ganze schneller machen würde, wenn ich den Strahl von der Mausposition in Richtung der mommentanen Kamerasicht schicke und Spherisch di Kollision prüfe.
Die Frage erstmal ist, ob (und das vermute ich mal gnaz stark) das Schneller als Selectionrendering ist und vor allem, wie ich das Realisieren muss (Matheschwach).
[Sinn und Zweck]
Ist es, in einem MMO zu prüfen, ob unterm Fadenkreuz ein Objekt ist, mit dem interagiert werden kann.
Das ist doch schon eher was für mich. Ich möchte gerne in unsere Grafikengine eine Aufnahmefunktion für Scenen machen, sodass man das dann als AVI wiedergeben kann.
Das soll natürlich ohne Fremdbibliotheken passieren und wenn das mit dem RIFF zu fuß geht, ist es doch genau das, was ich suche.
Ist ja alles schön und gut, aber es gibt doch sicher eine Möglichkeit die einzelnen Bitmaps zu einem Videoformat "zu fuß" zusammenzuspeichern oder?
Das kann ich dir absolut nicht sagen. Aufgrund der Architektur unserer Engine funktioniert das mit der Kamera halt so. Habs getestet.
Die Transformationsfunktion sieht bei uns so aus
public void ApplyView()
{
if (view != origin)
{
LookAt(view, null);
return;
}
Core.Rotatef(rotation.X, 1.0f, 0.0f, 0.0f);
Core.Rotatef(rotation.Y, 0.0f, 1.0f, 0.0f);
Core.Rotatef(rotation.Z, 0.0f, 0.0f, 1.0f);
Core.Translatef(-origin.X, -origin.Y, -origin.Z);
}
Und wird einmal zu beginn jeder Scene aufgerufen.
So gut bin ich Mathematik aber jetzt auch nicht , dass ich dir sagen könnte , an welchen Änderungen es nun gelegn hat.
Eher so
if (e.KeyChar == 's')
{
Vector3 v = camera.Origin;
v.X += (float)Math.Sin(-camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
v.Z += (float)Math.Cos(-camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
camera.Origin = v;
}else if (e.KeyChar == 'd')
{
Vector3 v = camera.Origin;
v.X += (float)Math.Cos(camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
v.Z += (float)Math.Sin(camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
camera.Origin = v;
}
Bei umgekehrter Z-Achse
Naja du musst schon X und Z verändern damit das so passt wie du es möchtest. Entsprechend muss sich die kamera im 90° bzw. 270° Winkel zur aktuellen blickrichtung bewegen.
Ich würde ohne die Formel eingehender zu untersuchen spontan mal die 180° vom Rückwärtsgehen bei 's' durch 90° für den Rechtsschritt und 270° für den Linksschritt ersetzen und schauen was passiert. Wenns geht gut, wenn nicht musst du dich mit der Berechnung der beiden Koordinaten etwas genauer auseinandersetzen.
Danke.
Ich habs jetzt gelöst , indem ich den Sinus und den Cosinus getauscht habe und das - vor dem Rotationswinkel weggelassen habe. Dann geht es wunderbar.
Mann muss allerdings für den Seitenschritt nach Links , die beiden Werte von X und Z abziehen und für den Rechtsschritt entsprechend hinzuaddieren.
Es ist doch vollkommen unwichtig , ob ich jetzt die kammera oder das modell bewege. Tatsache ist , dass ich , wenn ich lediglich die X koordinate bewege , das mit der rotation der kamera/figur nicht mehr überein stimmt , da sie sich jeh nach drehwinkel einmal nach links und einmal nach rechts bewegt
das ist mir schon klar.
Allerdings sind in der Engine unsere Meshes von Camera abgeleitet , was es ermöglicht
1.Die Figur anhand eines Vektors auszurichten
1.Die Scene aus sicht einer beliebigen Figur zu rendern
1.Der hirarchischen Strucktur genüge zu tun , da viele Eigenschfaten der Camera auch auf die Meshes anwendbar sind
Deshalb ist es egal , ob da camera oder mesh steht. Das Prinzip der Bewegung ist in beiden Fällen dasselbe!
Moin,
ich hab mal ne Frage und zwar habe ich eine kleine Shootersteuerung implementiert. Nun möchte ich diese um den "Ausfallschritt" zur seite erweitern. Meine Bewegungsmethode sieht so aus
if (e.KeyChar == 's')
{
Vector3 v = camera.Origin;
v.X += (float)Math.Sin(-camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
v.Z += (float)Math.Cos(-camera.Rotation.Y * Math.PI / 180.0) * 0.5f;
camera.Origin = v;
}
(Auszug aus Nehe)
Jetzt weiß ich allerdings nicht , wie ich den Seitenschritt implementieren kann.
Bin für Hilfe dankbar.
Ich habe das über einen Threadpool mal getestet und zumindest auf den Arbeitsrechnern war das nicht gerade schnell.
Ein Broadcast wird mir übers Internet doch nichts bringen oder doch?
Moin,
ich möchte gerne mehrere IPs (so 1000 Stück) in einem Online-Netzwerk prüfen. Gibt es da eine Effizientere Lösung als alle IPs einzeln anzupingen?
Mfg
Wie verhält es sich , wenn du das Handle der Anwendung suchst und dann das Beispiel Auf den Desktop zeichnen so umänderst , dass es auf das Handle deines Spiels verweißt? Müsste das nicht auch gehen?
Wir arbeiten gerade an einem Server , der über eine Scenendefinitionssprache die darstellung dieser Scene in 3D ermöglicht. Das bedeutet , der Browser sendet den Context an den Server , der Rendert den Context und sendet das Ergebniss in echtzeit an den Client zurück.
Das kann z.b. dafür genutzt werden , um ein Match zwischen mehreren Spielern aus der sicht eines Bestimmten spielers live über das internet zu übertragen oder bietet eine neue Dimension von real 3D Browsergames an.
Alles in allem ist es aber ersteinmal nur ein Test , weshalb ich wissen möchte , ob und welche Prozeduren ich Serverseitig ausführen muss , um eine dynamische Aktualisierung des Scenenbilds auf Anwenderseite zu bewirken.
MfG
Was eventuell auch sein kann , ist , dass er mit dem erstellen des Context und dem gleihzeitigen laden der Einstellungen überfordert ist. Zumindest bei der alten Version der Engine lief das so , bei der neuen jetzt nicht mehr. Ich teste das mal mit der neuen.
Ich weiß auch nicht ob das eine Aussage trifft , aber bei DirectX Anwendungen (ja man kann auf der alten Gruke sogar schon DX9 Spiele spielen) funktioniert das einwandfei.
Moin,
mal ne Anfängerfrage zum Thema Ajax. Wie genau Funktioniert das mit der Dynamischen Aktualisierung? Ist das Client oder Serverseitig?
Ich hab das Device unserer Engine so gestrickt , dass nur die drei Werte Höhe , Breite , Farbteife verwendet werden. Zudem liefert die Funktion ein Result zurück , dass Aussagen darüber macht , ob es nun erfolgreich war , oder welcher Fehler verursacht wurde.
Zudem hab ichs schon auf mindestens 10 anderen Rechnern getestet und es verlief alles Fehlerfrei.
Das ist nach Nehe eine Standardprozedur in einer OpenGL Applikation siehe Lesson #2
Moin,
ich habn Problem mit einem alten Acer Travelmade und zwar schlägt ChangeDisplaySettings fehl. D.h es kommt zu Grafikartefakten und flimmern , das das Programm im endeffekt unbrauchbar macht.
Kennt jemand das Problem?
das hat nichts mit dem += sondern dem delegaten zu tun. Du könntest höchstens eine klasse vom worker ableiten und da das event mit dem von dir gewünschten delegaten überschreiben
Ok , mit ein paar Tricks funktioniert das , ABER ich render dann trotzdem ÜBER den Icons und dass möchte ich nicht. Ich möchte unter den Icons rendern.
Hat jemand ein Funktionierendes Beispiel wie oder ein Beispiel , wie man ein Form hinter die Icons bekommt?
Moin,
wie der Titel schon sagt , möchte ich über ein VS AddIn einen neuen Eintrag in das Menü Projekt->Hinzufügen->Neues Element erstellen und beim Klicken Aktionen durchführen.
Weiß jemand wie?
Nur das das Problem dabei ist , dass ich das für alle klassen machen muss. So kann ich das Attribut setzen und intellisense machts von allein. Aber wie?
Gibt es nicht ein Attribut um intellisense zu beeinflussen?
Was ist mit dem SupressMessage-Attribut?
In unserer Engine befinden sich Klassen , die mit einem Extendable-Attribut gekennzeichnet sind. Das weißt den Loader an , verfügbare Extensions zu laden und falls eine Extension gefunden wurde , die auf das Extendabl-Attribut passt , werden alle mit Overrideable gekennzeichneten Attribute an die Extension gelinkt.
Um dem Anwender einen schnellen Überblick zu gewähren , dachte ich an eine Kennzeichnung im Designer.
Moin,
kann ich ein Attribut erstellen , welches auf eine Klasse oder Methode angewendet , eine Ausgabe im VisualStudio generiert wie etwa das ObsoleteAttribute?
Ich möchte dass neben meinen Klassen , die dises Attribut besitzen , etwa soetwas steht wie "[Erweiterbar]".
Fang doch einfach die DX Hooks ab um die fps zu zählen. Schau dazu einfach mal in dieses Tutorial
Ich probiers die Tage mal mit unserer Engine umzusetzen.
ich habs noch nicht probiert , weiss aber auch nicht wie ich das mit dem Zeichnen realisieren soll , ausser einen extra Thread o.d. Timer einzusetzen.
Moin,
ich möchte einen 3D Desktop erstellen und möchte dafür einen Renderingcontext in den Desktopintergrund verfrachten. Kann ich eine Form in den Desktophintergrund (HINTER die Icons) docken oder geht es direkt, ndem ich OpenGL das Desktophandle zum erstellen des Kontextes übergebe? Wie sieht es dann allerdings mit einer "OnPaint-Methode" aus , in der ich die Scene zeichnen kann?
ist im grunde ganz einfach , ich lade alle verfügbaren extensions von meinem OpenGL-Treiber auf die entsprechenden Delegate-Abbildungen über das Handle mit glGetProcAddress und Marshal.GetDelegateForFunctionPointer
Ich will die delegaten aber nicht verwenden müssen , sondern die methoden , die ich bereits in der statischen Kernklasse definiert habe.
Moin,
ich habe eine Klasse mit etwa 1900 Delegaten , diese werden Dynamisch zur Laufzeit an Systempointer gebunden. Nun möchte ich in einer anderen (statischen) Klasse die Methoden auf meine Delegaten binden. Meine Frage , kann ich das , dass ich dann zur Laufzeit die Methoden einfach aufrufen kann und der delegate wird ausgeführt?
Falls nein: welche anderen möglichkeiten habe ich , ausser für alle 1900 delegaten eine Methode zu definieren?
Neues Runtimeupdate mit zusätzlichen Sprachoptionen und erweiterbaren Scripttypen.
Im Packet enthalten:
*CS2 Runtime (update)
*SSD Runtime (neu)
Die neue SSD Runtime (Short Script Definition) verzichtet komplett auf Methoden , Klassen und Namespaces , was es ermöglicht , die Funktionen untereinanderweg zu schreiben. Verfügbar sind aber weiterhin using-Direktiven.
Verbesserung und optimierung der RuntimeServices zu mehr Performance und weniger Speichergröße.
Installation:
*Downloaden des Projektes nach C:/
*Entpacken des Archives
*Ausführen der Registry-Files
*Ausführen der Testscripte
Viel spass
Moin,
hier stele ich mein Projekt MyMediaLib vor. Dabei handelt es sich um einen WebCrawler , der alle hinter einer Webadresse befindlichen Dateien eines bestimmten Typs auflistet.
Dabei kann in der fertigen Releaseversion sowohl nach Bildern , als auch nach Videos und Sounds gesucht werden , als auch nach eigens definierten Mustern. (Beispielsweise einem bestimmten Wortlaut)
Darüberhinaus soll das Programm die Möglichkeit besitzen , die gesuchten Inhalte entweder als verlinkte oder lokale Ressource zu Kategorisieren und zu speichern.
Eine Verwaltung der Kategorien erfolgt über eine interne Ordnerstrucktur. Die Ordner können ebenfalls per Passwort gesichert werden.
Als viewer soll es später mehrere Darstellungsmöglichlkeiten geben:
1.VideoPlayer für Videoformate
1.3D Warteschlange für Bilder
1.3D Pinwand für Bilder
1.Viewer für den Inhalt von Packeten
1.Player für Sounds
Ein weiteres Feature ist die Implementierung in den Firefox , wommit das Programm als zusätzlicher Tab über das Standardkontextmenü aufgerufen werden kann. Zudem sollen Cookies gemeinsam genutzt werden können.
Des weiteren ist geplant , dass Inhalte mit anderen Benutzern im Web oder dem lokalen Netzwerk geteilt bzw. im freigegebenen Inhalt mit Hilfe von Schlagwörtern gezeilt gesucht werden kann.
Jetzt zur wichtigsten Frage: "Was soll ich dammit?"
Nun, ganz einfach: In erster Linie ist das Programm für Personen im Bereich Gestaltung und Design gedacht , die ja häufiger im Internet nach Bildern und Videos suchen müssen. Als zweite Zielgruppe ist das Programm für Heimanwender gedacht , die viel im Internet surfen und eine entsprechend große Bild und Videosammlung haben. Als letzten Zweck soll das Programm dazu dienen , eine Onlinedatenbank für Medieninhalte zu schaffen. Von Usern für User. Natürlich liegt das Riskio der Urheberrechtsverletzung allein bei den Nutzern.
Anbei ein Screenshot mit einem ersten Testprogramm 😁
Ich brauch drei Dinge:
1.Einen Eintrag in das Kontextmenü von Firefox einfügen und ClickEvent linken
1.Die aktuelle URL aus der Adresszeile auslesen
1.Einen neuen Tab öffnen und (am besten das Handle von diesem Tab verwenden , um) das Programm darauf (zu) setzen
Wie kann ich das realisieren?
Ich dachte EnumChildWindows geht nur für Fenster?
Gibt es denn auch Methoden um auf Inhalte zuzugreifen?
Kenn jemand einen API-Call , um aus einem Fensterhandle die untergeordneten Steuerelemente listen zu lassen?
Wenn du mir verrätst wie man ein Plugin in C# schreibt oder wie man ein Plugin schreibt , dass mein C# Programm aktiviert , dann gerne , ansonsten ziehe ich den Weg über API Calls vor
Jo , bleibt einem nichts anderes übrig
Moin,
es gibt Möglichkeiten die FirefoxControls zu beeinflussen bzw. ein C#-Fenster auf eine Page zu machen, aber gibt es auch die Möglichkeit einen neuen Tab zu öffnen oder die URL zu ändern/auszulesen etc. ?
Es sei denn , er lässt das Direktorylisting zu.
Ich möchte dammit ein Programm bauen , das sich in den Firefox einklinkt und per BrowserContextmenü ein Fenster öffnet , indem Alle Bilder der Aktuellen Seite und aller Unterseiten erscheinen.
Das ist z.b. nützlich , wenn man beispielsweise bei Jappy die Gallerie eines Users auf einen Blick sehen möchte oder um bei Google schneller alle Bilder durchsehen zu können etc.
Ausreicht für was?
Um zu wissen , welche Ordner und dateien auf dem Server liegen
Du kannst nur den Links folgen so wie der Webserver sie dir anbietet
Ja , is schon klar , aber es gibt ja z.b. noch das direktorylisting von den unterordnern , sofern aktiviert.
Zunächsteinmal ist es nur für ein Experiment gedacht und nicht , um Daten von anderen Leuten an Dritte zu verhökern 🙂
Das die Hirarchie nicht unbedingt so sein muss weiß ich aus eigener Erfahrung.
Die Frage ist nun aber , ob es ausreicht nach "Links" zu suchen , oder ob man eine andere Methode benutzen muss. Vorallem , wie erhalte ich von einem Gefundenen Ordner den Inhalt?
Moin,
gibt es einen effizienten Weg , wie ich eine Website (nicht meine , sondern eine x beliebige) durchsuchen und z.b. unterverzeichnisse auflisten kann?
Wenn nicht , was sind alternative Wege?
Moin,
kann ich mit ReadProcessMemory eine Referenz auf eine Klasse oder auf ein Objekt Marschallen , wenn ich mir den Pointer ausgeben lasse? Welche Möglichkeiten habe ich , um an das tatsächliche objekt (int,string,byte) aus der Speicheradresse zu erhalten?
MfG
Vielen Dank für eure Beiträge 😁
bezogen auf deinen Beitrag:
[PermissionSet(SecurityAction.LinkDemand)]
public MyProxy(Type myType) : base(myType)
{
// RealProxy uses the Type to generate a transparent proxy.
myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance((myType));
// Get 'ObjRef', for transmission serialization between application domains.
ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject);
// Get the 'URI' property of 'ObjRef' and store it.
myURIString = myObjRef.URI;
Console.WriteLine("URI :{0}", myObjRef.URI);
}
Ich vermute jetzt mal , dass ich diesen Code in den Prozess einschleusen muss richtig?
Dann müsste ich die Zeile myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance((myType)); eben durch myMarshalByRefObject = (MarshalByRefObject)Process.CallingAssembly (in etwa so) ersetzen , um dann auf den Prozess zu zeigen?
Das habe ich hier im Forum gefunden , was ebenfalls noch interessant ist , ist das hier
Das Beispiel im letzten Link arbeitet mit dem aspect Bezeichner.
Was ist denn nun Besser? Mit was habe ich die Besten möglichkeiten?
Kann ich mit dem Proxy auch auf die aktuellen Werte und vor allem auf die aktuellen Instanzen im Speicherbereich des Prozesses zugreifen?
mithilfe von Code Injection ist es möglich. Such mal nach Crack.NET, WPF Insptector oder Mole. Vielleicht kannst du dadruch schlauer werden.
CodeInjection habe ich mir schon angesehen , ich weiß allerdings nicht , wie ich da auf die instanzen von den vorhandenen objekten komme um sinnvoll die methoden zu linken.
Bei Spy.NET gabs leider keinen Quellcode um zu sehen , wie er das gemacht hat.
Was ich mir grad auchnoch angesehen habe war Spy++ und AOP.
Mir ist aber immernochnicht ganz klar , wie ich die methoden eines bestehenden objektes der klasse xyz per Reflection linke , sodass ich im Prozess darauf zugreifen und sie verwenden kann.
Ich muss auf jeden Fall eine Bibliothek injezieren , um auf das laufende Assembly zugreifen zu können richtig?
Moin,
ich würd gern wissen , ob es möglih ist , Methoden per Reflection aus einem anderen laufenden .NET Prozess heraus zu binden. Also quasi so: ich habe ein Programm XY welches über eine Methode Z verfügt. Nun starte ich das Programm und möchte nun ein anderes Programm starten , welches die Methode Z des laufenden Prozesses von XY bindet und beispielsweise auf 'Blau' setzt.