![]() |
Facharbeit - 3D Topographie anzeigen
Hallo zusammen,
wegen meiner Facharbeit hab ich mit Delphi angefangen - bin also noch nicht so der Bringer in der Sprache. Programmieren tu ich schon eine Weile, aber Delphi ist noch etwas undurchsichtig :) aaaalso. Meine Facharbeit muss eine Topographie anzeigen können. Ich habe also x, y und Höheninformationen in einem Array: data_dst_light : Array[0..150,0..150] of Integer; Eine schöne 3D Ansicht der ganzen Sache würde dem Benutzer sicher Spass machen - am Besten mit Druckfunktion oder Speichern als bmp/jpg/... Wichtig ist noch: Ich baue einen scanner. Also das array ist nicht voll sondern wird stück für stück aufgebaut. meistens ist es also nur ein data_dst_light : Array[0..3,0..50] of Integer; oder so etwas ;) dafür gibt es ein zweites array data_dst_set : Array[0..150,0..150] of Byte; das angibt, ob die jeweilige Koordinate von Relevanz ist. Es gilt: X und Y starten bei 0 und der letzte X-Wert in jeder Zeile ist bei xMax und der letzte Y-Wert in jeder Spalte ist bei yMax. In dem Array ist also ein Rechteck beschrieben (weiß nicht, wie ich es besser ausdrücken soll). Bei meiner Suche bin ich auf das Chart Steuerelement gestoßen. Ich weiß aber nicht, ob das für meine Visualisierung geeignet ist. Vielleicht kennt jemand ein Tutorial zu dem Steuerelement? Oder kann mir anderweitig helfen? Problematisch ist noch der Zeitfaktor: ich muss in 7-10 Tagen fertig sein. Ergo: bitte die am wenigsten Komplexe Lösung :mrgreen: , das Chart sieht mir schon recht happig aus... hoffe, alles ist verständlich beschrieben, gn8 !Ravager |
Re: Facharbeit - 3D Topographie anzeigen
Betrachte das Array als Gitter. Jetzt malt man einfach von hinten nach vorne die Vierecke.
Der Trick besteht in der perspektivischen Abbildung des Vierecks und der Einfaerbung. Leider verstehe ich davon nicht allzuviel. Da sollte mal ein 3D-Grafikspezialist helfen. |
Re: Facharbeit - 3D Topographie anzeigen
Ist zur Stelle ;)
Heightmaps rendern ist eine meiner leichtesten Übungen: ![]() Da steht schon ein Beispielcode von mir für OpenGL. Für alles andere rund um OpenGL empfehle ich ![]() ![]() ![]() ![]() :thumb: EDIT: Durch Download des ![]() Du kannst übrigens evtl. auch eine 2d-Ansicht von oben erstellen, indem du die Höheninformation als Grauwert nimmst ;) EDIT2: eigentlich reicht ![]() ![]() |
Re: Facharbeit - 3D Topographie anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() ...sollte auch noch erwämnt werden. Eine Komponentensammlung zum einfachen erstellen von 3D-Graphik in OpenGl die nicht viel Programmierkentnisse erfordert und sich schnell implementieren lässt. |
Re: Facharbeit - 3D Topographie anzeigen
Ich seh eigentlich keinen Grund bei einer 150x150 Matrix, die man nur einmal malt gleich mit OpenGL zu werfen.
Das sollte sich doch mit einer Matrixtransformation fuer die Projektion der Vierecke und dem Normalen-Vektor fuer die Farbe erschlagen lassen. Terragen malt das doch auch ohne OpenGL. Ganz abgesehen davon das man davon lernt wie es funktioniert. |
Re: Facharbeit - 3D Topographie anzeigen
hey leute,
danke für eure schnellen Antworten. Allerdings kann ich wohl kaum davon ausgehen, dass auf allen Rechnern an unserer Schule OpenGL läuft/installiert ist. Gibt es denn noch andere weniger bonzige Lösungen? über das Chart selbst hat noch keiner von euch geschrieben?! Ist das ne schmarrn idee? Die Geschwindigkeit von OpenGL ist für mich uninteressant, da nur etwa alle 4-5 sek gerendert werden muss ^^ ich sehs mir trotzdem mal an... :) |
Re: Facharbeit - 3D Topographie anzeigen
wenn die Geschwindigkeit eh wurscht ist, kannst dus auch mit OpenGL machen, ein Softwaretreiber ist bei Windows standardmäßig dabei. Ausserdem gibts auch noch den "Mesa"-Treiber, auch ein Softwaretreiber für OpenGL. Kenn mich mit dem aber nicht aus.
|
Re: Facharbeit - 3D Topographie anzeigen
wenn es nicht sehr exakt sein soll, dann kannst du ja auch eine Mogellösung nehmen ;) du benutz die höhenwerte als helligkeitswerte oder graustufenwerte malst so eine Bitmap. Das wäre die Karte von oben. und dann verzerrst du die Bitmap einfach so schräg nach hinten, was ja auch nicht schwierig ist, ist ein bisschen mathematik aber net viel :). Ja das würde dann auch eine art 3D effekt geben. :)
mfg Master of the wind. PS.: OpenGL is klasse :D |
Re: Facharbeit - 3D Topographie anzeigen
okay, ich hab mir die Sache mal angeguggt.
Das mit den Graustufen und 2D-Ansicht hab ich schon. Es geht jetzt wirklich um 3D! GLScene gefällt mir. Das macht was her... Nur mit durchklicken kommt man aber ned weit - ;) ich schau mir mal die DOCs an. |
Re: Facharbeit - 3D Topographie anzeigen
Hallo DGL-luke,
du hats jetzt bereits zum x-ten Mal auf deinen opengl Code verwiesen, sei doch bitte so freundlich und leg ein einfaches Beispiel (D7) bei. Ich hab den Verdacht, dass dieser Code, so wie du ihn gepostet hast noch nie gelaufen ist. Selbst wenn man die Fehler raus macht, die in diesem Codeschnipsel drin sind, liefert das keinerlei brauchbare Ergebnisse ( zumindest bei mir nicht ). Opengl läuft anderer Code funktioniert einwandfrei. Rainer |
Re: Facharbeit - 3D Topographie anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
hm... ich hab den aus einem meiner Projekte kopiert. Aber ich werde das natürlich sofort überprüfen.
EDIT: tatsächlich... :wall: hier das ganze in verbessert und getestet:
Delphi-Quellcode:
Im Anhang ein kleines Beispielprogramm. Benötigt dglopengl.pas.
type Single2dArray = array of array of single;
function BuildDL(heightmap: Single2dArray; scalexy,scalez:single): integer; var i,k,t:integer; begin result := glGenLists(1); //eine DL, bitte! glNewlist(result, GL_COMPILE); //jetzt gehts los! t := round((length(heightmap) div 2) * scalexy); gltranslatef(-t,-t,0); // In die Mitte verschieben glbegin(gl_triangles); glcolor3f(255,0,0); for i:=1 to length(heightmap)-2 do // ich greife auch auf i-1 und i+1 zu! for k := 1 to length(heightmap[i])-2 do // ich greife auch auf k-1 und k+1 zu! begin //erstes dreieck glVertex3f(i * scalexy, k * scalexy, heightmap[i,k] * scalez); glVertex3f((i-1) * scalexy, (k) * scalexy, heightmap[i-1,k] * scalez); glVertex3f(i * scalexy, (k+1) * scalexy, heightmap[i,k+1] * scalez); //zweites dreieck glVertex3f((i-1) * scalexy, k * scalexy, heightmap[i-1,k] * scalez); glVertex3f((i-1) * scalexy, (k-1) * scalexy, heightmap[i-1,k-1] * scalez); glVertex3f((i+1) * scalexy, (k+1) * scalexy, heightmap[i+1,k+1] * scalez); end; glend; glcolor3f(255,255,255); glEndList; end; |
Re: Facharbeit - 3D Topographie anzeigen
wie dem auch sei, könnma bissi runterbremsen?
ich krieg nedmal das GLScene installiert :wall: gaanz langsam: ich lade GLScene_v09b_Full.zip und entpacke in einen ordner dann öffne ich delphi7/GLScene7.dpk und drücke auf Install Fehlermeldung: GLScene.inc fehlt GLScene.inc ist im Source Ordner also kopiere ich GLScene.inc von dem Source Ordner in delphi7-Ordner und drücke auf Install es kommt eine Meldung, dass alles installiert wurde (FMOD hab ich auch noch installiert, aber das sollte egal sein) nach der Anleitung ( ![]() [After installing the package some files require accessability by Delphi. This is done by placing the Path to the files in the Program Options Directories Source form.] da kapier ich aber nicht, was die von mir wollen. Wo soll ich welche Ordner einstellen??? "Program Options Directories Source form"? keine Ahnung, wo das sein soll... Auf jeden Fall ist die Installation so noch nicht abgeschlossen - [Fatal Error] Unit1.pas(6): File not found: 'GLScene.dcu' was wollen die also von mir? sorry wenn ich mich da bissi blöd stell, aber das mit dem Installieren hab ich noch nie kapiert, :mrgreen: |
Re: Facharbeit - 3D Topographie anzeigen
Ich nehme an, dass du den ordner, in dem die glscene.pas liegt, einfach in die bibliothek aufnehmen musst.
Also In Delphi ins Mainmenu, tools->umgebungsoptionen->bibliothek, und da den entsprechenden pfad dazutun. |
Re: Facharbeit - 3D Topographie anzeigen
okay, das wars... glScene ist installiert - das war ein harter Brocken :oops:
allerdings sind mir die Tutorials viel zu wenig zielgerichtet (Zeitknappheit). Ich brauche also so eine Heightmap aus dem Array, ne Kamera (die per maus + rad einstellbar ist), ne Lampe und die Möglichkeit das alles als bmp abzuspeichern. Gerendert werden soll in einem bestimmten Bereich. Dafür ist das GLSceneViewer, oder? Gibt es irgendwo eine Art Tutorial, das in etwa auf das hinführt und mich von Fog, Fire, Sprites, Textures, Hud, usw verschont? :mrgreen: @TubroPascal: wo finde ich den Quellcode zu der exe - das kommt doch ziemlich genau an das hin, was ich bräuchte ^^ ? |
Re: Facharbeit - 3D Topographie anzeigen
In Bitmap speichern sollte ganz einfach sein:
Delphi-Quellcode:
sorry wegen der formatierung ;)
procedure SaveToBMP(Heightmap: Single2dArray; filename: string);
var bmp : TBitmap; i,k : Integer; begin bmp := TBitmap.create; try bmp.width := length(HeightMap); bmp.Height := length(Heightmap[0]); for i := 0 to bmp.width -1 do for k := 0 to bmp.height -1 do bmp.pixels[i,k] := RGB(Heightmap[i,k],HeightMap.[i,k],HeightMap.[i,k]); bmp.savetofile(filename); finally bmp.free; end; end; |
Re: Facharbeit - 3D Topographie anzeigen
Zitat:
|
Re: Facharbeit - 3D Topographie anzeigen
okay wär genial,
wegen saveToBMP: ich möchte, dass ein Screenshot gespeichert wird. Also so, wie mein Anzeigeelement (GLSceneViewer?) das Bild gerade rendert (Licht, Kamera), soll es in eine datei abgespeichert werden. Die Funktion sieht eher so aus, als ob sie ein kleines bmp erzeugt mit den Farbwerten, die das array zurückliefert... oder check ichs wieder nicht? |
Re: Facharbeit - 3D Topographie anzeigen
jupp, genauso siehts aus ;)
zu screenshot machen in OpenGL solltest du im DelphiGL-Forum genug finden, wie das mit GLScene geht, weiss ich nicht. |
Re: Facharbeit - 3D Topographie anzeigen
Liste der Anhänge anzeigen (Anzahl: 2)
Bitte.
Zitat:
|
Re: Facharbeit - 3D Topographie anzeigen
leute... ich kapiers ned,
Dein code läuft bei mir grad ned Seither hab ich: Neugestartet -.- Ich hab jetzt das gesamte GLScene gelöscht und aus der Component-Liste rausgeschmissen. Dann die neue beta-Version installiert. Keine Änderung... Fehlermeldungen Klassen nicht gefunden: tglSceneViewer tglScene tglCadencer tglWindowsBitmapFont ... Außerdem werden alle möglichen dcu files nicht gefunden, wechselt aber immer objects.dcu vectorgeometry.dcu ... keine Ahnung, was ich falsch mache. ==> Panik, Verzweiflung, Suizidgedanken, ... ich werde jetzt erstmal Delphi komplett ermorden und neu installieren, dann die normale Versio (nicht beta) von GLScene so installieren wie beim letzten Mal. Danach besauf ich mich... |
Re: Facharbeit - 3D Topographie anzeigen
Immer mit der Ruhe ;)
Wenn Delphi etwas nicht findet, liegt das meist daran, dass du ihm nicht sagst, wo es suchen soll ;) Prüf einfach noch mal ob du alles im Bibliothekspfad hast. PS: wenn es x.dcu nicht findet, dann such einfach nach x.pas - das hat was mit vorkompiliertem zeug zu tun, muss dich aber jetzt nicht weiter belasten ;) |
Re: Facharbeit - 3D Topographie anzeigen
So macht man einen screenshor in glscene:
Delphi-Quellcode:
procedure Tform1.RenderToBitmap(scale : Single;filename:string);
var bmp : TBitmap; pt : Int64; delta : Double; begin pt:=StartPrecisionTimer; // Rendering to a bitmap requires an existing bitmap, // so we create and size a new one bmp:=TBitmap.Create; // Don't forget to specify a PixelFormat, or current screen pixel format // will be used, which may not suit your purposes! bmp.PixelFormat:=pf24bit; bmp.Width:=Round(GLSceneViewer1.Width*scale); bmp.Height:=Round(GLSceneViewer1.Height*scale); // Here we just request a render // The second parameter specifies DPI (Dots Per Inch), which is // linked to the bitmap's scaling // "96" is the "magic" DPI scale of the screen under windows GLSceneViewer1.Buffer.RenderToBitmap(bmp, Round(96*scale)); delta:=StopPrecisionTimer(pt); bmp.savetofile(filename); bmp.Free; end; // aufruf RenderToBitmap(1,'C:\test.bmp'); |
Re: Facharbeit - 3D Topographie anzeigen
:!:
Zitat:
![]() Pfade die gesetzt werden müssen/sollten:
Code:
$(Delphi) Ist eine vordef. Variable (von Delphi) die den Path zu Delphi angibt zB.: C:\Programme\Borland\Delphi6
$(Delphi)\Projects\GLScene\Source
$(Delphi)\Projects\GLScene\Source\Base $(Delphi)\Projects\GLScene\Source\CgShaders $(Delphi)\Projects\GLScene\Source\DesignTime $(Delphi)\Projects\GLScene\Source\FileFormats $(Delphi)\Projects\GLScene\Source\GameAPIs $(Delphi)\Projects\GLScene\Source\PhysicsAPIs $(Delphi)\Projects\GLScene\Source\Platform $(Delphi)\Projects\GLScene\Source\PlugIn $(Delphi)\Projects\GLScene\Source\ScriptingAPIs $(Delphi)\Projects\GLScene\Source\Shaders $(Delphi)\Projects\GLScene\Source\SoundAPIs $(Delphi)\Projects\GLScene\Source\VideoAPIs In dem Beispiel befinden sich die Komponenten von GLScene im Ordner: C:\Programme\Borland\Delphi6\Projects\GLScene Gegebenenfalls die Clean.bat im Ordner von GLScene ausführen um alle vorh. *.dcu's zu löschen. |
Re: Facharbeit - 3D Topographie anzeigen
mein Projects Ordner ist aber nach der installation noch leer. Oder hätte ich da alls hin entpacken sollen? Davon stand nämlich nix in der Installationsanleitung?
ich hab folgendes gemacht: Starte Highfield\Project1.dpr :arrow: Klassen nicht gefunden (war ja klar) Entpacke Archiv GLScene_v09b_Full.zip Öffne Delphi7\GLScene7.dpk Klicke auf Install :arrow: [Fatal Error] GLCrossPlatform.pas(20): File not found: 'GLScene.inc' Kopiere GLScene.inc von Source\ nach Delphi7\ Klicke wieder auf Install von GLScene7.dpk :arrow: msgBox mit vielen neuen Installationen Starte Highfield\Project1.dpr :arrow: Error reading GLSceneViewer1.FieldOfView: Property FieldOfView does not exist. :arrow: einige Klassen nicht gefunden Klicke im Kontextmenü in Delphi auf Tools/Environment Options/Library Wähle ich unter Library Path oder Browsing Path? |
Re: Facharbeit - 3D Topographie anzeigen
Nimm den Library Path
|
Re: Facharbeit - 3D Topographie anzeigen
Zitat:
- EntPacke GLScene_v09b_Full.zip in den Ordner MeineKomponenten/GLScene - füge alle Pfadangaben den Delphi-Bibliothekspfad hinzu z.B.: C:\Programme\Borland\Delphi7\Projects\MeineKompone nten\GLScene oder: $(Delphi7)\Projects\MeineKomponenten\GLScene (wie oben halt nur mit deinen Pfaden) - danach im Ordner MeineKomponenten\GLScene die Datei GLScene6.dpk bzw. GLScene7.dpk je nach Delphiversion offnen, compilieren und dann installieren. |
Re: Facharbeit - 3D Topographie anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Entweder du machst dir ein eigenes Delphi-Lib-Verzecihnis (hab ich, weil ich mehrere Versionen installiert hab), oder du machst dir in Delphi\lib\ einen Unterordner für GLScene, in den du alles entpackst, alle relevanten Sachen dem Bibliothekspfad hinzufügst(siehe Bild im Anhang) und DANN das dpk installierst.
|
Re: Facharbeit - 3D Topographie anzeigen
in der installations-Doc steht die Reihenfolge andersrum drin... naja nochmal von Vorne:
also ich hab den Krempel erst in einen Ordner (E:\Delphi7\Projects\MeineKomponenten\GLScene\) entpackt, die ganzen Pfade in die Library-Liste hinzugefügt und dann GLScene7.dpk kompiliert und installiert. Alles ohne Probleme, aber: Öffne Highfield/Project1.dpr Felermeldung: Error reading GLSceneViewer1.FieldOfView: Property FieldOfView does not exist [->ignore] Class TGLDummyCube not found [->ignore] Class TGLDummyCube not found [->ignore] Class TGLDirectOpenGL not found [->ignore] Class TGLWindowsBitmapFont not found [->ignore] ->Run [declarations removen] [Fatal Error] Unit1.pas(10): File not found: 'VectorGeometry.dcu' und wat nu? :gruebel: fehlt noch was? wieder was falsch gemacht? GLScene wird in der Komponentenliste angezeigt. |
Re: Facharbeit - 3D Topographie anzeigen
Hm, ok das kann daran liegen das diene heruntergeladene Datei nicht die akt. ist. Wo hast du die heruntergeladen ?
Die aktuellste ist GLScene_SnapShot_150305.zip von ![]() oder: hast du auch den Path E:\Delphi7\Projects\MeineKomponenten\GLScene\Sourc e\Base der Biblio. hinzugefügt ? |
Re: Facharbeit - 3D Topographie anzeigen
das Verzeichnis war hinzugefügt. Brauche ich beide Dateien aus dem Package (sorry, wenns evtl dämlich ist, aber ich will sicher gehen)
bisher hatte ich GLScene_v09b_Full.zip installiert |
Re: Facharbeit - 3D Topographie anzeigen
GLScene_SnapShot_150305.zip ist die aktuellste Version von GLScene, diese ersetzt GLScene_v09b_Full.zip von der ich im Moment nicht sagen kann welche Sachen fehlen bzw. vorhanden sind.
SnapShot bezeichnet die aktuelle Version der Komponenten die immer weiter entwickelt werden. |
Re: Facharbeit - 3D Topographie anzeigen
hi,
danke schonmal - alles geht :bounce1: :dancer: (Das Programm läuft) ich habe versucht, das ganze auf mein Programm (möglichst simpel) zu übertragen. Und beim Kopieren & Starten produziert er folgende Fehler: [Error] Test2a.pas(2): Undeclared identifier: 'TColorVector' [Error] Test2a.pas(2): Undeclared identifier: 'TTexPoint'
Code:
Wo kommen denn die Typen her? ich use die selben klassen, wie du.
procedure Formula(const x, y: Single; var z: Single;
var color: TColorVector; var texPoint: TTexPoint); const Scale = 100; begin z := VectorNorm(x, y); // x & y-Pos vom Array umrechnen z := data_dst_light[Trunc(x * 100), Trunc(y * 100)] / Scale; // nach Höhe einfärben VectorLerp(clrBlue, clrRed, z, color); end; Wenn man auf das HeightField Event OnHeightGet doppelklickt, wird eine neue Prozedur erstellt:
Code:
also statt TColorVector heißt der Variablentyp TVector4f...
procedure TForm1.GLHeightField1GetHeight(Sender: TObject; const x,
y: Single; var z: Single; var color: TVector4f; var texPoint: TTexPoint); begin [Error] Test2a.pas(375): Undeclared identifier: 'TVector4f' [Error] Test2a.pas(375): Undeclared identifier: 'TTexPoint' Gefunden wird er trotzdem nicht... hat das etwas mit den anderen packages zu tun? GLScene7.dpk hab ich installiert, den Rest nicht. |
Re: Facharbeit - 3D Topographie anzeigen
Also eigentlich ist das Programm für dich schon vorbereitet, du musst nur noch das Array füllen...
Delphi-Quellcode:
Dabei sollte beachtet werden dass die Werte 1,5 nicht überschreiten sollten. Also eine Scalierung durchfüren:
procedure TForm1.SetMyArray;
var x, y: Integer; begin for x := 0 to 150 do for y := 0 to 150 do HFData[x, y] := ... GLHeightField1.StructureChanged; // HeightField neu zeichnen end;
Delphi-Quellcode:
max. 150 : 100 = max 1,5
// Datenwerte an HeightField ubergeben
procedure TForm1.Formula(const x, y: Single; var z: Single; var color: TColorVector; var texPoint: TTexPoint); const Scale = 100; // <-------<<< begin z := VectorNorm(x, y); // x & y-Pos vom Array umrechnen z := HFData[Trunc(x * 100), Trunc(y * 100)] / Scale; // nach Höhe einfärben VectorLerp(clrBlue, clrRed, z, color); end; Wegen dem "Fehler" musst du noch die Unit VectorTypes mit einbinden:
Code:
[b][color=#0000AF]uses[/color][/b]
Windows, ..., GLScene, ..., [b][color=#df0000]VectorTypes[/color][/b]; |
Re: Facharbeit - 3D Topographie anzeigen
So ich steig durch. Wird wirklich praktisch :-)
jetzt fehlt nur noch eine Sache: mein Array muss nicht voll sein. Will heißen, dass das Array nicht immer alle 150 Felder beschrieben hat. Manchmal werden auch nur 50x50 gescannt - je nach eingesteller Auflösung. Wie kommt der Apparat also damit klar, wenn ich nur ein kleineres Array habe? das muss doch hier irgendwo passieren:
Code:
Wenn ich alles kapiert habe, müsste ich die Zeile so abändern:
procedure TForm1.Formula(const x, y: Single; var z: Single;
var color: TColorVector; var texPoint: TTexPoint); const Scale = 100; begin z := VectorNorm(x, y); // x & y-Pos vom Array umrechnen z := HFData[Trunc(x * 100), Trunc(y * 100)] / Scale; // nach Höhe einfärben VectorLerp(clrBlue, clrRed, z, color); end; z := HFData[Trunc(x * pos_MaxX / 1.5 ), Trunc(y * pos_MaxX / 1.5 )] / Scale; die pos_Max-Variablen geben an, wie weit das Array beschrieben ist. Also können sie Maximal den Wert 150 haben. |
Re: Facharbeit - 3D Topographie anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Die Einstellung (1,5) für das HeightField ist für die 3D-Darstellung besser geeignet als 150 (Einstellungssache). Du kannst das Array mit deinen Werten füllen wie du es benötigst ohne Umzurechnen, das wird ja schon gemacht (der Wert von Scale). Das Beispiel zeigt ja wie. An der Procedure "Formula" brauchst du nichts machen. In der procedure TForm1.SetMyArray; kannst du deine Werte setzen... |
Re: Facharbeit - 3D Topographie anzeigen
okay ich bin dabei. Wäre allerdings schön, wenn der Benutzer das Ganze in X- und Y- Richtung seperat Skalieren könnte (Raster unverändert).
Was aber viel wichtiger ist: welche z-Werte soll ich da eingeben? der Datentyp von HFData ist Single. Mein Array data_dst_light hat den Datentyp Integer. Wie wandle ich die Sache um?
Code:
for x := 0 to 150 do
for y := 0 to 150 do HFData[x, y] := data_dst_light[y, x] / ((1 - opt_Contrast) * 255 + 1); |
Re: Facharbeit - 3D Topographie anzeigen
Var Single := Integer oder Var Single := Byte funktioniert, anders herum nicht. Wo ist da das Problem ?
Zun scalieren, das ist so eine Sache, entweder du rechnest es um oder du musst die Ausdehnung des HeightFields anpassen. |
Re: Facharbeit - 3D Topographie anzeigen
wenn ich die Ausdehnung des Fields anpasse, stimmt der Raster ned - dann kann ichs auch gleich sein lassen, oder?
ich kann grad keinen Screenshot machen, weil ich am Akkuaufladen bin. Wo das Problem ist, kann ich nicht sagen:
Code:
data_src_light : Array[0..150,0..150] of Integer; // 0 - 65535
data_dst_light : Array[0..150,0..150] of Integer; //Das ist das Array, das komische Ergebnisse produziert --------------- //Hier wird das SRC-Array umgerechnet, so dass Graustufenwerte ausgegeben werden ( 0 - 255 ) data_dst_light[x,y] := Trunc((255 * (data_src_light[x, y] - data_MinL)) / (data_MaxL - data_MinL)) //(Ergebnis wurde in 2D überprüft und stimmt) --------------- //Hier wird dein GL Array gefüllt HFData[x, y] := data_dst_light[x, y]; Die Standardwerte, auch aus deinem letzten Beispiel sehen vor, dass bis z=150 das ganze nicht übermäßig groß aussieht. Jetzt werden aber doch auch nur Werte bis 255 eingegeben. Trotzdem sieht eine Zeile (y=1; 1<x<150) aus wie eine Autobahn: Die Höhe ist ungefähr 5-10 mal so groß, wie der Array. Wie gesagt: ich kann grad ned testen, sonst würd ich dir einen Screenshot bauen... :) bye !Ravager |
Re: Facharbeit - 3D Topographie anzeigen
Hallo Leute,
die Sache ist fast fertig. Sieht echt gut aus. Bleibt noch ein kleines Problem: ich hab eine 3D-Darstellung mit einem SceneViewer und eine 2D-Darstellung mit Canvas in einem TImage. Beide Steuerelemente befinden sich in einem Panel. Der Benutzer kann von 2D auf 3D umschalten. Dann wird der SceneViewer Visible gemacht, ansonsten ist er versteckt. Problem ist jetzt die Größenänderung: Das Panel verhält sich Korrekt (alle 4 Anchors gehen). Der SceneViewer auch. Aber nur, wenn er visible ist. Findet während 2D-Modus eine Größenänderung des Fensters statt und schaltet man dann auf 3D um, bleibt der SceneViewer klein. Sobalt er wieder sichtbar ist, läuft alles normal aber sonst ignoriert Delphi [akRight] und [akBottom]. Noch schlimmer ist es beim Image. Hier findet überhaupt keine Größenänderung statt. Fehlt vielleicht irgendeine Einstellung der Steuerelemente? oder muss man ein Resize-Ergeinis programmieren, wie in den anderen Porgrammiersprachen? |
Re: Facharbeit - 3D Topographie anzeigen
könnt ihr mir dabei wirklich nicht helfen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz