AGB  ·  Datenschutz  ·  Impressum  







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

Rechteck skalieren

Ein Thema von Peter666 · begonnen am 30. Sep 2016 · letzter Beitrag vom 19. Okt 2016
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

Rechteck skalieren

  Alt 30. Sep 2016, 13:29
Hi,

ich habe gerade eine ziemliche Blockade, bei der Lösung eines Problems. Für ein OpenGL Projekt rendere ich einen Text, indem ich eine Bild mit Buchstaben auf die Anzeige bringe. Für jeden Buchstaben habe ich die Position in der Textur (src) und möchte diese auf einen Bereich (Dest) zeichnen. Über ein Rechteck (Bounds) beschränkte ich die Textur. Jetzt müsste ich aber auch Src im Verhältnis zu den angegebenen Bounds beschränken, denn sonst stretched die Zeichenroutine den Buchstaben in das Zielrechteck und das schaut logischerweise bescheuert aus.

Delphi-Quellcode:
var
  Dest, Bounds, Src: TRectF;
begin
  Dest := RectF(100, 100, 200, 200);
  Bounds := RectF(110, 90, 190, 210);

  Src := RectF(1000, 1000, 1032, 1032);

  Dest.Left := Max(Dest.Left, Bounds.Left);
  Dest.Top := Max(Dest.Top, Bounds.Top);
  Dest.Right := Min(Dest.Right, Bounds.Right);
  Dest.Bottom := Min(Dest.Bottom, Bounds.Bottom);
Im Prinzip müsste ich Bounds ja auf einen Bereich zwischen 0..1 umrechnen und dann Src damit bearbeiten, oder? Hat jemand eine Idee? Irgendwie stelle ich mich da gerade etwas dusselig an.
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
673 Beiträge
 
#2

AW: Rechteck skalieren

  Alt 30. Sep 2016, 14:29
Das Anzeigen von Text auf OpenGL ist so eine Sache.
Mit TextSuite gibt es eine gute Komponente, die das genau so macht.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#3

AW: Rechteck skalieren

  Alt 30. Sep 2016, 18:55
Naja so eine Sache ist das nicht wirklich Im Prinzip ist die Engine fertig und kann neben OpenGL, Firemonkey auch Direct3D nativ. Da sich meine Anzeigelogik im wesentlichen auf 2 austauschbare Funktionen DrawTexture und FillRect beschränken, ist das auch nicht so schlimm.
Auch funktioniert die Textanzeige, allerdings blende ich alle Buchstaben aus, die nicht in der Bounds liegen. Ich wollte aber die Buchstaben auch teilweise anzeigen. Dafür muss ich Src ebenfalls anpassen im Verhältnis zu Dest.

Peter
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#4

AW: Rechteck skalieren

  Alt 19. Okt 2016, 10:48
Ungetestet:
Delphi-Quellcode:
// Dest.Left := Max(Dest.Left, Bounds.Left);
// Dest.Top := Max(Dest.Top, Bounds.Top);
// Dest.Right := Min(Dest.Right, Bounds.Right);
// Dest.Bottom := Min(Dest.Bottom, Bounds.Bottom);

  FaktorX := (Src.Right - Src.Left) / (Dest.Right - Dest.Left);
  FaktorY := (Src.Bottom - Src.Top) / (Dest.Bottom - Dest.Top);

  if Bounds.Left > Dest.Left then
  begin
    Src.Left := Src.Left + (Bounds.Left - Dest.Left) * FaktorX;
    Dest.Left := Bounds.Left;
  end;

  if Bounds.Top > Dest.Top then
  begin
    Src.Top := Src.Top + (Bounds.Top - Dest.Top) * FaktorY;
    Dest.Top := Bounds.Top;
  end;

  if Bounds.Right < Dest.Right then
  begin
    Src.Right := Src.Right + (Bounds.Right - Dest.Right) * FaktorX;
    Dest.Top := Bounds.Right;
  end;
  
  if Bounds.Bottom < Dest.Bottom then
  begin
    Src.Bottom := Src.Bottom + (Bounds.Bottom - Dest.Bottom) * FaktorY;
    Dest.Bottom := Bounds.Bottom;
  end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:41 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