Wünsche et Anregungen | | | | - page 1 - |
| ![iF: 07.04.2009](.././../../i/a/1.gif) | Gedanklich aus: [...] ![](.././../../i/lnk.gif)
@Roland:
Lauter Funktionen quelle comment geschaffen sommes um erstmal dans un experimental-Funktion aufgenommen trop volonté - beispielsweise peux on avec XProfan OpenGL aucun positions- et farbgenauen Textausgaben erzeugen et einer einfachen Funktion (XProfan-Voir le texte source jadis vorhanden) gibts hierzu Abhilfe um avec OpenGL aussi belle Texteffekte et Textausgaben erzeugen trop peut comme alle anderen aussi 1faire (pas umsonst) sur une Font-Textur.
sur allemande: Roland bau doch s'il te plaît une Funktion qui zum Beispiel experimental heisst, et pour cet experimental s'il te plaît une pour KompilierenMarqueSéparation
proc OGL.DRAWSYSTEXT
PARAMETERS X!,Y!,TXT$,SZ!,SZY!,HOPX!,SZX!
IF %PCOUNT<7
SZX!=1
ENDIF
IF %PCOUNT<6
HOPX!=1
ENDIF
IF %PCOUNT<5
SZY!=1
ENDIF
IF %PCOUNT<4
SZ!=1
ENDIF
HOPX!=HOPX!*SZ!
SZX!=SZX!*SZ!
var XX!=X!+32*SZX!
var YY!=Y!+32*SZ!*SZY!
var TX!=0
var TY!=0
var TXX!=0
var TYY!=0
var COLUMN&=0
var ROW&=0
var O&=0
var C&=LEN(TXT$)
OGL(push)
OGL(texture,OGL.TEXSYSFNT&,1)
HOPX!=16*HOPX!
WHILELOOP C&
O&=ORD(MID$(TXT$,&LOOP,1))
COLUMN&=O&16
ROW&=O&-COLUMN&*16
TX!=0.0625*COLUMN&-0.005
TY!=0.0625*(16-ROW&-1)-0.005
TXX!=TX!+0.0625
TYY!=TY!+0.0625
OGL(glBegin,7)
OGL(glTexCoord2f,TX!,TYY!)
OGL(glVertex3f,X!,Y!,0)
OGL(glTexCoord2f,TXX!,TYY!)
OGL(glVertex3f,XX!,Y!,0)
OGL(glTexCoord2f,TXX!,TY!)
OGL(glVertex3f,XX!,YY!,0)
OGL(glTexCoord2f,TX!,TY!)
OGL(glVertex3f,X!,YY!,0)
OGL(glEnd)
ENDWHILE
OGL(pop)
RETURN HOPX!
href='./../../function-references/XProfan/endproc/'>endproc
alors KompilierenMarqueSéparation.
Beispielsweise empfinde je qui Implementierung einer Systemvariable $appDataDir im opposition trop solch zeitkritischen Dingen assez irritierend, là un $appDataDir selten sinnvoll dans Schleifen Verwendung trouver wird et un $appDataDir avec z.B. 3 eigenen XProfanzeilen trop ersetzen ist et qui Funktion hierfür déjà jahrelang überall rumbaumelt. ![](.././../../i/s/wall.gif)
Peut-être es pas unsinnvoller, Funktionen trop implementieren, quelle wiederkehrende et zeitkritische Vorgänge abdecken, à Geschwindigkeit des XProfanprogrammes aussi plus konkurrenzfähig trop gestalten.
L'idée avec qui Experimental-Funktion ist imho eh bien déjà sur 1,5 Jahre vieux et j'ai - si je mich droite entsinne - noo Ideenfeedback. je voudrais pas commencer mir selbst comment une Nervensäge vorzukommen. |
| | | | |
| | | | | - page 1 - |
| ![iF: 07.04.2009](.././../../i/a/1.gif) | Nachtrag: iF
je voudrais pas commencer mir selbst comment une Nervensäge vorzukommen. trop spät! ![](.././../../i/s/_n_red_smile.gif) |
| | | | |
| | ![iF: 08.04.2009](.././../../i/a/1.gif) | OGL.DRAWSYSTEXT hat aujourd'hui son 2 jähriges attendre sur une réaction aufgegeben, findet malheureusement seulement dans z.B. einer DLL son Zuhause.
Statt cette lauter Posts hätte je mir solch DLL juste écrivons peut, mais je voulais montrer quoi pour tolle Jeux on avec XProfan herstellen peux - avec reinem XProfan um besonders avec cela trop werben aussi im Spiel. |
| | | | |
| | ![RGH: 08.04.2009](.././../../i/a/20.gif) RGH | allô iF,
j'ai mich avec einer Kontainerfunktion experimental encore pas so droite anfreunden peut. cela birgt doch qui péril, dass Source avec cette Funktion veröffentlicht volonté et cet aussi encore Monate et Jahre pour qui Veröffentlichung dans den Weiten des WWW (ou bien cette Community) herumgeistern. ensuite venons sûrement bientôt irgendwelche gens, qui cet herunterladen et ausprobieren voulons et wieder kurz avant einem Herzkasper stehen, weil cet experimentellen Kontainerfunktionen pas plus ou bien anders marcher et vous eh bien qui riesigen Quellcodes paraphraser doit.
trop Deiner OGL-Funktion: Füge doch la fois un kurzes XProfan-Beispielprogramm hinzu, avec dem on voit, quoi vous pouvoir et quoi ses Fähigkeiten demonstriert et erleutere ses paramètre la fois dans verständlichem (Hilfedatei-geeignetem) allemande. ensuite schaue je mir qui l'affaire la fois à et packe vous möglicherweise sur qui ToDo-liste pour qui prochain XProfan-Version. Versprochen!
Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 08.04.2009 ▲ |
| |
| | ![iF: 08.04.2009](.././../../i/a/1.gif) | Schrift/Textausgaben malen, qui/une Textur-Dossier beinhaltet alle Chars et qui Funktion zeichnet aus cette Chars entsprechend texturierte Vertexe sodass qui à qui Funktion übergebene String per OpenGL ausgegeben wird.
qui paramètre:
X!,Y! : Position des auszugebenen Textes TXT$ : Auszugebener Text
Optionale paramètre SZ! : YX Skalierungsfaktor/Schriftgrösse SZY! : Vertikal-Verzerrung pour typische Effekte HOPX! : Sprungweite entre den Chars SZX! : Horizontal-Verzerrung pour typische Effekte
qui obige Funktion ist (naturellement) optimiert sur schnelle Ausführung per XProfan - un Delphi ou bien C Code serait sûrement quelque chose anders programmiert plus Geschwindigkeit apporter. (z.B. sans MID$ dans qui Boucle)
cela dessus ist seulement une abgespeckte variante, cela Original hat encore une optionale xtraProcAddr um Textes z.B. simple de aussen Rotieren ou bien Knicken trop laisser. KompilierenMarqueSéparation
ogl.drawSysText(float x,y,string txt,float sz,szY,hopX,szX,xtraProcAddr){
case pcount<8 : xtraProcAddr=0
case pcount<7 : szX=1
case pcount<6 : hopX=1
case pcount<5 : szY=1
case pcount<4 : sz=1
hopX=hopX*sz
szX=szX*sz
float xx=x+32*szX
float yy=y+32*sz*szY
float tx,ty,txx,tyy
long column,row,o,c=len(txt)
ogl.push
ogl(texture,ogl.texSysfnt,1)
hopX=16*hopX
case xtraProcAddr:call(xtraProcAddr,c,0,(x-xx)*1000000,(y-yy)*1000000,hopX*1000000)
whileloop c {
o=ord(mid$(txt,loop,1))
column=o16
row=o-column*16
tx=0.0625*column-0.005
ty=0.0625*(16-row-1)-0.005
txx=tx+0.0625
tyy=ty+0.0625
case xtraProcAddr:call(xtraProcAddr,c,loop,(x-xx)*1000000,(y-yy)*1000000,hopX*1000000)
oGL(glBegin,GL_QUADS)
oGL(glTexCoord2f,tx,tyy)
oGL(glVertex3f,x,y,)
oGL(glTexCoord2f,txx,tyy)
oGL(glVertex3f,xx,y,)
oGL(glTexCoord2f,txx,ty)
oGL(glVertex3f,xx,yy,)
oGL(glTexCoord2f,tx,ty)
oGL(glVertex3f,x,yy,)
ogl(glEnd)
casenot xtraProcAddr:ogl(move,hopX,,)
}
ogl.pop
return hopX
}
Que le xtraProcAddr ist im Grunde une simple (zugleich mais äusserst wirkungsvolle) l'affaire, habe je mais malheureusement encore ne...aucune Feedback sur qui Frage si Du aus XProfan heraus une XProfan-Funktion appel peux en Adresse per ProcAddr bezogen wurde. (je crois mais: Bien sûr) tout autor habe je cette Part aus dem obigestem Code trop ogl.drawSysText erstmal herausgenommen aussi um pas völlig trop verwirren.
Ebenso - mais seulement um Beispiele trop appeler pour peut-être testweise implementierbare Funktionen - habe je Helfer-Schleifen (Funktionen) pour Terrainbildung sur einer Surface ou bien sur einem Sphere mühsam (pour mich mühsam) erstellt, qui Vorgang per XProfan unschön longtemps braucht mais nativ eingebunden (quoi imho un Klax ist) wäre es très bereichernd et weitere idées fördernd.
Zum Thema experimental: c'est un Gedankenanstoss!
Ähnlich comme z.B. dans OpenGL-Umsetzungen experimentelle Funktionen gibt avec Vorzeichen des Experimenterfinders nvx_* ata_* wäre es peut-être entier pratique si Du Funktionen - z.B. quelle erstmalig dans einer Version trop Versuchszwecken implementiert wurden - Schonmal anbietest mais erklärst: ne...aucune Soutien/ aucun garantie/ Experimentalfunktionen.
Gedacht hierfür J'ai eu (naturellement) une Kontainerfunktion um aucun IDs trop verbraten - je mais glaube (malheureusement _auch pas _weiss, weil ne...aucune Response trop [...] ), dass es un IDs-Problem pas plus gibt.
peut-être alors aussi simple durchzählen alors experimental(1..x,param1..x).
trop den Codes qui ensuite rumschwirren: là es (ne...aucune?) IDs-Problem gibt sollte es rien ausmachen, une später komplett integrierte Version einer Funktion aussi später encore per Kontainerfunktion experimental aufrufbar trop gestalten.
qui seule technische le tort qui sich mir erschließt wäre, dass qui Runtime um un paire Byte à Grösse gewinnt.
quoi wäre optimal: si un quelqu'un une tolle Funktion postet avec s'il te plaît um Antestung einer leichtfüssigen intégration pour plus Geschwindigkeit: bien sûr, ne...aucune Problem pour Roland - ab pour experimental. peut-être entsteht ensuite aus qui une ou bien anderen experimentellen Funktion - quelle sich vlt. aussi déjà dans lauter Versionen behauptet hat - une neue echte Funktion.
2011 ensuite gleiche Stelle gleiche onde? ![](.././../../i/s/__upl_ext_1100084240.gif)
RGH
allô iF,
j'ai mich avec einer Kontainerfunktion experimental encore pas so droite anfreunden peut.
ensuite nenne vous doch RGH! (Mir ist déjà bien sûr, dass es Dir pas à Benennung allez, je trouve experimental aussi doof...) |
| | | | |
| | ![RGH: 08.04.2009](.././../../i/a/20.gif) RGH | allô iF, es fehlt mir toujours un Beispielcode, um obige (entier large obige) Funktion la fois auszuprobieren et dans Aktion trop voyons. Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 08.04.2009 ▲ |
| |
| | ![iF: 08.04.2009](.././../../i/a/1.gif) | Jupp, habe seulement Zuhause mon /develope - je bau Dir quoi Schönes hierzu zurecht.
Rumstreunende (et kompilierte) Beispiele gibts dans qui Community cependant quelques, z.B. De toute façon si je cela Thema versuchte wieder (prudent) anzustreifen.
cependant wäre es joli pour mich trop savons, si je einer XProfan-Funktion une avec ProcAddr bezogene Funktionsadresse transfert peux sodass cet per ProcAddr bezogene Funktion ensuite de qui nativen XProfan-Funktion im Bedarfsfall fonctionnement volonté pourrait. (Callbacks si Du so vouloir.)
ensuite serait je nämlich lieber juste qui variante _mit xtraProcAddr traduit beispielisieren, gingen par-dessus ensuite tolle effet comment z.B. sich um un centre drehende Chars ou bien Chars sur Sinuswelle etc..
seulement sans qui nativ vorliegende Hilfsfunktion im XProfan malheureusement pas wirklich dans z.B. Spielen zeitkritisch et effectif einsetzbar. |
| | | | |
| | ![RGH: 08.04.2009](.././../../i/a/20.gif) RGH | Salut, je serait d'abord la première variante (sans cet ProcAddr-Geschichte) préférer et la fois anschauen, si daraus quoi pour XProfan 12 volonté peux. Salut Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 08.04.2009 ▲ |
| |
| | ![iF: 09.04.2009](.././../../i/a/1.gif) | une durchdachtere variante wäre une oglDrawTiles-Funktion, pour qui je la fois un Minimalbeispiel (haha) aufbereitet habe: KompilierenMarqueSéparation {$iq}
def &screenX 1024
def &screenY 768
window &screenX,&screenY
hWnd.setInnerSize(&screenX,&screenY)
var hPic&=create(hNewPic,512,512,0)
var y&=
startPaint hPic&
useFont fixedsys,1,0,0,0,0
textColor $FFFFFF,-1
whileLoop 256
drawText &loop mod 16*32,&loop16*32,chr$(&loop+1)
wend
endPaint
savepic fixedsys.bmp,hpic&
startpaint hPic&
cls $008800
usePen 0,0,$33BB33
whileLoop 0,16
line &loop*32,0 - &loop*32,512
line 0,&loop*32 - 512,&loop*32
wend
usePen 0,0,$006611
whileLoop 0,16
line 0,(&loop*32-1) - 512,(&loop*32-1)
line (&loop*32-1),0 - (&loop*32-1),512
wend
whileLoop 5000
setPixel rnd(512),rnd(512),$55EE55
wend
savepic grid.bmp,hpic&
deleteObject hPic&
//
ogl(init,%hWnd,0,0,0,0)
var meineTiles&=ogl(loadTextureBMP,fixedsys.bmp,1)
var meineTiles2&=ogl(loadTextureBMP,grid.bmp,1)
ogl(posMode,1)
var myList&=ogl(startList)
var s$=
whileLoop 16
s$=
whileLoop 16
s$=s$+chr$(&loop+y&*16)
wend
ogl.drawTiles(0,100+y&*16,s$,16,32,1,0.25)
inc y&
wend
ogl(endList)
var pa&=procAddr(myOGLTileOutCallBackProc,4)
var fps&=0
var fpsT&=&getTickCount+1000
var fpsC&=0
while 1
inc fpsC&
if fpsT&<&getTickCount
inc fpsT&,1000
fps&=fpsC&
fpsC&=0
endif
ogl(clear)
ogl(move,0,0,-5)
ogl(texture,meineTiles&,1)
ogl(color,0,0,1,1)
ogl(rotate,&getTickCount/700,&getTickCount/500,&getTickCount/300)
ogl(cuboid,1,1,1)
ogl(color,1,1,1,1)
ogl.2d()
ogl(drawList,myList&)
ogl.drawTiles(0,0,ABC Hallo Welt: +str$(&getTickCount),16,32,1,0.25)
ogl.drawTiles(0,200,ABC Hallo Welt: +str$(&getTickCount),16,32,4,0.25,pa&)
ogl(color,0,1,0,1)
ogl.drawTiles(0,500,FPS: +str$(fps&),16,32,1,0.25)
ogl(color,1,1,1,1)
ogl(texture,meineTiles2&,1)
whileLoop 16
ogl.drawTiles(650,5+&loop*32,chr$(&loop*4)+chr$(&loop*4+1)+chr$(&loop*4+2)+chr$(&loop*4+3),16,32)
wend
testCorrectOriginLines()
ogl(show)
case %mousePressed=2 : break
wend
//ogl(deleteTexture,1)
ogl(done)
end
proc myOGLTileOutCallBackProc
parameters x&,y&,c&,o&
ogl(move,c&*35,sin(c&+&getTickCount*0.003)*10+350,0)
//ogl(color,rnd(2),rnd(2),rnd(2),1)
endproc
proc ogl.drawTiles
parameters x!,y!,tiles$,tilesPerRow&,pixelPerTile&,scaleF!,dropF!,tileOutCallBack&
case %pCount<8 : tileOutCallBack&=0
case %pCount<7 : dropF!=1
case %pCount<6 : scaleF!=1
var c&=len(tiles$)
casenot c& : return x!
var COLUMN&=0
var ROW&=0
var TX!=0
var TY!=0
var TXX!=0
var TYY!=0
var o&=0
var f!=(1/tilesPerRow&)
var xx!=x!+pixelPerTile&*scaleF!
var yy!=y!+pixelPerTile&*scaleF!
ogl(push)
whileLoop c&
o&=ord(mid$(tiles$,&loop,1))-1
row&=o&*f!
column&=o&-row&*tilesPerRow&
tx!=f!*column&
ty!=f!*(tilesPerRow&-row&-1)
txx!=tx!+f!
tyy!=ty!+f!
messagebox str$(tx!)+ +str$(ty!)+ +str$(txx!)+ +str$(tyy!),,0
if tileOutCallBack&
ogl(push)
call(tileOutCallBack&,int(x!),int(y!),&loop,o&)
endif
oGL(glBegin,~GL_QUADS)
oGL(glTexCoord2f,tx!,tyy!)
oGL(glVertex3f,x!,y!,0)
oGL(glTexCoord2f,txx!,tyy!)
oGL(glVertex3f,xx!,y!,0)
oGL(glTexCoord2f,txx!,ty!)
oGL(glVertex3f,xx!,yy!,0)
oGL(glTexCoord2f,tx!,ty!)
oGL(glVertex3f,x!,yy!,0)
ogl(glEnd)
ifnot tileOutCallBack&
ogl(move,pixelPerTile&*dropF!*scaleF!,0,0)
else
ogl(pop)
endif
wend
OGL(pop)
RETURN pixelPerTile&*c&*dropF!*scaleF!
endproc
proc ogl.2d
ogl(origin,0,0,0)
ogl(posmode,1)
ogl(glMatrixMode,~GL_PROJECTION)
ogl.ortho(0,&screenY,&screenX,0,0,256)
endproc
proc ogl.ortho
parameters x&,y&,xx&,yy&,z&,zz&
ogl(glLoadIdentity)
ogl(glViewport,0,0,&screenX,&screenY)
declare m#
dim m#,48
float m#,0 =x&,xx&,y&,yy&,z&,zz&
ogl(glOrtho,long(m#,0 ),long(m#,4 ),long(m#,8 ),long(m#,12),long(m#,16),long(m#,20),long(m#,24),long(m#,28),long(m#,32),long(m#,36),long(m#,40),long(m#,44))
dispose m#
endproc
proc hWnd.setInnerSize
parameters x&,y&
setwindowpos %hWnd = %winLeft,%winTop - ((%winRight-%winLeft)-(width(%hWnd)-x&)),((%winBottom-%winTop)-(height(%hWnd)-y&));0
endproc
proc ogl.line
parameters x!,y!,xx!,yy!
ogl(glBegin,~GL_LINES)
ogl(glVertex3f,x!,y!,)
ogl(glVertex3f,xx!,yy!,)
ogl(glEnd)
endproc
proc testCorrectOriginLines
ogl(color,1,1,1,1)
whileLoop 0,&screenX,2
ogl.line(&loop,0,&loop,&screenY)
wend
whileLoop 0,&screenY,2
ogl.line(0,&loop,&screenX< a class=s4 href='./../../function-references/XProfan/loop/'>loop )
Wend
endproc
Wohlbemerkt es seulement à Funktion ogl.drawTiles ginge. (avec ou bien sans extraproc)
So peux on près de qui Nützlichkeit vite Tiles anzuzeigen cet Funktion aussi pour qui schnelle derartige Textausgabe einsetzen. |
![](/intl/i/dw.gif) | | | | |
| | ![iF: 09.04.2009](.././../../i/a/1.gif) | j'ai den Beispielquelltext pour oglDrawTiles nochmals révisée/aktualisiert, à qui Funktion ogl.drawTiles selbst hat sich rien geändert.
Im Interpreter erreiche chez dem neuen Beispiel 4 FPS et Runtime à 20 FPS.
Wäre ogl.drawTiles nativ serait qui Interpreter chez mir ~20 FPS et qui Runtime chez abgeschaltetem VSync ~110 FPS erreichen quoi naturellement super wäre. |
| | | | |
| | ![: 16.04.2009](.././../../i/a/noavatar.gif) | sur Pentium 4 avec 3.4 GHz pour Compilierung avec XPSE+XProfancompiler heiße 4 Fps ( mais seulement pour long Vorausberechnungszeit de ca 10 sec... Hmmmmmm... |
| | | | |
| | ![Nico Madysa: 17.04.2009](.././../../i/a/13527651904b3fcf583c5c0.png) Nico Madysa | 1 - dans Worten: un - Frame(s) pro Sekunde; aufgerundet, versteht sich. ![](.././../../i/s/__upl_ext_1111498539.gif) Sitze ici mais aussi à einem 450-MHz-calculateur et Windows 2000. |
| | | | |
| | | | - page 2 - |
| | ![iF: 17.04.2009](.././../../i/a/1.gif) | seulement KompilierenMarqueSéparation
proc ogl.drawTiles
parameters x!,y!,tiles$,tilesPerRow&,pixelPerTile&,scaleF!,dropF!,tileOutCallBack&
case %pCount<8 : tileOutCallBack&=0
case %pCount<7 : dropF!=1
case %pCount<6 : scaleF!=1
var c&=len(tiles$)
casenot c& : return x!
var COLUMN&=0
var ROW&=0
var TX!=0
var TY!=0
var TXX!=0
var TYY!=0
var o&=0
var f!=(1/tilesPerRow&)
var xx!=x!+pixelPerTile&*scaleF!
var yy!=y!+pixelPerTile&*scaleF!
ogl(push)
whileLoop c&
o&=ord(mid$(tiles$,&loop,1))-1
row&=o&*f!
column&=o&-row&*tilesPerRow&
tx!=f!*column&
ty!=f!*(tilesPerRow&-row&-1)
txx!=tx!+f!
tyy!=ty!+f!
messagebox str$(tx!)+ +str$(ty!)+ +str$(txx!)+ +str$(tyy!),,0
if tileOutCallBack&
ogl(push)
call(tileOutCallBack&,int(x!),int(y!),&loop,o&)
endif
oGL(glBegin,~GL_QUADS)
oGL(glTexCoord2f,tx!,tyy!)
oGL(glVertex3f,x!,y!,0)
oGL(glTexCoord2f,txx!,tyy!)
oGL(glVertex3f,xx!,y!,0)
oGL(glTexCoord2f,txx!,ty!)
oGL(glVertex3f,xx!,yy!,0)
oGL(glTexCoord2f,tx!,ty!)
oGL(glVertex3f,x!,yy!,0)
ogl(glEnd)
ifnot tileOutCallBack&
ogl(move,pixelPerTile&*dropF!*scaleF!,0,0)
else
ogl(pop)
endif
wend
OGL(pop)
RETURN pixelPerTile&*c&*dropF!*scaleF!
='./../../function-references/XProfan/endproc/'>endproc
devrait nativ son et cela Problem wäre Geschichte, aussi avec ausgebauten tileOutCallBack immernoch pour vieles (comment Textausgaben) important. ![](.././../../i/s/__upl_ext_1100084240.gif) |
| | | | |
|
répondreOptions du sujet | 6.564 Views |
Themeninformationencet Thema hat 4 participant: |