 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.04.2006, 21:01 Titel: Einige Fragen zur Grafik in FreeBasic. |
|
|
Hallo,
ich muss mal wieder was nachfragen
1. Ist ein schneller ANTIALIAS-Effekt mit FB-Boardmitteln möglich? Mein Ziel wäre konkret ein AA, das den kompletten 640x480x16 bildschirm antialiast, das auch unter 1000 Mhz schnell läuft.
Wenn nicht, wie geht's am einfachsten (Lib?)
2. Gibt es einen einfachen weg, ein eigenes Alpha-Blending zu machen? Da meine ich jetzt, dass man die grundfarbe, z.B. blau, hat und dann eine 2 farbe drüberlegt (bsp: weiß) und dann ein hellblau rauskommt?
-jojo _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 08.04.2006, 21:22 Titel: Re: Einige Fragen zur Grafik in FreeBasic. |
|
|
Jojo hat Folgendes geschrieben: |
2. Gibt es einen einfachen weg, ein eigenes Alpha-Blending zu machen? Da meine ich jetzt, dass man die grundfarbe, z.B. blau, hat und dann eine 2 farbe drüberlegt (bsp: weiß) und dann ein hellblau rauskommt?
|
Wie meinst du das jetzt? Mit Krams wie Line, Circle usw. - oder mit Grafikdateien. Mit Grafiken hab ichs schonmal versucht da kommt ein seltsames Gemischt raus - ist aber kein Alpha-Blending! _________________ www.piratenpartei.de |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.04.2006, 21:25 Titel: |
|
|
naja, ich wollts wahrscheinlich mit Pset bzw. Pixelpufferung machen... also ohne grafikdatei.
in einem Modus, der Palette get unterstützt, wäre das leicht machbar, aber ich weiß nicht, wie ich die farbwerte in 16 /32 bit zerlegen muss.... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.04.2006, 22:45 Titel: |
|
|
ähm viel spaß
http://de.wikipedia.org/wiki/Antialiasing ist wohl ein ganz guter ausgangspunkt, in welchem maße du die Farbwerte mischen musst hängt davon ab, wie viel der pixel eben von welcher farbe bedeckt wird. wenns praktisch diagonal drüber geht 1:1 mischen, wenns aber nur grad noch so den pixel streift vielleicht 1:4, kommt immer drauf an.. Möglich ists also sicher nur die frage is ob du mit der performance dann noch arbeiten kannst weil das frisst ganzschön.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.04.2006, 22:56 Titel: |
|
|
vieleicht sollt ichs besser so ausdrücken: ich möchte eigetnlich für dungeon 2 fb, dass das bild sehr unscharf wirkt (also komplett verschwimmt).... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.04.2006, 23:08 Titel: |
|
|
ach du willst nur verschommenes bild? dann mach einfach n array, speicher den ganzen bildschirm drin oder auch nur den teil den du grad bearbeitest und misch immer irgendwie so die eigene pixelfarbe zu 60% und die umliegenden farben zu jeweils 10% ein oder sowas, probier da einfach bisschen rum, je nach dem wie viel du die nachbarfarben mit einfließen lässt oder vielleicht auch noch weiter entfernte farben um so unschärfer wirds.. Das is aber nich AntiAliasing, das ist Kantenglättung dass man die einzelnen pixel nicht mehr als ecken erkennt sondern alles rund wirkt. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.04.2006, 02:54 Titel: |
|
|
mit dem wird aber nix verschwommen oO _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.04.2006, 09:02 Titel: |
|
|
Mit einer GET PUT Aktion liesse sich doch einfach eine Unschärfe erzeugen?
Code: | dim scharf as any ptr
dim unscharf as any ptr
screen 18,32
scharf=IMAGECREATE(640,480)
unscharf=IMAGECREATE(660,500)
for i=0 to 255
circle(300,50+i),i, RGB(i*10 mod 255,i mod 255,0)
next i
sleep 100
get (0,0)-(639,479),scharf
cls
put (0,0),scharf,PSET
line unscharf,(0,0)-(640,480),0,BF
for i=1 to 20
put unscharf,(i,i),scharf,ALPHA, 250/i
put (0,0),unscharf,PSET
sleep 20
next i
put (0,0),unscharf,PSET
sleep |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.04.2006, 21:50 Titel: |
|
|
aslo, fullscreen-put mit alpha is leider seeehr langsam hab cih festgestellt.. deinen code werd ich in jedem fall mal ausprobieren so vom ansehen her scheint er aber auch langsam zu sein  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 10.04.2006, 07:24 Titel: |
|
|
Das stimmt leider, mein Programm arbeitet auch mit Fullscreen GET/PUT mit Alpha.
Vielleicht könnte man ja die Spielgrafiken selbst Unscharf rechnen?
Also die GET/PUT Alpha Aktion auf die Sprites anwenden wenn das Programm oder das Level startet.
Dann wäre diese Aufwendige Aktion einmal pro Programm start, damit könnte man sicher Leben.
Braucht auch das zulange könnte man zur Not Unscharfe Grafiken verwenden. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 10.04.2006, 21:25 Titel: |
|
|
also, das "verschwimmen" war eigentlich so für dungeon 2 gedacht:
einmal kommt man ins gefängis, und da is man ganz benommen und da soll alles ganz unscharf werden... naja, ich werds dann wohl ieber in SNES-manier machebn und alles ganz pixelig werden lassen 
und dein code ist durchaus für den übergang weltkarte->Kampf gebrauchbar, danke! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 12.04.2006, 22:59 Titel: |
|
|
Hi,
die Sub Fader_MMX kann das Bild "verschwimmen" lassen (3-7 mal aufrufen) oder sanft ausblenden (80 - 120 mal aufrufen).
2 Einschränkungen:
1. ab Grafikmode 14, in 32 bpp (Bit per Pixel)
2. MMX fähige CPU (CPU jünger als 6 Jahre)
Code: | Option Explicit
Declare Sub fader_MMX (ByVal ScrPtr As Byte Ptr)
Screen 18 , 32,,1 '640 x 480, 32bpp
Dim i As Integer
For i = 0 To &hffffff Step &he2af
Color i : Print " Volta ";
Next
Sleep 2000
For i= 1 To 110
ScreenLock
fader_MMX(ScreenPtr)
ScreenUnlock
If i < 6 Then Sleep 1000
Sleep 4
Next
Print "verdisch..."
Sleep
End
'---------------------
Sub fader_MMX (ByVal ScrPtr As Byte Ptr)
'12.04.2006 Fader_MMX by Volta
Dim As Integer i, j, Breite, Hoehe, bpp, byte_zeile
If (fb_CpuDetect And &h800000) = 0 Then Exit Sub
ScreenInfo Breite, Hoehe, bpp
If bpp < 32 Then Exit sub
byte_zeile = Breite Shl 2
For i = 1 To Hoehe - 2
ScrPtr += byte_zeile
For j = 0 To byte_zeile - 4 Step 4
asm
mov eax, [ScrPtr]
add eax, [j]
mov ebx, [byte_zeile]
pxor mm2, mm2
movd mm0, [eax +ebx]
punpcklbw mm0, mm2
movd mm1, [eax]
punpcklbw mm1, mm2
paddw mm0, mm1
movd mm1, [eax -4]
punpcklbw mm1, mm2
paddw mm0, mm1
movd mm1, [eax +4]
punpcklbw mm1, mm2
paddw mm0, mm1
psrlw mm0, 2
packuswb mm0, mm0
movd [eax], mm0
End asm
Next j
Next i
asm emms
End Sub | Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 12.04.2006, 23:22 Titel: |
|
|
kling gut, wird getestet  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 13.04.2006, 09:00 Titel: |
|
|
Sieht echt gut aus!
Was ist für einen Konstante/Variabel?
fb_CpuDetect
Sowohl in der Deutschen Dokumentation von freebasic.de also auch in der Dokumentation von freebasic.net finde ich es nicht.
Die Funktion habe ich verstanden, es geht ja darum zu prüfen ob die CPU MMX fähig ist aber wie geht genau?
Ich hab auch im Changelog nachgesehen und finde den Befehl/die Variabel/Funktion nicht. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 13.04.2006, 11:36 Titel: |
|
|
da werden wohl die CPU-Infos drinstehen und (fb_CpuDetect and &h800000)=0 prüft wohl, ob MMX fehlt.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 13.04.2006, 11:51 Titel: |
|
|
Soweit ist es mir auch klar, aber es sieht aus wie ein Freebasic Befehl und trotzdem finde ich keine Doku dazu.
Auch im Englischen Forum gibt es keine Doku, sondern nur Anwendungen:
http://www.freebasic.net/forum/viewtopic.php?t=3658
Oder eine Fehlermeldung:
http://www.freebasic.net/forum/viewtopic.php?t=1673
Etwas ähnliches wie eine Doku gibt es im Joshy Board, geschrieben von volta aber auch diese ist sehr dünn.
Ich bin erstaunt darüber das es FB Funktionen gibt, die nur einem solch kleinem Kreise bekannt sind.
Selbst in dem Dokument "docs\keywords.txt" steht nichts darüber.
Nun, wenn man es unbedingt wissen will, könnte man den Freebasic Quelcode analysieren, aber das ist mir zuviel aufwand. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 14.04.2006, 11:02 Titel: |
|
|
Hallo Michael,
ja, das ist eine von vielen internen FB-Funktionen, die man aus dem Quellcode ersehen kann.
Entspricht dem CPUID-Aufruf der die family - Informationen und einige CPU - Eigenschaften ausgibt.
Dokumentationen zu 'fb_CpuDetect' gibt es nicht (kenn ich jedenfalls nicht).
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 14.04.2006, 11:52 Titel: |
|
|
Also in fbc.exe finde ich den Befehl, aber leider nicht im Quellcode von FB.
Aber im Quellcode der GFXLIB:
libfb_gfx_core.c hat Folgendes geschrieben: | ....
if (fb_CpuDetect() & 0x800000) {
fb_mode->flags |= HAS_MMX;
fb_hMemCpy = fb_hMemCpyMMX;
fb_hMemSet = fb_hMemSetMMX;
}
.... |
Die Libary arbeite MMX optimiert .
Ach hier ist ja der Gesuchte Freund:
rtlib\libfb_cpudetect_x86.s
Naja, ich kann leider nicht so gut Asembler, aber dort kann man nach lesen wie's genau geht. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|