Dark Bit Factory & Gravity
PROGRAMMING => General coding questions => Topic started by: Shockwave on April 12, 2008
-
This is widowmakers intro which seems to use a slightly adapted version of the small intro framework posted here for opengl stuff.
It seems to have a lot of limitations however!
Here are some of the things I found...
With this framework it doesn't seem possible to set the dimensions of the display window in pixels unless windowed mode is used, otherwise it just defaults to whatever your desktop is.
You can't request a framerate for refresh.
Windowed mode just goes to the top left of the screen, this is ugly really and it should be centered.
It is impossible to send the application neatly to the back with alt+tab
It is nearly impossible to take screen shots in full screen mode.
I understand that this framework probably uses some shortcuts to save a few kb, but it would be better to add those controls.
I'll see what I can do with it :)
'-------------------------------------------------------------------------------
'
' 0X0007 Intro by Electric Druggies.
'
' thx stonemonkey, jim, rbz!
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' Includes
'-------------------------------------------------------------------------------
#INCLUDE "GL/gl.bi"
#INCLUDE "GL/glu.bi"
#INCLUDE "windows.bi"
'-------------------------------------------------------------------------------
' VARIABLES FOR OPENGL;
'-------------------------------------------------------------------------------
OPTION STATIC
OPTION EXPLICIT
DIM SHARED AS BYTE W_FULLSCREEN =1 : ' 1 = FULLSCREEN
DIM SHARED AS INTEGER W_XO =0 : ' X pos of window
DIM SHARED AS INTEGER W_YO =0 : ' Y pos of window
DIM SHARED AS INTEGER W_XW =800 : ' Width.
DIM SHARED AS INTEGER W_YH =600 : ' Height.
DIM SHARED pfd as PIXELFORMATDESCRIPTOR
DIM SHARED hdc as hDC
DECLARE SUB InitOGL()
DECLARE SUB BATTENBURG()
DECLARE SUB BATTENBURG2()
DECLARE SUB VERT_BORDER()
DECLARE SUB DRAWGLENZECROSS()
DECLARE SUB DRAWGLENZE(BYVAL XO AS DOUBLE,BYVAL YO AS DOUBLE,BYVAL ZO AS DOUBLE)
DIM SHARED RED (0 to 3) AS SINGLE => {0.07, 0.07, 0.07,0.4}
DIM SHARED WHITE(0 to 3) AS SINGLE => {.22, .22, .22,0.1}
DIM SHARED CHECK (0 to 3) AS SINGLE => {0.22, 0.22, 0.12,1.0}
DIM SHARED BORDER(0 to 3) AS SINGLE => {0.93, 0.32, 0.42,0.78}
DIM SHARED LINES (0 to 3) AS SINGLE => {2.0, 2.0, 2.0,1}
InitOGL()
'-------------------------------------------------------------------------------
' VARIABLES;
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE XR,YR,ZR,INOUT,XM,YM ,xm2,ym2,zm2,gadd1,gadd2
'-------------------------------------------------------------------------------
' MAIN LOOP;
'-------------------------------------------------------------------------------
WHILE((GetAsyncKeyState(VK_ESCAPE)<>-32767))
gadd1=gadd1+.001
gadd2=gadd2+.0013
XR=XR+.07
YR=YR+.04
ZR=ZR+.05
inout=2.5+.49*sin(xr/14)
XM=.02*SIN(YR/13)
YM=.03*SIN(ZR/12)
XM2=(7.02*SIN(YR/33))
YM2=(6.03*SIN(ZR/37))
ZM2=(2.03*SIN(ZR/42))-15
GLLOADIDENTITY
GLCLEAR(GL_DEPTH_BUFFER_BIT + GL_COLOR_BUFFER_BIT )
GLPUSHMATRIX
BATTENBURG()
BATTENBURG2()
DRAWGLENZECROSS()
VERT_BORDER()
GLPOPMATRIX
SWAPBUFFERS(hDC)
SLEEP 1
WEND
SUB VERT_BORDER()
GLPUSHMATRIX
GLENABLE GL_BLEND
GLTRANSLATEF (0,0,-1)
GLBEGIN GL_QUADS
GLCOLOR4F BORDER(0),BORDER(1),BORDER(2),BORDER(3)
GLVERTEX3F -1 ,-1, 0
GLVERTEX3F -.7,-1, 0
GLVERTEX3F -.7, 1, 0
GLVERTEX3F -1 , 1, 0
GLCOLOR4F BORDER(0),BORDER(1),BORDER(2),BORDER(3)
GLVERTEX3F 1 , 1, 0
GLVERTEX3F .7, 1, 0
GLVERTEX3F .7,-1, 0
GLVERTEX3F 1 ,-1, 0
GLEND
GLDISABLE GL_BLEND
GLCOLOR3F 1,1,1
GLBEGIN GL_LINES
GLCOLOR4F LINES(0),LINES(1),LINES(2),LINES(3)
GLVERTEX3F .7, 1,0
GLVERTEX3F .7,-1,0
GLVERTEX3F -.7, 1,0
GLVERTEX3F -.7,-1,0
GLEND
GLPOPMATRIX
END SUB
SUB BATTENBURG()
DIM AS INTEGER X,Y,YP,XP,XS,YS
GLPUSHMATRIX
'GLTRANSLATEF (0,0,-24.9-(YM2/3))
GLTRANSLATEF (0,-10,-24.9)
glRotatef(0, 1.0, 0.0, 0.0)
glRotatef(0, 0.0, 1.0, 0.0)
glRotatef(120*SIN(gadd1), 0.0, 0.0, 1.0)
XS=0
YS=0
FOR Y=-39 TO 39
XS=XS+1
IF XS>1 THEN XS=0
IF XS=0 THEN
X=-39
ELSE
X=-38
END IF
FOR XP=-39 TO 39 STEP 2
GLBEGIN GL_QUADS
GLCOLOR4F CHECK(0),CHECK(1),CHECK(2),CHECK(3)
GLVERTEX3F -1+X,-1+Y, 0
GLVERTEX3F X ,-1+Y, 0
GLVERTEX3F X , 0+Y, 0
GLVERTEX3F -1+X, 0+Y, 0
GLEND
X=X+2
NEXT
NEXT
GLPOPMATRIX
END SUB
SUB BATTENBURG2()
DIM AS INTEGER X,Y,YP,XP,XS,YS
GLPUSHMATRIX
GLTRANSLATEF (0,0,-22.9-(YM2/2))
glRotatef(0, 1.0, 0.0, 0.0)
glRotatef(0, 0.0, 1.0, 0.0)
glRotatef(160*SIN(gadd1), 0.0, 0.0, 1.0)
XS=0
YS=0
FOR Y=-39 TO 39
XS=XS+1
IF XS>1 THEN XS=0
IF XS=0 THEN
X=-39
ELSE
X=-38
END IF
FOR XP=-39 TO 39 STEP 2
GLBEGIN GL_QUADS
GLCOLOR4F CHECK(0),CHECK(1),CHECK(2),CHECK(3)
GLVERTEX3F -1+X,-1+Y, 0
GLVERTEX3F X ,-1+Y, 0
GLVERTEX3F X , 0+Y, 0
GLVERTEX3F -1+X, 0+Y, 0
GLEND
X=X+2
NEXT
NEXT
GLPOPMATRIX
END SUB
SUB DRAWGLENZECROSS()
GLPUSHMATRIX
glTranslatef(XM2, YM2, ZM2)
glRotatef(XR*3, 1.0, 0.0, 0.0)
glRotatef(YR*2, 0.0, 1.0, 0.0)
glRotatef(ZR, 0.0, 0.0, 1.0)
GLCULLFACE (GL_FRONT)
DRAWGLENZE(INOUT,0,0)
DRAWGLENZE(-INOUT,0,0)
DRAWGLENZE(0,INOUT,0)
DRAWGLENZE(0,-INOUT,0)
DRAWGLENZE(0,0,INOUT)
DRAWGLENZE(0,0,-INOUT)
GLENABLE GL_BLEND
GLCULLFACE (GL_BACK)
DRAWGLENZE(INOUT,0,0)
DRAWGLENZE(-INOUT,0,0)
DRAWGLENZE(0,INOUT,0)
DRAWGLENZE(0,-INOUT,0)
DRAWGLENZE(0,0,INOUT)
DRAWGLENZE(0,0,-INOUT)
GLDISABLE GL_BLEND
GLPOPMATRIX
END SUB
'-------------------------------------------------------------------------------
' SET UP THE SCREEN;
'-------------------------------------------------------------------------------
SUB InitOGL()
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR)
pfd.nVersion = 1
pfd.dwFlags = PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
pfd.dwLayerMask = PFD_MAIN_PLANE
pfd.iPixelType = PFD_TYPE_RGBA
pfd.cColorBits = 32
pfd.cDepthBits = 32
IF W_FULLSCREEN=1 THEN hDC = GetDC(CreateWindow( "Edit", "0X0007", WS_POPUP+WS_VISIBLE+WS_MAXIMIZE, 0 , 0 , 0 , 0, 0, 0, 0, 0))
IF W_FULLSCREEN<>1 THEN hDC = GetDC(CreateWindow("Edit", "0X0007", WS_POPUP+WS_VISIBLE+WS_BORDER,W_XO, W_YO, W_XW , W_YH, 0, 0, 0, 0))
SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, @pfd) , @pfd )
wglMakeCurrent ( hDC, wglCreateContext(hDC) )
ShowCursor(FALSE)
GLLOADIDENTITY
IF W_FULLSCREEN=1 THEN
W_XW=GetSystemMetrics(SM_CXSCREEN)
W_YH=GetSystemMetrics(SM_CYSCREEN)
END IF
GLVIEWPORT 0, 0, w_xw, w_yh '' Reset The Current Viewport
GLMATRIXMODE GL_PROJECTION '' Select The Projection Matrix
GLLOADIDENTITY
GLUPERSPECTIVE 70.0, W_XW / W_YH, .1, 100.0 '' Calculate The Aspect Ratio Of The Window
GLMATRIXMODE GL_MODELVIEW '' Select The Modelview Matrix
GLLOADIDENTITY '' Reset The Modelview Matrix
GLSHADEMODEL GL_FLAT '' Enable Smooth Shading
GLCLEARCOLOR .06, .03, 0.04,0
GLCLEARDEPTH 1.0 '' Depth Buffer Setup
GLENABLE GL_DEPTH_TEST '' Enables Depth Testing
GLDEPTHFUNC GL_LEQUAL '' The Type Of Depth Testing To Do
GLHINT GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST '' Really Nice Perspective Calculations
GLBLENDFUNC(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA)
GLDISABLE GL_BLEND
GLENABLE GL_CULL_FACE
GLLOADIDENTITY
glDISable(GL_LIGHTING)
GLENABLE GL_SMOOTH
GLENABLE GL_NORMALIZE
GLENABLE GL_FOG
GLHINT (GL_FOG_HINT,GL_NICEST)
GLFOGF (GL_FOG_START, 6.0)
GLFOGF (GL_FOG_END, 20.0)
GLFOGF (GL_FOG_DENSITY, 0.35)
GLFOGI (GL_FOG_MODE,GL_LINEAR)
end sub
SUB DRAWGLENZE(BYVAL XO AS DOUBLE,BYVAL YO AS DOUBLE,BYVAL ZO AS DOUBLE)
GLBEGIN GL_TRIANGLES
'---------------------------------------------------------------------------
' TOP FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0, 1,0
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLVERTEX3F 0+XO, 1+YO, 0+ZO
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLVERTEX3F 0+XO, 1+YO, 0+ZO
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0, 1,0
GLVERTEX3F -1+XO,1+YO,1+ZO
GLVERTEX3F 0+XO,1+YO,0+ZO
GLVERTEX3F -1+XO,1+YO,-1+ZO
GLVERTEX3F 0+XO,1+YO,0+ZO
GLVERTEX3F 1+XO,1+YO,1+ZO
GLVERTEX3F 1+XO,1+YO,-1+ZO
'---------------------------------------------------------------------------
' BOTTOM FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0,-1,0
GLVERTEX3F 0+XO, -1+YO, 0+ZO
GLVERTEX3F 1+XO, -1+YO, 1+ZO
GLVERTEX3F -1+XO, -1+YO, 1+ZO
GLNORMAL3F 0,-1,0
GLVERTEX3F 0+XO, -1+YO, 0+ZO
GLVERTEX3F -1+XO, -1+YO, -1+ZO
GLVERTEX3F 1+XO, -1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0,-1,0
GLVERTEX3F -1+XO,-1+YO,1+ZO
GLVERTEX3F -1+XO,-1+YO,-1+ZO
GLVERTEX3F 0+XO,-1+YO,0+ZO
GLNORMAL3F 0,-1,0
GLVERTEX3F 1+XO,-1+YO,1+ZO
GLVERTEX3F 0+XO,-1+YO,0+ZO
GLVERTEX3F 1+XO,-1+YO,-1+ZO
'---------------------------------------------------------------------------
' LEFT FACE
'---------------------------------------------------------------------------
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO,-1+YO,-1+ZO
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLVERTEX3F -1+XO, 1+YO,-1+ZO
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLVERTEX3F -1+XO, 1+YO,-1+ZO
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO, -1+YO,-1+ZO
GLVERTEX3F -1+XO, -1+YO, 1+ZO
GLVERTEX3F -1+XO, 0+YO, 0+ZO
'---------------------------------------------------------------------------
' RIGHT FACE
'---------------------------------------------------------------------------
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 1+YO,-1+ZO
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLVERTEX3F 1+XO,-1+YO,-1+ZO
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 1+YO,-1+ZO
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLVERTEX3F 1+XO, -1+YO, 1+ZO
GLVERTEX3F 1+XO, -1+YO,-1+ZO
'---------------------------------------------------------------------------
' FRONT FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0,0,1
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLNORMAL3F 0,0,1
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0,0,1
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLNORMAL3F 0,0,1
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLVERTEX3F -1+XO, 1+YO, 1+ZO
'---------------------------------------------------------------------------
' BACK FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0, 0, -1
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLVERTEX3F -1+XO,-1+YO, -1+ZO
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLNORMAL3F 0, 0, -1
GLVERTEX3F 1+XO,-1+YO, -1+ZO
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0, 0, -1
GLVERTEX3F 1+XO,-1+YO, -1+ZO
GLVERTEX3F -1+XO,-1+YO, -1+ZO
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLNORMAL3F 0, 0, -1
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLEND
END SUB
-
Oh, absolutely it uses shortcuts. And hacks, and cheats, and some stuff that really shouldn't work but does! Without that hard work nothing would be possible at 1kb.
Why not grab the setup code from my Helix demo, and then at least you can compare the tricked out version with a fully featured version?
In OpenGL, if you work in the right coordinate space, it's easy to cater for the variety of screen widths, heights you get with the framework. ie. don't assume pixel sizes, assume the screen is (-1,-1) top left, to (+1,+1) bottom right, and let the projection matrix deal with the scaling.
Jim
-
Oh I will have a look in your Source Jim :)
Actually I tidied up windowed mode a little bit for you Widowmaker... And played with the colours and blending a bit too :P
Use it if you want, don't kill me if you hate it!
'-------------------------------------------------------------------------------
'
' 0X0007 Intro by Electric Druggies.
'
' thx stonemonkey, jim, rbz!
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' Includes
'-------------------------------------------------------------------------------
#INCLUDE "GL/gl.bi"
#INCLUDE "GL/glu.bi"
#INCLUDE "windows.bi"
'-------------------------------------------------------------------------------
' VARIABLES FOR OPENGL;
'-------------------------------------------------------------------------------
OPTION STATIC
OPTION EXPLICIT
DIM SHARED AS BYTE W_FULLSCREEN =0 : ' 1 = FULLSCREEN
DIM SHARED AS INTEGER W_XO =60 : ' X pos of window
DIM SHARED AS INTEGER W_YO =60 : ' Y pos of window
DIM SHARED AS INTEGER W_XW =800 : ' Width.
DIM SHARED AS INTEGER W_YH =600 : ' Height.
DIM SHARED pfd as PIXELFORMATDESCRIPTOR
DIM SHARED hdc as hDC
DECLARE SUB InitOGL()
DECLARE SUB BATTENBURG()
DECLARE SUB BATTENBURG2()
DECLARE SUB VERT_BORDER()
DECLARE SUB DRAWGLENZECROSS()
DECLARE SUB DRAWGLENZE(BYVAL XO AS DOUBLE,BYVAL YO AS DOUBLE,BYVAL ZO AS DOUBLE)
DIM SHARED RED (0 to 3) AS SINGLE => {0.07, 0.07, 0.37,0.33}
DIM SHARED RED2 (0 to 3) AS SINGLE => {0.07, 0.07, 0.07,0.32}
DIM SHARED RED3 (0 to 3) AS SINGLE => {0.07, 0.07, 0.37,0.31}
DIM SHARED WHITE(0 to 3) AS SINGLE => { .88, .88, 88,0.11}
DIM SHARED WHITE2(0 to 3) AS SINGLE => {.88, .88, .88,0.12}
DIM SHARED WHITE3(0 to 3) AS SINGLE => {.88, .88, .88,0.13}
DIM SHARED CHECK (0 to 3) AS SINGLE => {0, 0, 0,1.0}
DIM SHARED BORDER (0 to 3) AS SINGLE => {0.12, 0.12, 0.12,0.8}
DIM SHARED BORDER2(0 to 3) AS SINGLE => {0.72, 0.22, 0.03,0.4}
DIM SHARED BORDER3(0 to 3) AS SINGLE => {0.33, 0.02, 0.02,0.48}
DIM SHARED BORDER4(0 to 3) AS SINGLE => {0.93, 0.02, 0.62,0.98}
DIM SHARED BORDER5(0 to 3) AS SINGLE => {0.33, 0.02, 0.02,0.48}
DIM SHARED BORDER6(0 to 3) AS SINGLE => {0.93, 0.02, 0.62,0.98}
DIM SHARED LINES (0 to 3) AS SINGLE => {2.0, 2.0, 2.0,1}
InitOGL()
'-------------------------------------------------------------------------------
' VARIABLES;
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE XR,YR,ZR,INOUT,XM,YM ,xm2,ym2,zm2,gadd1,gadd2
'-------------------------------------------------------------------------------
' MAIN LOOP;
'-------------------------------------------------------------------------------
WHILE((GetAsyncKeyState(VK_ESCAPE)<>-32767))
gadd1=gadd1+.0015
gadd2=gadd2+.0013
XR=XR+.11
YR=YR+.09
ZR=ZR+.08
inout=2.5+.49*sin(xr/14)
XM=.02*SIN(YR/13)
YM=.03*SIN(ZR/12)
XM2=(7.02*SIN(YR/23))
YM2=(6.03*SIN(ZR/17))
ZM2=(2.03*SIN(ZR/42))-15
GLLOADIDENTITY
GLCLEAR(GL_DEPTH_BUFFER_BIT + GL_COLOR_BUFFER_BIT )
GLPUSHMATRIX
BATTENBURG()
BATTENBURG2()
DRAWGLENZECROSS()
VERT_BORDER()
GLPOPMATRIX
SWAPBUFFERS(hDC)
SLEEP 1
WEND
SUB VERT_BORDER()
GLPUSHMATRIX
GLENABLE GL_BLEND
GLTRANSLATEF (0,0,-1)
GLBEGIN GL_QUADS
GLCOLOR4F BORDER2(0),BORDER2(1),BORDER2(2),BORDER2(3)
GLVERTEX3F -1 ,-1, 0
GLVERTEX3F -.7,-1, 0
GLCOLOR4F BORDER(0),BORDER(1),BORDER(2),BORDER(3)
GLVERTEX3F -.7, 1, 0
GLVERTEX3F -1 , 1, 0
GLCOLOR4F BORDER(0),BORDER(1),BORDER(2),BORDER(3)
GLVERTEX3F 1 , 1, 0
GLVERTEX3F .7, 1, 0
GLCOLOR4F BORDER2(0),BORDER2(1),BORDER2(2),BORDER2(3)
GLVERTEX3F .7,-1, 0
GLVERTEX3F 1 ,-1, 0
GLCOLOR4F BORDER3(0),BORDER3(1),BORDER3(2),BORDER3(3)
glvertex3f -.7,-1,0
GLCOLOR4F BORDER5(0),BORDER5(1),BORDER5(2),BORDER5(3)
glvertex3f .7,-1,0
GLCOLOR4F BORDER4(0),BORDER4(1),BORDER4(2),BORDER4(3)
glvertex3f .7, 1,0
GLCOLOR4F BORDER6(0),BORDER6(1),BORDER6(2),BORDER6(3)
glvertex3f -.7, 1,0
GLEND
GLDISABLE GL_BLEND
GLCOLOR3F 1,1,1
GLBEGIN GL_LINES
GLCOLOR4F LINES(0),LINES(1),LINES(2),LINES(3)
GLVERTEX3F .7, 1,0
GLVERTEX3F .7,-1,0
GLVERTEX3F -.7, 1,0
GLVERTEX3F -.7,-1,0
GLEND
GLPOPMATRIX
END SUB
SUB BATTENBURG()
DIM AS INTEGER X,Y,YP,XP,XS,YS
GLPUSHMATRIX
'GLTRANSLATEF (0,0,-24.9-(YM2/3))
GLTRANSLATEF (0,-10,-34.9-(YM2/3))
glRotatef(0, 1.0, 0.0, 0.0)
glRotatef(0, 0.0, 1.0, 0.0)
glRotatef(170*SIN(gadd1), 0.0, 0.0, 1.0)
XS=0
YS=0
FOR Y=-39 TO 39
XS=XS+1
IF XS>1 THEN XS=0
IF XS=0 THEN
X=-39
ELSE
X=-38
END IF
FOR XP=-39 TO 39 STEP 2
GLBEGIN GL_QUADS
GLCOLOR4F CHECK(0),CHECK(1),CHECK(2),CHECK(3)
GLVERTEX3F -1+X,-1+Y, 0
GLVERTEX3F X ,-1+Y, 0
GLVERTEX3F X , 0+Y, 0
GLVERTEX3F -1+X, 0+Y, 0
GLEND
X=X+2
NEXT
NEXT
GLPOPMATRIX
END SUB
SUB BATTENBURG2()
DIM AS INTEGER X,Y,YP,XP,XS,YS
GLPUSHMATRIX
GLTRANSLATEF (0,0,-32.9+(YM2/2))
glRotatef(0, 1.0, 0.0, 0.0)
glRotatef(0, 0.0, 1.0, 0.0)
glRotatef(260*SIN(gadd1), 0.0, 0.0, 1.0)
XS=0
YS=0
FOR Y=-39 TO 39
XS=XS+1
IF XS>1 THEN XS=0
IF XS=0 THEN
X=-39
ELSE
X=-38
END IF
FOR XP=-39 TO 39 STEP 2
GLBEGIN GL_QUADS
GLCOLOR4F CHECK(0),CHECK(1),CHECK(2),CHECK(3)
GLVERTEX3F -1+X,-1+Y, 0
GLVERTEX3F X ,-1+Y, 0
GLVERTEX3F X , 0+Y, 0
GLVERTEX3F -1+X, 0+Y, 0
GLEND
X=X+2
NEXT
NEXT
GLPOPMATRIX
END SUB
SUB DRAWGLENZECROSS()
GLPUSHMATRIX
glTranslatef(XM2, YM2, ZM2)
glRotatef(XR*3, 1.0, 0.0, 0.0)
glRotatef(YR*2, 0.0, 1.0, 0.0)
glRotatef(ZR, 0.0, 0.0, 1.0)
GLCULLFACE (GL_FRONT)
DRAWGLENZE(INOUT,0,0)
DRAWGLENZE(-INOUT,0,0)
DRAWGLENZE(0,INOUT,0)
DRAWGLENZE(0,-INOUT,0)
DRAWGLENZE(0,0,INOUT)
DRAWGLENZE(0,0,-INOUT)
GLENABLE GL_BLEND
GLCULLFACE (GL_BACK)
DRAWGLENZE(INOUT,0,0)
DRAWGLENZE(-INOUT,0,0)
DRAWGLENZE(0,INOUT,0)
DRAWGLENZE(0,-INOUT,0)
DRAWGLENZE(0,0,INOUT)
DRAWGLENZE(0,0,-INOUT)
GLDISABLE GL_BLEND
GLPOPMATRIX
END SUB
'-------------------------------------------------------------------------------
' SET UP THE SCREEN;
'-------------------------------------------------------------------------------
SUB InitOGL()
dim xxx as integer
dim yyy as integer
XXX=GetSystemMetrics(SM_CXSCREEN)
yyy=GetSystemMetrics(SM_CYSCREEN)
xxx=(xxx-W_XW)/2
yyy=(yyy-W_YH)/2
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR)
pfd.nVersion = 1
pfd.dwFlags = PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
pfd.dwLayerMask = PFD_MAIN_PLANE
pfd.iPixelType = PFD_TYPE_RGBA
pfd.cColorBits = 32
pfd.cDepthBits = 32
IF W_FULLSCREEN=1 THEN hDC = GetDC(CreateWindow( "Edit", "0X0007",WS_POPUP+WS_VISIBLE+WS_MAXIMIZE, 0 , 0 , 0 , 0, 0, 0, 0, 0))
IF W_FULLSCREEN<>1 THEN hDC = GetDC(CreateWindow("Edit", "0X0007", WS_DLGFRAME+WS_POPUP+WS_VISIBLE,xxx, yyy, W_XW , W_YH, 0, 0, 0, 0))
SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, @pfd) , @pfd )
wglMakeCurrent ( hDC, wglCreateContext(hDC) )
ShowCursor(FALSE)
GLLOADIDENTITY
IF W_FULLSCREEN=1 THEN
W_XW=GetSystemMetrics(SM_CXSCREEN)
W_YH=GetSystemMetrics(SM_CYSCREEN)
END IF
GLVIEWPORT 0, 0, w_xw, w_yh '' Reset The Current Viewport
GLMATRIXMODE GL_PROJECTION '' Select The Projection Matrix
GLLOADIDENTITY
GLUPERSPECTIVE 75.0, W_XW / W_YH, .1, 100.0 '' Calculate The Aspect Ratio Of The Window
GLMATRIXMODE GL_MODELVIEW '' Select The Modelview Matrix
GLLOADIDENTITY '' Reset The Modelview Matrix
GLSHADEMODEL GL_smooth '' Enable Smooth Shading
GLCLEARCOLOR .07, .04, 0.04,0
GLCLEARDEPTH 1.0 '' Depth Buffer Setup
GLENABLE GL_DEPTH_TEST '' Enables Depth Testing
GLDEPTHFUNC GL_LEQUAL '' The Type Of Depth Testing To Do
GLHINT GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST '' Really Nice Perspective Calculations
GLBLENDFUNC(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA)
GLDISABLE GL_BLEND
GLENABLE GL_CULL_FACE
GLLOADIDENTITY
glDISable(GL_LIGHTING)
GLENABLE GL_SMOOTH
GLENABLE GL_NORMALIZE
GLENABLE GL_FOG
GLHINT (GL_FOG_HINT,GL_NICEST)
GLFOGF (GL_FOG_START, 6.0)
GLFOGF (GL_FOG_END, 20.0)
GLFOGF (GL_FOG_DENSITY, 0.35)
GLFOGI (GL_FOG_MODE,GL_LINEAR)
end sub
SUB DRAWGLENZE(BYVAL XO AS DOUBLE,BYVAL YO AS DOUBLE,BYVAL ZO AS DOUBLE)
GLBEGIN GL_TRIANGLES
'---------------------------------------------------------------------------
' TOP FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0, 1,0
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 0+XO, 1+YO, 0+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F 0+XO, 1+YO, 0+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0, 1,0
GLVERTEX3F -1+XO,1+YO,1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 0+XO,1+YO,0+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F -1+XO,1+YO,-1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLVERTEX3F 0+XO,1+YO,0+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 1+XO,1+YO,1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 1+XO,1+YO,-1+ZO
'---------------------------------------------------------------------------
' BOTTOM FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0,-1,0
GLVERTEX3F 0+XO, -1+YO, 0+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 1+XO, -1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, -1+YO, 1+ZO
GLNORMAL3F 0,-1,0
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F 0+XO, -1+YO, 0+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F -1+XO, -1+YO, -1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F 1+XO, -1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0,-1,0
GLVERTEX3F -1+XO,-1+YO,1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F -1+XO,-1+YO,-1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 0+XO,-1+YO,0+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0,-1,0
GLVERTEX3F 1+XO,-1+YO,1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 0+XO,-1+YO,0+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 1+XO,-1+YO,-1+ZO
'---------------------------------------------------------------------------
' LEFT FACE
'---------------------------------------------------------------------------
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLNORMAL3F -1, 0,0
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLVERTEX3F -1+XO,-1+YO,-1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F -1+XO, 1+YO,-1+ZO
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F -1, 0,0
GLVERTEX3F -1+XO, 0+YO, 0+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 1+YO,-1+ZO
GLNORMAL3F -1, 0,0
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F -1+XO, -1+YO,-1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F -1+XO, -1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 0+YO, 0+ZO
'---------------------------------------------------------------------------
' RIGHT FACE
'---------------------------------------------------------------------------
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLNORMAL3F 1 ,0,0
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLVERTEX3F 1+XO, 1+YO,-1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 1+XO,-1+YO,-1+ZO
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 1 ,0,0
GLVERTEX3F 1+XO, 1+YO,-1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLNORMAL3F 1 ,0,0
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F 1+XO, 0+YO, 0+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 1+XO, -1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F 1+XO, -1+YO,-1+ZO
'---------------------------------------------------------------------------
' FRONT FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0,0,1
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 1+YO, 1+ZO
GLNORMAL3F 0,0,1
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0,0,1
GLVERTEX3F -1+XO,-1+YO, 1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 1+XO,-1+YO, 1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLNORMAL3F 0,0,1
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLVERTEX3F 0+XO, 0+YO, 1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 1+XO, 1+YO, 1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F -1+XO, 1+YO, 1+ZO
'---------------------------------------------------------------------------
' BACK FACE
'---------------------------------------------------------------------------
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLNORMAL3F 0, 0, -1
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F -1+XO,-1+YO, -1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLNORMAL3F 0, 0, -1
GLCOLOR4F RED(0),RED(1),RED(2),RED(3)
GLVERTEX3F 1+XO,-1+YO, -1+ZO
GLCOLOR4F RED2(0),RED2(1),RED2(2),RED2(3)
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLCOLOR4F RED3(0),RED3(1),RED3(2),RED3(3)
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0, 0, -1
GLVERTEX3F 1+XO,-1+YO, -1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F -1+XO,-1+YO, -1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLCOLOR4F WHITE(0),WHITE(1),WHITE(2),WHITE(3)
GLNORMAL3F 0, 0, -1
GLVERTEX3F 1+XO, 1+YO, -1+ZO
GLCOLOR4F WHITE2(0),WHITE2(1),WHITE2(2),WHITE2(3)
GLVERTEX3F 0+XO, 0+YO, -1+ZO
GLCOLOR4F WHITE3(0),WHITE3(1),WHITE3(2),WHITE3(3)
GLVERTEX3F -1+XO, 1+YO, -1+ZO
GLEND
END SUB
-
Here is a little present for you :)
-
Wow!
Looking through that I cant believe how many things were left out in the chopped down version!
Thanks ever so much Rbz!
-
No problem :)
Please download it again, I did some minor changes in "MakeWindow" function
-
Ok, cheers!