low level 3d ? Was ist das ;)
-
Hi,
ich habe letztens mal zufällig in einer Stellenanzeige als Vorausetzung
"Experience with low-level 3D programming "
gesehen und irgendwie kann ich mir da nichts drunter vorstellen..Was genau ist denn low-level 3D und wo besteht der Unterschied zu high-level 3D?
Vielen Dank für eure Antworten schonmal im voraus
PS: Weiß nicht ob dies das richtige Forum ist, aber denke mal im Spiele Forum gammeln die besten Leute rum um diese Frage zu beantworten, deshalb stelle ich sie hier
-
OpenGL und Direct3D sind beispielsweise low-level, Direct3DX high-level.
-
Danke für die Antwort, haste dazu noch ein paar Beispiele?
Bzw. kann man ganz einfach sagen welche libs low und welche high level sind? Oder hängt das dann wieder vom Entwickler ab? (Also wie er entsprechende libs dann benutzt)
-
low level: drawPrimitive()
high level: scene->draw()
-
low level bedeutet vor allem dass man weiss was auf der hardware passiert, bis hin zum pixel setzen, tief unter der API wie opengl/direct3d (oder anderen platform spezifischen APIs).
highlevel ist dann die faehigkeit APIs zu benutzen ohne im detail zu wissen was passiert. das kann ogl/d3d oder auch eine engine sein.um es mal auf ein alltaegliches beispiel zu projezieren.
lowlevel autofahrer hoert am rattern des motors was in etwa kaputt ist und kann einschaetzen ob das dringend zu repairieren ist, macht notfalls die motorhaube auf und erkennt ob aeusserlich alles ok ist.
highlevel autofahrer hoert, dass etwas komische geraeusche macht und faehrt in eine werkstadt wo ein lowlevel autofahrer das problem reproduziert und ...eine harte grenze zwischen highlevel und lowlevel gibt es nicht wirklich, dieser hinweis in der stellenausschreibung ist eher damit die bewerber wissen, ob die stelle zu ihnen passt. manche lieben es low level zu arbeiten und andere, obwohl sie das gut koennten, wollen damit nichts zu tun haben.
-
Ich habe LowLevel 3D immer so verstanden als dass man hier wirklich alles selbst macht und HighLevel sind dann Funktionen die das 3D von der Hardware oder Software machen lassen also OpenGL/DirectX oder irgend eine fertige Engine.
kurz
low level = alles selbst machen
high level = machen lassen(Hardware, Softwarelib, 3D-Engine etc)Gruß Blue-Tec
-
blue-tec schrieb:
Ich habe LowLevel 3D immer so verstanden als dass man hier wirklich alles selbst macht und HighLevel sind dann Funktionen die das 3D von der Hardware oder Software machen lassen also OpenGL/DirectX oder irgend eine fertige Engine.
kurz
low level = alles selbst machen
high level = machen lassen(Hardware, Softwarelib, 3D-Engine etc)Gruß Blue-Tec
Deine Definition ergibt keinen Sinn. Du musst IMMER was selber machen, egal ob du low levelig mit Primitiven und Buffern arbeitest oder high levelig mit Meshes, Szenen etc.
Eine Engine und DirectX/OpenGL in diesem Kontext gleichsetzen macht auch keinen Sinn. DX und OGL sind definitiv low-level APIs (du brauchst ein gutes technisches Verständnis) und 3D-Engines gehen in Richtung high-level (wenn die Engine gut ist, brauchst du kein Detailwissen, z.b. in welchem Pool eine Ressource liegen muss, damit sie gelockt werden kann etc.)
-
Klar sind Libs zusammenklatschen auch was selber machen. Genauso kannst du auch einen Tisch selbst bauen oder die Teile fertig kaufen und nur noch zusammenschrauben. Das letztere wäre für mich HighLevel. Ich komme halt noch aus einer Zeit wo man noch eine SetPixel-Funktion in Assembler selbst schreiben musste und die Videohardware direkt angesprochen hat. Das Zeichnen von Primitiven und die Schattierung sowie die Vektoralgebra wurde alles selbst programmiert. DAS IST FÜR MICH LOWLEVEL. Es OS z.b selbst zu schreiben ist auch LOWLEVEL. Aber schon die WinAPI zu nutzen ist hart an der Grenze, das würde ich vielleicht noch mit Ach und Krach als LowLevel bezeichnen.
Es tut mir leid Leute die OpenGL/DX programmieren sind für mich keine LowLevel-Coder, da die Abstraktion schon ziemlich hoch ist, aber das ist halt Definitionssachen. Ob du darin nun einen Sinn siehst oder nicht ist mir persönlich erst einmal Schnuppe.
Gruß Blue-Tec
-
Dein "selber machen" ist einfach viel zu schwammig. Selbst ein sexPixel oder drawLineWithBresenham mit 20 Parametern aus ner Lib wäre bei dir noch high-level, denn man könnte den Algo ja auch selber in Assembler schreiben. Im Grunde läuft dein Ansatz immer drauf hinaus, dass nur selber geschriebene Assembler-Routinen low-level sind und alles andere ist high-level. So eine Anschauung ist einfach sinnfrei.
Und selbstverständlich ist die WinAPI (siehe Tabelle http://en.wikipedia.org/wiki/Widget_toolkit ), Direct3D und OpenGL Low-level - da gibts überhaupt nix zu diskutieren.
Ich glaub deine "Definition" entstand eher aus deinem elitären Selbstverständnis (Ich=Assemblerhaxxor=cool. Direct3D/OGL Programmierer=verwöhnte Highlevel Noobs).
-
Seit wann ist Wikipedia für mehr nutze als nur einen groben Überblick zu bekommen? Bei sehr vielen Artikeln ist fachlich soviel falsch dass einen schlecht wird. Bitte nutze diese Seite nie um irgendwas zu beweisen, damit diskreditierst du dich nur selbst.
Ich bin keine 30 mehr als dass ich irgendeine Sprache oder Framework oder sonst was cool oder uncool finde, alles hat irgendwo seine Berechtigung.
Für mich ist halt so etwas hier LowLevel aus den genannten Gründen http://www.lowlevel.eu/wiki/Hauptseite Für ein Javaprogrammierer ist C++ schon LowLevel und für einen C-Programmiere dann halt Assembler. Du siehst der Begriff LowLevel ist relativ, je nach dem vom welchem Bezugspunkt man das Thema betrachtet.
Vom Punkt die Grafikkarte anzusprechen ist OpenGL schon LowLevel, da dass die sinnvollste, einfachste Schnittstelle zur Hardware ist. Aber für die 3D-Programmierung an sich sind Chips die schon vieles fix und fertig rendern oder berechnen alles andere als LowLevel.
Wenn du meine Ansicht immer noch nicht verstehen solltest dann tut es mir leid, aber viel mehr gibt es zu dem Thema auch nicht zu sagen.
Gruß Blue-Tec
-
blue-tec schrieb:
Seit wann ist Wikipedia für mehr nutze als nur einen groben Überblick zu bekommen? Bei sehr vielen Artikeln ist fachlich soviel falsch dass einen schlecht wird. Bitte nutze diese Seite nie um irgendwas zu beweisen, damit diskreditierst du dich nur selbst.
Bestätigt nur meine Meinung, dass du einen pseudoelitären Dünkel hast.
blue-tec schrieb:
Für mich ist halt so etwas hier LowLevel aus den genannten Gründen http://www.lowlevel.eu/wiki/Hauptseite
Das Posten einer URL namens lowlevel.eu, die sich mit OS Entwicklung beschäftigt, ist natürlich sehr aussagekräftig.
Was soll das jetzt zeigen? Natürlich ist OS-Entwicklung low-level.
blue-tec schrieb:
Vom Punkt die Grafikkarte anzusprechen ist OpenGL schon LowLevel, da dass die sinnvollste, einfachste Schnittstelle zur Hardware ist. Aber für die 3D-Programmierung an sich sind Chips die schon vieles fix und fertig rendern oder berechnen alles andere als LowLevel.
Überleg doch mal was "low level" genau bedeutet - auf was sich das low und level bezieht. Es zieht sich auf den Grad der Abstraktion. Umso mehr Detailwissen notwendig ist, desto weniger Abstraktion. Wenn ich direkt auf GPU Speicher rumpfusche (wie man es eben mit D3D oder OGL Buffer macht), dann ist der Grad der Abstraktion bereits recht gering und hardwarenah.
blue-tec schrieb:
Wenn du meine Ansicht immer noch nicht verstehen solltest dann tut es mir leid, aber viel mehr gibt es zu dem Thema auch nicht zu sagen.
Was hat das mit verstehen zu tun (und wieder der Dünkel)? Deine Definition ist einfach engstirnig, unpräzise und entgegen der allgemeinen Ansicht. Aber bleib nur bei deiner eigenen Weltanschauung. Alter schützt eben nicht vor Torheit;)
-
blue-tec schrieb:
Ich habe LowLevel 3D immer so verstanden als dass man hier wirklich alles selbst macht und HighLevel sind dann Funktionen die das 3D von der Hardware oder Software machen lassen also OpenGL/DirectX oder irgend eine fertige Engine.
kurz
low level = alles selbst machen
high level = machen lassen(Hardware, Softwarelib, 3D-Engine etc)Gruß Blue-Tec
Man macht nie alles selbst. Oder baust du selbst Silizium ab, baust daraus deine eigenen CPUs und programmierst dann "3D" damit? Unsinn.
Die Begriffe "ligh-level" und "low-level" sind nur sinnvoll anwendbar, wenn halbwegs klar feststeht was man sozusagen als untere (low) und obere (high) Grenze ansieht.
Und ich denke als untere Grenze für "3D Programmierung" ist Anno 2010 vernünftigerweise anzusehen, dass man eine API ala Direct3D oder OpenGL hat, wo man Geometrie durch verschiedene - meist selbst programmierte - Shader quetschen kann um dann ein Ergebnis zu erhalten. Das Hantieren mit Direct3D als "high level" zu bezeichnen halte ich auf jeden Fall für zumindest höchst eigenartig.
Wenn man dagegen ausschliesslich eine fertige Engine betrachtet, dann kann man es bereits als "low level" bezeichnen, wenn man sich irgendwo ein Objekt raussucht und "mit hand" Blend-Weights verstellt.
-
this->that schrieb:
Und selbstverständlich ist die WinAPI (siehe Tabelle http://en.wikipedia.org/wiki/Widget_toolkit ), Direct3D und OpenGL Low-level - da gibts überhaupt nix zu diskutieren.
wie ich schon schrieb, low level 3d und high level 3d ist einfach nur eine ansichtssache.
auf der PS3 hab ich ein D3D aenliches API fuer die leute die den renderer schreiben gebastelt und entsprechend ist das fuer mich "High level"
-> wenn ich am renderer selbst schreibe ist wiederrum die API low level und das interface zum renderer oder integrierte libs (z.b. scaleform) sind highlevel
-> fuer den der scaleform code/scriptet ist das low level und das gui-interfaces das er da fuers game team einbauen ist high level
-> tja, und es gibt einen game coder der sich mit dem "low level" interface der engine zur gui schlaegt waehrend die anderen "high level" coden und die spiel mechanik schreiben.ich denke, dass bei der stellenausschreibung auch dabei stand welches "low level" gemeint ist.
oder um mal wikipedia zu zittieren
http://en.wikipedia.org/wiki/OpenGL_ES schrieb:
OpenGL ES 1.0
...
Supported by the PlayStation 3 as one of official graphics APIs [5] (the other one being low level libgcm library). ...auf der PS3 gilt openGL ES eben als high level.
-
Ach so, und ich dachte immer OpenGL/DirectX wären Programmierschnittstellen und keine 3D engines?
Und dann kann man 3D selber MACHEN? Und das ist dann low-level? Und ich dachte immer die Grafikkarte könnte das übernehmen.. also wenn ich jetzt in asm schreibe und die CPU 3D Grafiken berechnen lasse welche ja zur Hardware gehört, dann ist das schon high level? Und wenn ich mir jetzt einen Chip löte der 3D Berechnungen durchführt dann ist das ja Hardware und somit auch schon high-level?Sry blue-tec, das konnte ich mir jetzt nicht verkneifen
Naja, ich denke die Frage wurde hinreichend beantwortet und in der Stellenanzeige wird wohl das programmieren mit einer low-level API gemeint sein.
Besten Dank, die Frage ist geklärt und hier kann auch eigentlich zu gemacht werden
-
rapso schrieb:
oder um mal wikipedia zu zittieren
http://en.wikipedia.org/wiki/OpenGL_ES schrieb:
OpenGL ES 1.0
...
Supported by the PlayStation 3 as one of official graphics APIs [5] (the other one being low level libgcm library). ...auf der PS3 gilt openGL ES eben als high level.
Du bist der erste, von dem ich das hoere. Eigentlich sieht so ziemlich jeder OpenGL ES auch als low level. Ich zitiere mal die offizielle Khronos Seite:
http://www.khronos.org/opengles/ schrieb:
It consists of well-defined subsets of desktop OpenGL, creating a flexible and powerful low-level interface between software and graphics acceleration
Umso mehr man drueber nachdenkt, merkt man, wie bloed blue-tecs Sichtweise ist. Selbst eine in Assembler geschriebener Bresenham Algo (das wuerde jetzt wohl jeder Mensch mit gesundem Menschenverstand als low level bezeichnen) waere nach seiner Definition noch immer high-level, denn ich mache ja noch immer nicht alles selber. Ich werde BS calls benuzten, Interrupts, DMA etc. Das kann man auf die Spitze treiben: Im Grunde ist dann low level nur, wenn ich mir selber aus Silizium die Chips bastle, ein eigenes BS schreibe usw usw.
Wie gesagt, low level = niedrige Abstraktion. D3D, OpenGL haben eine niedrige Abstraktion.
-
this->that@keinPW schrieb:
Du bist der erste, von dem ich das hoere.
bin gerne der erste der jemandem wikipedia nahe bringt.
Eigentlich sieht so ziemlich jeder OpenGL ES auch als low level. Ich zitiere mal die offizielle Khronos Seite:
http://www.khronos.org/opengles/ schrieb:
It consists of well-defined subsets of desktop OpenGL, creating a flexible and powerful low-level interface between software and graphics acceleration
ja, wie ich schrieb, es ist bei jemandem der einen renderer schreibt das low level interface, tiefer kommst du wohl nicht. wenn ich mit kumpels von nvidia rede, erzaehlen die mir vom low level frontend/backend im driver und vom high level interface zur application side. einfach nur ansichtssache.
Umso mehr man drueber nachdenkt, merkt man, wie bloed blue-tecs Sichtweise ist. Selbst eine in Assembler geschriebener Bresenham Algo (das wuerde jetzt wohl jeder Mensch mit gesundem Menschenverstand als low level bezeichnen) waere nach seiner Definition noch immer high-level, denn ich mache ja noch immer nicht alles selber.
echt traurig zu sehen wie du alle die deine meinung nicht teilen versuchst zu beleidigen.
Ich werde BS calls benuzten, Interrupts, DMA etc. Das kann man auf die Spitze treiben: Im Grunde ist dann low level nur, wenn ich mir selber aus Silizium die Chips bastle, ein eigenes BS schreibe usw usw.
jap, und du wirst dich dann wundern wie die high level chip architecten arbeiten, die nicht wissen welch fines du bei deinen verfahren anwendest und der lead hardware architect, der im leben noch nie eine float-alu geschrieben hat, weil er nur die einzelnen teile der licensierten IPs zusammenstellt, dann viel mehr verdienen kann als du, trotz deiner expertise.
Wie gesagt, low level = niedrige Abstraktion. D3D, OpenGL haben eine niedrige Abstraktion.
wie gesagt, hoch und niedrig steht in relation zu der augenhoehe.
-
Was ist denn niedrige Abstraktion, eine hohe Abstraktion?
Wer entscheidet das, wie sind die Grenzen definiert? Wie Raspo schon sagt ist das ganze relativ.Ich kenne mich mit DX und sowas zwar nicht besonders gut aus,
doch würde ich wie einige andere DX nicht als HighLevel bezeichnen.
Dennoch ist es nicht von der Hand zu Weisen, dass besonders in Verbindung
mit der D3DX - Bibliothek viel Arbeit aggenommen wird.Ich habe keinen Schimmer wie man eine PNG - Datei vernünftig einliest,
verwende das Format in D3D(X)-Anwendungen jedoch ständig (wenn ich mal was damitmache).
Zudem gibt es Hilfestellung beim laden von 3D-Modellen obwohl ich keine Ahnung habe wie die Dateistruktur so aussieht.
Mathe ist für mich auch fast schon ein Fremdwort, denncoh kriege ich
Transformationen hin ... usw. usf.
Auch innerhalb "einer Technologie" (ka wie ich das ausdrücken soll), sind ja einige teile weniger lowlevel als andere.Ich persönlich sehe DX nciht als HighLevel an, aber solche Vorstellungen als abwegig, völlig indiskutabel zu bezeichnen finde ich trotzdem nicht in Ordnung.
Und als Grundlage seiner Argumentation irgendwelche Spitzfindigkeiten herzunehmen, weil irgendwer in einer lockeren Antwort umgangssprachlich daherredet ist einfach nicht ernst zu nehmen.
Wenn man alles so eng sähe, könnte man ja zu keiner Software sagen, dass man sie selbst programmiert hat, sobald man irgendwas verwendet das nicht fester Bestandteil der Sprache ist.
Beispielsweise wenn man bei c++ std::string verwendetWie Raspo sagt, ist das ganze Zeug relativ.
std::string ist die Hig-level variante um mit Strings umzugehen.
Irgendwelche algorithmen zu basteln die mit Strings arbeiten ist für mich jedoch lowlevel.Es kann ja jeder auf seinem Standpunkt bleiben, doch für ein friedliches Miteindander lasst doch bitte die Spitzen sein, wie sowas hier
Und als Grundlage seiner Argumentation irgendwelche Spitzfindigkeiten herzunehmen, weil irgendwer in einer lockeren Antwort umgangssprachlich daherredet ist einfach nicht ernst zu nehmen.
oder sowas hier
Wenn man alles so eng sähe, könnte man ja zu keiner Software sagen, dass man sie selbst programmiert hat, sobald man irgendwas verwendet das nicht fester Bestandteil der Sprache ist.
Beispielsweise wenn man bei c++ std::string verwendetOblgeich das noch relativ harmlos ist, gibt es bestimmt einige die sich durch sowas angepisst fühlen
Das heißt nicht, dass man darauf verzichten soll seine Meinung zu sagen.
Doch sollte man bedenken, dass man den Kram den man so von sich gibt auch weniger provozierend ausdrücken kann.Piece Y
cu
-
Wie ich und Rapso auch schon schrieb ist die LowLevel Bezeichnung Ansichtssache und für mich ist OpenGL halt kein LowLevel wenn es um 3D-Programmierung geht sondern nur LowLevel wenn es um das Ansprechen der Grafikkarte geht ich glaube das wurde hier nicht verstanden und wird es auch bestimmt nicht mehr, egal.
Sicher gibt es da einige die wirklich alles selbst machen. Anscheinend fehlt es hier an den berühmten Blick über den Tellerrand. Das sind nämlich die wo es auf der Plattform kein 3D-Chip gibt oder die halt lernen wollen wie man von der Picke auf 3D-Programmierung betreibt. Zu den letzteren gehöre ich, auch wenn ich das nicht professionell mache.
Es tut mir leid wenn sich einige auf dem Schlips getreten fühlen aber wenn jemand LowLevel 3D-Programmierung und gleichzeitig OpenGL/DX verwendet dann muss ich nun mal schmunzeln und hier wurde kein Satz geschrieben der das auch nur annähert sinnvoll widerlegen konnte. Es ist und bleibt halt relativ.
Klinke mich hier aus da ich im Moment nicht viel Zeit habe.
Also viel Spaß noch beim LowLevel 3D programmieren *grins
Gruß Blue-Tec
-
raps schrieb:
this->that@keinPW schrieb:
Du bist der erste, von dem ich das hoere.
bin gerne der erste der jemandem wikipedia nahe bringt.
Kannst mir gerne die Stelle zeigen, an der in Wiki steht, dass OpenGL ES high level ist. Bin ich sehr gespannt.
echt traurig zu sehen wie du alle die deine meinung nicht teilen versuchst zu beleidigen.
Traurig ist es höchstens wenn man die Augen vor der Realität verschließt und seine eigene Weltanschauung der dem allgemeinen Konsenz vorzieht. Natürlich kannst du auch im 2010 behaupten, dass Direct3D High Level ist und Java Low Level. Aber die meisten Entwickler sehen das eben anders.
Wie gesagt, low level = niedrige Abstraktion. D3D, OpenGL haben eine niedrige Abstraktion.
wie gesagt, hoch und niedrig steht in relation zu der augenhoehe.
Richtig. Die Grenze zwischen low und high ist fließend. Und im Laufe der Zeit verschiebt sie sich auch. Als die ersten C-Compiler rauskommen, hätten die meisten wohl C als High-Level Sprache beziffert, heute ordnet man C eher als low level Sprache ein (meiner Meinung nach je nach Stil fließend). Und natürlich ist aus Sicht eines Chipherstellers Direct3D eher high level. Ein Chiphersteller ist allerdings für die Betrachtungsweise nicht gerade repräsentativ. Eher repräsentativ sind die ganzen Hundertausenden Entwickler, die täglich APIs benutzen, und von denen würde die Mehrzahl D3D als low-level einstufen (hab alleine auf gamedev.net dutzende mal den Begriff low level Kontext von D3D gelesen - als high level hat das noch nie jemand bezeichnet). Wenns so High Level wär, würden auch net alle ständig Wrapper, Frameworks und Engines um D3D herum schreiben, damit es angenehmer zu benutzen ist.
Ansonsten ist die Diskussion hier ziemlich nutzlos und ähnelt den Religionsthreads im NadrW. Denn letztlich ist es SCHEISSEGAL, ob man das Zeug nun als low oder high level sieht. Es bleibt das selbe Zeug.
-
this->that schrieb:
raps schrieb:
this->that@keinPW schrieb:
Du bist der erste, von dem ich das hoere.
bin gerne der erste der jemandem wikipedia nahe bringt.
Kannst mir gerne die Stelle zeigen, an der in Wiki steht, dass OpenGL ES high level ist. Bin ich sehr gespannt.
Also gcm ist die low level Api, was konnte OpenGL dann nur sein.
Nur der, der diese Gedankensleistung erbringt sollte hier weiterschreiben.