Fuente/ Codesnippets | | | | | Erste Anfängerversuche con "glReadPixels" de me.
Mit diesem Befehl KompilierenMarcaSeparación"ogl("glReadPixels",x,y,xw,yh+,~GL_RGBA,~GL_UNSIGNED_BYTE,bereich#) " > puede ser en el Zusammenhang con KompilierenMarcaSeparación el Openglfenster como Grafikbild en un Bereichsvariable reinpacken y auswerten para evtl Collisionen, primero en me en 2D, oder Mostrar, como en el Demo. El Auswahl es el Fontbuffer oder el Backbuffer.
x y y es el Punkt en el OpenGL-Ventana de wo de el Breite xw y el Höhe yh en el Bereichsvariable eingelesen se. Ein Punkt entspricht 4 Byte (RGBA), entsprechend muss el Bereichsvariable creado voluntad. Desde que una Bild de 128x128 Pixel habe , Es el Bereichsvariable en me 128*128*4.
Yo habe en me una OpenGlFenster de 350x350 Pixel. Mein Bild lese Yo en x=140 y y=140 de , con uno Breite de 128 y uno Höhe de 128 , en lo simplemente a halten en para media Intento no neue KompilierenMarcaSeparación"bild_h& = Create("hPic", -1, namebild$)" > anzulegen. Gewählt Yo el Backbuffer.
Mit diesem Befehl : ~setDIBits(%hdc,bild_h&,0,bmi#.biHeight&,bereich#,bmi#,0) lese Yo el Bild en el Handle bild_h& una, uno kann auch hier otra vez una más Handle con "bild_h& = Crear("HPIC", -1, namebild$)" invertir. Das blanco Todavía no, cómo hacer un Handle festlegt con Crear sin una BMP(Bild) reinzusetzen. Und mache dieses Bild de "glReadPixels" en el Ventana principal links(no OpenGlFenster) sichtbar con "drawpic bild_h&,10,10,0".
Vorher necesario auch otra vez 2 BMP-Bilder creado voluntad, una vez el Hintergrund y una vez una Objeto para Steuern. XPIA muss auch otra vez aktiviert voluntad.
Bitte esta Demo con neuen Ideen bestücken, tal vez habt ihr todavía wesentlich bessere Einfälle en dieses auszubauen. Diese Demo es sólo una I-Tüpflelchen, es veces una Concepto, el al Anfang es.
El Farben son todavía vertauscht vom Bild "glReadPixels", porque esta andersherum leerse. KompilierenMarcaSeparación $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#
disponer bildxy#
RETORNO texid%
ENDPROC
|
| | | | |
| | | Posesiones una solución a el vacío Handle gefunden :
declarar bild_h1&
mcls 128,128,0 bild_h1& = Crear("HPIC", 0,"& MEMBMP" )
Jetzt necesario esta beiden Befehle así bestückt voluntad :
~setDIBits(%hdc,bild_h1&,0,128,ogl_rgb#,bmi#,0)
drawpic bild_h1&,10,10,0
Weiterhin el richtigen Parámetro gefunden, así el Farben no vertauscht voluntad :
~GL_BGRA en lugar de ~GL_RGBA , also:
ogl("glReadPixels",140,140,128,128,~GL_BGRA,~GL_UNSIGNED_BYTE,ogl_rgb#)
mfg |
| | | | |
| | | Der Hilo es "hier" bajo Programas aber falso abgelegt, una Admin Por favor, mover. |
| | | | |
|
Zum QuelltextThemeninformationenDieses Thema ha 2 subscriber: |