![]() |
OK, kam ja wieder einiges an Info zusammen, danke an alle. Also erstmal zu den "H"s, hätt ich mir denken können das das für hex steht*lach* aber einige der offsets aus deinem besipiel sind dreistellig, sind das die mit "0" am anfang?
@Markus Canvas is halt das einzige mit dem ich je grafisch programiert habe, was ist open gl und wie funktioniert es? Und wie kann ich den ne WORD-Variable denn nu so umrechnen oder formatieren dass sie den korrekten wert anzeigt? grüssle Phil |
> Canvas is halt das einzige mit dem ich je grafisch programiert habe
> was ist open gl und wie funktioniert es? Gut, aber Canvas ist einfach für so etwas nicht geeignet, da viel zu langsam und unflexibel. Ich bin vor zwei Jahren den gleichen Weg gegangen und habe nach kürzester Zeit alles verworfen und bin auf OpenGL umgestiegen. OpenGL ist - wie gesagt - eine Grafikschnittstelle zur Grafikhardware. Im Prinzip also das gleiche wie DirectX. Du sagst der Hardware (bzw. dem Treiber), wo deine Kamera steht, wo die Lichtquellen und wo deine Grafikobjekte und die Grafikkarte berechnet das Bild. Bei einer reinen 2D-Szene wie einem ND ist es sogar noch einfacher - du mußt "nur" die entsprechenden Vektorlinien zeichen. Infos? http://www.opengl.org Tutorials gibt es ohne Ende im Netz, ein guter Einstieg ist http://www.delphi3d.net - aber nimm auch google. > Und wie kann ich den ne WORD-Variable denn nu so umrechnen oder formatieren > dass sie den korrekten wert anzeigt? Hatte ich doch auch schon erklärt ... ;) a = vorzeichenbehafteter Wert M = Maximaler Wert, den ein Byte / Word etc annehmen kann. (also 256, 65536 usw) c = Wert ohne Vorzeichen dann a = c - M bzw c = a + M, also -10 (vorzeichen) == +65526 (ohne Vorzeichen) sind für den Computer identische Werte. Markus |
ok, werd mir das nachher nochma in ruhe anschauen, das problem is ja, dass zb der VS-wert sowohl positiv, als auch negativ sein kann, und eine if vs<0 then abfrage geht ja in dem fall nicht, da dieser wert ja nie kleiner 0 wird...
|
Nimm einfach integer statt dword und schon geht's (Ich hatte bei meiner Liste nicht an die vorzeichenbehafteten Werte gedacht). Hier also die aktualisierte Fassung:
1 Byte o. VZ: Byte 1 Byte m. VZ: Shortint 2 Byte o. VZ: Word 2 Byte m. VZ: Smallint 4 Byte o. VZ: DWord (oder Cardinal oder Longword) 4 Byte m. VZ: Integer 8 Byte: Double Der FS speichert die Vertical Speed übrigens als 1/256 Meter pro Sekunde ab. Du musst den Ergebniswert also erst durch 1.30048 teilen, bevor Du Fuss pro Minute bekommst. |
also es funktionier alles wunderbar, ausser pitch/bank sowie Lat/long, da kommen immernoch komische werte bei raus,könnte dafür jmd ein beispiel posten? es funzt einfach nicht:
FSUIPC_READ($0560, 8, @dausgabe, dwresult); FSUIPC_Process(dwresult); latitude:= dausgabe * 90.0/(10001750.0 * 65536.0 * 65536.0); edit3.text:= floattostr(latitude); FSUIPC_READ($0578, 4, @intausgabe, dwresult); FSUIPC_Process(dwresult); pitch:= intausgabe * *360/(65536*65536);//hier gibt es auch immer einen "überlauf fehler" habs in mehreren schritten versucht, sowie mit *0.0256+(-0,25); immer mist// edit6.text:= floattostr(pitch); ach ja VAR: dausgabe : double, intausgabe : integer; was mache ich falsch? grüssle Phil |
Hi Phil,
Versuche es mal so dann müsste der Überlauffehler weg sein da Delphi sich beschwert bei Ergebnissen über 32bit im Integerbereich. pitch := intausgabe * 360/(65536.0 * 65536.0); Nach Beschreibung von FSuipc müssten die Rechenwege richtig sein. Was bekommst du denn für werte raus? Gruß Thomas |
entweder kommt "0" raus oder 7 oder 8 stellige, sich dandauernd ändernde werte, also sec1:6687439 sec2: 4509832498 usw. kein zusammenhabng erkennbar, ab und zu aus mit E-8 oder sowas am ende, also *10^-9, den überlauffehler hab ich in den griff gekrieget, indem ich die rechnung step by step durchführen lies, ich weiss nicht mehr weiter, haben sich evtl die offsets für den 2k2 geändert? ich bekomme alle werte raus, heading, altitude, airspeed usw, nur bei den winkel und lat long angaben spinnt alles
|
ok, der überlauffehler ist weg, jetzt kommen immer 0,00xyz werte raus, allerdings auch imnmer zwischen + und - wechselnd unabhängig von der fluglage, aber nur zur richtigstellung, pitch ist die fluglage, nose up/dn und Bank die schräglage nach l/r die am künstlichen horizont angezeigt wird oder?
grüssle Phil |
Hi Phil,
Habe mich jetzt einmal ein bisschen mit FSuipc beschäftig, das mit Pich nose up/down und Bank Schräglage nach l/r ist natürlich Richtig nur was ist hierbei die Formel zum errechnen der Werte? Ich habe mir einmal die Rohwerte von Pitch angesehen die FSuipc ausspuckt und diese werden bei nose down Plus-Werte und bei nose up Minus-Werte habe nun mal folgendes vor der Formel von FSuipc gesetzt: Pitch*0.0256*(-0.25)*360/(65536.0*65536.0) aber das ist mit Sicherheit noch nicht die richtige Formel aber ein Ansatz. Da ich nicht wirklich weiß was für werte am ende Rauskommen müssen kann ich nicht viel dazu sagen. Was Lat/Lon betrieft da werde ich mir noch einmal die Rohwerte von FSuipc ansehen dann mal sehen denn bei Lat/Lon kommt bei mir grundsätzlich null raus. Gruß Thomas |
hi, danke für diene hilfe, das proble ist, die formel hab ich auch schon, es kommt einfach da nichts vernünftiges bei raus, viel wichtiger ist in dem fall, in welchen variablen typ muss ich die denn speichern?
also dwresult ist immer dword oder? das ist das was ausm fsuioc kommt, dann das mit dem @davor ist der wert in den die funktion process es dann umwandelt und die muss den richtigen typ aben, korrekt? grüssle phil |
| Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag