DGL https://delphigl.com/forum/ |
|
[Wiki] Übersetzungshilfe https://delphigl.com/forum/viewtopic.php?f=21&t=4819 |
Seite 1 von 3 |
Autor: | La Boda [ Di Nov 08, 2005 19:39 ] |
Betreff des Beitrags: | [Wiki] Übersetzungshilfe |
Ich übersetz grad wieder Extensions, und da komm ich einfach ned drauf, was ein "null-terminated string" (€ und ein "null-terminated character") ist, und wie man das am besten übersetzt. Das wär eigtl alles ![]() |
Autor: | i0n0s [ Di Nov 08, 2005 19:58 ] |
Betreff des Beitrags: | |
null terminierter String oder C-String |
Autor: | La Boda [ Di Nov 08, 2005 20:02 ] |
Betreff des Beitrags: | |
Ok, wenn ihr meint, dass man das so schreiben kann! War mir da ned so sicher. btw, was bedeutet das? |
Autor: | LarsMiddendorf [ Di Nov 08, 2005 20:02 ] |
Betreff des Beitrags: | |
Oder PChar ist doch der gängige Delphi Begriff dafür. |
Autor: | i0n0s [ Di Nov 08, 2005 20:08 ] |
Betreff des Beitrags: | |
Strings in C sind einfache Arrays von Char. Du bekommst einen Pointer auf den ersten Eintrag, der letzte ist 0. Daher Null terminierter String und auch PChar. Unter Pascal steht im ersten Wert eines Strings die Länge drinnen. |
Autor: | La Boda [ Di Nov 08, 2005 20:45 ] |
Betreff des Beitrags: | |
Ok danke für die Erklärung. Ich nehme dann mal "null terminierter String" weil das meines Meinung nach am besten passt und anscheinend nur bei mir Verwirrung hervorruft ![]() |
Autor: | Flash [ Di Nov 08, 2005 21:55 ] |
Betreff des Beitrags: | |
Ja. Die übersetzung ist gängig. Wenn du mal C programmierst (kann ja mal passieren ![]() |
Autor: | Lyr [ Mi Nov 09, 2005 02:37 ] |
Betreff des Beitrags: | |
Um das mal etwas technischer zu erläutern: Prinzipiel gibt es 2 Möglichkeiten wie du einen String darstellen kannst: 1. Du sagst zu Beginn wie lang der String ist, also beispielsweise: String ist 5 Zeichen lang, "Hallo" hier hast du praktisch ein Byte das die länge angibt (der Wert davon ist 5) und 5 eigentliche Zeichen, also das "Hallo". Ein kleineres Problem bekommst du allerdings wenn du plötzlich Strings haben willst die länger als 255 Zeichen sind. Dann ist eine 1-Byte Längenangabe nicht mehr ausreichend und man muss sich Alternativen suchen. Die Alternativen sind hierbei ziemlich vielfältig, aber alle erfordern eine Sonderbehandlung. Und diese Sonderbehandlung ist bei OGL nicht erwünscht. 2. Du sagst der String soll ein String sein, aber ein bestimmter Wert soll den String terminieren, also sagen das der String hier zu ende ist. Vorteil davon ist, dass du einen String haben kannst der beliebig lang ist, also auch einen der ein paar MB groß ist. Nachteil ist natürlich, dass du die Länge eines String erst ausrechnen musst, und das ein Zeichen für die Terminierung reserviert werden muss. Da man aber ohnehin keine 255 Zeichen braucht lässt sich leicht ein Terminierungszeichen finden, welches im Falle von C/C++ üblicherweise der Wert 0 ist. Also der String von vorhin würde so aussehen: Hallo0 Wie du siehst brauchen wir hier keine Längenangabe, aber das zusätzliche "Zeichen" 0. Soweit ich in Erinnerung habe benuzt man bei Pascal die 1. Mathode. Da die 2. Methode jedoch "allgemeiner" ist (bzw. keine Ausnahmefälle mit sich bringt) benutzt man bei OGL die 2tere. Soll jetzt aber nicht heißen, dass die 2. besser ist, die 1. Methode hat auch genug Vorteile. Im Gegenteil, bei einem größeren C++ Programm wirst du dir meistens auch eine String-Klasse schreiben welche die 1. Methode verwendet. Kommt natürlich auf den Anwendugsfall drauf an, aber vor allem für's Laden und Speichern ist 1ere Methode doch etwas besser. |
Autor: | La Boda [ Mi Nov 09, 2005 13:55 ] |
Betreff des Beitrags: | |
Wow danke für die Erklärung. Damit sind alle Fragezeichen weg ![]() Ich hatte nur erst vermutet, dass das null evtl mit nil zu übersetzen sei, da null ja eigentlich kein englisches Wort ist, bzw war mir das bis dahin nicht bekannt, dass es alternativen zu zero und o (ou, wie auch immer) gibt. Und an vielen Stellen, an denen in C ein null (NULL) auftaucht, verwendet man in Delphi ja ein nil. |
Autor: | Flo [ Mi Nov 09, 2005 16:26 ] |
Betreff des Beitrags: | |
Unter Delphi ist die 1. Methode ein ShortString. Der "normale" String ist eigentlich nichts anders als ein Dynamischer Array vom Typ Char. Nur halt mit der Zusaetzlichen Eigenschaft das man ihm im Quelltext Zeichenfolgen zuweisen kann und das man sie addieren kann.(oder geht das auch normalerweise mit dynamischen Arrays?) Bei dynamischen Arrays geht Delphi uebrigens sehr Ressourcen schonend um. Wenn man einer String Variable den Wert einer andern String variable zuweist so wird diese intern nicht kopiert, sondern nur vermerkt das der String von 2 Variablen aus genutzt wird. Erst wenn man den String einer Variable abaendert wird der String tatsaechlich kopiert. Ach ja Delphi Strings haben am Ende auch eine Null, jedoch ist die Laenge zusaetlich auch noch in einem vorzeichenlosen Integer gespeichert. (Das heist ein String darf maximal 2 hoch 32 Zeichen lang sein) MfG Flo |
Autor: | TAK2004 [ Fr Nov 11, 2005 11:38 ] |
Betreff des Beitrags: | |
Man sollte vileicht noch sagen das in der Anwendung der null terminierte string langsamer ist als der von delphi bekannte string, da beim pChar eine prüfung jedes Zeichen auf #0 statt findet während string am anfang schon die länge erfährt und nur noch die folgende zeichenanzahl kopiert. Man kann auch String[0] machen um die länge zurück zu bekommen und muss nicht erst length(string) machen schreiben geht aber nicht nur readonly. Ein normaler String kann 255 Zeichen lang werden wobei dem pChar keine theoretische grenze auferlegt ist und wie schon geahnt gibs von String mehere varianten mit 1Byte,2Byte und 4Byte für die Charanzahl. |
Autor: | Flash [ Fr Nov 11, 2005 18:42 ] |
Betreff des Beitrags: | |
Steht schon alles im Artikel... ![]() |
Autor: | TAK2004 [ Di Nov 15, 2005 11:37 ] |
Betreff des Beitrags: | |
Wärend ich mit Hilfe des Wikis angefangen habe eine Softwarebased OpenGL zu basteln fiehl mir folgendes auf http://wiki.delphigl.com/index.php/GluPerspective dort ist die formel zur berechnung der matrix falsch so ist es richtig hatte mich gewundert wieso meine routine ne andere matrix als die von opengl hatte. Könnte das mal einer ändern ? cotangent/aspect 0 0 0 0 cotangent 0 0 0 0 -(zfar+znear)/deltaZ -2*zfar*znear/deltaZ 0 0 -1 0 Code:
|
Autor: | Lyr [ Di Nov 15, 2005 19:48 ] |
Betreff des Beitrags: | |
Also für mich sehen die beiden Matrizen und auch deine Implementierung genau gleich aus ... denn cotan( fovy/2 ) = cos( fovy/2 ) / sin( fovy/2 ) wo bei deiner Implementierung der Sinus verwendet wird, um auf einen Winkel von exakt 180 Grad zu prüfen. Und -(zfar+znear)/deltaZ = -(zfar+znear)/(zfar-znear) = (zfar+znear)/(-(zfar-znear)) = (zfar+znear)/(znear-zfar) gleiches für die 4. Spalte. |
Autor: | La Boda [ Mi Nov 23, 2005 16:27 ] |
Betreff des Beitrags: | |
Übersetze grad die Artikel, die zur glColorTable-Serie gehören. Da kommt immer wieder der Begriff "color lookup table". Ich hab das bisher mit Farb-Lookup-Tabelle übersetzt. Ich find aber, dass das sich grausam anhört, deswegen mal die Frage, ob jemand von euch ne Alternative weis. btw noch ne Wissensfrage: Zu was sind diese Funktionen überhaupt da? Also mi ist schon klar, dass glColorTable eine Tabelle mit Farb-Informationen erzeugt, aber für was um alles in der Welt braucht man denn das? |
Seite 1 von 3 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |