Forum: FPGA, VHDL & Co. Zeichnen in vhdl


von markus (Gast)


Lesenswert?

habe ein kleines ( oder etwas grösseres) Problem.

ich habe versucht ein Grafikprogramm zu programmieren.

Inhalt des Programmes sollte sein: kleiner Curser mit dem man linien
Zeichne kann.

Curser Funktioniert bereits, nur wenn ich eine Linie zeichnen möchte
funktioniert das nicht so wie ich will.

Es sollen mit dem Curser 2 Koordinatenpunkte bestimmt werden und dann
vom Punkt_1 zum Punkt_2 eine Linie gezogen werden.

Das Problem: Das Zeichnen von Punkt_1 zum Punkt_2


wer kann mir bitte helfen???

von toddoy (Gast)


Lesenswert?

Aus deinen Aussagen lassen sich keine Rückschlüsse auf dein Problem
entnehmen. VHDL ist doch keine Sprache mit der man Zeichen kann.
Schick doch mal deinen VHDL Code mit einem Foto von deinem Display,
deinem Cursor, lass dir doch nicht alles aus der Nase ziehen. Kein
Mensch kann aus deinen Aussagen irgendeine Information entnehmen, um
dir Helfen zu können. Bisschen schreiben hat doch noch niemanden
geschadet.

G Tobi

von markus (Gast)


Lesenswert?

okay...

wollte mit dem spartan 3 starterkitt board von xilinx eine vga
ansteuerung machen und mittesl tastatur eine einfache linie zeichnen.

zur optischen unterstützung habe ich eine curser ausgeben lassen damit
man sieht wo man sich befindet.

wenn man jetzt 2 willkürliche punkte hat( als probe sind 2 Punkte mit
koordinaten fix im programm implementiert worden)

ich habe gerade im internet gelesen das man so etwas mit dem Bresenham
-ALgorithmus macht. Leider habe ich nur ein Beispiel in c und in einer
sprache die mir nicht ganz so geläufig ist( ich nehme an das ist kein
vhdl sondern verilog und da kenn ich mich nicht so aus
-> eigendlich gar nicht.


sprich das problem ist: möchte 2 koordinatenpunkte am bildschirm in
form einer linie verbinden und habe keine ahnung wie das mit diesem
algorithmus funktionieren soll


welcher code würde denn was bringen? vhdl code, oder dieser algorithmus
code, oder beide

von toddoy (Gast)


Lesenswert?

Sauber

Also mein Mathematiklehrer hat mir folgendes Beigebracht:

Geradengleichung
y = m*x + offset
Punktsteigungsform
y - y1 = m(x-x1)
y = m(x-x1)+y1
m = (y1-y2)/(x1-x2)

Bei deinem Problem würde sich die Zweipunktform anbieten:

(y-y1)/(x-x1) = (y2-y1)/(x2-x1)

, wobei Cursor1 P1 = ( y1,x1 )
, wobei Cursor2 P2 = ( y2,x2 )

Diese Zweipunktform umstellen nach y, und du hast deine Funktion, deine
gerade ergibt sich, indem du alle Funktionswerte zwischen x1 bis x2
durchrechnest, das könntest du mit einem Automaten machen, oder direkt
als Formel in VHDL angeben, wäre sogar noch einfacher, oder nur rechnen
wenn du in der entsprechenden Zeile bist.

Ich weiss leider nicht, wie du die Pixel im FPGA darstellst, ob du Alle
Pixel im Block-Ram abgespeichert hast, und du quasi Pixel für Pixel
ausliest, oder wie auch immer. Machbar ist das auf alle fälle.
Ich hoffe das hilft dir.

G Tobi

von Udo (Gast)


Lesenswert?

Hallo markus,

ich habe soetwas vor zig Jahren mal in Pascal (Quellen sind leider
nicht mehr auffindbar) nach dem DDA Algorythmus (Digital Differential
Analyzer) programmiert. Der Vorteil gegenüber den normalen Algorithmen
ist, daß Du komplett mit Addition und Subtraktion auskommst.

Ich hab mal kurz gegoogelt und folgendes Dokument gefunden:
"http://iamwww.unibe.ch/~fcglib/special_www/cg_lecture/resources/script/cg-skript.pdf";

Einfach mal nach DDA suchen.

von Hannes Hering (Gast)


Lesenswert?

Hallo,

Ich wollt mal schnell was zum Thema Bresenham-Algorithmus und DDA
sagen:

http://iamwww.unibe.ch/~fcglib/special_www/cg_lecture/resources/script/cg-skript.pdf

--- snip ---
Seite 45/88 7.1 Rasterkonvertierung
[...]
Integer DDA
Dieser Algorithmus ist besser als der normale DDA. Die ber¨uhmteste
Variante stammt
von J.E. Bresenham
--- snap ---

Also auf dem richtigen Weg ist man immerhin mal angekommen! ;)

MFG

Hannes

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.