Wünsche y Sugerencias | | | | - Página 1 - |
| | Gedanklich de: [...]
@Roland:
Lauter Características welche como geschaffen son en primero en un experimental-Función aufgenommen a voluntad - por ejemplo puede ser con XProfan OpenGL no positions- y farbgenauen Textausgaben erzeugen y uno einfachen Función (XProfan-Ver código fuente längst disponible) gibts hierzu Abhilfe hacer frente a OpenGL auch schöne Texteffekte y Textausgaben erzeugen a puede como todos otro auch tun (no umsonst) una Font-Textur.
Auf Alemán: Roland bau pero por favor una Función el para Ejemplo experimental heisst, y para esta experimental Por favor, una para KompilierenMarcaSeparación
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
Also KompilierenMarcaSeparación.
Por ejemplo empfinde Yo el Implementierung uno Systemvariable $appDataDir en el Gegensatz a solch zeitkritischen Dingen bastante irritierend, como una $appDataDir selten sinnvoll en Schleifen Verwendung encontrar se y una $appDataDir con z.B. 3 eigenen XProfanzeilen a sustituir es y el Función esta ya jahrelang überall rumbaumelt.
Tal vez no unsinnvoller, Características a implementieren, welche wiederkehrende y zeitkritische Vorgänge abdecken, a Geschwindigkeit des XProfanprogrammes auch más konkurrenzfähig a gestalten.
La idea con el Experimental-Función es mi humilde opinión nun ya encima 1,5 Jahre alt y yo habe - si yo mich bastante entsinne - noo Ideenfeedback. Yo möchte no beginnen me incluso como una Nervensäge vorzukommen. |
| | | | |
| | | | | - Página 1 - |
| | Apéndice: IF
Yo möchte no beginnen me incluso como una Nervensäge vorzukommen. Zu spät! |
| | | | |
| | | OGL.DRAWSYSTEXT ha heute ser 2 jähriges Esperar en una Reacción aufgegeben, findet desafortunadamente sólo en z.B. uno DLL ser Zuhause.
Statt dieser lauter Beiträge hätte Yo solch DLL igual escribir puede, pero yo quería zeigen qué para tolle Juegos uno con XProfan herstellen kann - con reinem XProfan en besonders así a werben auch en el Spiel. |
| | | | |
| | RGH | Hola si,
Yo mich con uno Kontainerfunktion experimental no tan bastante anfreunden puede. Das birgt doch el Gefahr, dass Fuente con dieser Función veröffentlicht y ser esta auch todavía Monate y Jahre después de el Veröffentlichung en el Weiten des WWW (oder dieser Comunidad) herumgeistern. Dann kommen sicher bald irgendwelche Personas, el esta herunterladen y ausprobieren querer y otra vez kurz antes una Herzkasper posición, porque esta experimentellen Kontainerfunktionen no o más anders trabajo y ellos nun el riesigen Quellcodes umschreiben necesario.
Zu Deiner OGL-Función: Füge doch veces una kurzes XProfan-Beispielprogramm hinzu, con el uno sieht, qué ellos macht y qué ihre Fähigkeiten demonstriert y erleutere ihre Parámetro veces en verständlichem (Hilfedatei-geeignetem) Alemán. Dann schaue Yo el Sache veces a y packe ellos möglicherweise en el ToDo-Liste para el nächste XProfan-Versión. Versprochen!
Saludo 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 ▲ |
| |
| | | Schrift/Textausgaben malen, el/una Textur-Expediente beinhaltet todos Chars y el Función características de esta Chars entsprechend texturierte Vertexe sodass el a el Función übergebene String por OpenGL ausgegeben se.
El Parámetro:
X!,Y! : Position des auszugebenen Textes TXT$ : Auszugebener Texto
Optionale Parámetro SZ! : YX Skalierungsfaktor/Schriftgrösse SZY! : Vertikal-Verzerrung para typische Effekte HOPX! : Sprungweite zwischen el Chars SZX! : Horizontal-Verzerrung para typische Effekte
El obige Función es (natürlich) optimiert en schnelle Ausführung por XProfan - una Delphi oder C Code sería sicher algo anders programmiert mehr Geschwindigkeit bringen. (z.B. sin MID$ en el Bucle)
Das oben es sólo una abgespeckte Variante, el Original ha ni optionale xtraProcAddr en Textos z.B. simplemente de aussen Rotieren oder Knicken que se. KompilierenMarcaSeparación
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 el xtraProcAddr es en el Grunde una einfache (zugleich aber äusserst wirkungsvolle) Sache, Yo aber desafortunadamente todavía kein Feedback en el Cuestión si Usted de XProfan heraus una XProfan-Función aufrufen kannst deren Adresse por ProcAddr bezogen wurde. (Yo glaube aber: Natürlich) Darum Yo esta Part de el obigestem Code a ogl.drawSysText primero herausgenommen auch en no völlig a verwirren.
También - aber sólo en Beispiele a nennen para tal vez testweise implementierbare Características - Yo Helfer-Schleifen (Características) para Terrainbildung en uno Fläche oder en una Sphere mühsam (para mich mühsam) erstellt, el Vorgang por XProfan unschön largo braucht aber nativ eingebunden (qué imho una Klax es) wäre lo muy bereichernd y weitere Ideen fördernd.
Zum Thema experimental: Es una Gedankenanstoss!
Ähnlich como z.B. en OpenGL-Umsetzungen experimentelle Características son con Vorzeichen des Experimenterfinders nvx_* ata_* wäre lo tal vez bastante praktisch si Características - z.B. welche erstmalig en uno Versión a Versuchszwecken implementiert fueron - schonmal anbietest aber erklärst: Kein Apoyo/ Keine Garantie/ Experimentalfunktionen.
Gedacht esta Tuve (natürlich) una Kontainerfunktion en no IDs a verbraten - Yo aber glaube (desafortunadamente _auch no _weiss, porque kein Response a [...] ), dass lo una IDs-Problema no mehr son.
Tal vez also auch simplemente durchzählen also experimental(1..x,param1..x).
Zu el Codes el entonces rumschwirren: Como lo (kein?) IDs-Problema son debería lo nichts ausmachen, una später komplett integrierte Versión uno Función auch später todavía por Kontainerfunktion experimental aufrufbar a gestalten.
Der einzig technische Nachteil el se me erschließt wäre, dass el Runtime en unos pocos Byte a Grösse gewinnt.
Was wäre optimal: Wenn una alguien una tolle Función postet con Bitte en Antestung uno leichtfüssigen Integrierung para mehr Geschwindigkeit: Klar, kein Problema para Roland - de después de experimental. Tal vez entsteht entonces de el una oder otro experimentellen Función - welche se vlt. auch ya en lauter Versionen behauptet ha - una neue echte Función.
2011 entonces gleiche Punto gleiche Welle?
RGH
Hola si,
Yo mich con uno Kontainerfunktion experimental no tan bastante anfreunden puede.
Dann nenne ellos doch RGH! (Mir es ya klar, dass lo No a Benennung va, Yo finde experimental auch doof...) |
| | | | |
| | RGH | Hola si, lo fehlt me siempre todavía una Beispielcode, en obige (bastante weit obige) Función veces auszuprobieren y Aktion a sehen. Saludo 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 ▲ |
| |
| | | Jupp, habe sólo Zuhause mein /develope - Yo bau Usted qué Schönes hierzu zurecht.
Rumstreunende (y kompilierte) Beispiele gibts en Comunidad sin embargo algunos, z.B. De todos modos si yo el Thema versuchte otra vez (vorsichtig) anzustreifen.
Jedoch wäre lo schön para mich a wissen, si Yo uno XProfan-Función una con ProcAddr bezogene Funktionsadresse transferencia kann sodass esta por ProcAddr bezogene Función entonces de el nativen XProfan-Función en el Bedarfsfall ausgeführt voluntad podría. (Callbacks si así möchtest.)
Dann sería Yo nämlich más bien igual el Variante _mit xtraProcAddr traducido beispielisieren, gingen darüber entonces tolle Effekt como z.B. son una Zentrum drehende Chars oder Chars en Sinuswelle etc..
Nur sin la nativ vorliegende Hilfsfunktion en el XProfan por desgracia, no wirklich en z.B. Spielen zeitkritisch y effektiv einsetzbar. |
| | | | |
| | RGH | ¡Hola, Yo sería zuerst el erste Variante (sin esta ProcAddr-Geschichte) vorziehen y veces anschauen, si lo qué para XProfan 12 voluntad kann. Saludo 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 ▲ |
| |
| | | Un durchdachtere Variante wäre una oglDrawTiles-Función, para el Yo veces una Minimalbeispiel (haha) aufbereitet habe: KompilierenMarcaSeparación {$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/bucle/'>bucle )
wend
ENDPROC
Wohlbemerkt lo sólo a Función ogl.drawTiles ginge. (con oder sin extraproc)
So puede ser neben el Nützlichkeit rápidamente Tiles anzuzeigen esta Función auch para rápido derartige Textausgabe einsetzen. |
| | | | |
| | | Yo habe el Beispielquelltext para oglDrawTiles nochmals überarbeitet/aktualisiert, a el Función ogl.drawTiles incluso ha se nichts geändert.
Im Interpreter erreiche en el neuen Ejemplo 4 FPS y Runtime a 20 FPS.
Wäre ogl.drawTiles nativ sería el Interpreter en me ~20 FPS y el Runtime en abgeschaltetem VSync ~110 FPS erreichen qué natürlich klasse wäre. |
| | | | |
| | | Auf Pentium 4 con 3.4 GHz después de Compilierung con XPSE+XProfancompiler heiße 4 Fps ( Aber sólo después de langer Vorausberechnungszeit de ca 10 sec... Hmmmmmm... |
| | | | |
| | Nico Madysa | 1 - en Worten: una - Frame(s) pro Sekunde; aufgerundet, versteht se. Sitze hier aber auch a una 450-MHz-Rechner y Windows 2000. |
| | | | |
| | | | - Página 2 - |
| | | Nur KompilierenMarcaSeparación
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
debería nativ ser y el problema wäre Geschichte, auch con ausgebauten tileOutCallBack immernoch para vieles (como Textausgaben) wichtig. |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |