Español
Fuente/ Codesnippets

Bilder Bmp Direkt Opengl Programa Texturen

 
Un kleine Demo para Direkten einlesen de BMP-Archivos para Texturen con ASM-Befehlen/XPIA y el Befehl "GetDIBits" para OpenGL.
El Farbe "schwarz" se durchsichtig suscrito.
Um el Programa a benutzen, necesario todavía 2 Muster-BMP-Archivos erstellt voluntad.
Durch el gute Ayuda en el Foro podría Yo el umsetzen.
Durch el 2D vorraussetzungen con Opengl puede ser muy schön Sprites erzeugen y así trabajo.
Mit el Tasten "Q,W,E,S" puede ser una bisschen speilen.

Diese Demo kann cada para se neu umsetzen y en propio Programas Teile su tomar.
KompilierenMarcaSeparación
 $H Windows.ph
 {$iq}
declare bild1$
declare x1!,y1!,dx!,dy!,winkel!
declare hWin&

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

                mov al,255
                mov [ebx+ecx+3],al
                mov al,b
                mov [ebx+ecx+2],al
                mov al,r
                mov [ebx+ecx],al
                jmp weiter

            .endif

            mov al,g

            .if al>0

                mov al,255
                mov [ebx+ecx+3],al
                mov al,b
                mov [ebx+ecx+2],al
                mov al,r
                mov [ebx+ecx],al
                jmp weiter

            .endif

            mov al,r

            .if al>0

                mov al,255
                mov [ebx+ecx+3],al
                mov al,b
                mov [ebx+ecx+2],al
                mov al,r
                mov [ebx+ecx],al
                jmp weiter

            .endif

            mov al,0
            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

Window 20,20-600,450
Cls @RGB(220,220,220)
oGL("Init", %hWnd, 0,0, 0, 0)
oGL("PosMode", 1)
bild1$="muster.bmp"
var tex.auto%=erzeugetex(bild1$)
var tex.grund%=OGL("loadtexturebmp","muster1.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

    drawglscene()

ENDWHILE

proc drawglscene

    OGL("Clear")
    OGL("glEnable",~GL_BLEND)
    OGL("glBlendFunc",~GL_SRC_ALPHA, ~GL_ONE_MINUS_SRC_ALPHA)
    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!+90)
    OGL("quad",0.7,0.7)
    OGL("show")

endproc

proc erzeugetex

    parameters namebild$
    declare width%,height%
    declare Handle&,a&
    declare bmi#,bildxy#
    var texid%=0
    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

    Handle& = Create("hPic", -1, namebild$)
    a&=bmi#.biSizeImage&
    dim bildxy#,a&
    ~GetDIBits(%hdc,Handle&,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#
    disponer bildxy#
    RETORNO texid%

ENDPROC

 
19.08.2008  
 




Jörg
Sellmeyer
En me se el erste Bild en 90° gegen el Uhrzeigersinn gedreht. Wenns Absicht es, kann Yo el zumindest en el Code no encontrar.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.08.2008  
 



Weil él el Achsen (no) vertauscht.
 
19.08.2008  
 



Das war en mi Vorhaben absicht , porque lo el Grafikform erforderte.

OGL("rotate",0,0,winkel!+90) poner : OGL("rotate",0,0,winkel! )

¿Puede auch todavía el SINUS y COSINUS verändern después de belieben.

mfg
 
19.08.2008  
 




Jörg
Sellmeyer
Ok, había Yo no gesehen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.08.2008  
 



Der ASM-Code es una bisschen gekürzt con : "jmp wandle".
Und así puede ser se entonces al Code todavía austoben con mejor Routinen.

Wenn uno el DLL nimmt, puede ser auch dieses reinsetzen :

DEF rgb_umwandlung(2) ! "muster.dll","rgb_umwandlung"
y así aufrufen:
rgb_umwandlung(bildxy#,a&)
KompilierenMarcaSeparación
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

ss=s4 href='./../../function-references/XProfan/endif/'>EndIf
 
19.08.2008  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

7.127 Views

Untitledvor 0 min.
H.Brill29.10.2023
Tango30.10.2021
Sven Bader09.07.2021
Normann Strübli03.08.2020
Más...

Themeninformationen

Dieses Thema ha 3 subscriber:

unbekannt (3x)
Jörg Sellmeyer (2x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie