Mathematik, die höchste aller Künste. Fragen zu Beweisen, lineare Algebra, Analysis, numerische Mathematik und verwandte Themen sind hier richtig. Die Naturwissenschaftler und Physiker können alle Fragen rund um Elektrotechnik, Statik und Dynamik hier loswerden.
3D-Shooter, Animationen, schnelle Grafik... wer träumt nicht davon? DirectX, Direct3D, OpenGL, SDL, Strategien und Grafik. Hier könnt Ihr Euch austoben.
9889
Themen
79062
Beiträge
Hallo dozgon,
ich konnte dein Fehler mit mein Rasterizer nachstellen:
https://i.ibb.co/yRgmvqk/Dot-Lighting-Pixel-Shader-vs-Vertex-Shader.jpg
Wenn du im VertexShader die Farbe berechnest, dann beachtest du nicht, dass ja die "ToLight"-Richtung falsch ist.
Im VertexShader schreibe ich
Vector3D lightPosition = new Vector3D(0, 7.5f, 3);
Vector3D toLight = Vector3D.Normalize(lightPosition - outputVertex.Position);
Vector3D lam = new Vector3D(1, 1, 1) * System.Math.Max(outputVertex.Normal * toLight, 0.0f);
shaderOutput.Interpolationvariables.AddVector3D(lam, Interpolationvariables.VariableType.WithoutPerspectiveDivision);
Im PixelShader schreibe ich
Vector3D toLight = Vector3D.Normalize(prop.Lights[0].Position - v.Position);
return new Vector4D(new Vector3D(1, 1, 1) * Math.Max(normalVector * toLight, 0.0f), 1);
Wenn ich im PixelShader rechne, dann bekommt ja toLight stehts den "echten" Wert und wenn ich im VertexShader das mache, dann interpoliere ich ja indirekt den toLight-Wert übers Dreieck (Ohne das ich dabei aber toLight oder die Normale nochmal normalisiere).
Datenbanken als klassisches Backend der Datenspeicherung werden in jeder Art Software immer gängiger. Installation, Anbindung typischer Datenbanken (MariaDB, MySQL, Access, SQL Server, SQLite), SQL oder Datenbank-Administration sind hier die Themen.
@Th69 sagte in Bekomme Fehlermeldung, wenn ich das erste Programm laufen lasse:
Unter Windows ist es für Anfänger am einfachsten, Visual Studio Community zu benutzen.
Zustimmung. Zu Anfang definitiv eine IDE mit Compiler, Linker und Debugger und all den anderen Tools, die direkt "Out of the Box per Knopfdruck" funktionieren. Sonst sehe ich nach dem make-Problem, dass als nächstes z.B. gdb nicht gefunden werden kann.
Andernfalls müsste man beim C++-Lernen eigentlich nicht mit "Hallo Welt" beginnen, sondern erstmal in der Kommandozeile, und sich damit vertraut machen, wie die ganzen Tools zusammenarbeiten. Das hielte ich durchaus auch für einen guten Ansatz: Die ersten Programme nur mit einem simplen Texteditor schreiben und dann manuell kompilieren. Als nächsten Schritt dann ein einfaches Makefile und später auch noch eine Bibliothek einbinden. Erst nach all dem mit der IDE zu beginnen, würde wohl viele Probleme vermeiden, die Anfänger oft haben. Dann versteht man nämlich leichter, welches Problem die IDE überhaupt hat und wie man diese konfigurieren muss.
In diesem Fall vermute ich, dass die IDE für den Anwender zwar automatisch das Makefile aus dem Projekt generiert, dann aber eben noch das externe Tool make benötigt, um dieses abzuarbeiten und das Programm zu kompilieren und zu linken.
Ihr habt eine Auftragsarbeit zu vergeben? Oder sucht ihr ein kleines Team zur gemeinsamen Realisierung von sinnvollen und schaffbaren Programmierprojekten? Ihr sucht ein paar Beta-Tester für eure fertigen Projekte?
@DNKpp Lustigerweise ist RETURN_IF_VALID eine Prüfung für meine ResultOr<optional<Token>, Error> Klasse und diese prüft ja
if(res.ok()){ ....}
return lex_hex_number(...).some(
[&]( const ResultOr<std::optional<Token>,Error> & t)=> auto
{
if(!token)
return lex_bin_number().some(...);
return token;
}
man könnte sich das so überlegen auf jedenfall! Aber hier stellt sich die Frage, ob so eine Verschachtelung besser zu verstehen ist.
Dann finde ich es besser:
auto res = lex_hex_number(...);
if(res){
return res;
}
res = lex_bin_number(...);
.
.
.
Da man die tiefe Verschachtelung vermeidet.
@liveyourproject sagte in Poppler Bibliothek kann nicht installiert werden:
Danke dir für deine Hilfe aber ich habe mich nach reiflicher Überlegung doch entschlossen auf Visual Studio 2022 Community umzuschwenken und über vcpkg die Bibliotheken einzubinden, die ich brauche. Nach einigen Versuchen habe ich es tatsächlich geschafft die Poppler Bibliothek einzubinden. Und das auch ohne cmake aber mit vcpkg kann man auch Cmake nutzen. Deshalb fand ich es jetzt ersteinmal die beste Lösung für den Anfang. Wo ein wille ist, da ist auch ein Weg.
Sicher, vcpk ist auch eine Lösung Würde ich dann persönlich auch mit cmake nutzen. Projekte, die nur in VS gehen sind ja irgendwie doof und bisschen unmodern.
Ganz allgemein hat Steam eine API für Spieleserver. Ich glaube, aber nicht geprüft, die ist sogar semi-öffentlich, als dass man da gratis einen Account für Zugang bekommen kann. Und wenn man sich da rein gräbt, kann man sicherlich abfragen, welcher Server gerade wie viele Spieler auf welcher Karte hat, oder sonstige Sachen. Und damit kann man dann die Statistiken machen, die du dort siehst.
Ich werde aber jetzt keine genaueren Details zusammentragen. Ich habe ein bisschen in der Steam-Developerwiki gestöbert, und gesehen, dass das prinzipiell gehen müsste (und die Existenz der Webseiten beweist, dass es geht!). Aber die Informationen waren nicht gerade frisch oder gut gepflegt. Da ist sicherlich einiges an Energie, Motivation, und Frustresistenz nötig, wenn man sich da reinbeißen möchte.
@Leon0402 sagte in GIT: Vorgehen, wenn push fehlschlägt:
Wenn das so der Standard ist, dass ihr ständig parallel auf dem selben Branch arbeitet, klingt das eher nach Problem im Workflow.
Das ist richtig. Also, es kommt nur selten vor, aber anfangs wusste ich gar nicht, weshalb mein Push immer rejected wurde ... bis mir dann auffiel, dass ein Kollege meine Arbeit schneller/besser gemacht hatte. Wahrscheinlich wäre der richtige Workflow gewesen, sich mal beim Vorgesetzten bzw. Teamler zu beschweren.
Aber hierbei ging es eher konkret um den Fall, dass die CI Änderungen am Feature-Branch vornimmt (was ich zu spät bemerkt hatte) ...
@KahnSoft sagte in Wie am einfachsten Schachbrettmuster erkennen?:
Wir jedenfalls waren früher froh wenn wir Hinweise per Briefpost kommunizierten,
echt traurig, aber wenigstens bin ich schlauer als du, wenn du anscheinend gar nichts hinbekommst, aber Hauptsache ist, man erteilt anderen irgendwelche Anweisungen...
Versteh mich bitte nicht falsch, ich weiß das dies ein öffentliches Forum ist, aber ich hatte dich in keinster Weise nach deiner Meinung gefragt... Ich mag deine Sorte Mensch nicht... Such dir doch ein anderes Hobby...
@SK0325 sagte in Historisierungskonzept programmieren / Datensatz zurücksetzen auf Tag x:
Außer du kannst mich vom Gegenteil überzeugen?
Es gibt keine Satzsperren.
Was hat das alles mit C++ Builder zu tun?
@Swordfish sagte in Native File Chooser mit Fltk (Android):
@DNKpp sagte in Native File Chooser mit Fltk (Android):
@hustbaer Kennst du ihn wirklich nicht?
Dr. Klaus Jürgen Wolf ist ein anderer.
Oh, wirklich? Dann hab ich nix gesagt
Sind die Arrays A und B ohne Duplikate?
Ansonsten sieht dein Ansatz tendenziell nicht schlecht aus, mal in Worten zusammengefasst wie ich ihn verstehe und ergänzen würde:
Iteriere solange bis A oder B durchlaufen ist
Vergleiche das Element i in A und B und wähle das kleinere aus
Move den pos pointer in dem entsprechenden Array weiter, wo das Element ausgewählt worden ist (Nicht in beiden, was du bisher machst)
Prüfe, ob das ausgewählte Element das selbe ist, was du letze Runde augewählt hat d.h. H[pos_h - 1] == element (dann ist es ein Duplikat) -> Hier musst du dir was für den ersten Durchgang noch überlegen
Füge das Element dem Array H hinzu, wenn es kein Duplikat ist (und pos pointer vorwärts bewegen)
Iteriere über A (mit pos_a als startpunkt) bis Ende
Füge das Element von A in H ein (pos_a und pos_h erhöhen)
Iteriere über B (mit pos_b als startpunkt) bis Ende
Füge das Element von B in H ein (pos_b und pos_h erhöhen)
Das heißt du hast insgesamt drei Schleifen Logisch sollte aber sein, dass einer der letzen Schleifen beiden Schleifen nicht ausgeführt wird, denn eines der beiden Arrays muss durch Schleife 1 ja schon fertig durchlaufen sein.
@Th69 sagte in Zweifachauswahl:
Ich kannte den Begriff vorher auch nicht und habe ihn online u.a. im PDF 2. Kontrollstrukturen, strukturierte Programmierung (in "2.3 Arten von Strukturblöcken") gefunden.
Das ist also die normale Bedingungsabfrage mittels if (condition) X else Y, d.h. sowohl bei erfüllter Bedingung (condition == true) als auch im Negativfall (condition == false) wird jeweils Code ausgeführt.
Und die Abfrage ohne else heißt dort dann Einfachauswahl.
Bei mehr als 2 Fällen wird dann eben von Mehrfachauswahl gesprochen.
Sehr gut erklärt.
@hustbaer sagte in Outlook Automation mit C++:
Sieht man neuerdings als normalsterblicher nicht mehr wenn ein Beitrag verschoben wurde?
Ich weiß nicht einmal, ob ich das selber irgendwo sehen kann. Ja, das ging im alten Forum, recht übersichtlich, da stets ein Beitrag erzeugt wurde, der das dokumentierte. Ich vermisse es aber auch nicht wirklich, da dank der Sammlung ungelesener Beiträge für den täglichen Nutzer gar nicht so wichtig ist, wo ein Thread genau liegt. Gleichzeitig würden irgendwelche automatischen Dokubeiträge gerade in jener Ansicht eher stören.
@Zhavok sagte in Ständig wachsende Komplexität im Programmiereralltag (Fork aus: Datenbank für C):
Während der Maurer an die physikalischen Gesetze gebunden ist und der Bäckerslehrling sein Brot nicht backen darf weil die extra Zutaten mehr Geld kosten und die Arbeitszeit an jedem Brot steigt, schreibt der Programmierer seine eigenen Gesetze und Logiken da tippen an sich nichts kostet. Neue Ideen sind einfach schneller umsetzbar als in anderen Branchen.
Naja, an die Grenzen der Physik und vor allem der Mathematik sind wir auch gebunden. Und das macht schon ordentliche Einschnitte. Insbesondere Optimierungsprobleme liegen ja z.B. oft in NP, da hätte man ja schon gerne bessere Lösungen, die wird es aber vermutlich nicht geben.
Und auch der Softwareentwickler darf im Job nicht alles programmieren, wozu er grade Lust hat, da zum einen Arbbeitszeit teuer ist und auch nicht alle Tools umsonst zu haben sind.
Aber es ist schon ein schwieriger Grat, Komplexität händelbar zu halten, aber das raus zu holen, was machbar ist.
Wenn man sich nur mal die Tools anschaut, die man so verwendet: Man hat sein Unittest Framework, ein Versionierungssystem, ein Ticketsystem, eine Buildautomatisierung, vlt auch noch ein Container System usw. All das erhöht auf der einen Seite die Komplexität der Entwicklung, nimmt einem auf der anderen Seite aber viel manuelle, fehleranfällige Arbeit ab.
@leon676 sagte in Bilder zusammen rechnen:
Zur Methodik WIE wir die Bilder verarbeiten wollen haben wir uns auch schon Gedanken gemacht. Mein Problem liegt gerade vor allem in der Umsetzung. Ich weiß nicht was ich mir am besten anschauen soll um herauszufinden wie man das ganze im Programm auch wirklich umsetzt.
Dann schau als erstes mal dass du ein Qt Beispiel compiliert bekommst, z.B. den von @DirkB erwähnten Image Viewer. Wie man ne Qt Entwicklungsumbegung aufsetzt lässt sich ja ergoogeln, das ist hundertfach im Netz erklärt.
Dann googeln wie man in Qt ein Bild lädt und Pixel ausliest. Dann den Image Viewer modifizieren dass ihr einfach mal die Pixeldaten lesen und ändern könnt - testweise einfach mal das Bild invertieren oder so.
Wenn ihr das habt, das Programm so anpassen dass es mehr als 1 Bild lädt und die irgendwie trivial zusammenblendet - wie @DirkB auch schon anfangs vorgeschlagen hat.
Einfach Schritt für Schritt rantasten.