Français
Source/ Codesnippets

Bilder Bmp direct Opengl Programme Texturen

 
une kleine Demo zum Direkten einlesen de BMP-Fichiers pour Texturen avec ASM-Befehlen/XPIA et dem Befehl "GetDIBits" pour OpenGL.
qui la couleur "schwarz" wird durchsichtig gezeichnet.
Um cela Programme trop benutzen, doit encore 2 Muster-BMP-Fichiers erstellt volonté.
par qui gute Aider im Forum konnte je cela umsetzen.
par qui 2D vorraussetzungen avec Opengl peux on très joli Sprites erzeugen et avec cela travailler.
avec den Tasten "Q,W,E,S" peux on un bisschen speilen.

cet Demo peux chacun pour sich récente umsetzen et dans eigene Programme Teile en prendre.
KompilierenMarqueSéparation
 $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#
    dispose bildxy#
    RETOUR texid%

endproc

 
19.08.2008  
 




Jörg
Sellmeyer
chez mir wird cela erste Bild um 90° vers den Uhrzeigersinn gedreht. Wenns intention ist, peux je cela zumindest dans dem Code pas trouver.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.08.2008  
 



Weil il qui Achsen (pas) vertauscht.
 
19.08.2008  
 



cela était dans mon projet intention , weil es qui Grafikform erforderte.

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

peux aussi encore qui SINUS et COSINUS verändern pour belieben.

mfg
 
19.08.2008  
 




Jörg
Sellmeyer
Ok, cela J'ai eu pas gesehen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.08.2008  
 



qui ASM-Code est un bisschen gekürzt avec : "jmp wandle".
et so peux on sich ensuite am Code encore austoben avec besseren Routinen.

si on qui DLL nimmt, peux on aussi cet reinsetzen :

DEF rgb_umwandlung(2) ! "muster.dll","rgb_umwandlung"
et so appel:
rgb_umwandlung(bildxy#,a&)
KompilierenMarqueSéparation
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


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

7.105 Views

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

Themeninformationen

cet Thema hat 3 participant:

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


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie