C ++ Foro | | | | | ¿Por qué muss Yo mi Función : drawogl 2x hintereinander eingeben, así se el Objeto dreht. Aber sólo beim Compilieren con Profano2Cpp. Ansonsten no. El dll braucht uno con para Ablauf. KompilierenMarcaSeparación $H Windows.ph
DEF rgb_umwandlung(2) ! bmptex.dll,bmptex
declare x1!,y1!,dx!,dy!,winkel!,groesse&,handleogl&
declare hWin&,hwin1&,hintergr&,tex.auto&
declare width&,height&,texid&,ende&
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy#
groesse&=128*128*4
dim bildxy#,groesse&
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = Create(text, %hWnd, Test1, 10, 10, 128,128)
hWin1& = Create(text, %hWnd, Test2, 250, 20, 500,500)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto_h& = Create(hnewPic,64,64,0 )
hintergr&=create(hnewpic,500,500,$00ffff)
tex.auto&=erzeugetex(auto.bmp)
drawogl
drawogl
oglzubmp
drawscene
WHILE ende&
WaitInput
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(81)
winkel!=winkel!+1.0
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawogl
drawogl
oglzubmp
drawscene
endif
ENDWHILE
end
proc drawogl
OGL(Clear)
OGL(origin,0,0,-1.11)
OGL(texture,tex.auto&,1)
OGL(rotate,0,0,winkel!)
OGL(quad,0.5,0.5)
OGL(show)
endproc
proc oglzubmp
DeleteObject handleogl&
handleogl&=create(hPic,0,&OGLBMP )
endproc
proc drawscene
StartPaint hwin1&
drawpic hintergr&,0,0;0
drawpic handleogl&,100+dx!,100+dy!,-1 ;-1
EndPaint
endproc
proc bitmap_header
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
endproc
proc erzeugetex
parameters namebild$
texid&=0
height&=128
width&=128
dispose bmi#
bitmap_header()
bild_umw_h& = Create(hPic, -1, namebild$)
~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
rgb_umwandlung(bildxy#,groesse&)
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 bildxy#
ref='./../../funktionsreferenzen/XProfan/volver/'>RETORNO texid&
ENDPROC
|
| | | | |
| | Sebastian König | ¡Hola Peter,
Peter Bierbachh
¿Por qué muss Yo mi Función : drawogl 2x hintereinander eingeben, así se el Objeto dreht. Aber sólo beim Compilieren con Profano2Cpp. Ansonsten no. El dll braucht uno con para Ablauf.
desafortunadamente kann Yo el problema todavía no nachvollziehen... Auch si yo el doppelten drawogl-Aufrufe auskommentiere, kann Yo no hay diferencia zwischen XProfan- y Profano2Cpp-Variante determinar. Das Objeto dreht y bewegt se como se.
Kann lo evtl. veces alguien anders, el hier mitliest, en se ausprobieren?
MfG
Sebastian |
| | | | |
| | | Hier veces sin dll. Im linken Ogl-Ventana dreht lo. Aber en el rechten Ventana normalen Screen restos lo posición , es aber a sehen. Yo habe en Farbtiefe 32 y 16 bit probiert. KompilierenMarcaSeparación $H Windows.ph
declare x1!,y1!,dx!,dy!,winkel!,groesse&,handleogl&
declare hWin&,hwin1&,hintergr&,hintergr1&,tex.auto&,adresse%,groesse%
declare width&,height&,texid&,ende&
declare bild_auto_h&,bild_umw_h&
declare bmi#,bildxy#
groesse%=128*128*4
dim bildxy#,groesse%
ende&=1
Window 20,20-800,600
Cls @RGB(220,220,220)
hWin& = Create(text, %hWnd, Test1, 10, 10, 128,128)
hWin1& = Create(text, %hWnd, Test2, 250, 20, 500,500)
oGL(Init, hwin&, 0,0, 0, 0)
oGL(PosMode, 1)
bild_auto_h& = Create(hnewPic,64,64,0 )
hintergr&=create(hnewpic,500,500,$00ffff)
hintergr1&=create(hnewpic,500,500,$000000)
tex.auto&=erzeugetex(auto.bmp)
drawogl
drawogl
oglzubmp
drawscene
WHILE ende&
if isKey(87)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!-x1!
dy!=dy!-y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(83)
y1!=Sin((-winkel!)/180.0*pi())*2
x1!=Cos((-winkel!)/180.0*pi())*2
dx!=dx!+x1!
dy!=dy!+y1!
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(81)
winkel!=winkel!+1.0
drawogl
drawogl
oglzubmp
drawscene
endif
if isKey(69)
winkel!=winkel!-1.0
drawogl
drawogl
oglzubmp
drawscene
endif
ENDWHILE
end
proc drawogl
OGL(Clear)
OGL(origin,0,0,-1.11)
OGL(texture,tex.auto&,1)
OGL(rotate,0,0,winkel!)
OGL(quad,0.5,0.5)
OGL(show)
endproc
proc oglzubmp
DeleteObject handleogl&
handleogl&=create(hPic,0,&OGLBMP )
endproc
proc drawscene
StartPaint hintergr1&
drawpic hintergr&,0,0;0
drawpic handleogl&,100+dx!,100+dy!,-1 ;-1
EndPaint
StartPaint hwin1&
drawpic hintergr1&,0,0;0
EndPaint
endproc
proc bitmap_header
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
endproc
proc erzeugetex
parameters namebild$
texid&=0
height&=128
width&=128
dispose bmi#
bitmap_header()
bild_umw_h& = Create(hPic, -1, namebild$)
~GetDIBits(%hdc,bild_umw_h&,0,bmi#.biHeight&,bildxy#,bmi#,0)
bmptex()
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 bildxy#
RETURN texid&
endproc
proc bmptex
adresse%=bildxy#
P2CPP: <INLINE_CPP>
long zaehler;
long wert;
unsigned char b;
unsigned char g;
unsigned char r;
long adrr;
wert=PVAR(groesse%);
adrr=PVAR(adresse%);
char* bereich = reinterpret_cast<char*>(adrr);
for(zaehler = 0; zaehler <= wert; zaehler = zaehler + 4)
{
b=bereich[zaehler] & 255;
g=bereich[zaehler+1] & 255;
r=bereich[zaehler+2] & 255;
if ((r==0) & (b==0) & (g==0))
bereich[zaehler+3]=0;
else
{
bereich[zaehler+3]=255;
}
bereich[zaehler+2]=b;
bereich[zaehler]=r;
}
P2CPP: span class=s2>/ INLINE_CPP>
ENDPROC
|
| | | | |
| | Sebastian König | Peter Bierbachh
Hier veces sin dll. Im linken Ogl-Ventana dreht lo. Aber en el rechten Ventana normalen Screen restos lo posición , es aber a sehen. Yo habe en Farbtiefe 32 y 16 bit probiert.
Also en me zumindest es el Ergebnis igual - lo dreht se en beiden Fenstern, auch si yo el doppelten Aufrufe auskommentiere. |
| | | | |
| | Sebastian König | Apéndice: Auf una otro Sistema podría Yo, el Fehler ahora reproduzieren. Yo melde mich hier otra vez, sobald Yo el Ursache gefunden habe. |
| | | | |
| | | | | | | |
| | Sebastian König | Um Aquí el hilo abzuschließen: Der letzte Stand es, dass lo en me en una XP-Sistema en beiden Varianten (XProfan y Profano2Cpp) funktioniert, en una otro (con Vista) sin embargo grundsätzlich no. Lo scheint Así que una Problema con &OGLBMP a geben, dass no Profano2Cpp-spezifisch es... Peter ha hier [...] una Alternative beschrieben, el siempre sicher trabajo debería. |
| | | | |
| | Sebastian König | ¡Hola Peter,
beim Testen uno neuen, en Deinem glReadPixels()-Ejemplo aufbauenden Variante para &OGLBMP stieß Yo vorhin en una mysteriösen Choque, el unregelmäßig auftrat. Yo mi el Ursache en Deinem C++-Code gefunden a haben: In el Línea KompilierenMarcaSeparación debería meiner Meinung después de el <= ein einfaches < sein, sonst wird die Bereichsgrenze um einige Bytes überschritten. Da ich vermute, dass der Bug auch in der DLL steckt, wollte ich hier mal darauf hinweisen...
MfG
Sebastian |
| | | | |
| | funkheld | Gracias.
Aber el Ventana en el Hauptrogramm se sólo suscrito si yo lo con ratón algo se han trasladado.
Gracias. Gruss |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |