| |
|
|
| ← zurück a OGL-Tutorialübersicht ogl->tutorial
[head]Einleitung[/head] ¡Hola Amigos des XProfan-OpenGL,
dies es una Intento el Implementierung de Tutoriales en el OnlineDoku.
El OnlineDoku es por lo tanto besonders geeignet como Miembros cualquier mitmischen, korrigieren y erweitern puede.
In diesem Kapitel widme Yo mich lediglich el Herstellung uno OpenGL-Fensters el später a Anzeige de Objekten dienen se.
Hier es no por lo tanto ogl ("init"... con seinen Parametern a erklären.
Anfangs debería uno se para una Variante entscheiden:
? Erzeugung <a href='#full'>Vollbild-Gamescreen</a> como en redcube ? Erzeugung <a href='#win'>Fenster-Gamescreens</a> ? Erzeugung <a href='#gdi'>Fenster con OGL-Anzeigebereich neben GDI-Controls</a> como z.B. en okrea
Trotzdem simplemente veces vorab una Minisource welcher OpenGL simplemente producido y una Cuboiden zeigt:
cls
ogl("init",%hwnd,0.0,0.0,0.0,1)
ogl("clear")
ogl("origin",0,0,-10)
ogl("cuboid",1,1,1)
ogl("show")
waitinput
end
[head]>full Vollbild-Gamescreen erzeugen[/head] Ein Vollbild-Gamescreen erzeugen Es el leichteste aller Übungen, birgt aber todavía el Tücke wegen el Anzeigeproportionalität.
Wer lo bastante simplemente möchte producido also zuerst una Ventana principal %hwnd y initialisiert simplemente darauf el OGL. Das funktioniert así:
Jenachdem welche Auflösung al Computer eingestellt es se hiernach una gröstmögliches Ventana genera y OpenGL darauf initialisiert.
Jetzt kann lo aber ser el el Auflösung no typisch 4/3 es - el heist - el el Y-Auflösung z.B. no como en 640x480 oder 1024x768 genau el Dreiviertel el X-Auflösung es. Auch el neuen TFT-Bildschirme kommen gerne con muy unterschiedlichen Auflösungen por lo tanto - como z.B. 1280x768 oder 1280x1024.
Das XProfanOpenGL-Anzeigefenster skaliert se sin embargo no unproportional qué a Folge ha el z.B. links y rechts una schwarzer Rand entstehen kann. Wenn (%maxx /4*3)<%maxy es entsteht oben y unten una Rand, de otra manera entsteht el Rand links y rechts.
Der möglicherweise entstehende Rand es insofern problematisch como el Rand trotzdem para Dibujar de OpenGL verwendet se. Das Anbringen z.B. de una Cockpit ginge also no como entweder el Cockpit no vollständig a sehen es oder "unterhalb" vom Cockpit una Rand entsteht en el z.B. el Strasse/Land a sehen wäre. Der Rand muss also weg!
Bedienen nosotros also uno Tricks si wir el Bildschirmauflösung no ändern querer. Wir ir ahora veces su de el el Y-Auflösung grösser ser kann como %maxx /4*3. Umgekehrt ists seltener el Fall - kann aber genauso vorkommen!
Wir erzeugen simplemente una zweites Ventana unterhalb de %hwnd qué el ganzen Bildschirm ausfüllt, y legen una en el Größe angepasstes (4/3Proportional!) %hwnd simplemente darüber.
windowstyle 80'Ventana sin cada Schnickschnack
var bgwin&=createwindow(0,"",0,0,%maxx,%maxy)'en Desktop una Hintergrundfenster erzeugen
enablewindow bgwin&,0'deaktivieren wir lo así una Clic el Ventana todavía weniger tangiert
window 0,0 - maxx,maxy/4*3
setwindowpos hwnd%=0,((maxy-(maxx/4*3))/2) - maxx,maxx/4*3;-1'hwnd en Bildschirmmitte verrücken y el Vordergrund holen.
ogl("init",%hwnd,0,0,0,1)
waitinput
ogl("done")
end
Natürlich puede ser nun el bgwin& z.B. una Farbe verpassen. Hierzu puede ser simplemente startpaint nutzen:
Más dazu später...
[head]>win Ventana-Gamescreen erzeugen[/head] Como auch beim Vollbild-Gamescreen necesario wir en el Proportionalität vom OGL-Anzeigebereich achten. Der innere Zona de %hwnd debería also 4/3 ser.
Hierbei puede nosotros folgende kleine Procedimiento zunutze hacer:
An esta Procedimiento puede wir Höhe y Breite transferencia y el %hwnd se en esta Maße adaptado.
Erzeugen wir also primero una Ventana y passen el Größe en Proportionalität a:
Hierdrauf nun el OpenGL-Anzeigebereich inicializar:
y el wars auch ya. Natürlich debería uno por windowstyle dafür sorgen el entweder a) una Vergrössern/Verkleinern/Skalieren des %hwnd no posible es oder b) después de Erkennung uno Skalierung vom %hwnd erneut setinnersize como oben aufrufen.
Más dazu später...
[head]>gdi OGL-Anzeigebereich neben GDI-Controls erzeugen[/head] Dies es sicherlich una el schlimmsten Aufgaben porque el Position y Größe des OGL-Anzeigebereiches puede wir no bestimmen. Der OGL-Anzeigebereich füllt siempre el kompletten Parent de y nimmt seine Ausmaße a.
Hierbei necesario wir also el OGL-Anzeigebereich en una más Control en lugar de el %hwnd legen.
Nach viel Herumprobiererei con okrea kann Yo de algo Erfahrung berichten el hierzu al Besten una Control genutzt se qué con dieser Función erstellt se:
proc createChildWindowAsStatic
parámetros h&,s$,x&,y&,xx&,yy&
declarar ws&
h&=create("ChildWindow",h&,s$,x&,y&,xx&,yy&)'child erzeugen
'titelbar y rahmen entfernen | setwindowlonggedöns
ws&=GetWindowLongA(h&,-16) - $C00000 - $40000
SetWindowLongA(h&,-16,ws&)
volver h&
ENDPROC
Wir erzeugen also zuerst la ventana principal %hwnd :
erzeugen entonces unser OGL-Child:
y inicializar nun hierdrauf unseren OGL-Anzeigebereich:
fertig. Jetzt puede wir simplemente con setwindowpos el Control ogl.child& positionieren y así auch unseren OGL-Anzeigebereich. Nach Positionierung de ogl.child& debería De todos modos una ogl("Show") tener lugar como hier kein automatisches Neuzeichnen de Statten va.
Más dazu später...
|
|
|
| |
|
|