Italia
Fonte/ Codesnippets

Damit Ersten Glreadpixels Meine Versuche

 
Erste Anfängerversuche mit "glReadPixels" von mir.

Mit diesem Befehl
KompilierenMarkierenSeparieren
"ogl("glReadPixels",x,y,xw,yh+,~GL_RGBA,~GL_UNSIGNED_BYTE,bereich#) "
>
kann man
im Zusammenhang mit
KompilierenMarkierenSeparieren
"ogl("glReadBuffer",~GL_Front)"
>
das Openglfenster als Grafikbild in un
Bereichsvariable reinpacken und auswerten per evtl Collisionen, erstmal bei mir in 2D, oder Mostra, wie in der Demo. Die Auswahl ist der Fontbuffer oder der Backbuffer.

x und y ist der Punkt im OpenGL-Fenster von wo aus die Breite xw und die Höhe yh in die Bereichsvariable eingelesen wird. Ein Punkt entspricht 4 Byte (RGBA), entsprechend muss die Bereichsvariable angelegt werden. Da ich ein Bild von 128x128 Pixel habe , ist die Bereichsvariable bei mir 128*128*4.

Ich habe bei mir ein OpenGlFenster von 350x350 Pixel.
Mein Bild lese ich bei x=140 und y=140 aus , mit einer Breite von 128 und einer Höhe von 128 , um es einfach zu halten um per meinen Versuch keine neue
KompilierenMarkierenSeparieren
"bild_h& = Create("hPic", -1, namebild$)"
>
anzulegen. Gewählt habe Io l' Backbuffer.

Mit diesem Befehl : ~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bereich#,bmi#,0) lese ich das Bild in das Handle bild_h& ein, man kann auch hier wieder ein anderes Handle mit "bild_h& = Create("hPic", -1, namebild$)" anlegen. Das weiss ich noch nicht, wie man ein Handle festlegt mit Create ohne eine BMP(Bild) reinzusetzen. Und mache dieses Bild von "glReadPixels" auf dem Hauptfenster links(nicht OpenGlFenster) sichtbar mit "drawpic bild_h&,10,10,0".

Vorher müssen auch wieder 2 BMP-Bilder angelegt werden, einmal den Hintergrund und einmal ein Objekt zum Steuern. XPIA muss auch wieder aktiviert werden.

Bitte diese Demo mit neuen Ideen bestücken, vielleicht habt ihr noch wesentlich bessere Einfälle um dieses auszubauen. Diese Demo ist nur ein I-Tüpflelchen, ist mal eine Idee, die am Anfang steht.

Die Farben sind noch vertauscht vom Bild "glReadPixels", weil diese andersherum eingelesen werden.
KompilierenMarkierenSeparieren
 $H Windows.ph

If 0

    AsmStart rgb_umwandlung

        Parameters bildxy#,a&
        LOCAL r :BYTE
        LOCAL g :BYTE
        LOCAL b :BYTE
        LOCAL w :DWORD
        mov eax,para2
        mov w,eax
        mov ecx,0
        mov ebx,para1

        .while ecx<=w

            mov al,[ebx+ecx]
            mov b,al
            mov al,[ebx+ecx+1]
            mov g,al
            mov al,[ebx+ecx+2]
            mov r,al
            and b,255
            and g,255
            and r,255
            mov al,b

            .if al>0

                jmp wandle

            .endif

            mov al,g

            .if al>0

                jmp wandle

            .endif

            mov al,r

            .if al>0

                jmp wandle

            .endif

            mov al,0
            mov [ebx+ecx+3],al
            mov al,b
            mov [ebx+ecx+2],al
            mov al,r
            mov [ebx+ecx],al
            jmp weiter
            wandle:
            mov al,255
            mov [ebx+ecx+3],al
            mov al,b
            mov [ebx+ecx+2],al
            mov al,r
            mov [ebx+ecx],al
            weiter:
            add ecx,4

        .endw

    AsmEnd

EndIf

declare bild1$
declare x1!,y1!,dx!,dy!,winkel!
declare hWin&
declare width%,height%
declare bild_h&,a&
declare bmi#,bildxy# ,ogl_rgb#
var groesse%=128*128*4
dim ogl_rgb#,groesse%
var texid%=0
Window 20,20-600,450
Cls @RGB(220,220,220)
hWin& = @Create("text", %hWnd, "Test1", 220, 10, 350, 350)
oGL("Init", hwin&, 0,0, 0, 0)
oGL("PosMode", 1)
bild1$="auto.bmp"
var tex.auto%=erzeugetex(bild1$)
var tex.grund%=OGL("loadtexturebmp","tile1.bmp",3)
var ende%=1

WHILE ende%

    sleep 1

    if isKey(65)

        ende% = 0

    endif

    if isKey(81)

        winkel!=winkel!+0.4

    endif

    if isKey(69)

        winkel!=winkel!-0.4

    endif

    if isKey(87)

        y1!=Sin(winkel!/180.0*pi())*0.02
        x1!=Cos(winkel!/180.0*pi())*0.02
        dx!=dx!-x1!
        dy!=dy!-y1!

    endif

    if isKey(83)

        y1!=Sin(winkel!/180.0*pi())*0.02
        x1!=Cos(winkel!/180.0*pi())*0.02
        dx!=dx!+x1!
        dy!=dy!+y1!

    endif

    ogl("glReadBuffer",~GL_Back)
    ogl("glReadPixels",140,140,128,128,~GL_RGBA,~GL_UNSIGNED_BYTE,ogl_rgb#)
    ~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,ogl_rgb#,bmi#,0)
    drawpic bild_h&,10,10,0
    drawglscene()

ENDWHILE

proc drawglscene

    OGL("Clear")
    OGL("move",0,0,-3)
    OGL("texture",tex.grund%,10)
    OGL("move",0,0,0)
    OGL("quad",8,8)
    OGL("origin",dx!,dy!,-3)
    OGL("texture",tex.auto%,1)
    OGL("rotate",0,0,winkel!)
    OGL("quad",0.7,0.7)
    OGL("show")

endproc

proc erzeugetex

    parameters namebild$
    mcls 0,0,0
    startpaint -1
    mloadbmp namebild$,0,0
    endpaint
    height%=%bmpx
    width%=%bmpy
    def &BI_RGB 0
    def &DIB_RGB_COLORS 0
    struct BITMAPINFOHEADER =
    biSize&, biWidth&, biHeight&, biPlanes%, biBitCount%, biCompression&,
    biSizeImage&, biXPelsPerMeter&, biYPelsPerMeter&, biClrUsed&, biClrImportant&
    dim bmi#,BITMAPINFOHEADER
    clear bmi#

    with bmi#

        .biSize&        = sizeof(bmi#)
        .biWidth&       = width%
        .biHeight&      = height%
        .biPlanes%      = 1
        .biBitCount%    = 32
        .biCompression& = &BI_RGB
        .biSizeImage&   = ((.biWidth& * .biBitCount%  8 - 1) | 3 + 1) * abs(.biHeight&)

    endwith

    bild_h& = Create("hPic", -1, namebild$)
    a&=bmi#.biSizeImage&
    dim bildxy#,a&
    ~GetDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
    Call(xpia_getprocaddressm(xpia_hmodule&,"rgb_umwandlung"),bildxy#,a&)
    OGL("glGenTextures",1,ADDR(texid%))
    OGL("glBindTexture",~GL_TEXTURE_2D,texid%)
    OGL("glEnable",~GL_ALPHA_TEST)
    OGL("glAlphaFunc",~GL_GREATER, 0.1)
    OGL("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
    OGL("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR)
    OGL("gluBuild2DMipmaps",~GL_TEXTURE_2D, ~GL_RGBA, height%, width%, ~GL_RGBA, ~GL_UNSIGNED_BYTE, bildxy#)
    dispose bmi#
    dispose bildxy#
    RETURN texid%

endproc

 
20.08.2008  
 



Habe eine Lösung per das leere Handle gefunden :

declare bild_h1&

mcls 128,128,0
bild_h1& = Create("hPic", 0,"&MEMBMP" )

Jetzt müssen diese beiden Befehle damit bestückt werden :

~setDIBits(%hdc,bild_h1&,0,128,ogl_rgb#,bmi#,0)

drawpic bild_h1&,10,10,0

Weiterhin den richtigen Parameter gefunden, damit die Farben nicht vertauscht werden :

~GL_BGRA statt ~GL_RGBA , also:

ogl("glReadPixels",140,140,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)

mfg
 
20.08.2008  
 



Der Thread ist "hier" unter Programme aber falsch abgelegt, ein Admin bitte verschieben.
 
20.08.2008  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.697 Views

Untitledvor 0 min.
funkheld27.04.2016
Julian Schmidt16.06.2012

Themeninformationen

Dieses Thema hat 2 subscriber:

unbekannt (2x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie