| |
|
|
- page 1 - |
|
Uwe ''Pascal'' Niemeier | allô gens!
je hatte enfin Gelegenheit, qui OpenGL-Funktionen trop testen et veux la fois un paire Kommentare en supplément isoler. il y a aussi un paire Propositions et quelque chose Kritik dabei. je hoffe, avant allem letzteres wird avec Wohlwollen aufgenommen
Allgemein: Mir ist aufgefallen,dass quelques profan-eigene ogl-Funktionen pas entier avec den gleichnamigen Original-APIs identique sommes. cela fait es schwer pour gens, qui irgendwelche Demos traduire voulons ou bien dans anderen Programmiersprachen déjà avec oGL gearbeitet avons. peut-être peut sich là encore quoi nachbessern, ou bien es muss dans qui späteren Aider entsprechend nachdrücklich sur solche Abweichungen hingewiesen volonté.
ici un paire Details:
ogl(Irgendein objet,...) chez Übersetzung meiner Ballerspiel-Demos habe je 1 heure gegrübelt, pourquoi mon Asteroiden so komisch par qui région eiern, jusqu'à je qui Fussnote dans qui OpenGL.txt trouvé habe: chez Erzeugung eines Objektes per glu-API liegt qui Körpermittelpunkt im Nullpunkt des Koordinatensystems, chez RGH qui unterste Punkt des Körpers veux on z.B. une Kugel um ihren Mittelpunkt rotieren laisser, muss on vous alors seulement um ihren Radius pour unten Déplacer. assez embêtant...
ogl(CLEAR) Entspricht pas qui ogl-API glClear; zusätzlich zum Effacer qui Grafik wird aussi cela Koordinatensystem zurückgesetzt (Ist là encore un glLoadIdentity incorporé?) qui Folge ist, dass dans einer Boucle avec CLEAR aucun relativen Transformationen possible sommes, seulement absolute. Beispiel RGH-ogl:
[box:03f4aca031]window 50,50-500,500 ogl(Init,%hwnd,0,0,0,1) declare R% tandis que 1 cas R%=360:R%=0 inc R% ogl(clear) ogl(déplacer,0,0,-3) ogl(rotate,0,R%,0) ogL(sphere,0.5,4,2) ogl(show) endwhile[/box:03f4aca031] Beispiel Standart-ogl: [box:03f4aca031]window 50,50-500,500 oGL(Init,%hwnd,0,0,0,1) ogl(déplacer,0,0,-3) tandis que 1 ogl(glClear,~GL_COLOR_BUFFER_BIT | ~GL_DEPTH_BUFFER_BIT) ogl(rotate,0,1,0) ogL(sphere,0.5,4,2) ogl(show) endwhile[/box:03f4aca031] Im 2. Beispiel wird qui ogl-Bildschirm zwar gelöscht, qui Matrix mais pas zurückgesetzt, sodass ROTATE chez chaque Durchlauf sur qui bereits gedrehte Szene angewendet wird.
Vorschlag: CLEAR sollte sich seulement sur cela Effacer des Bildes beschränken, pour pourrait on glLoadIdentity kapseln, z.B. comme ogl(RESETCOORD) ou bien so.
ogl(ORIGIN,...) Besteht anscheinend aus glLoadIdentity + glTranslate (MOVE), mets alors qui Koordinaten sur absolute Werte. Könnte entfallen, si es ogl(RESETCOORD) gäbe.
ogl(STARTLIST) Gibt une Integer-Namen pour qui DisplayList zurück. cela bedeutet mais, dass on chez mehreren DLs qui jeweiligen Namen z.B. dans einem Array enlever muss, um volle Kontrolle trop avons. Besser wäre, den Namen selbst vorzugeben, so comment dans qui Original-API. So wüsste on toujours, comment quelle DL anzusprechen wäre, aussi pourrait on une bereits angelegt DL überschreiben. comment wäre un optionaler paramètre iName% ? Ausserdem fehlt encore une Kapselung de glDeleteList.
oGL(LOADTEXTUREBMP,...) ici gilt cela Gleiche comment pour STARTLIST; qui IntegerName wird de Profan vorgegeben, pourrait mais aussi vom User zugeteilt volonté. Arrays könnten entfallen. Texturen könnten z.B. dans einer Boucle angelegt volonté et wären ensuite sur ses Nummerierung trop erreichen. BTW: une Alternative, um bmp-Handles trop verarbeiten, wäre aussi pas mal
ogl(2D,...) vois je cela richtig, dass ici zum 1. la fois qui Rückgabewerte einer Funktion direct dans vorgegebene Zielvariablen geschrieben volonté?? très gewöhnungsbedürftig! BTW: qui entsprechende Umkehrfunktion wäre aussi très nützlich!
ogl(TESTMOUSE,...) & ogl(TESTXY,...) si on chez letzterem qui Mausposition übergibt, peux on sich ersteres sparen...
ogl(STARTTEST,...) & ogl(ENDTEST) Praktischer wäre, si on ici un Rechteck vorgeben pourrait comment dans qui Original-API. ensuite entspräche cela Ganze pratique qui alten @Souris-Funktion. qui une Punkt testen veux, peux oui Start- et Endpunkte des Rechtecks übereinanderlegen.
Soviel pour erste. suis sur Kommentare gespannt (avant allem de Roland) PS: Werde bientôt encore un paire angepasste Demos posten.
SeeYou Pascal |
|
|
| |
|
|
|
| |
|
- page 2 - |
|
| Läuft chez Dir cela mitgelieferte Demo lesson13a.prf sans Absturz? |
|
|
| |
|
|
|
Frank Abbing | Pascal, mets cela -7 la fois dans Klammern, ensuite devrait es aller. Habe chez meinen Tests encore quelques cette Stolperstellen entdeckt et Roland aussi gemeldet. suis sûrement, dass il vous bientôt korrigiert hat. |
|
|
| |
|
|
|
RGH | [quote-part:60ba900c81=Uwe Pascal Niemeier] ogl(STARTLIST) Gibt une Integer-Namen pour qui DisplayList zurück. cela bedeutet mais, dass on chez mehreren DLs qui jeweiligen Namen z.B. dans einem Array enlever muss, um volle Kontrolle trop avons. Besser wäre, den Namen selbst vorzugeben, so comment dans qui Original-API. So wüsste on toujours, comment quelle DL anzusprechen wäre, aussi pourrait on une bereits angelegt DL überschreiben. comment wäre un optionaler paramètre iName% ?[/quote-part:60ba900c81] Dein Spieledemo avec den Asteroiden hat mich überzeugt, qui cela doch sinnvoll ist. Ab qui prochain Subscriptionsversion (qui 11.) gibt es diesem optionalen paramètre. sans cette paramètre wird avec glGenList qui prochain freie Listennummer ermittelt, avec paramètre wird plan cet numéro benutzt.
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 | 22.05.2006 ▲ |
|
|
|
|
RGH | [quote-part:47f614c4dd=Uwe Pascal Niemeier]si je cet la fenêtre dans den Hintergrund schicke (z.B. indem je ins dahinterstehende Editorfenster klicke), bekomme je une heftige Fehlermeldung. OK, qui Code comme solcher ist zwar assez sinnlos, mais c'est pourquoi juste un Gleitkomma-faute? ou bien habe je quoi übersehen?[/quote-part:47f614c4dd] Hm, chez mir fonctionne es völlig problemlos.
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 | 22.05.2006 ▲ |
|
|
|
|
RGH | [quote-part:b4209c4237=Uwe Pascal Niemeier][quote-part:b4209c4237]quoi den Ursprung qui Objekte betrifft, habe je longtemps avec mir gerungen. je suis en ausgegangen, qui OpenGL dans erster ligne number pour Jeux eingesetzt volonté wird et là liegen qui Objekte eh bien la fois alle sur dem Erdboden (qui Nulllinie) et ragen pas zur Moitié dans cette hinein.[/quote-part:b4209c4237] Stimmt, so hab je cela garnicht gesehen; cela fait Sinn !
quoi IMHO encore avec rein sollte: une Skalierfunktion[/quote-part:b4209c4237] Pour längerem Hin et Her habe je mich maintenant entschieden beides trop ermöglichen. avec oGL(PosMode, N%) peux on den Modus einstellen. Im Defaultmodus 0 ist qui Ursprung qui Objekte bodenständig ausgerichtet et im Modus 1 ist es qui Mittelpunkt des Objektes.
et qui Funktion oGL(Scale, N!) zum Verkleinern et agrandir de Objekten wird es aussi donner.
je denke la fois, dans qui prochain ou bien übernächsten Subscriptionsversion wird es soweit son.
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 | 23.05.2006 ▲ |
|
|
|
|
RGH | [quote-part:b46363596f=Uwe Pascal Niemeier]et naturellement une Funktion, qui den letzten ogl-faute comme String ausgibt (ou bien une entsprechende Systemvariable et une liste zum Nachschlagen)[/quote-part:b46363596f] mais pas doch! Händisches Nachschlagen im 21. siècle?
il y a ne...aucune spezielles Fehlerhandling pour dans qui OpenGL-API auftretende faute, mais Windows utilise ici cela Windowseigene Fehlerhandling. Den letzten aufgetretenen faute ermittelt qui API-Funktion GetLastError() et sur FormatMessage(...) peux on den passenden Fehlertext ermitteln. cet beiden Funktionalitäten habe je eh bien comme Système dans XProfan integriert:
%LastError : qui dernier aufgetretene Windowsfehler. 0 = ne...aucune faute. qui Wert qui Système ändert sich seulement, si un weiterer faute auftritt. Wichtiger Hinweis: un aufgetretener Windowsfehler sagt pas zwingend aus, qui un XProfan-faute aufgetreten ist. il y a durchaus aussi Windowsfehler, qui XProfan bewußt ignoriert.
$LastError : qui dernier aufgetretene Windowsfehler dans Textform.
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 | 23.05.2006 ▲ |
|
|
|
|
Uwe ''Pascal'' Niemeier | allô Roland!
[quote-part:a770c6eb53]il y a ne...aucune spezielles Fehlerhandling pour dans qui OpenGL-API auftretende faute, mais Windows utilise ici cela Windowseigene Fehlerhandling. [/quote-part:a770c6eb53] es du là sûrement?? KompilierenMarqueSéparation!
window 10,10-700,500
proc glError?--------------------------------
parameters a$
declare a&,b&
a&=ogl("glGetError")
b&=ogl("gluErrorString",a&)
messagebox(str$(a&)+": "+string$(b&,0),a$,0)
endproc--------------------------------------
ogl("init",%hwnd,0,0,0,1)
ogl("glClear",0)
glError? "Test 1"
ogl("glClear",-1)
glError? "Test t;
SeeYou Pascal |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | allô gens!
[quote-part:ed5606461a]Uwe Pascal Niemeier: si je cet la fenêtre dans den Hintergrund schicke (z.B. indem je ins dahinterstehende Editorfenster klicke), bekomme je une heftige Fehlermeldung.[/quote-part:ed5606461a] Es scheint wohl vom OS bzw. de qui Version qui oGL-dlls dépendant trop son...
qui faute tritt chez mir sur, si sich qui Szene pour Anwendung de Push/Pop sur qui Z-Achse am Nullpunkt est et ensuite angezeigt volonté soll: KompilierenMarqueSéparation!
window 50,50-500,500
ogl("init",%hwnd,0,0,0,1)
while 1
sleep 50
ogl("clear")
ogl("origin",0,0,0)--------Fehler!
ogl("origin",0,0,0.0001)--Klappt!
ogl("push")
ogl("move",2,1,-5)
ogl("sphere",1,5,5)
ogl("pop")
ogl("move",0,0,0.0001)--Klappt auch!
ogl("show")
| 24.05.2006 ▲ | |
|
|
|
|
RGH | [quote-part:2aa2723ce6=Uwe Pascal Niemeier]allô Roland!
[quote-part:2aa2723ce6]il y a ne...aucune spezielles Fehlerhandling pour dans qui OpenGL-API auftretende faute, mais Windows utilise ici cela Windowseigene Fehlerhandling. [/quote-part:2aa2723ce6] es du là sûrement??[/quote-part:2aa2723ce6] là J'ai eu offensichtlich quoi übersehen. mais getLastError() klappt aussi chez chez oGL-Fehlern. Offensichtlich utilise OpenGL aussi cela windowseigene Fehlerhandling. mais umso besser, ensuite gibt es eh bien une weitere Systemvariable et une neue oGL-Funktion:
e% = %oGLError et e$ = oGL(ErrorString, e%)
(qui l'affaire avec %LastError et $LastError peux je ensuite wieder einmotten.)
merci!
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 | 24.05.2006 ▲ |
|
|
|
|
Michael Wodrich | Einmotten???
si on so simple dans Profan une Windowsfehler serviert bekommt, ensuite wird es peut-être aussi häufiger benutzt.
je serait cet LastError-Geschichte drin laisser. Gehört oui zur Allgemeinen Fehlerbehandlung dans Windows.
et es wird oui toujours quelqu'un donner, qui pas sur Profan mais direct sur qui Windows-API am System dreht - là braucht on qui Fehlerabfrage oui.
belle Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 24.05.2006 ▲ |
|
|
|
|
Frank Abbing | vois je ähnlich. je würds drinlassen... |
|
|
| |
|
|
| |
|
- page 3 - |
|
|
| Zum ID-Sparen empfehle je get(lastmessage), get(errormessage) ou bien get(oglerror) ou bien quoi que + subj.... |
|
|
| |
|
|