AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Facharbeit - 3D Topographie anzeigen

Offene Frage von "Ravager"
Ein Thema von Ravager · begonnen am 7. Jan 2006 · letzter Beitrag vom 23. Jan 2006
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#31

Re: Facharbeit - 3D Topographie anzeigen

  Alt 9. Jan 2006, 22:26
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#32

Re: Facharbeit - 3D Topographie anzeigen

  Alt 11. Jan 2006, 22:09
hi,

danke schonmal - alles geht (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:
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;
Wo kommen denn die Typen her? ich use die selben klassen, wie du.

Wenn man auf das HeightField Event OnHeightGet doppelklickt, wird eine neue Prozedur erstellt:
Code:
procedure TForm1.GLHeightField1GetHeight(Sender: TObject; const x,
  y: Single; var z: Single; var color: TVector4f; var texPoint: TTexPoint);
begin
also statt TColorVector heißt der Variablentyp TVector4f...
[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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#33

Re: Facharbeit - 3D Topographie anzeigen

  Alt 12. Jan 2006, 10:05
Also eigentlich ist das Programm für dich schon vorbereitet, du musst nur noch das Array füllen...

Delphi-Quellcode:
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;
Dabei sollte beachtet werden dass die Werte 1,5 nicht überschreiten sollten. Also eine Scalierung durchfüren:

Delphi-Quellcode:
// 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;
max. 150 : 100 = max 1,5


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];
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#34

Re: Facharbeit - 3D Topographie anzeigen

  Alt 13. Jan 2006, 12:01
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:
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;
Wenn ich alles kapiert habe, müsste ich die Zeile so abändern:

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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#35

Re: Facharbeit - 3D Topographie anzeigen

  Alt 13. Jan 2006, 18:36
Zitat von Ravager:
die pos_Max-Variablen geben an, wie weit das Array beschrieben ist. Also können sie Maximal den Wert 150 haben.
Ähm... öh, Ja. Das HeightField ist auf 0 bis 1.5 für x,y und z eingerichtet. Das Array (HFData) auf 0 bis 150 für x,y und z die Höhe. Wenn mal Werte wie 2,5 oder so kommen ist das auch nicht schlimm. Die Werte werden dann nicht mrh in der Kameraansicht (im Mittelpunkt) angezeigt...
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...
Angehängte Dateien
Dateityp: zip highfield_470.zip (6,3 KB, 17x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#36

Re: Facharbeit - 3D Topographie anzeigen

  Alt 14. Jan 2006, 19:04
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);
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#37

Re: Facharbeit - 3D Topographie anzeigen

  Alt 14. Jan 2006, 19:28
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#38

Re: Facharbeit - 3D Topographie anzeigen

  Alt 14. Jan 2006, 20:16
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
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#39

Re: Facharbeit - 3D Topographie anzeigen

  Alt 18. Jan 2006, 16:00
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?
  Mit Zitat antworten Zitat
Ravager

Registriert seit: 7. Jan 2006
19 Beiträge
 
#40

Re: Facharbeit - 3D Topographie anzeigen

  Alt 23. Jan 2006, 19:21
könnt ihr mir dabei wirklich nicht helfen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz