Source/ Codesnippets | | | | | Erste Anfängerversuche avec "glReadPixels" de mir.
avec diesem Befehl KompilierenMarqueSéparation"ogl("glReadPixels",x,y,xw,yh+,~GL_RGBA,~GL_UNSIGNED_BYTE,bereich#) " > peux on im Zusammenhang avec KompilierenMarqueSéparation cela Openglfenster comme Grafikbild dans un Bereichsvariable reinpacken et auswerten pour peut-être Collisionen, erstmal chez mir dans 2D, ou bien Montrer, comment dans qui Demo. qui sélection ist qui Fontbuffer ou bien qui Backbuffer.
x et y ist qui Punkt im OpenGL-la fenêtre de wohin aus qui Breite xw et qui Hauteur yh dans qui Bereichsvariable lire wird. un Punkt entspricht 4 Byte (RGBA), entsprechend muss qui Bereichsvariable angelegt volonté. là je un Bild de 128x128 Pixel habe , ist qui Bereichsvariable chez mir 128*128*4.
j'ai chez mir un OpenGlFenster de 350x350 Pixel. mon Bild lese je chez x=140 et y=140 aus , avec einer Breite de 128 et einer Hauteur de 128 , um es simple trop tenir um pour meinen Versuch aucun neue KompilierenMarqueSéparation"bild_h& = Create("hPic", -1, namebild$)" > anzulegen. Gewählt habe Je l' Backbuffer.
avec diesem Befehl : ~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bereich#,bmi#,0) lese je cela Bild dans cela Handle bild_h& un, il peut aussi ici wieder un d'autre Handle avec "bild_h& = Créer(«PCSI», -1, namebild$)" anlegen. cela weiss je encore pas, comment on un Handle festlegt avec Créer sans une BMP(Bild) reinzusetzen. et fais cet Bild de "glReadPixels" sur dem Hauptfenster à gauche(pas OpenGlFenster) sichtbar avec "drawpic bild_h&,10,10,0".
auparavant doit aussi wieder 2 BMP-Bilder angelegt volonté, einmal den Hintergrund et einmal un objet zum Steuern. XPIA muss aussi wieder aktiviert volonté.
s'il te plaît cet Demo avec neuen idées bestücken, peut-être avez son encore wesentlich bessere Einfälle um cet auszubauen. cet Demo ist seulement un I-Tüpflelchen, ist la fois une concept, qui am Anfang steht.
qui Farben sommes encore vertauscht vom Bild "glReadPixels", weil cet andersherum lire volonté. KompilierenMarqueSéparation $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#
RETOUR texid%
endproc
|
| | | | |
| | | Habe une Solution pour cela le vide Handle trouvé :
declare bild_h1&
mcls 128,128,0 bild_h1& = Créer(«PCSI», 0,"& MEMBMP" )
maintenant doit cet beiden Befehle avec cela bestückt volonté :
~setDIBits(%hdc,bild_h1&,0,128,ogl_rgb#,bmi#,0)
drawpic bild_h1&,10,10,0
Weiterhin den richtigen paramètre trouvé, avec cela qui Farben pas vertauscht volonté :
~GL_BGRA statt ~GL_RGBA , alors:
ogl("glReadPixels",140,140,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
mfg |
| | | | |
| | | qui Fil ist "hier" sous Programme mais faux abgelegt, un Admin s'il te plaît Déplacer. |
| | | | |
|
Zum QuelltextOptions du sujet | 4.722 Views |
Themeninformationencet Thema hat 2 participant: |