Laden...

Forenbeiträge von MrHiggins Ingesamt 29 Beiträge

30.11.2012 - 16:03 Uhr

Das lässt sich so schlecht sagen weil alles was du da machen willst anders zu lösen ist.

Kennst du z.B. die Server, kannst du den Betreff durchsuchen ...

if(betreff.contains(XYZ)) ...

Ist der Betreff immer gleich kannst du ab "Server" das nächste wort nehmen, dann musst du die Server nicht kennen.

Aber wenn das ne handgeschriebene mail ist die jeder anders schreibt und du die Servernamen nicht kennst wirds eng...

Kennst du die Servernamen willst aber auf verschiedene Inhalte anders reagieren (Server A wurde gefunden, Server B wurde nicht gefunden)
kannst du zwar schauen ob "nicht" vorkommt, aber die Sprache ist dafür einfach zu komplex um das einfach entschlüsseln zu können.

Dein Problem ist also um dimensionen zu abstrakt um dir sagen zu können wie das geht. Das ist wie wenn du fragst "ich habe 2 Orte, wie komm ich vom einen zum anderen, kann mir jemand eine Route geben".

Würde es so etwas geben, würde ich nicht mehr mit meiner Frau reden müssen^^

23.11.2012 - 08:41 Uhr

Es gibt keine Lösung ohne Grundlagenwissen in Matritzen/Vektoren.

Vor allem hast du zu wenige Angaben für eine wirkliche Lösung gemacht - insbesondere was die Ausrichtung betrifft.

Wie soll das am Ende aussehen? Soll die Fläche wirklich im Raum stehen? Das heißt - soll man auf die Fläche zugehen können und sie wird größer?

Wenn nicht, wenn die Fläche z.B. wie bei nem Flugsimulator das Cockpit sein soll, dann kannst du die World,View und Proj. Matrix auf die Identitätsmatrix setzen und zeichnest quasi direkt im Bildschirmraum.

Soll die Fläche sich drehen lassen, oder soll sie immer gleich ausgerichtet sein (ich rede von der Drehachse durch die Kamera!)?
Ich habe für eine Visualisierung des Sternenhimmels mal Sterne zeichnen müssen. Das habe ich so gelöst, dass jeder Stern ein Vertex war. Den habe ich der Grafikkarte übergeben und den Rest mit Shadern gelöst. Dort habe ich um jeden Punkt mittels GeometryShader ein Quadrat erzeugt.

Oder willst du dass die Fläche parallel zum Aufvektor der Kamera ausgerichtet ist, das heißt lediglich in einer Achse zur Kamera schaut?
Dann ist es sehr einfach. Das Kreuzprodukt zweier Vektoren liefert dir die Senkrechte darauf. Du hast den Aufvektor und den Vektor zur Kamera. bildest darauf das Kreuzprodukt. Mittelpunkt der Fläche + Aufvektor und Mittelpunkt der Fläche + oben berechneter Vektor ergeben dann die Ebene, die 4 Punkte kannst du dann einfach bestimmen.

Soll die Fläche auf 2 Drehachsen zur Kamera ausgerichtet sein gehst du so vor (x=Kreuzprodukt):

  1. Vektor zur Kamera x beliebiger Vektor (nicht der selbe oder vielfaches wie Vektor zur Kamera)
  2. Vektor zur Kamera x Vektor aus 1.

Vektor aus 1. und 2. ergeben dann 2 Vektoren in der Ebene. Dummerweise hast du damit keine Orientierung um die Normale der Fläche.

22.03.2012 - 11:09 Uhr

Kannst aber erstmal so lassen als Anfänger... das lief bei uns auf aktuellen Grafikkarten und ich hab dafür einige Zeit gebraucht:-)

22.03.2012 - 10:50 Uhr

Okay, laienhaft gesprochen:
Du zeichnest bisher Points für jeden Stern einen.

In dem Projekt wie du oben siehst, habe ich auch für jeden Stern nur einen Punkt. Aber auf der Grafikkarte spanne ich um diesen Punkt ein Quadrat auf. Und auf dieses Quadrat "male" ich dann (man könnte auch ne textur nehmen), einen Stern mit diesen Strahlen und Helligkeitsverlauf.

Dadurch werden die Sterne deutlich realistischer

22.03.2012 - 07:34 Uhr

Tipp: Jeder Stern ein Vertex.

Vertexshader: Normale auf Kamera ausrichten
Geometryshader: Orthogonal um die Normale ein Quad aufspannen aus 2 Dreiecken und mit Distanz im Viewspace multiplizieren (damit beim zoomen das quad relativ zum Bildschirm immer gleich bleibt). In einem neuen Array bei jedem Punkt des Quads die Koordinaten +1 bzw. -1 für die Position im Quad speichern.

Pixelshader: Mit diesen Koordinaten kannst du nun für jeden pixel den Abstand zum Mittelpunkt des Quads berechnen und damit mit ner Gauß-Glockenkurve zb. einen radialen Verlauf zeichnen.

Ergebnis:
siehe Anhang

Das sind 2 Screenshots(etwas gestaucht, aspect ratio war gerade nicht angepasst) von einem projekt bei dem ich dabei war für ne Powerwall. Ales DirectX10.

15.03.2012 - 07:30 Uhr

Near und Farplane hab ich jetzt verringert und es tot auch, wobei das schon "knapp" ist, also das ist schon limitierend.

Der Z-Buffer ist auf D16. Wenn ich ihn auf 32 schalte startet meine Anwenung leider nicht mehr 😦 Weiß jemand an was das liegt?

14.03.2012 - 15:17 Uhr

bewegt sich alles im rahmen bis 300. Die Kamera sitzt bei 500,500,500. Hatte die nearplane bei 1, jetzt bei 100 und es tut:-)

14.03.2012 - 13:45 Uhr

Richtige Antwort:-)

Habs grad gemerkt.
Seltsamerweise gibt es nur nen schmalen Bereich für die nearplane die ich nutzen kann, darunter seh ich nix, darüber ist der effekt da...

14.03.2012 - 08:00 Uhr

Hat von euch schonmal jemand solche Artefakte gesehen und kann mir sagen an was das liegt?

13.03.2012 - 14:27 Uhr

Um es aber erstmal zu verstehen, finde ich es sinnvoller den Dijkstra anzuschauen, und dann auf den A* zu erweitern. Natürlich ist der A* sinnvoller - aber wenn der Threadsteller es nich gleich versteht kann er ja mit der Basisvariante Dijkstra anfangen.

So war das gemeint:-)

13.03.2012 - 07:40 Uhr

Der wohl bekannteste Algorithmus ohne Heuristik ist der gute alte Dijkstra. Würd ich persönlich bevorzugen - finde ihn simpler als A*

Dijkstra-Algorithmus

20.02.2012 - 16:30 Uhr

Was kam raus bei deinem Graphenvergleich? Würde mich interessieren!

16.02.2012 - 11:01 Uhr

Spontan würd ich sagen:

  1. Test auf Knotenzahl -> wenn unterschiedlich break

  2. Test auf Kantenzahl -> wenn unterschiedlich break

  3. Sortieren aller Knoten nach Grad (Eingangsgrad, Ausgangsgrad) -> wenn da nicht alles identisch -> break

  4. Jeder Knoten aus Graph1 bekommt eine ID. Zuweisen eindeutiger IDs auf Graph 2 (Wenn es nur 1 Knoten mit Grad (3,2) gibt -> ID übernehmen)

  5. Suchen kürzester "Wege zwischen Knoten mit IDs".
    Hat zb Graph2: ID0 -> XXX -> ID1 muss auch in Graph 1 ein Weg über 2 Kanten zwischen ID0 und ID1 existieren (wenn nicht - break). Gibt es 1 Weg ist der Knoten auf diesem Weg XXX. Gibt es mehrere vergleiche hier wieder die Grade bzw. Nachbarn.

    1. machst du nun solange bis keine ID freien Knoten mehr da sind. Bist du am Ende und konntest jede ID zuweisen, sind die Graphen identisch

Du könntest für jeden Knoten speichern: ID, Grad, Liste mit Nachbarn entweder als ID oder wiederum als Grad.

Möglichkeit 2: Schau dir mal Dijkstra genau an - ich bin mir sicher der lässt sich umbauen/erweitern - stellt sich natürlich generell die Frage was für ein Graph es ist. Bei einem Baum isses simpel...

06.02.2012 - 13:53 Uhr

Hallo Leute
Ich habe ein Objekt das ich zeichne mit Managed DirectX9. Ich habe nun mit Linien ein Koordinatensystem gezeichnet, das wird auch brav hinter dem Objekt angezeigt (ist ja 3d..)

Nun habe ich Beschriftungen gemacht mittels Font.Drawtext. Habe die 3d koordinaten meiner Koordinatensystemspunkte in pixelkoordinaten umgerechnet und dann ein array mit drawtext gezeichnet.

Das ist offensichtlich kein 3d.

Nun werden diese Zahlen allerdings immer VOR mein objekt gezeichnet, was ziemlich doof aussieht. Vor dem Objekt die Beschriftungen zu zeichnen bringt leider auch nichts.
Was muss ich machen damit die wirklich hinter dem Objekt verschwinden und nur außenrum sichtbar sind?

06.02.2012 - 08:59 Uhr

Hallo
Ich habe ein kleines Problem. Ich will ein picking realisieren. Dazu ist ein Mesh mit Vertex- und Indexbuffer notwendig. Ich habe die Geometrie bisher nur als Vertexbuffer der als Trianglelist gezeichnet wird (das muss auch so bleiben).

Nun kopiere ich den Vertexbuffer für das picking und möchte daraus ein mesh basteln. Vertexbuffer kann ich ja setzen, Indexbuffer generiere ich ganz simpel (0,1,2,3,4,5,6,7....) - dies entspricht dann der normalen trianglelist.

Nun will ich die buffer mit setIndexbufferdata setzen im Mesh, dabei fliegt leider eine AccessViolationException. Hat da jemand ne Idee?
Hier mein Code:

Mesh mesh = new Microsoft.DirectX.Direct3D.Mesh(buffer.Length / 3, buffer.Length,mMeshFlags.Dynamic, VertexFormats.PositionNormal, itsDevice);

CustomVertex.PositionNormal[] vertices = new CustomVertex.PositionNormal[buffer.Length];
for (int i = 0; i < buffer.Length; i++)
{
     vertices[i] = new CustomVertex.PositionNormal(buffer[i].Position, buffer[i].Normal);
}

int[] indexBuffer = new int[buffer.Length];
for (int i = 0; i < buffer.Length; i++)
{
     indexBuffer[i] = i;
}

mesh.SetVertexBufferData(vertices, LockFlags.None);
mesh.SetIndexBufferData(indexBuffer, LockFlags.None);
30.01.2012 - 16:46 Uhr

Hellsehen muss es auch nicht. Ich möchte einfach dass es beim klicken irgendwo in der Arbeitsebene nicht scrollen soll:-)

30.01.2012 - 15:45 Uhr

Visual Studio macht mich wahnsinnig!

Es geht um folgendes:
Ich habe eine lange Zeile Code, will ein Argument am Ende markieren, dabei komm ich mit der Maus in die kürzere Zeile darunter. Visual Studio denkt nun ich will dort etwas machen und scrollt ganz nach links. Brauch da jedesmal 5 Anläufe bis ich das markiert habe was ich markiert haben will.

Ähnlich verhält es sich wenn ich etwas irgendwo einfüge und die Markierung aufheben will und dazu einfach irgendwo hinklicke. Anstatt einfach nur die Markierung aufzuheben springt er in die Zeile in die ich geklickt habe ganz nach vorne.

Kann man das irgendwie abschalten?

Mit freundlichen Grüßen

30.11.2011 - 11:29 Uhr

Ich habe aus einem CVS eine Version gezogen. Das war meine Originalversion Diese habe ich mehrmals kopiert, erstellt und verglichen. Es macht offensichtlich durchaus einen Unterschied ob ich sie lokal 2mal kopiere, oder 3mal einen checkout mache.

Da es mehrere probleme sind die ich inzwischen identifiziert habe half einmal ein rebuild, das andere mal nicht.

30.11.2011 - 10:55 Uhr

Ein Aufruf von Rebuild half.

Aber vor allem liegt es an Zeitstempeln beim kopieren der Originalversion, die ihn dazu veranlassen manchmal die Debug, manchmal die releaseversion einer dll zu deployen...

fiese Sache...

29.11.2011 - 12:45 Uhr

wenn ich v1, v2, v3 und v4 nehme, die zu v0 alle die selbe änderung hat, dann gibt es zu v0 entweder 1 (die richtige) änderung oder exakt 200. und die dlls der versionen die 200 unterschiede haben sind auch alle identisch! Also immer die selben Unterschiede zur v0.

Die versionen werden exakt auf die selbe Weise, auf dem selben Rechner nur aus Ordnern die eben v0, v1, v2... heißen compiliert, ich öffne sie dazwischen nicht, ich mache einfach garnichts...

29.11.2011 - 12:01 Uhr

Ist schwierig da es seeeeehr viele solutions sind die voneinander abhängen.

Eine annahme war dass es mit rebuild funktionieren würde, auch falsch.

Also nochmal zu en Schritten - und Annahmen:

  1. CVS checkout

  2. KOMPLETTES projekt kopieren ergibt v0\ v1\ und v2\

  3. In v1 und v2 exakt die selben Änderungen in Datei X vornehmen die nicht mit anderen zusammenhängt

  4. Alles kompilieren

Dann findet er zwischen v0 und v1 die Dll von X als Unterschied, zwischen v0 und v2 jedoch 200 DLLs.

Da die 200 DLLs nichts mit der von X zu tunhaben, bringt es auch nichts wenn ich nur eine solution kompiliere, da ich ja dann die "Effekte " erst nicht erfasse...

29.11.2011 - 10:18 Uhr

Wie gesagt, mit meinem Programm extrahier ich Timestamps etc nachdem ich es mit ildasm disassambled habe und als txt gespeichert habe. Sofern MVID, GUID, Timestamps, versionsnummern etc. anders geworden sind, kapiert das mein programm auch und gibt folgerichtig aus, dass die Dateien gleichen il code haben.

Aber manchmal ist wirklich der KOMPLETTE il code anders. wenn ich zwischen den ildasm files ein diff mache ist JEDE Zeile anders, 10% kommen hinzu und die Befehle finden sich nirgends in der anderen Datei. Die dlls haben sogar bis zu 10% andere Größen. (Nur weil ich in einer völlig unabhängigen DLL im selben Compilevorgang eine Änderung vornehme die lediglich 1 Zeile betrifft und weder Aufrufe hat noch sonst irgendwas.

mir kommt es so vor als ob das fast schon stochastisch ist. Manchmal compiliert er so, das andere mal so.

Interessant ist die tatsache, dass wenn ich alles 5 mal compiliere, im Grunde 2 Versionen der Software rauskommen. 2 mal so, 3mal so. die 2 bzw. 3 gleichen Versionen sind (bis auf die IDs) identisch.

29.11.2011 - 08:24 Uhr

Ich kompiliere (sehr) viele einzelne Solutions mittels "ant". Bin dabei aber auf ein Problem gestoßen welches mir zu schaffen macht.

  • Ich habe aus dem SVN in 4 Ordner das selbe ausgecheckt.
  • Ich habe in 3 Ordnern in der selben cs Datei an der selben Stelle überflüssigen Code eingefügt (int i = 5 und bei eine if Abfrage bei der bedingung "& i==5")
  • ich kompiliere alle 3 Ordner mittels ant komplett durch bis release
    Also habe ich 3 gleich veränderte Releases und eine Originale unveränderte.

Nun vergleiche ich mit einem selbstgeschriebenen programm, welches mittels ildasm den il code extrahiert (und von dem ich IDs TimeStamps und Versionsnummern etc. wegparse) die dlls.
Das Ergebnis sollte so sein dass in allen 3 Tests immer die selbe DLL angegeben wird in der sich was verändert hat. Aber:

Bei 1 passt alles. bei den beiden anderen erhalte ich VÖLLIG UNTERSCHIEDLICHE DLLs in UNABHÄNGIGEN SOLUTIONS! über 200 dlls in komplett anderen solutions die mit der veränderten nichts zu tun haben, haben komplett anderen il code. Es ist alles umgestellt! Selbst die DLL größe ändert sich um 10%. Ich frage mich wo er den zusätzlichen Stoff herbekommt, ändere ich doch in einer ganz anderen solution (die in der Buildreihenfolge auch noch viel später auftritt - er weiß also vonder Veränderung noch garnichts) nur 1 Zeile?

Da ich beui allen Tests vom Gleichen Ursprung ausgehe und die Ordner "clean" sind, kann ichmir nur vorstellen dass visual studio beim compilieren irgendwo extern Dinge speichert, die er dann beim compilieren einer gleich benannten DLL oder Solution auskramt und seltsame Dinge anstellt.

Wieso tut er das bei einer Version nicht, sondern nur bei den beiden anderen? Buildvorgang, Reihenfolgen etc war komplett gleich...

Hat da jemand eine Idee für mich?

Gruß Mr. Higgins

04.11.2011 - 19:17 Uhr

geht aber net darum ob es sowas schon gibt als kostende Software, sondern darum dass ichs entwickeln soll:-)

04.11.2011 - 18:10 Uhr

Das libcheck hatte ich getestet. So wie ich das verstanden habe stellt libcheck lediglich Unterschiede in den Schnittstellen fest, aber nicht ob sich jetzt wirklich im Code was geändert hat. Zumindest hatte mir libcheck bei 2 versionen die defintiv verändert wurden keine ergebnisse geliefert.
Ich glaube libcheck vergleicht nur die infos die ich auch über ildasm(?) bekomme.

Ich habe eben diese Aufgabe bekommen und ging davon aus es hat seinen Grund wieso man das nicht über die versionsnummer machen kann. Es gehtum Updatepackages für Kunden.

04.11.2011 - 18:01 Uhr

Weil die kompletten Projekte neu kompiliert werden und sich somit versionsnummern ändern obwohl sich inhaltlich nichts geändert hat. Der Weg steht auch erstmal nicht zur Debatte, ist eben nun meine Aufgabe das zu bewerkstelligen dass es so funktioniert:-)

04.11.2011 - 12:21 Uhr

Hallo erstmal!
Für ein Projekt ist es notwendig Assemblies aus 2 Versionen dahingehend zu vergleichen ob sich etwas verändert hat, dabei aber Timestamps und Versionsnummern die Visual Studio beim Kompilieren generiert auszulassen.
Gibt es ein Kommandozeilentool welches das bewerkstelligt? Oder gibt es eine Möglichkeit bzw. einen "Bauplan" einer Assembly nach der ich in C# mittels Bytestreamvergleich die entsprechenden Stellen aussparen kann?

MFG Mr. Higgins