Hierfür habe je une Weile gebraucht, là es aucun Dokumentationen pour den Funktionsumfang de OpenGL dans XProfan gibt. je suis tour, aussi Zugriff sur akuellere OpenGL Funktionen trop conservé, jusqu'à dahin mais ici cela oldschool Beispiel
normalement löst on cela Rendern sur une Textur per glBindFramebuffer, je vais den le détour sur glReadPixels et weise qui dans chaque Frame qui Textur trop.
Um avec cette technologie Szenen trop spiegeln comment z.B. sur einer Wasseroberfläche bräuchte es pour meinem Verständnis folgendes: caméra dans gleichem la distance et umgekehrten Winkel sous qui spiegelnde surface, Textur comme Projektion - letzteres habe je selbst encore pas korrekt hinbekommen.
Déclarer tex&[5]
Déclarer xrot!, yrot!, zrot!, xpos!, ypos!, zpos!,xsrot!,ysrot!,zsrot!,xspos!,yspos!,zspos!
Déclarer smooth%,mb&,mousestartx%,mousestarty%,mousex%,mousey%
Déclarer ende%,hPic&
Déclarer x&, y&, bytes&,mem#,size&,mem&,light#,t&,fps&,mod&
Proc MouseKeyboard
mousex% = %MouseX
mousey% = %MouseY
si mb& = 0
cas isKey(1) : mb& = 1
cas isKey(2) : mb& = 2
endif
si (not(isKey(2)) & not(isKey(1)))
'Startposition pour rotieren et Zoomwen wieder nullen
mb& = 0
mousestartx% = %mousex
mousestarty% = %mousey
xsrot! = xrot!
ysrot! = yrot!
zspos! = zpos!
endif
'Tastaturrotation
cas isKey(37) : yrot! = yrot! - 1.0
cas isKey(39) : yrot! = yrot! + 1.0
cas isKey(38) : xrot! = xrot! + 1.0
cas isKey(40) : xrot! = xrot! - 1.0
'Mausrotation
si (mb& = 1)
yrot! = ysrot! - (mousestartx% - %mousex) * 0.4
xrot! = xsrot! - (mousestarty% - %mousey) * 0.4
endif
'Mauszoom
si (mb& = 2) & (abs(mousestarty% - %mousey) > 10)
zpos! = zspos! + (mousestarty% - %mousey) * 0.03
endif
'Sonstige Tastatureingaben
cas IsKey(27) : Ende% = 1
ENDPROC
declare txID&
Proc DrawGLScene
'Szene pour Textur rendern (roter Würfel)
oGL("glClearColor",1.0,1.0,0.0,1.0)
oGL("glClear", ~GL_COLOR_BUFFER_BIT | ~GL_DEPTH_BUFFER_BIT)
ogl("Origin",0,0,-0.2)'Objekte qui Taille "1" sommes ici exakt so hoch comment qui Viewport
oGL("Move", xpos!, ypos!, zpos!)
oGL("Rotate", xrot!,yrot!,zrot!)
oGL("Texture",0, 1)
oGL("Color", 1,0,0,1)
ogl("Cuboid",2,2,2)
'Screenshot dans grenier poser
oGL("glReadPixels", 210,20,520,520,~GL_RGB,~GL_UNSIGNED_BYTE,mem#)
'Textur erstellen, aus Perfomancegründen, aucunement Mipmaps
ogl("glBindTexture",~GL_TEXTURE_2D,txID&)
ogl("glTexEnvi",~GL_TEXTURE_ENV, ~GL_TEXTURE_ENV_MODE, ~GL_MODULATE)
ogl("glTexImage2D",~GL_TEXTURE_2D,0,~GL_RGBA,520, 520,0,~GL_RGB,~GL_UNSIGNED_BYTE,mem#)
ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MAG_FILTER, ~GL_LINEAR)
ogl("glTexParameteri",~GL_TEXTURE_2D, ~GL_TEXTURE_MIN_FILTER, ~GL_LINEAR)
'Sichtbare Szene rendern et Montrer
oGL("glClearColor",1.0,1.0,1.0,1.0)
oGL("glClear", ~GL_COLOR_BUFFER_BIT | ~GL_DEPTH_BUFFER_BIT)
oGL("Texture",txID&, 1)
oGL("Color", 1,1,1,1)
ogl("Cuboid",2,2,2)
oGL("Show")
ENDPROC
' Hauptprogramm
' -------------
style de fenêtre 1+2+4+8+16
windowtitle "render to texture"
window (%maxx * 0.5 -480), (%maxy * 0.5 - 300) - 960,600'kompatible Schreibweise
UseIcon "Gesicht"
Faible mem#, 520*520*3'x * y * bpp
'oGL iitialisieren, Textur vorbereiten
oGL("Init", %hWnd, 1,1,1,1)
oGL("PosMode",1)
oGL("glEnable", ~GL_CULL_FACE)
ogl("glGenTextures",1,addr(txID&))
'quelque chose plus Licht!
dim light#,16
long light#,0 = single(0.5),single(0.5),single(0.5),single(1.0)
oGL("glLightfv",~GL_LIGHT0 ,~GL_AMBIENT,light#)'GL_AMBIENT
'Startposition
zpos! = -5
xrot! = 0
yrot! = 0
WhileNot ende%
MouseKeyboard()
DrawGLScene()
Endwhile
oGL("Done")
Fin
|