diff options
Diffstat (limited to 'progs/demos')
99 files changed, 34333 insertions, 0 deletions
diff --git a/progs/demos/.cvsignore b/progs/demos/.cvsignore new file mode 100644 index 000000000..2b8a22512 --- /dev/null +++ b/progs/demos/.cvsignore @@ -0,0 +1,46 @@ +.cvsignore +arbfplight +arbocclude +bounce +clearspd +cubemap +drawpix +fire +fplight +gamma +gears +geartrain +glinfo +gloss +gltestperf +glutfx +ipers +isosurf +lodbias +morph3d +multiarb +occlude +osdemo +paltex +pixeltex +pointblast +ray +readpix +readtex.c +readtex.h +reflect +renormal +shadowtex +spectex +stex3d +teapot +terrain +tessdemo +texcyl +texdown +texenv +texobj +trispd +tunnel +tunnel2 +winpos diff --git a/progs/demos/Makefile b/progs/demos/Makefile new file mode 100644 index 000000000..4bd72d8a5 --- /dev/null +++ b/progs/demos/Makefile @@ -0,0 +1,115 @@ +# progs/demos/Makefile + +TOP = ../.. +include $(TOP)/configs/current + +INCDIR = $(TOP)/include + +OSMESA_LIBS = -L$(LIB_DIR) -lglut -lOSMesa -lGLU -lGL $(APP_LIB_DEPS) + +OSMESA16_LIBS = -L$(LIB_DIR) -lglut -lOSMesa16 -lGLU -lGL $(APP_LIB_DEPS) + +OSMESA32_LIBS = -L$(LIB_DIR) -lglut -lOSMesa32 -lGLU -lGL $(APP_LIB_DEPS) + +LIB_DEP = $(LIB_DIR)/$(GL_LIB_NAME) $(LIB_DIR)/$(GLU_LIB_NAME) $(LIB_DIR)/$(GLUT_LIB_NAME) + +PROGS = \ + arbfplight \ + arbocclude \ + bounce \ + clearspd \ + cubemap \ + drawpix \ + fire \ + fogcoord \ + fplight \ + gamma \ + gears \ + geartrain \ + glinfo \ + gloss \ + gltestperf \ + glutfx \ + isosurf \ + ipers \ + lodbias \ + morph3d \ + multiarb \ + occlude \ + paltex \ + pixeltex \ + pointblast \ + ray \ + readpix \ + reflect \ + renormal \ + shadowtex \ + spectex \ + spriteblast \ + stex3d \ + teapot \ + terrain \ + tessdemo \ + texcyl \ + texdown \ + texenv \ + texobj \ + trispd \ + tunnel \ + tunnel2 \ + winpos + + +##### RULES ##### + +.SUFFIXES: +.SUFFIXES: .c + + +# make executable from .c file: +.c: $(LIB_DEP) readtex.o + $(CC) -I$(INCDIR) $(CFLAGS) $< readtex.o $(APP_LIB_DEPS) -o $@ + + +##### TARGETS ##### + +default: readtex.o $(PROGS) + + +readtex.c: $(TOP)/progs/util/readtex.c + cp $< . + +readtex.h: $(TOP)/progs/util/readtex.h + cp $< . + +readtex.o: readtex.c readtex.h + $(CC) -c -I$(INCDIR) $(CFLAGS) readtex.c + + +showbuffer.c: $(TOP)/progs/util/showbuffer.c + cp $< . + +showbuffer.h: $(TOP)/progs/util/showbuffer.h + cp $< . + +showbuffer.o: showbuffer.c showbuffer.h + $(CC) -c -I$(INCDIR) $(CFLAGS) showbuffer.c + + +reflect: reflect.o showbuffer.o readtex.o + $(CC) -I$(INCDIR) $(CFLAGS) reflect.o showbuffer.o readtex.o $(APP_LIB_DEPS) -o $@ + +reflect.o: reflect.c showbuffer.h + $(CC) -c -I$(INCDIR) $(CFLAGS) reflect.c + + +shadowtex: shadowtex.o showbuffer.o + $(CC) -I$(INCDIR) $(CFLAGS) shadowtex.o showbuffer.o $(APP_LIB_DEPS) -o $@ + +shadowtex.o: shadowtex.c showbuffer.h + $(CC) -c -I$(INCDIR) $(CFLAGS) shadowtex.c + +clean: + -rm -f $(PROGS) + -rm -f *.o *~ + -rm -f readtex.[ch] showbuffer.[ch] diff --git a/progs/demos/Makefile.cygnus b/progs/demos/Makefile.cygnus new file mode 100644 index 000000000..0efc1ab0c --- /dev/null +++ b/progs/demos/Makefile.cygnus @@ -0,0 +1,87 @@ + +# Mesa 3-D graphics library +# Version: 3.3 +# Copyright (C) 1995-2000 Brian Paul + + +# Makefile for demo programs for cygnus +# Stephane Rehel (rehel@worldnet.fr) April 13 1997 + + + +##### MACROS ##### + +INCDIR = ../include +LIBDIR = ../lib + +GL_LIBS = -L$(LIBDIR) -lglut -lMesaGLU -lMesaGL -lm $(WLIBS) + +LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB) + +PROGS = bounce \ + clearspd \ + cubemap \ + drawpix \ + fire \ + gamma \ + gears \ + geartrain \ + glinfo \ + gloss \ + gltestperf \ + glutfx \ + isosurf \ + ipers \ + lodbias \ + morph3d \ + multiarb \ + occlude \ + osdemo \ + paltex \ + pixeltex \ + pointblast \ + ray \ + readpix \ + reflect \ + renormal \ + spectex \ + stex3d \ + teapot \ + terrain \ + tessdemo \ + texcyl \ + texdown \ + texenv \ + texobj \ + trispd \ + tunnel \ + tunnel2 \ + winpos + + +##### RULES ##### + +.SUFFIXES: +.SUFFIXES: .c + +.c: $(LIB_DEP) + $(CC) -I$(INCDIR) -I../util $(CFLAGS) $< $(GL_LIBS) -o $@ + + +##### TARGETS ##### + +default: + @echo "Specify a target configuration" + +clean: + -rm *.o *~ + +realclean: + -rm $(PROGS:=.exe) + -rm *.o *~ + +targets: $(PROGS) + +include ../Make-config + + diff --git a/progs/demos/README b/progs/demos/README new file mode 100644 index 000000000..a3d0c18bb --- /dev/null +++ b/progs/demos/README @@ -0,0 +1,230 @@ +INTRODUCTION +------------ + +This directory is usually included in the Mesa demos distribution or +in the GLUT distribution. + +I have written the demos included in this directory mainly for showing +the capabilities of the Mesa library when using the Voodoo driver. +However all the demos are written using the GLUT and OpenGL so they +work with any GLUT/OpenGL platform (tested: Linux+Mesa+Voodoo driver, +Linux+Mesa+X11 driver, Win95+Mesa+Voodoo driver and SGI Onyx IR thanks +to Mark Kilgard). + +All the demos make an heavy use of texture mapping, blending, etc. so +you _need_ some kind of hardware support for the OpenGL otherwise they +will run at ~1fps. You need also a OpenGL 1.1 compliant library. + +You can find some screenshot of these demos at +http://www-hmw.caribel.pisa.it/fxmesa/fxdemos.hmtl + +Write me if you find some bug in the demos. + +David Bucciarelli (tech.hmw@plus.it) + +Humanware s.r.l. +Via XXIV Maggio 62 +Pisa, Italy +Tel./Fax +39-50-554108 +email: info.hmw@plus.it +www: www-hmw.caribel.pisa.it + + +A BRIEF DESCRIPTION OF THE DEMOS +-------------------------------- + + +IPERS +----- + +Sources: ipers.c image.c + +A nice spinning fractal object. + + +RAY +--- + +Sources: ray.c + +I'm using ray tracing to dynamically generate texture maps with +specular, diffuse, shadows, and mirror colors. Each frame the texture +maps of the plane and of the sphere are partially updated. With this +technique you can obtain true mirrors, shadows, specular highlights, +bump mapping, etc. in realtime. This demo is really CPU intensive +(~25fps on a PentiumII@300MHz with a Pure3D). Support on-the-fly +switching between fullscreen and in-window rendering under Linux/Mesa +(start your X server in 16 bpp mode and press the spacebar). + + +TUNNEL +------ + +Sources: tunnel.c image.c sources.c +Data: bw.rgb tile.rgb + +The model was designed and prelighted with Alias|Wavefront +PowerAnimator V8. Triangle strips were built with a tool written by me +and then statically included in the sources. This demo doesn't +require the ZBuffer and use antialiased polygons. Support on-the-fly +switching between fullscreen and in-window rendering under Linux/Mesa +(start your X server in 16 bpp mode and press the spacebar). + + +TUNNEL2 +------ + +Sources: tunnel2.c image.c sources.c +Data: bw.rgb tile.rgb + +The some tunnel demo but with two output channels. A nice +example of the Mesa/Voodoo support for multiple boards in +the some PC. + + +TEAPOT +------ + +Sources: teapot.c image.c dteapot.c shadow.c +Data: bw.rgb tile.rgb + +The shadow is drawn projecting the teapot geometry over the plane. All +other light effects are drawn using the standard OpenGL capabilities. +Support on-the-fly switching between fullscreen and in-window +rendering under Linux/Mesa (start your X server in 16 bpp mode and +press the spacebar). + + +FIRE +---- + +Sources: fire.c image.c +Data: s128.rgb tree2.rgb + +The demo use a small particle system to draw some nice visual effect. +You can interactively change many parameters of the particle system +and you can choose the number of particles at the startup ('fire +4000'). This demo should be called fountain. Support on-the-fly +switching between fullscreen and in-window rendering under Linux/Mesa +(start your X server in 16 bpp mode and press the spacebar). + + +TERRAIN +------- + +Sources: mesaland.c + +This demo is base on another demo written by Mikael SkiZoWalker. I +have added the capabilities to freely fly around, view culling and +some nice color. Support on-the-fly switching between fullscreen and +in-window rendering under Linux/Mesa (start your X server in 16 bpp +mode and press the spacebar). + + +GLTEST +------ + +Sources: gltest.c + +This is a simple benchmark suite that I'm using in the development of +the Mesa/Voodoo driver. Type 'gltest >my.res' and you will get some +data about the performances of your OpenGL. Follow the results with my +PC (Linux+Mesa-2.6+PentiumII@300MHz+Pure3D): + +Simple Points +587900.080674 Pnts/sec + +Smooth Lines +SIZE=480 => 39007.426183 Lins/sec +SIZE=250 => 74575.016485 Lins/sec +SIZE=100 => 179734.882409 Lins/sec +SIZE=050 => 183987.795297 Lins/sec +SIZE=025 => 183820.086309 Lins/sec + + +ZSmooth Triangles +SIZE=480 => 784.954997 Tris/sec +SIZE=250 => 2862.325889 Tris/sec +SIZE=100 => 17779.492938 Tris/sec +SIZE=050 => 159339.829844 Tris/sec +SIZE=025 => 428602.984008 Tris/sec + + +ZSmooth Tex Blend Triangles +SIZE=480 => 784.473931 Tris/sec +SIZE=250 => 2853.781513 Tris/sec +SIZE=100 => 17598.252146 Tris/sec +SIZE=050 => 152632.578337 Tris/sec +SIZE=025 => 377584.760048 Tris/sec + + +ZSmooth Tex Blend TMesh Triangles +SIZE=400 => 563.900695 Tris/sec, MPixel Fill/sec: 45.112056 +SIZE=250 => 1449.777225 Tris/sec, MPixel Fill/sec: 45.305538 +SIZE=100 => 8702.869121 Tris/sec, MPixel Fill/sec: 43.514346 +SIZE=050 => 31896.867466 Tris/sec, MPixel Fill/sec: 39.871084 +SIZE=025 => 114037.262894 Tris/sec, MPixel Fill/sec: 35.636645 +SIZE=010 => 220494.235839 Tris/sec, MPixel Fill/sec: 11.024712 +SIZE=005 => 225615.506651 Tris/sec, MPixel Fill/sec: 2.820194 +SIZE=002 => 225607.681439 Tris/sec, MPixel Fill/sec: 0.451215 + + +Color/Depth Buffer Clears +295.042474 Clrs/sec, MPixel Fill/sec: 90.553256 + + +Follow the results with my +PC (Linux+Mesa-3.0beta5+PentiumII@300MHz+Voodoo2): + + +Simple Points +1620113.525130 Pnts/sec + +Smooth Lines +SIZE=480 => 73841.166065 Lins/sec +SIZE=250 => 140794.035316 Lins/sec +SIZE=100 => 344185.242157 Lins/sec +SIZE=050 => 420399.008289 Lins/sec +SIZE=025 => 420261.389773 Lins/sec + + +ZSmooth Triangles +SIZE=480 => 1434.668506 Tris/sec +SIZE=250 => 5228.449614 Tris/sec +SIZE=100 => 46603.815842 Tris/sec +SIZE=050 => 325757.045961 Tris/sec +SIZE=025 => 589022.403336 Tris/sec + + +ZSmooth Tex Blend Triangles +SIZE=480 => 1414.900041 Tris/sec +SIZE=250 => 5006.055235 Tris/sec +SIZE=100 => 43602.252031 Tris/sec +SIZE=050 => 303497.092692 Tris/sec +SIZE=025 => 517087.428669 Tris/sec + + +ZSmooth Tex Blend TMesh Triangles +SIZE=400 => 1023.273112 Tris/sec, MPixel Fill/sec: 81.861849 +SIZE=250 => 2595.692121 Tris/sec, MPixel Fill/sec: 81.115379 +SIZE=100 => 15788.198912 Tris/sec, MPixel Fill/sec: 78.940995 +SIZE=050 => 58784.121300 Tris/sec, MPixel Fill/sec: 73.480152 +SIZE=025 => 244233.873481 Tris/sec, MPixel Fill/sec: 76.323085 +SIZE=010 => 474995.004191 Tris/sec, MPixel Fill/sec: 23.749750 +SIZE=005 => 475124.354163 Tris/sec, MPixel Fill/sec: 5.939054 +SIZE=002 => 474959.089503 Tris/sec, MPixel Fill/sec: 0.949918 + + +Color/Depth Buffer Clears +478.654830 Clrs/sec, MPixel Fill/sec: 146.906826 + + +PALTEX and GLBPALTX +------------------- + +Sources: paltex.c and glbpaltx.c + +The PALTEX example was written by Brian Paul and it shows the +capabilities of the GL_EXT_paletted_texture extension. I have written +the other example in order to show the capabilities of the +gl3DfxSetPaletteEXT() (it used only by GLQuake and Quake2). diff --git a/progs/demos/Windows/all.dsp b/progs/demos/Windows/all.dsp new file mode 100644 index 000000000..b47283c58 --- /dev/null +++ b/progs/demos/Windows/all.dsp @@ -0,0 +1,101 @@ +# Microsoft Developer Studio Project File - Name="all" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=all - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "all.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "all.mak" CFG="all - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "all - Win32 Release" (based on "Win32 (x86) Application")
+!MESSAGE "all - Win32 Debug" (based on "Win32 (x86) Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "all - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+
+!ELSEIF "$(CFG)" == "all - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "all - Win32 Release"
+# Name "all - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/bounce.dsp b/progs/demos/Windows/bounce.dsp new file mode 100644 index 000000000..0510e77d9 --- /dev/null +++ b/progs/demos/Windows/bounce.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="bounce" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=bounce - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "bounce.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "bounce.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "bounce - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "bounce - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "bounce - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../bounce.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "bounce - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../bounce.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "bounce - Win32 Release"
+# Name "bounce - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\bounce.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/clearspd.dsp b/progs/demos/Windows/clearspd.dsp new file mode 100644 index 000000000..440c7ae64 --- /dev/null +++ b/progs/demos/Windows/clearspd.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="clearspd" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=clearspd - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "clearspd.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "clearspd.mak" CFG="clearspd - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "clearspd - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "clearspd - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "clearspd - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../clearspd.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "clearspd - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../clearspd.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "clearspd - Win32 Release"
+# Name "clearspd - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\clearspd.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/cubemap.dsp b/progs/demos/Windows/cubemap.dsp new file mode 100644 index 000000000..220a3a0df --- /dev/null +++ b/progs/demos/Windows/cubemap.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="cubemap" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=cubemap - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "cubemap.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "cubemap.mak" CFG="cubemap - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "cubemap - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "cubemap - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "cubemap - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../cubemap.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "cubemap - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../cubemap.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "cubemap - Win32 Release"
+# Name "cubemap - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\cubemap.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/demos.dsw b/progs/demos/Windows/demos.dsw new file mode 100644 index 000000000..2d6f629e0 --- /dev/null +++ b/progs/demos/Windows/demos.dsw @@ -0,0 +1,782 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "all"=".\all.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name bounce
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name clearspd
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name cubemap
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name drawpix
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name fire
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gears
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name geartrain
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name glinfo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gloss
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gltestperf
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name glutfx
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ipers
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name isosurf
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name lodbias
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name morph3d
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name multiarb
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name occlude
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name osdemo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name paltex
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name pixeltex
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name pointblast
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name rain
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ray
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name readpix
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name reflect
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name renormal
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name shadowtex
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name spectex
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name stex3d
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name teapot
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name terrain
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tessdemo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name texcyl
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name texdown
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name texenv
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name texobj
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name trispd
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tunnel
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tunnel2
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name winpos
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name spriteblast
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "bounce"=".\bounce.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "clearspd"=".\clearspd.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "cubemap"=".\cubemap.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "drawpix"=".\drawpix.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "fire"=".\fire.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "gears"=".\gears.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "geartrain"=".\geartrain.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "glinfo"=".\glinfo.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "gloss"=".\gloss.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "gltestperf"=".\gltestperf.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "glut"="..\..\..\src\glut\glx\glut.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "glutfx"=".\glutfx.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ipers"=".\ipers.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "isosurf"=".\isosurf.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "lodbias"=".\loadbias.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "morph3d"=".\morph3d.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "multiarb"=".\multiarb.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "occlude"=".\occlude.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "osdemo"=".\osdemo.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "paltex"=".\paltex.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "pixeltex"=".\pixeltex.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "pointblast"=".\pointblast.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "rain"=".\rain.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ray"=".\ray.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "readpix"=".\readpix.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "reflect"=".\reflect.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "renormal"=".\renormal.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "shadowtex"=".\shadowtex.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "spectex"=".\spectex.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "spriteblast"=".\spriteblast.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "stex3d"=".\stex3d.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "teapot"=".\teapot.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "terrain"=".\terrain.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tessdemo"=".\tessdemo.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "texcyl"=".\texcyl.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "texdown"=".\texdown.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "texenv"=".\texenv.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "texobj"=".\texobj.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "trispd"=".\trispd.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tunnel"=".\tunnel.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tunnel2"=".\tunnel2.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "winpos"=".\winpos.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name glut
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/progs/demos/Windows/drawpix.dsp b/progs/demos/Windows/drawpix.dsp new file mode 100644 index 000000000..57003e616 --- /dev/null +++ b/progs/demos/Windows/drawpix.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="drawpix" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=drawpix - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "drawpix.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "drawpix.mak" CFG="drawpix - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "drawpix - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "drawpix - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "drawpix - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../" /I "../../../include" /I "../../util" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../drawpix.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "drawpix - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../drawpix.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "drawpix - Win32 Release"
+# Name "drawpix - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\drawpix.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/fire.dsp b/progs/demos/Windows/fire.dsp new file mode 100644 index 000000000..f8a536d33 --- /dev/null +++ b/progs/demos/Windows/fire.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="fire" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=fire - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "fire.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "fire.mak" CFG="fire - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "fire - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "fire - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "fire - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../fire.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "fire - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../fire.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "fire - Win32 Release"
+# Name "fire - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\fire.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/gears.dsp b/progs/demos/Windows/gears.dsp new file mode 100644 index 000000000..43a588dc6 --- /dev/null +++ b/progs/demos/Windows/gears.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="gears" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gears - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gears.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gears.mak" CFG="gears - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gears - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "gears - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gears - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../gears.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "gears - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../gears.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "gears - Win32 Release"
+# Name "gears - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\gears.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/geartrain.dsp b/progs/demos/Windows/geartrain.dsp new file mode 100644 index 000000000..8dee77de4 --- /dev/null +++ b/progs/demos/Windows/geartrain.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="geartrain" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=geartrain - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "geartrain.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "geartrain.mak" CFG="geartrain - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "geartrain - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "geartrain - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "geartrain - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../geartrain.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "geartrain - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../geartrain.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "geartrain - Win32 Release"
+# Name "geartrain - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\geartrain.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/glinfo.dsp b/progs/demos/Windows/glinfo.dsp new file mode 100644 index 000000000..d9d61eb42 --- /dev/null +++ b/progs/demos/Windows/glinfo.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="glinfo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=glinfo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "glinfo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "glinfo.mak" CFG="glinfo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "glinfo - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "glinfo - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "glinfo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../glinfo.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "glinfo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../glinfo.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "glinfo - Win32 Release"
+# Name "glinfo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\glinfo.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/gloss.dsp b/progs/demos/Windows/gloss.dsp new file mode 100644 index 000000000..402d291f4 --- /dev/null +++ b/progs/demos/Windows/gloss.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="gloss" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gloss - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gloss.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gloss.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gloss - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "gloss - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gloss - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../gloss.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "gloss - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../gloss.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "gloss - Win32 Release"
+# Name "gloss - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\gloss.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/gltestperf.dsp b/progs/demos/Windows/gltestperf.dsp new file mode 100644 index 000000000..e50662015 --- /dev/null +++ b/progs/demos/Windows/gltestperf.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="gltestperf" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gltestperf - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gltestperf.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gltestperf.mak" CFG="gltestperf - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gltestperf - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "gltestperf - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gltestperf - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../gltestperf.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "gltestperf - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../gltestperf.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "gltestperf - Win32 Release"
+# Name "gltestperf - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\gltestperf.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/glutfx.dsp b/progs/demos/Windows/glutfx.dsp new file mode 100644 index 000000000..90eca930d --- /dev/null +++ b/progs/demos/Windows/glutfx.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="glutfx" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=glutfx - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "glutfx.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "glutfx.mak" CFG="glutfx - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "glutfx - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "glutfx - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "glutfx - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../glutfx.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "glutfx - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../glutfx.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "glutfx - Win32 Release"
+# Name "glutfx - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\glutfx.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/ipers.dsp b/progs/demos/Windows/ipers.dsp new file mode 100644 index 000000000..430f1b625 --- /dev/null +++ b/progs/demos/Windows/ipers.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="ipers" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ipers - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ipers.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ipers.mak" CFG="ipers - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ipers - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ipers - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "ipers - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../ipers.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ipers - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../ipers.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "ipers - Win32 Release"
+# Name "ipers - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\ipers.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/isosurf.dsp b/progs/demos/Windows/isosurf.dsp new file mode 100644 index 000000000..1c59d4008 --- /dev/null +++ b/progs/demos/Windows/isosurf.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="isosurf" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=isosurf - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "isosurf.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "isosurf.mak" CFG="isosurf - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "isosurf - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "isosurf - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "isosurf - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../isosurf.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "isosurf - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../isosurf.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "isosurf - Win32 Release"
+# Name "isosurf - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\isosurf.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/loadbias.dsp b/progs/demos/Windows/loadbias.dsp new file mode 100644 index 000000000..ed51960e4 --- /dev/null +++ b/progs/demos/Windows/loadbias.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="lodbias" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=lodbias - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "lodbias.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "lodbias.mak" CFG="lodbias - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "lodbias - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "lodbias - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "lodbias - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../lodbias.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "lodbias - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../lodbias.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "lodbias - Win32 Release"
+# Name "lodbias - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\lodbias.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/morph3d.dsp b/progs/demos/Windows/morph3d.dsp new file mode 100644 index 000000000..247dbf03d --- /dev/null +++ b/progs/demos/Windows/morph3d.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="morph3d" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=morph3d - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "morph3d.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "morph3d.mak" CFG="morph3d - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "morph3d - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "morph3d - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "morph3d - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../morph3d.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "morph3d - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../morph3d.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "morph3d - Win32 Release"
+# Name "morph3d - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\morph3d.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/multiarb.dsp b/progs/demos/Windows/multiarb.dsp new file mode 100644 index 000000000..57c32deb2 --- /dev/null +++ b/progs/demos/Windows/multiarb.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="multiarb" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=multiarb - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "multiarb.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "multiarb.mak" CFG="multiarb - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "multiarb - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "multiarb - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "multiarb - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../multiarb.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "multiarb - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../multiarb.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "multiarb - Win32 Release"
+# Name "multiarb - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\multiarb.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/occlude.dsp b/progs/demos/Windows/occlude.dsp new file mode 100644 index 000000000..ca4afa579 --- /dev/null +++ b/progs/demos/Windows/occlude.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="occlude" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=occlude - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "occlude.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "occlude.mak" CFG="occlude - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "occlude - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "occlude - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "occlude - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../occlude.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "occlude - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../occlude.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "occlude - Win32 Release"
+# Name "occlude - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\occlude.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/osdemo.dsp b/progs/demos/Windows/osdemo.dsp new file mode 100644 index 000000000..ccaa6d2b4 --- /dev/null +++ b/progs/demos/Windows/osdemo.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="osdemo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=osdemo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "osdemo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "osdemo.mak" CFG="osdemo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "osdemo - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "osdemo - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "osdemo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB ../../../lib/OSMESA32.LIB /nologo /subsystem:console /machine:I386 /out:"../osdemo.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "osdemo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB ../../../lib/OSMESA32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../osdemo.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "osdemo - Win32 Release"
+# Name "osdemo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\osdemo.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/paltex.dsp b/progs/demos/Windows/paltex.dsp new file mode 100644 index 000000000..efc638421 --- /dev/null +++ b/progs/demos/Windows/paltex.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="paltex" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=paltex - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "paltex.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "paltex.mak" CFG="paltex - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "paltex - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "paltex - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "paltex - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../paltex.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "paltex - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../paltex.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "paltex - Win32 Release"
+# Name "paltex - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\paltex.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/pixeltex.dsp b/progs/demos/Windows/pixeltex.dsp new file mode 100644 index 000000000..d09f9f312 --- /dev/null +++ b/progs/demos/Windows/pixeltex.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="pixeltex" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=pixeltex - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "pixeltex.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "pixeltex.mak" CFG="pixeltex - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "pixeltex - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "pixeltex - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "pixeltex - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../pixeltex.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "pixeltex - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../pixeltex.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "pixeltex - Win32 Release"
+# Name "pixeltex - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\pixeltex.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/pointblast.dsp b/progs/demos/Windows/pointblast.dsp new file mode 100644 index 000000000..7be695839 --- /dev/null +++ b/progs/demos/Windows/pointblast.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="pointblast" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=pointblast - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "pointblast.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "pointblast.mak" CFG="pointblast - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "pointblast - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "pointblast - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "pointblast - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../pointblast.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "pointblast - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../pointblast.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "pointblast - Win32 Release"
+# Name "pointblast - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\pointblast.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/rain.dsp b/progs/demos/Windows/rain.dsp new file mode 100644 index 000000000..7e380e66a --- /dev/null +++ b/progs/demos/Windows/rain.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="rain" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=rain - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "rain.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "rain.mak" CFG="rain - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "rain - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "rain - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "rain - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../rain.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "rain - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../rain.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "rain - Win32 Release"
+# Name "rain - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\rain.cxx
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/ray.dsp b/progs/demos/Windows/ray.dsp new file mode 100644 index 000000000..dfa26e775 --- /dev/null +++ b/progs/demos/Windows/ray.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="ray" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ray - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ray.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ray.mak" CFG="ray - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ray - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ray - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "ray - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../ray.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ray - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../ray.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "ray - Win32 Release"
+# Name "ray - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\ray.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/readpix.dsp b/progs/demos/Windows/readpix.dsp new file mode 100644 index 000000000..8097d1062 --- /dev/null +++ b/progs/demos/Windows/readpix.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="readpix" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=readpix - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "readpix.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "readpix.mak" CFG="readpix - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "readpix - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "readpix - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "readpix - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../readpix.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "readpix - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../readpix.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "readpix - Win32 Release"
+# Name "readpix - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\readpix.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/reflect.dsp b/progs/demos/Windows/reflect.dsp new file mode 100644 index 000000000..fa09700af --- /dev/null +++ b/progs/demos/Windows/reflect.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="reflect" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=reflect - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "reflect.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "reflect.mak" CFG="reflect - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "reflect - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "reflect - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "reflect - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../reflect.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "reflect - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../reflect.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "reflect - Win32 Release"
+# Name "reflect - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\reflect.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/renormal.dsp b/progs/demos/Windows/renormal.dsp new file mode 100644 index 000000000..4d72e88d8 --- /dev/null +++ b/progs/demos/Windows/renormal.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="renormal" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=renormal - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "renormal.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "renormal.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "renormal - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "renormal - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "renormal - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../renormal.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "renormal - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../renormal.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "renormal - Win32 Release"
+# Name "renormal - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\renormal.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/shadowtex.dsp b/progs/demos/Windows/shadowtex.dsp new file mode 100644 index 000000000..419ec2413 --- /dev/null +++ b/progs/demos/Windows/shadowtex.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="shadowtex" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=shadowtex - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "shadowtex.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "shadowtex.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "shadowtex - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "shadowtex - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "shadowtex - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../shadowtex.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "shadowtex - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../shadowtex.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "shadowtex - Win32 Release"
+# Name "shadowtex - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\shadowtex.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/spectex.dsp b/progs/demos/Windows/spectex.dsp new file mode 100644 index 000000000..d1960b3d1 --- /dev/null +++ b/progs/demos/Windows/spectex.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="spectex" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=spectex - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "spectex.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "spectex.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "spectex - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "spectex - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "spectex - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../spectex.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "spectex - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../spectex.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "spectex - Win32 Release"
+# Name "spectex - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\spectex.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/spriteblast.dsp b/progs/demos/Windows/spriteblast.dsp new file mode 100644 index 000000000..8a02ed50d --- /dev/null +++ b/progs/demos/Windows/spriteblast.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="spriteblast" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=spriteblast - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "spriteblast.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "spriteblast.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "spriteblast - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "spriteblast - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "spriteblast - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../spriteblast.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "spriteblast - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../spriteblast.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "spriteblast - Win32 Release"
+# Name "spriteblast - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\spriteblast.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/stex3d.dsp b/progs/demos/Windows/stex3d.dsp new file mode 100644 index 000000000..7c112d62c --- /dev/null +++ b/progs/demos/Windows/stex3d.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="stex3d" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=stex3d - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "stex3d.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "stex3d.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "stex3d - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "stex3d - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "stex3d - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../stex3d.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "stex3d - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../stex3d.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "stex3d - Win32 Release"
+# Name "stex3d - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\stex3d.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/teapot.dsp b/progs/demos/Windows/teapot.dsp new file mode 100644 index 000000000..3260e635a --- /dev/null +++ b/progs/demos/Windows/teapot.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="teapot" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=teapot - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "teapot.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "teapot.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "teapot - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "teapot - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "teapot - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../teapot.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "teapot - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../teapot.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "teapot - Win32 Release"
+# Name "teapot - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\teapot.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/terrain.dsp b/progs/demos/Windows/terrain.dsp new file mode 100644 index 000000000..9fe490db8 --- /dev/null +++ b/progs/demos/Windows/terrain.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="terrain" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=terrain - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "terrain.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "terrain.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "terrain - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "terrain - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "terrain - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../terrain.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "terrain - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../terrain.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "terrain - Win32 Release"
+# Name "terrain - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\terrain.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/tessdemo.dsp b/progs/demos/Windows/tessdemo.dsp new file mode 100644 index 000000000..61345c79e --- /dev/null +++ b/progs/demos/Windows/tessdemo.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="tessdemo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=tessdemo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tessdemo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tessdemo.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tessdemo - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tessdemo - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tessdemo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../tessdemo.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tessdemo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../tessdemo.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tessdemo - Win32 Release"
+# Name "tessdemo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\tessdemo.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/texcyl.dsp b/progs/demos/Windows/texcyl.dsp new file mode 100644 index 000000000..b227e02c2 --- /dev/null +++ b/progs/demos/Windows/texcyl.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="texcyl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=texcyl - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "texcyl.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "texcyl.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "texcyl - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "texcyl - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "texcyl - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../texcyl.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "texcyl - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../texcyl.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "texcyl - Win32 Release"
+# Name "texcyl - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\texcyl.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/texdown.dsp b/progs/demos/Windows/texdown.dsp new file mode 100644 index 000000000..acea7666a --- /dev/null +++ b/progs/demos/Windows/texdown.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="texdown" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=texdown - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "texdown.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "texdown.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "texdown - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "texdown - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "texdown - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../texdown.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "texdown - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../texdown.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "texdown - Win32 Release"
+# Name "texdown - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\texdown.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/texenv.dsp b/progs/demos/Windows/texenv.dsp new file mode 100644 index 000000000..3eb7eecdb --- /dev/null +++ b/progs/demos/Windows/texenv.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="texenv" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=texenv - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "texenv.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "texenv.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "texenv - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "texenv - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "texenv - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../texenv.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "texenv - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../texenv.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "texenv - Win32 Release"
+# Name "texenv - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\texenv.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/texobj.dsp b/progs/demos/Windows/texobj.dsp new file mode 100644 index 000000000..5db5f2ee7 --- /dev/null +++ b/progs/demos/Windows/texobj.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="texobj" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=texobj - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "texobj.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "texobj.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "texobj - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "texobj - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "texobj - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../texobj.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "texobj - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../texobj.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "texobj - Win32 Release"
+# Name "texobj - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\texobj.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/trispd.dsp b/progs/demos/Windows/trispd.dsp new file mode 100644 index 000000000..7e27cf3d0 --- /dev/null +++ b/progs/demos/Windows/trispd.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="trispd" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=trispd - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "trispd.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "trispd.mak" CFG="bounce - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "trispd - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "trispd - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "trispd - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../trispd.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "trispd - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../trispd.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "trispd - Win32 Release"
+# Name "trispd - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\trispd.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/tunnel.dsp b/progs/demos/Windows/tunnel.dsp new file mode 100644 index 000000000..965f109c3 --- /dev/null +++ b/progs/demos/Windows/tunnel.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="tunnel" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=tunnel - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tunnel.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tunnel.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tunnel - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tunnel - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tunnel - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../tunnel.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tunnel - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../tunnel.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tunnel - Win32 Release"
+# Name "tunnel - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\tunnel.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/tunnel2.dsp b/progs/demos/Windows/tunnel2.dsp new file mode 100644 index 000000000..3ae2800a0 --- /dev/null +++ b/progs/demos/Windows/tunnel2.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="tunnel2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=tunnel2 - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tunnel2.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tunnel2.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tunnel2 - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tunnel2 - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tunnel2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../tunnel2.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tunnel2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../tunnel2.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tunnel2 - Win32 Release"
+# Name "tunnel2 - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\tunnel2.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/Windows/winpos.dsp b/progs/demos/Windows/winpos.dsp new file mode 100644 index 000000000..b7b569e64 --- /dev/null +++ b/progs/demos/Windows/winpos.dsp @@ -0,0 +1,112 @@ +# Microsoft Developer Studio Project File - Name="winpos" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=winpos - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "winpos.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "winpos.mak" CFG="gloss - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "winpos - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "winpos - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "winpos - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../util" /I "../../../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /machine:I386 /out:"../winpos.exe"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "winpos - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../util" /I "../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../../../lib/GLUT32.LIB ../../../lib/GLU32.LIB ../../../lib/OPENGL32.LIB /nologo /subsystem:console /debug /machine:I386 /out:"../winpos.exe" /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copy DLLs
+PostBuild_Cmds=copy ..\..\..\lib\*.dll ..
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "winpos - Win32 Release"
+# Name "winpos - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\winpos.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/progs/demos/arbfplight.c b/progs/demos/arbfplight.c new file mode 100644 index 000000000..6ad95d4d7 --- /dev/null +++ b/progs/demos/arbfplight.c @@ -0,0 +1,395 @@ +/* + * Use GL_ARB_fragment_program and GL_ARB_vertex_program to implement + * simple per-pixel lighting. + * + * Brian Paul + * 17 April 2003 + */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + + +static GLfloat Diffuse[4] = { 0.5, 0.5, 1.0, 1.0 }; +static GLfloat Specular[4] = { 0.8, 0.8, 0.8, 1.0 }; +static GLfloat LightPos[4] = { 0.0, 10.0, 20.0, 1.0 }; +static GLfloat Delta = 1.0; + +static GLuint FragProg; +static GLuint VertProg; +static GLboolean Anim = GL_TRUE; +static GLboolean Wire = GL_FALSE; +static GLboolean PixelLight = GL_TRUE; + +static GLint T0 = 0; +static GLint Frames = 0; + +static GLfloat Xrot = 0, Yrot = 0; + +static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB_func; +static PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB_func; +static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB_func; +static PFNGLGENPROGRAMSARBPROC glGenProgramsARB_func; +static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB_func; +static PFNGLBINDPROGRAMARBPROC glBindProgramARB_func; +static PFNGLISPROGRAMARBPROC glIsProgramARB_func; +static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func; + +/* These must match the indexes used in the fragment program */ +#define LIGHTPOS 3 + +/* Set to one to test ARB_fog_linear program option */ +#define DO_FRAGMENT_FOG 0 + + +static void Redisplay( void ) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + if (PixelLight) { + glProgramLocalParameter4fvARB_func(GL_FRAGMENT_PROGRAM_ARB, + LIGHTPOS, LightPos); + glEnable(GL_FRAGMENT_PROGRAM_ARB); + glEnable(GL_VERTEX_PROGRAM_ARB); + glDisable(GL_LIGHTING); + } + else { + glLightfv(GL_LIGHT0, GL_POSITION, LightPos); + glDisable(GL_FRAGMENT_PROGRAM_ARB); + glDisable(GL_VERTEX_PROGRAM_ARB); + glEnable(GL_LIGHTING); + } + + glPushMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + glutSolidSphere(2.0, 10, 5); + glPopMatrix(); + + glutSwapBuffers(); + + Frames++; + + if (Anim) { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + } + } +} + + +static void Idle(void) +{ + LightPos[0] += Delta; + if (LightPos[0] > 25.0) + Delta = -1.0; + else if (LightPos[0] <- 25.0) + Delta = 1.0; + glutPostRedisplay(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -15.0 ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + case 'a': + Anim = !Anim; + if (Anim) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 'x': + LightPos[0] -= 1.0; + break; + case 'X': + LightPos[0] += 1.0; + break; + case 'w': + Wire = !Wire; + if (Wire) + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + else + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + break; + case 'p': + PixelLight = !PixelLight; + if (PixelLight) { + printf("Per-pixel lighting\n"); + } + else { + printf("Conventional lighting\n"); + } + break; + case 27: + glDeleteProgramsARB_func(1, &VertProg); + glDeleteProgramsARB_func(1, &FragProg); + exit(0); + break; + } + glutPostRedisplay(); +} + +static void SpecialKey( int key, int x, int y ) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Xrot -= step; + break; + case GLUT_KEY_DOWN: + Xrot += step; + break; + case GLUT_KEY_LEFT: + Yrot -= step; + break; + case GLUT_KEY_RIGHT: + Yrot += step; + break; + } + glutPostRedisplay(); +} + + +/* A helper for finding errors in program strings */ +static int FindLine( const char *program, int position ) +{ + int i, line = 1; + for (i = 0; i < position; i++) { + if (program[i] == '\n') + line++; + } + return line; +} + + +static void Init( void ) +{ + GLint errorPos; + + /* Yes, this could be expressed more efficiently */ + static const char *fragProgramText = + "!!ARBfp1.0\n" +#if DO_FRAGMENT_FOG + "OPTION ARB_fog_linear; \n" +#endif + "PARAM Diffuse = state.material.diffuse; \n" + "PARAM Specular = state.material.specular; \n" + "PARAM LightPos = program.local[3]; \n" + "TEMP lightDir, normal, len; \n" + "TEMP dotProd, specAtten; \n" + "TEMP diffuseColor, specularColor; \n" + + "# Compute normalized light direction \n" + "DP3 len.x, LightPos, LightPos; \n" + "RSQ len.y, len.x; \n" + "MUL lightDir, LightPos, len.y; \n" + + "# Compute normalized normal \n" + "DP3 len.x, fragment.texcoord[0], fragment.texcoord[0]; \n" + "RSQ len.y, len.x; \n" + "MUL normal, fragment.texcoord[0], len.y; \n" + + "# Compute dot product of light direction and normal vector\n" + "DP3_SAT dotProd, lightDir, normal; # limited to [0,1]\n" + + "MUL diffuseColor, Diffuse, dotProd; # diffuse attenuation\n" + + "POW specAtten.x, dotProd.x, {20.0}.x; # specular exponent\n" + + "MUL specularColor, Specular, specAtten.x; # specular attenuation\n" + +#if DO_FRAGMENT_FOG + "# need to clamp color to [0,1] before fogging \n" + "ADD_SAT result.color, diffuseColor, specularColor; # add colors\n" +#else + "# clamping will be done after program's finished \n" + "ADD result.color, diffuseColor, specularColor; # add colors\n" +#endif + "END \n" + ; + + static const char *vertProgramText = + "!!ARBvp1.0\n" + "ATTRIB pos = vertex.position; \n" + "ATTRIB norm = vertex.normal; \n" + "PARAM modelview[4] = { state.matrix.modelview }; \n" + "PARAM modelviewProj[4] = { state.matrix.mvp }; \n" + "PARAM invModelview[4] = { state.matrix.modelview.invtrans }; \n" + + "# typical modelview/projection transform \n" + "DP4 result.position.x, pos, modelviewProj[0]; \n" + "DP4 result.position.y, pos, modelviewProj[1]; \n" + "DP4 result.position.z, pos, modelviewProj[2]; \n" + "DP4 result.position.w, pos, modelviewProj[3]; \n" + + "# transform normal by inv transpose of modelview, put in tex0 \n" + "DP3 result.texcoord[0].x, norm, invModelview[0]; \n" + "DP3 result.texcoord[0].y, norm, invModelview[1]; \n" + "DP3 result.texcoord[0].z, norm, invModelview[2]; \n" + "DP3 result.texcoord[0].w, norm, invModelview[3]; \n" + +#if DO_FRAGMENT_FOG + "# compute fog coordinate = vertex eye-space Z coord (negated)\n" + "DP4 result.fogcoord, -pos, modelview[2]; \n" +#endif + "END\n"; + ; + + if (!glutExtensionSupported("GL_ARB_vertex_program")) { + printf("Sorry, this demo requires GL_ARB_vertex_program\n"); + exit(1); + } + if (!glutExtensionSupported("GL_ARB_fragment_program")) { + printf("Sorry, this demo requires GL_ARB_fragment_program\n"); + exit(1); + } + + /* + * Get extension function pointers. + */ + glProgramLocalParameter4fvARB_func = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) glutGetProcAddress("glProgramLocalParameter4fvARB"); + assert(glProgramLocalParameter4fvARB_func); + + glProgramLocalParameter4dARB_func = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) glutGetProcAddress("glProgramLocalParameter4dARB"); + assert(glProgramLocalParameter4dARB_func); + + glGetProgramLocalParameterdvARB_func = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) glutGetProcAddress("glGetProgramLocalParameterdvARB"); + assert(glGetProgramLocalParameterdvARB_func); + + glGenProgramsARB_func = (PFNGLGENPROGRAMSARBPROC) glutGetProcAddress("glGenProgramsARB"); + assert(glGenProgramsARB_func); + + glProgramStringARB_func = (PFNGLPROGRAMSTRINGARBPROC) glutGetProcAddress("glProgramStringARB"); + assert(glProgramStringARB_func); + + glBindProgramARB_func = (PFNGLBINDPROGRAMARBPROC) glutGetProcAddress("glBindProgramARB"); + assert(glBindProgramARB_func); + + glIsProgramARB_func = (PFNGLISPROGRAMARBPROC) glutGetProcAddress("glIsProgramARB"); + assert(glIsProgramARB_func); + + glDeleteProgramsARB_func = (PFNGLDELETEPROGRAMSARBPROC) glutGetProcAddress("glDeleteProgramsARB"); + assert(glDeleteProgramsARB_func); + + /* + * Fragment program + */ + glGenProgramsARB_func(1, &FragProg); + assert(FragProg > 0); + glBindProgramARB_func(GL_FRAGMENT_PROGRAM_ARB, FragProg); + glProgramStringARB_func(GL_FRAGMENT_PROGRAM_ARB, + GL_PROGRAM_FORMAT_ASCII_ARB, + strlen(fragProgramText), + (const GLubyte *) fragProgramText); + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorPos); + if (glGetError() != GL_NO_ERROR || errorPos != -1) { + int l = FindLine(fragProgramText, errorPos); + printf("Fragment Program Error (pos=%d line=%d): %s\n", errorPos, l, + (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB)); + exit(0); + } + assert(glIsProgramARB_func(FragProg)); + + /* + * Do some sanity tests + */ + { + GLdouble v[4]; + glProgramLocalParameter4dARB_func(GL_FRAGMENT_PROGRAM_ARB, 8, + 10.0, 20.0, 30.0, 40.0); + glGetProgramLocalParameterdvARB_func(GL_FRAGMENT_PROGRAM_ARB, 8, v); + assert(v[0] == 10.0); + assert(v[1] == 20.0); + assert(v[2] == 30.0); + assert(v[3] == 40.0); + } + + /* + * Vertex program + */ + glGenProgramsARB_func(1, &VertProg); + assert(VertProg > 0); + glBindProgramARB_func(GL_VERTEX_PROGRAM_ARB, VertProg); + glProgramStringARB_func(GL_VERTEX_PROGRAM_ARB, + GL_PROGRAM_FORMAT_ASCII_ARB, + strlen(vertProgramText), + (const GLubyte *) vertProgramText); + glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorPos); + if (glGetError() != GL_NO_ERROR || errorPos != -1) { + int l = FindLine(fragProgramText, errorPos); + printf("Vertex Program Error (pos=%d line=%d): %s\n", errorPos, l, + (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB)); + exit(0); + } + assert(glIsProgramARB_func(VertProg)); + + /* + * Misc init + */ + glClearColor(0.3, 0.3, 0.3, 0.0); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHTING); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Diffuse); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Specular); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 20.0); + +#if DO_FRAGMENT_FOG + { + /* Green-ish fog color */ + static const GLfloat fogColor[4] = {0.5, 1.0, 0.5, 0}; + glFogfv(GL_FOG_COLOR, fogColor); + glFogf(GL_FOG_START, 5.0); + glFogf(GL_FOG_END, 25.0); + } +#endif + + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("Press p to toggle between per-pixel and per-vertex lighting\n"); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 200, 200 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Redisplay ); + if (Anim) + glutIdleFunc(Idle); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/arbocclude.c b/progs/demos/arbocclude.c new file mode 100644 index 000000000..ddbb1f1b7 --- /dev/null +++ b/progs/demos/arbocclude.c @@ -0,0 +1,283 @@ +/* + * GL_ARB_occlusion_query demo + * + * Brian Paul + * 12 June 2003 + * + * Copyright (C) 2003 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +#define TEST_DISPLAY_LISTS 0 + +static GLboolean Anim = GL_TRUE; +static GLfloat Xpos = 0; +static GLuint OccQuery; + + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + + + +static void Idle(void) +{ + static int lastTime = 0; + static int sign = +1; + int time = glutGet(GLUT_ELAPSED_TIME); + float step; + + if (lastTime == 0) + lastTime = time; + else if (time - lastTime < 20) /* 50Hz update */ + return; + + step = (time - lastTime) / 1000.0 * sign; + lastTime = time; + + Xpos += step; + + if (Xpos > 2.5) { + Xpos = 2.5; + sign = -1; + } + else if (Xpos < -2.5) { + Xpos = -2.5; + sign = +1; + } + glutPostRedisplay(); +} + + +static void Display( void ) +{ + GLuint passed; + GLint ready; + char s[100]; + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -15.0 ); + + /* draw the occluding polygons */ + glColor3f(0, 0.6, 0.8); + glBegin(GL_QUADS); + glVertex2f(-1.6, -1.5); + glVertex2f(-0.4, -1.5); + glVertex2f(-0.4, 1.5); + glVertex2f(-1.6, 1.5); + + glVertex2f( 0.4, -1.5); + glVertex2f( 1.6, -1.5); + glVertex2f( 1.6, 1.5); + glVertex2f( 0.4, 1.5); + glEnd(); + + /* draw the test polygon with occlusion testing */ + glPushMatrix(); + glTranslatef(Xpos, 0, -0.5); + glScalef(0.3, 0.3, 1.0); + glRotatef(-90.0 * Xpos, 0, 0, 1); + +#if defined(GL_ARB_occlusion_query) +#if TEST_DISPLAY_LISTS + glNewList(10, GL_COMPILE); + glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery); + glEndList(); + glCallList(10); +#else + glBeginQueryARB(GL_SAMPLES_PASSED_ARB, OccQuery); +#endif + + glColorMask(0, 0, 0, 0); + glDepthMask(GL_FALSE); + + glBegin(GL_POLYGON); + glVertex3f(-1, -1, 0); + glVertex3f( 1, -1, 0); + glVertex3f( 1, 1, 0); + glVertex3f(-1, 1, 0); + glEnd(); + +#if TEST_DISPLAY_LISTS + glNewList(11, GL_COMPILE); + glEndQueryARB(GL_SAMPLES_PASSED_ARB); + glEndList(); + glCallList(11); +#else + glEndQueryARB(GL_SAMPLES_PASSED_ARB); +#endif + + do { + /* do useful work here, if any */ + glGetQueryObjectivARB(OccQuery, GL_QUERY_RESULT_AVAILABLE_ARB, &ready); + } while (!ready); + glGetQueryObjectuivARB(OccQuery, GL_QUERY_RESULT_ARB, &passed); + + /* turn off occlusion testing */ + glColorMask(1, 1, 1, 1); + glDepthMask(GL_TRUE); +#endif /* GL_ARB_occlusion_query */ + + /* draw the orange rect, so we can see what's going on */ + glColor3f(0.8, 0.5, 0); + glBegin(GL_POLYGON); + glVertex3f(-1, -1, 0); + glVertex3f( 1, -1, 0); + glVertex3f( 1, 1, 0); + glVertex3f(-1, 1, 0); + glEnd(); + + glPopMatrix(); + + + /* Print result message */ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + glColor3f(1, 1, 1); +#if defined(GL_ARB_occlusion_query) + sprintf(s, " %4d Fragments Visible", passed); + glRasterPos3f(-0.50, -0.7, 0); + PrintString(s); + if (!passed) { + glRasterPos3f(-0.25, -0.8, 0); + PrintString("Fully Occluded"); + } +#else + glRasterPos3f(-0.25, -0.8, 0); + PrintString("GL_ARB_occlusion_query not available at compile time"); +#endif /* GL_ARB_occlusion_query */ + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + case ' ': + Anim = !Anim; + if (Anim) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + const GLfloat step = 0.1; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_LEFT: + Xpos -= step; + break; + case GLUT_KEY_RIGHT: + Xpos += step; + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + const char *ext = (const char *) glGetString(GL_EXTENSIONS); + GLint bits; + + if (!strstr(ext, "GL_ARB_occlusion_query")) { + printf("Sorry, this demo requires the GL_ARB_occlusion_query extension\n"); + exit(-1); + } + +#if defined(GL_ARB_occlusion_query) + glGetQueryivARB(GL_SAMPLES_PASSED_ARB, GL_QUERY_COUNTER_BITS_ARB, &bits); + if (!bits) { + printf("Hmmm, GL_QUERY_COUNTER_BITS_ARB is zero!\n"); + exit(-1); + } +#endif /* GL_ARB_occlusion_query */ + + glGetIntegerv(GL_DEPTH_BITS, &bits); + printf("Depthbits: %d\n", bits); + +#if defined(GL_ARB_occlusion_query) + glGenQueriesARB(1, &OccQuery); + assert(OccQuery > 0); +#endif /* GL_ARB_occlusion_query */ + + glEnable(GL_DEPTH_TEST); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 400, 400 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutIdleFunc( Idle ); + glutDisplayFunc( Display ); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/bounce.c b/progs/demos/bounce.c new file mode 100644 index 000000000..2f3fa9fd9 --- /dev/null +++ b/progs/demos/bounce.c @@ -0,0 +1,228 @@ + +/* + * Bouncing ball demo. + * + * This program is in the public domain + * + * Brian Paul + * + * Conversion to GLUT by Mark J. Kilgard + */ + + +#include <math.h> +#include <stdlib.h> +#include <string.h> +#include <GL/glut.h> +#include <sys/time.h> +#include <time.h> + +#define COS(X) cos( (X) * 3.14159/180.0 ) +#define SIN(X) sin( (X) * 3.14159/180.0 ) + +#define RED 1 +#define WHITE 2 +#define CYAN 3 + +GLboolean IndexMode = GL_FALSE; +GLuint Ball; +GLenum Mode; +GLfloat Zrot = 0.0, Zstep = 180.0; +GLfloat Xpos = 0.0, Ypos = 1.0; +GLfloat Xvel = 2.0, Yvel = 0.0; +GLfloat Xmin = -4.0, Xmax = 4.0; +GLfloat Ymin = -3.8, Ymax = 4.0; +GLfloat G = -9.8; + +static GLuint +make_ball(void) +{ + GLuint list; + GLfloat a, b; + GLfloat da = 18.0, db = 18.0; + GLfloat radius = 1.0; + GLuint color; + GLfloat x, y, z; + + list = glGenLists(1); + + glNewList(list, GL_COMPILE); + + color = 0; + for (a = -90.0; a + da <= 90.0; a += da) { + + glBegin(GL_QUAD_STRIP); + for (b = 0.0; b <= 360.0; b += db) { + + if (color) { + glIndexi(RED); + glColor3f(1, 0, 0); + } else { + glIndexi(WHITE); + glColor3f(1, 1, 1); + } + + x = radius * COS(b) * COS(a); + y = radius * SIN(b) * COS(a); + z = radius * SIN(a); + glVertex3f(x, y, z); + + x = radius * COS(b) * COS(a + da); + y = radius * SIN(b) * COS(a + da); + z = radius * SIN(a + da); + glVertex3f(x, y, z); + + color = 1 - color; + } + glEnd(); + + } + + glEndList(); + + return list; +} + +static void +reshape(int width, int height) +{ + float aspect = (float) width / (float) height; + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-6.0 * aspect, 6.0 * aspect, -6.0, 6.0, -6.0, 6.0); + glMatrixMode(GL_MODELVIEW); +} + +/* ARGSUSED1 */ +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: /* Escape */ + exit(0); + } +} + +static void +draw(void) +{ + GLint i; + + glClear(GL_COLOR_BUFFER_BIT); + + glIndexi(CYAN); + glColor3f(0, 1, 1); + glBegin(GL_LINES); + for (i = -5; i <= 5; i++) { + glVertex2i(i, -5); + glVertex2i(i, 5); + } + for (i = -5; i <= 5; i++) { + glVertex2i(-5, i); + glVertex2i(5, i); + } + for (i = -5; i <= 5; i++) { + glVertex2i(i, -5); + glVertex2f(i * 1.15, -5.9); + } + glVertex2f(-5.3, -5.35); + glVertex2f(5.3, -5.35); + glVertex2f(-5.75, -5.9); + glVertex2f(5.75, -5.9); + glEnd(); + + glPushMatrix(); + glTranslatef(Xpos, Ypos, 0.0); + glScalef(2.0, 2.0, 2.0); + glRotatef(8.0, 0.0, 0.0, 1.0); + glRotatef(90.0, 1.0, 0.0, 0.0); + glRotatef(Zrot, 0.0, 0.0, 1.0); + + glCallList(Ball); + + glPopMatrix(); + + glFlush(); + glutSwapBuffers(); +} + +static void +idle(void) +{ + static float vel0 = -100.0; + static double t0 = -1.; + double t, dt; + t = glutGet(GLUT_ELAPSED_TIME) / 1000.; + if (t0 < 0.) + t0 = t; + dt = t - t0; + t0 = t; + + Zrot += Zstep*dt; + + Xpos += Xvel*dt; + if (Xpos >= Xmax) { + Xpos = Xmax; + Xvel = -Xvel; + Zstep = -Zstep; + } + if (Xpos <= Xmin) { + Xpos = Xmin; + Xvel = -Xvel; + Zstep = -Zstep; + } + Ypos += Yvel*dt; + Yvel += G*dt; + if (Ypos < Ymin) { + Ypos = Ymin; + if (vel0 == -100.0) + vel0 = fabs(Yvel); + Yvel = vel0; + } + glutPostRedisplay(); +} + +static void +visible(int vis) +{ + if (vis == GLUT_VISIBLE) + glutIdleFunc(idle); + else + glutIdleFunc(NULL); +} + +int main(int argc, char *argv[]) +{ + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(600, 450); + + + IndexMode = argc > 1 && strcmp(argv[1], "-ci") == 0; + if (IndexMode) + glutInitDisplayMode(GLUT_INDEX | GLUT_DOUBLE); + else + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + + glutCreateWindow("Bounce"); + Ball = make_ball(); + glCullFace(GL_BACK); + glEnable(GL_CULL_FACE); + glDisable(GL_DITHER); + glShadeModel(GL_FLAT); + + glutDisplayFunc(draw); + glutReshapeFunc(reshape); + glutVisibilityFunc(visible); + glutKeyboardFunc(key); + + if (IndexMode) { + glutSetColor(RED, 1.0, 0.0, 0.0); + glutSetColor(WHITE, 1.0, 1.0, 1.0); + glutSetColor(CYAN, 0.0, 1.0, 1.0); + } + + glutMainLoop(); + return 0; /* ANSI C requires main to return int. */ +} diff --git a/progs/demos/clearspd.c b/progs/demos/clearspd.c new file mode 100644 index 000000000..42953f667 --- /dev/null +++ b/progs/demos/clearspd.c @@ -0,0 +1,218 @@ + +/* + * Simple GLUT program to measure glClear() and glutSwapBuffers() speed. + * Brian Paul February 15, 1997 This file in public domain. + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + + +static float MinPeriod = 2.0; /* 2 seconds */ +static int ColorMode = GLUT_RGB; +static int Width = 400.0; +static int Height = 400.0; +static int Loops = 100; +static float ClearColor = 0.0; +static GLbitfield BufferMask = GL_COLOR_BUFFER_BIT; +static GLboolean SwapFlag = GL_FALSE; + + + +static void Idle( void ) +{ + glutPostRedisplay(); +} + + +static void Display( void ) +{ + double t0, t1; + double clearRate; + double pixelRate; + int i; + + glClearColor( ClearColor, ClearColor, ClearColor, 0.0 ); + ClearColor += 0.1; + if (ClearColor>1.0) + ClearColor = 0.0; + + if (SwapFlag) { + t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + for (i=0;i<Loops;i++) { + glClear( BufferMask ); + glutSwapBuffers(); + } + glFinish(); + t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + } + else { + t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + for (i=0;i<Loops;i++) { + glClear( BufferMask ); + } + glFinish(); + t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + glutSwapBuffers(); + } + + /* NOTE: If clearspd doesn't map it's window immediately on + * starting, swaps will be istantaneous, so this will send Loops + * towards infinity. When a window is finally mapped, it may be + * minutes before the first call to glutSwapBuffers, making it look + * like there's a driver bug. + */ + if (t1-t0 < MinPeriod) { + /* Next time do more clears to get longer elapsed time */ + Loops *= 2; + return; + } + + clearRate = Loops / (t1-t0); + pixelRate = clearRate * Width * Height; + if (SwapFlag) { + printf("Rate: %d clears+swaps in %gs = %g clears+swaps/s %g pixels/s\n", + Loops, t1-t0, clearRate, pixelRate ); + } + else { + printf("Rate: %d clears in %gs = %g clears/s %g pixels/s\n", + Loops, t1-t0, clearRate, pixelRate); + } +} + + +static void Reshape( int width, int height ) +{ + Width = width; + Height = height; + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho(0.0, width, 0.0, height, -1.0, 1.0); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void Init( int argc, char *argv[] ) +{ + int i; + for (i=1; i<argc; i++) { + if (strcmp(argv[i],"+rgb")==0) + ColorMode = GLUT_RGB; + else if (strcmp(argv[i],"+ci")==0) + ColorMode = GLUT_INDEX; + else if (strcmp(argv[i],"-color")==0) + BufferMask = 0; + else if (strcmp(argv[i],"+depth")==0) + BufferMask |= GL_DEPTH_BUFFER_BIT; + else if (strcmp(argv[i],"+alpha")==0) + ColorMode = GLUT_RGB | GLUT_ALPHA; + else if (strcmp(argv[i],"+stencil")==0) + BufferMask |= GL_STENCIL_BUFFER_BIT; + else if (strcmp(argv[i],"+accum")==0) + BufferMask |= GL_ACCUM_BUFFER_BIT; + else if (strcmp(argv[i],"-width")==0) { + Width = atoi(argv[i+1]); + i++; + } + else if (strcmp(argv[i],"-height")==0) { + Height = atoi(argv[i+1]); + i++; + } + else if (strcmp(argv[i],"+swap")==0) { + SwapFlag = GL_TRUE; + } + else if (strcmp(argv[i],"-swap")==0) { + SwapFlag = GL_FALSE; + } + else + printf("Unknown option: %s\n", argv[i]); + } + + if (ColorMode & GLUT_ALPHA) + printf("Mode: RGB + Alpha\n"); + else if (ColorMode==GLUT_RGB) + printf("Mode: RGB\n"); + else + printf("Mode: Color Index\n"); + printf("SwapBuffers: %s\n", SwapFlag ? "yes" : "no" ); + printf("Size: %d x %d\n", Width, Height); + printf("Buffers: "); + if (BufferMask & GL_COLOR_BUFFER_BIT) printf("color "); + if (BufferMask & GL_DEPTH_BUFFER_BIT) printf("depth "); + if (BufferMask & GL_STENCIL_BUFFER_BIT) printf("stencil "); + if (BufferMask & GL_ACCUM_BUFFER_BIT) printf("accum "); + printf("\n"); +} + + +static void Help( const char *program ) +{ + printf("%s options:\n", program); + printf(" +rgb RGB mode\n"); + printf(" +ci color index mode\n"); + printf(" -color don't clear color buffer\n"); + printf(" +alpha clear alpha buffer\n"); + printf(" +depth clear depth buffer\n"); + printf(" +stencil clear stencil buffer\n"); + printf(" +accum clear accum buffer\n"); + printf(" +swap also do SwapBuffers\n"); + printf(" -swap don't do SwapBuffers\n"); +} + + +int main( int argc, char *argv[] ) +{ + GLint mode; + + printf("For options: %s -help\n", argv[0]); + + Init( argc, argv ); + + glutInit( &argc, argv ); + glutInitWindowSize( (int) Width, (int) Height ); + glutInitWindowPosition( 0, 0 ); + + mode = ColorMode | GLUT_DOUBLE; + if (BufferMask & GL_STENCIL_BUFFER_BIT) + mode |= GLUT_STENCIL; + if (BufferMask & GL_ACCUM_BUFFER_BIT) + mode |= GLUT_ACCUM; + if (BufferMask & GL_DEPTH_BUFFER_BIT) + mode |= GLUT_DEPTH; + + glutInitDisplayMode(mode); + + glutCreateWindow( argv[0] ); + + if (argc==2 && strcmp(argv[1],"-help")==0) { + Help(argv[0]); + return 0; + } + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/cubemap.c b/progs/demos/cubemap.c new file mode 100644 index 000000000..0a59b9898 --- /dev/null +++ b/progs/demos/cubemap.c @@ -0,0 +1,475 @@ +/* + * GL_ARB_texture_cube_map demo + * + * Brian Paul + * May 2000 + * + * + * Copyright (C) 2000 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * This is a pretty minimalistic demo for now. Eventually, use some + * interesting cube map textures and 3D objects. + * For now, we use 6 checkerboard "walls" and a sphere (good for + * verification purposes). + */ + + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "GL/glut.h" +#include "readtex.h" + + +static GLfloat Xrot = 0, Yrot = 0; +static GLfloat EyeDist = 10; +static GLboolean use_vertex_arrays = GL_FALSE; +static GLboolean anim = GL_TRUE; + +#define eps1 0.99 +#define br 20.0 /* box radius */ + +static const GLfloat tex_coords[] = { + /* +X side */ + 1.0, -eps1, -eps1, + 1.0, -eps1, eps1, + 1.0, eps1, eps1, + 1.0, eps1, -eps1, + + /* -X side */ + -1.0, eps1, -eps1, + -1.0, eps1, eps1, + -1.0, -eps1, eps1, + -1.0, -eps1, -eps1, + + /* +Y side */ + -eps1, 1.0, -eps1, + -eps1, 1.0, eps1, + eps1, 1.0, eps1, + eps1, 1.0, -eps1, + + /* -Y side */ + -eps1, -1.0, -eps1, + -eps1, -1.0, eps1, + eps1, -1.0, eps1, + eps1, -1.0, -eps1, + + /* +Z side */ + eps1, -eps1, 1.0, + -eps1, -eps1, 1.0, + -eps1, eps1, 1.0, + eps1, eps1, 1.0, + + /* -Z side */ + eps1, eps1, -1.0, + -eps1, eps1, -1.0, + -eps1, -eps1, -1.0, + eps1, -eps1, -1.0, +}; + +static const GLfloat vtx_coords[] = { + /* +X side */ + br, -br, -br, + br, -br, br, + br, br, br, + br, br, -br, + + /* -X side */ + -br, br, -br, + -br, br, br, + -br, -br, br, + -br, -br, -br, + + /* +Y side */ + -br, br, -br, + -br, br, br, + br, br, br, + br, br, -br, + + /* -Y side */ + -br, -br, -br, + -br, -br, br, + br, -br, br, + br, -br, -br, + + /* +Z side */ + br, -br, br, + -br, -br, br, + -br, br, br, + br, br, br, + + /* -Z side */ + br, br, -br, + -br, br, -br, + -br, -br, -br, + br, -br, -br, +}; + +static void draw_skybox( void ) +{ + if ( use_vertex_arrays ) { + glTexCoordPointer( 3, GL_FLOAT, 0, tex_coords ); + glVertexPointer( 3, GL_FLOAT, 0, vtx_coords ); + + glEnableClientState( GL_TEXTURE_COORD_ARRAY ); + glEnableClientState( GL_VERTEX_ARRAY ); + + glDrawArrays( GL_QUADS, 0, 24 ); + + glDisableClientState( GL_TEXTURE_COORD_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + } + else { + unsigned i; + + glBegin(GL_QUADS); + for ( i = 0 ; i < 24 ; i++ ) { + glTexCoord3fv( & tex_coords[ i * 3 ] ); + glVertex3fv ( & vtx_coords[ i * 3 ] ); + } + glEnd(); + } +} + + +static void draw( void ) +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); /*MODELVIEW*/ + glTranslatef( 0.0, 0.0, -EyeDist ); + + /* skybox */ + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_GEN_R); + + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + draw_skybox(); + glPopMatrix(); + + /* sphere */ + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glRotatef(-Yrot, 0, 1, 0); + glRotatef(-Xrot, 1, 0, 0); + + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + glEnable(GL_TEXTURE_GEN_R); + glutSolidSphere(2.0, 20, 20); + + glLoadIdentity(); /* texture */ + + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void idle(void) +{ + GLfloat t = 0.05 * glutGet(GLUT_ELAPSED_TIME); + Yrot = t; + glutPostRedisplay(); +} + + +static void set_mode(GLuint mode) +{ + if (mode == 0) { + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB); + glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_ARB); + printf("GL_REFLECTION_MAP_ARB mode\n"); + } + else if (mode == 1) { + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB); + glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_ARB); + printf("GL_NORMAL_MAP_ARB mode\n"); + } +} + + +static void key(unsigned char k, int x, int y) +{ + static GLuint mode = 0; + (void) x; + (void) y; + switch (k) { + case ' ': + anim = !anim; + if (anim) + glutIdleFunc(idle); + else + glutIdleFunc(NULL); + break; + case 'm': + mode = !mode; + set_mode(mode); + break; + case 'v': + use_vertex_arrays = ! use_vertex_arrays; + printf( "Vertex arrays are %sabled\n", + (use_vertex_arrays) ? "en" : "dis" ); + break; + case 'z': + EyeDist -= 0.5; + if (EyeDist < 6.0) + EyeDist = 6.0; + break; + case 'Z': + EyeDist += 0.5; + if (EyeDist > 90.0) + EyeDist = 90; + break; + case 27: + exit(0); + } + glutPostRedisplay(); +} + + +static void specialkey(int key, int x, int y) +{ + GLfloat step = 5; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Xrot += step; + break; + case GLUT_KEY_DOWN: + Xrot -= step; + break; + case GLUT_KEY_LEFT: + Yrot -= step; + break; + case GLUT_KEY_RIGHT: + Yrot += step; + break; + } + glutPostRedisplay(); +} + + +/* new window size or exposure */ +static void reshape(int width, int height) +{ + GLfloat ar = (float) width / (float) height; + glViewport(0, 0, (GLint)width, (GLint)height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum( -2.0*ar, 2.0*ar, -2.0, 2.0, 4.0, 100.0 ); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + +static void init_checkers( void ) +{ +#define CUBE_TEX_SIZE 64 + GLubyte image[CUBE_TEX_SIZE][CUBE_TEX_SIZE][3]; + static const GLubyte colors[6][3] = { + { 255, 0, 0 }, /* face 0 - red */ + { 0, 255, 255 }, /* face 1 - cyan */ + { 0, 255, 0 }, /* face 2 - green */ + { 255, 0, 255 }, /* face 3 - purple */ + { 0, 0, 255 }, /* face 4 - blue */ + { 255, 255, 0 } /* face 5 - yellow */ + }; + static const GLenum targets[6] = { + GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB + }; + + GLint i, j, f; + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + /* make colored checkerboard cube faces */ + for (f = 0; f < 6; f++) { + for (i = 0; i < CUBE_TEX_SIZE; i++) { + for (j = 0; j < CUBE_TEX_SIZE; j++) { + if ((i/4 + j/4) & 1) { + image[i][j][0] = colors[f][0]; + image[i][j][1] = colors[f][1]; + image[i][j][2] = colors[f][2]; + } + else { + image[i][j][0] = 255; + image[i][j][1] = 255; + image[i][j][2] = 255; + } + } + } + + glTexImage2D(targets[f], 0, GL_RGB, CUBE_TEX_SIZE, CUBE_TEX_SIZE, 0, + GL_RGB, GL_UNSIGNED_BYTE, image); + } +} + + +static void load(GLenum target, const char *filename, + GLboolean flipTB, GLboolean flipLR) +{ + GLint w, h; + GLenum format; + GLubyte *img = LoadRGBImage( filename, &w, &h, &format ); + if (!img) { + printf("Error: couldn't load texture image %s\n", filename); + exit(1); + } + assert(format == GL_RGB); + + /* <sigh> the way the texture cube mapping works, we have to flip + * images to make things look right. + */ + if (flipTB) { + const int stride = 3 * w; + GLubyte temp[3*1024]; + int i; + for (i = 0; i < h / 2; i++) { + memcpy(temp, img + i * stride, stride); + memcpy(img + i * stride, img + (h - i - 1) * stride, stride); + memcpy(img + (h - i - 1) * stride, temp, stride); + } + } + if (flipLR) { + const int stride = 3 * w; + GLubyte temp[3]; + GLubyte *row; + int i, j; + for (i = 0; i < h; i++) { + row = img + i * stride; + for (j = 0; j < w / 2; j++) { + int k = w - j - 1; + temp[0] = row[j*3+0]; + temp[1] = row[j*3+1]; + temp[2] = row[j*3+2]; + row[j*3+0] = row[k*3+0]; + row[j*3+1] = row[k*3+1]; + row[j*3+2] = row[k*3+2]; + row[k*3+0] = temp[0]; + row[k*3+1] = temp[1]; + row[k*3+2] = temp[2]; + } + } + } + + gluBuild2DMipmaps(target, GL_RGB, w, h, format, GL_UNSIGNED_BYTE, img); + free(img); +} + + +static void load_envmaps(void) +{ + load(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, "right.rgb", GL_TRUE, GL_FALSE); + load(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, "left.rgb", GL_TRUE, GL_FALSE); + load(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, "top.rgb", GL_FALSE, GL_TRUE); + load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, "bottom.rgb", GL_FALSE, GL_TRUE); + load(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, "front.rgb", GL_TRUE, GL_FALSE); + load(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, "back.rgb", GL_TRUE, GL_FALSE); +} + + +static void init( GLboolean useImageFiles ) +{ + GLenum filter; + + /* check for extension */ + { + char *exten = (char *) glGetString(GL_EXTENSIONS); + if (!strstr(exten, "GL_ARB_texture_cube_map")) { + printf("Sorry, this demo requires GL_ARB_texture_cube_map\n"); + exit(0); + } + } + printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER)); + + if (useImageFiles) { + load_envmaps(); + filter = GL_LINEAR; + } + else { + init_checkers(); + filter = GL_NEAREST; + } + + glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, filter); + glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, filter); + glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glEnable(GL_TEXTURE_CUBE_MAP_ARB); + glEnable(GL_DEPTH_TEST); + + glClearColor(.3, .3, .3, 0); + glColor3f( 1.0, 1.0, 1.0 ); + + set_mode(0); +} + + +static void usage(void) +{ + printf("keys:\n"); + printf(" SPACE - toggle animation\n"); + printf(" CURSOR KEYS - rotation\n"); + printf(" m - toggle texgen reflection mode\n"); + printf(" z/Z - change viewing distance\n"); +} + + +int main( int argc, char *argv[] ) +{ + glutInitWindowPosition(0, 0); + glutInitWindowSize(600, 500); + glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); + glutCreateWindow("Texture Cube Mapping"); + + if (argc > 1 && strcmp(argv[1] , "-i") == 0) + init( 1 ); + else + init( 0 ); + glutReshapeFunc( reshape ); + glutKeyboardFunc( key ); + glutSpecialFunc( specialkey ); + glutDisplayFunc( draw ); + if (anim) + glutIdleFunc(idle); + usage(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/descrip.mms b/progs/demos/descrip.mms new file mode 100644 index 000000000..cc9350ce6 --- /dev/null +++ b/progs/demos/descrip.mms @@ -0,0 +1,90 @@ +# Makefile for GLUT-based demo programs for VMS +# contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl +# Last update : 20 May 2005 + +.first + define gl [--.include.gl] + +.include [--]mms-config. + +##### MACROS ##### + +INCDIR = ([--.include],[-.util]) +CFLAGS = /include=$(INCDIR)/prefix=all/name=(as_is,short) + +.ifdef SHARE +GL_LIBS = $(XLIBS) +LIB_DEP = [--.lib]$(GL_SHAR) [--.lib]$(GLU_SHAR) [--.lib]$(GLUT_SHAR) +.else +GL_LIBS = [--.lib]libGLUT/l,libMesaGLU/l,libMesaGL/l,$(XLIBS) +LIB_DEP = [--.lib]$(GL_LIB) [--.lib]$(GLU_LIB) [--.lib]$(GLUT_LIB) +.endif + + +PROGS = bounce.exe;,clearspd.exe;,drawpix.exe;,gamma.exe;,gears.exe;,\ + glinfo.exe;,glutfx.exe;,isosurf.exe;,morph3d.exe;,\ + paltex.exe;,pointblast.exe;,reflect.exe;,spectex.exe;,stex3d.exe;,\ + tessdemo.exe;,texcyl.exe;,texobj.exe;,trispd.exe;,winpos.exe; + + +##### RULES ##### +.obj.exe : + cxxlink $(MMS$TARGET_NAME),$(GL_LIBS) + +##### TARGETS ##### +default : + $(MMS)$(MMSQUALIFIERS) $(PROGS) + +clean : + delete *.obj;* + +realclean : + delete $(PROGS) + delete *.obj;* + +bounce.exe; : bounce.obj $(LIB_DEP) +clearspd.exe; : clearspd.obj $(LIB_DEP) +drawpix.exe; : drawpix.obj $(LIB_DEP) [-.util]readtex.obj + cxxlink $(MMS$TARGET_NAME),[-.util]readtex.obj,$(GL_LIBS) +gamma.exe; : gamma.obj $(LIB_DEP) +gears.exe; : gears.obj $(LIB_DEP) +glinfo.exe; : glinfo.obj $(LIB_DEP) +glutfx.exe; : glutfx.obj $(LIB_DEP) +isosurf.exe; : isosurf.obj $(LIB_DEP) [-.util]readtex.obj + cxxlink $(MMS$TARGET_NAME),[-.util]readtex.obj,$(GL_LIBS) +morph3d.exe; : morph3d.obj $(LIB_DEP) +paltex.exe; : paltex.obj $(LIB_DEP) +pointblast.exe; : pointblast.obj $(LIB_DEP) +reflect.exe; : reflect.obj [-.util]readtex.obj [-.util]showbuffer.obj\ + $(LIB_DEP) + cxxlink $(MMS$TARGET_NAME),[-.util]readtex,showbuffer,$(GL_LIBS) +spectex.exe; : spectex.obj $(LIB_DEP) +stex3d.exe; : stex3d.obj $(LIB_DEP) +tessdemo.exe; : tessdemo.obj $(LIB_DEP) +texcyl.exe; : texcyl.obj [-.util]readtex.obj $(LIB_DEP) + cxxlink $(MMS$TARGET_NAME),[-.util]readtex.obj,$(GL_LIBS) +texobj.exe; : texobj.obj $(LIB_DEP) +trispd.exe; : trispd.obj $(LIB_DEP) +winpos.exe; : winpos.obj [-.util]readtex.obj $(LIB_DEP) + cxxlink $(MMS$TARGET_NAME),[-.util]readtex.obj,$(GL_LIBS) + + +bounce.obj : bounce.c +clearspd.obj : clearspd.c +drawpix.obj : drawpix.c +gamma.obj : gamma.c +gears.obj : gears.c +glinfo.obj : glinfo.c +glutfx.obj : glutfx.c +isosurf.obj : isosurf.c +morph3d.obj : morph3d.c +paltex.obj : paltex.c +pointblast.obj : pointblast.c +reflect.obj : reflect.c +spectex.obj : spectex.c +stex3d.obj : stex3d.c +tessdemo.obj : tessdemo.c +texcyl.obj : texcyl.c +texobj.obj : texobj.c +trispd.obj : trispd.c +winpos.obj : winpos.c diff --git a/progs/demos/drawpix.c b/progs/demos/drawpix.c new file mode 100644 index 000000000..d2f574867 --- /dev/null +++ b/progs/demos/drawpix.c @@ -0,0 +1,358 @@ + +/* + * glDrawPixels demo/test/benchmark + * + * Brian Paul September 25, 1997 This file is in the public domain. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define IMAGE_FILE "../images/girl.rgb" + +static int ImgWidth, ImgHeight; +static GLenum ImgFormat; +static GLubyte *Image = NULL; + +static int Xpos, Ypos; +static int SkipPixels, SkipRows; +static int DrawWidth, DrawHeight; +static int Scissor = 0; +static int Fog = 0; +static GLfloat Zpos = -1.0; +static float Xzoom, Yzoom; +static GLboolean DrawFront = GL_FALSE; +static GLboolean Dither = GL_TRUE; + + +static void Reset( void ) +{ + Xpos = Ypos = 20; + DrawWidth = ImgWidth; + DrawHeight = ImgHeight; + SkipPixels = SkipRows = 0; + Scissor = 0; + Fog = 0; + Zpos = -1.0; + Xzoom = Yzoom = 1.0; +} + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT ); + +#if 0 + glRasterPos2i(Xpos, Ypos); +#else + /* This allows negative raster positions: */ + glRasterPos3f(0, 0, Zpos); + glBitmap(0, 0, 0, 0, Xpos, Ypos, NULL); +#endif + + glPixelStorei(GL_UNPACK_SKIP_PIXELS, SkipPixels); + glPixelStorei(GL_UNPACK_SKIP_ROWS, SkipRows); + + glPixelZoom( Xzoom, Yzoom ); + + if (Scissor) + glEnable(GL_SCISSOR_TEST); + + if (Fog) + glEnable(GL_FOG); + + glDrawPixels(DrawWidth, DrawHeight, ImgFormat, GL_UNSIGNED_BYTE, Image); + + glDisable(GL_SCISSOR_TEST); + glDisable(GL_FOG); + + if (DrawFront) + glFinish(); + else + glutSwapBuffers(); +} + + +static void Benchmark( void ) +{ + int startTime, endTime; + int draws = 500; + double seconds, pixelsPerSecond; + + printf("Benchmarking...\n"); + /* GL set-up */ + glPixelStorei(GL_UNPACK_SKIP_PIXELS, SkipPixels); + glPixelStorei(GL_UNPACK_SKIP_ROWS, SkipRows); + glPixelZoom( Xzoom, Yzoom ); + if (Scissor) + glEnable(GL_SCISSOR_TEST); + if (Fog) + glEnable(GL_FOG); + + if (DrawFront) + glDrawBuffer(GL_FRONT); + else + glDrawBuffer(GL_BACK); + + /* Run timing test */ + draws = 0; + startTime = glutGet(GLUT_ELAPSED_TIME); + do { + glDrawPixels(DrawWidth, DrawHeight, ImgFormat, GL_UNSIGNED_BYTE, Image); + draws++; + endTime = glutGet(GLUT_ELAPSED_TIME); + } while (endTime - startTime < 4000); /* 4 seconds */ + + /* GL clean-up */ + glDisable(GL_SCISSOR_TEST); + glDisable(GL_FOG); + + /* Results */ + seconds = (double) (endTime - startTime) / 1000.0; + pixelsPerSecond = draws * DrawWidth * DrawHeight / seconds; + printf("Result: %d draws in %f seconds = %f pixels/sec\n", + draws, seconds, pixelsPerSecond); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0.0, width, 0.0, height, 0.0, 2.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + glScissor(width/4, height/4, width/2, height/2); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + Reset(); + break; + case 'd': + Dither = !Dither; + if (Dither) + glEnable(GL_DITHER); + else + glDisable(GL_DITHER); + break; + case 'w': + if (DrawWidth > 0) + DrawWidth--; + break; + case 'W': + DrawWidth++; + break; + case 'h': + if (DrawHeight > 0) + DrawHeight--; + break; + case 'H': + DrawHeight++; + break; + case 'p': + if (SkipPixels > 0) + SkipPixels--; + break; + case 'P': + SkipPixels++; + break; + case 'r': + if (SkipRows > 0) + SkipRows--; + break; + case 'R': + SkipRows++; + break; + case 's': + Scissor = !Scissor; + break; + case 'x': + Xzoom -= 0.1; + break; + case 'X': + Xzoom += 0.1; + break; + case 'y': + Yzoom -= 0.1; + break; + case 'Y': + Yzoom += 0.1; + break; + case 'z': + Zpos -= 0.1; + printf("RasterPos Z = %g\n", Zpos); + break; + case 'Z': + Zpos += 0.1; + printf("RasterPos Z = %g\n", Zpos); + break; + case 'b': + Benchmark(); + break; + case 'F': + Fog = !Fog; + printf("Fog %d\n", Fog); + break; + case 'f': + DrawFront = !DrawFront; + if (DrawFront) + glDrawBuffer(GL_FRONT); + else + glDrawBuffer(GL_BACK); + printf("glDrawBuffer(%s)\n", DrawFront ? "GL_FRONT" : "GL_BACK"); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Ypos += 1; + break; + case GLUT_KEY_DOWN: + Ypos -= 1; + break; + case GLUT_KEY_LEFT: + Xpos -= 1; + break; + case GLUT_KEY_RIGHT: + Xpos += 1; + break; + } + glutPostRedisplay(); +} + + +static void Init( GLboolean ciMode, const char *filename ) +{ + static const GLfloat fogColor[4] = {0, 1, 0, 0}; + + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + + Image = LoadRGBImage( filename, &ImgWidth, &ImgHeight, &ImgFormat ); + if (!Image) { + printf("Couldn't read %s\n", filename); + exit(0); + } + + if (ciMode) { + /* Convert RGB image to grayscale */ + GLubyte *indexImage = (GLubyte *) malloc( ImgWidth * ImgHeight ); + GLint i; + for (i=0; i<ImgWidth*ImgHeight; i++) { + int gray = Image[i*3] + Image[i*3+1] + Image[i*3+2]; + indexImage[i] = gray / 3; + } + free(Image); + Image = indexImage; + ImgFormat = GL_COLOR_INDEX; + + for (i=0;i<255;i++) { + float g = i / 255.0; + glutSetColor(i, g, g, g); + } + } + + printf("Loaded %d by %d image\n", ImgWidth, ImgHeight ); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_UNPACK_ROW_LENGTH, ImgWidth); + + glFogi(GL_FOG_MODE, GL_LINEAR); + glFogf(GL_FOG_START, 0); + glFogf(GL_FOG_END, 2); + glFogfv(GL_FOG_COLOR, fogColor); + + Reset(); +} + + +static void Usage(void) +{ + printf("Keys:\n"); + printf(" SPACE Reset Parameters\n"); + printf(" Up/Down Move image up/down\n"); + printf(" Left/Right Move image left/right\n"); + printf(" x Decrease X-axis PixelZoom\n"); + printf(" X Increase X-axis PixelZoom\n"); + printf(" y Decrease Y-axis PixelZoom\n"); + printf(" Y Increase Y-axis PixelZoom\n"); + printf(" w Decrease glDrawPixels width*\n"); + printf(" W Increase glDrawPixels width*\n"); + printf(" h Decrease glDrawPixels height*\n"); + printf(" H Increase glDrawPixels height*\n"); + printf(" p Decrease GL_UNPACK_SKIP_PIXELS*\n"); + printf(" P Increase GL_UNPACK_SKIP_PIXELS*\n"); + printf(" r Decrease GL_UNPACK_SKIP_ROWS*\n"); + printf(" R Increase GL_UNPACK_SKIP_ROWS*\n"); + printf(" s Toggle GL_SCISSOR_TEST\n"); + printf(" F Toggle GL_FOG\n"); + printf(" z Decrease RasterPos Z\n"); + printf(" Z Increase RasterPos Z\n"); + + printf(" f Toggle front/back buffer drawing\n"); + printf(" b Benchmark test\n"); + printf(" ESC Exit\n"); + printf("* Warning: no limits are imposed on these parameters so it's\n"); + printf(" possible to cause a segfault if you go too far.\n"); +} + + +int main( int argc, char *argv[] ) +{ + GLboolean ciMode = GL_FALSE; + const char *filename = IMAGE_FILE; + int i = 1; + + if (argc > i && strcmp(argv[i], "-ci")==0) { + ciMode = GL_TRUE; + i++; + } + if (argc > i) { + filename = argv[i]; + } + + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 500, 400 ); + + if (ciMode) + glutInitDisplayMode( GLUT_INDEX | GLUT_DOUBLE ); + else + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE); + + glutCreateWindow(argv[0]); + + Init(ciMode, filename); + Usage(); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/fire.c b/progs/demos/fire.c new file mode 100644 index 000000000..dd70f6141 --- /dev/null +++ b/progs/demos/fire.c @@ -0,0 +1,777 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> +#include <string.h> + +#ifdef WIN32 +#include <windows.h> +#include <mmsystem.h> +#endif + +#include <GL/glut.h> +#include "readtex.h" + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +#define vinit(a,i,j,k) {\ + (a)[0]=i;\ + (a)[1]=j;\ + (a)[2]=k;\ +} + +#define vinit4(a,i,j,k,w) {\ + (a)[0]=i;\ + (a)[1]=j;\ + (a)[2]=k;\ + (a)[3]=w;\ +} + + +#define vadds(a,dt,b) {\ + (a)[0]+=(dt)*(b)[0];\ + (a)[1]+=(dt)*(b)[1];\ + (a)[2]+=(dt)*(b)[2];\ +} + +#define vequ(a,b) {\ + (a)[0]=(b)[0];\ + (a)[1]=(b)[1];\ + (a)[2]=(b)[2];\ +} + +#define vinter(a,dt,b,c) {\ + (a)[0]=(dt)*(b)[0]+(1.0-dt)*(c)[0];\ + (a)[1]=(dt)*(b)[1]+(1.0-dt)*(c)[1];\ + (a)[2]=(dt)*(b)[2]+(1.0-dt)*(c)[2];\ +} + +#define clamp(a) ((a) < 0.0 ? 0.0 : ((a) < 1.0 ? (a) : 1.0)) + +#define vclamp(v) {\ + (v)[0]=clamp((v)[0]);\ + (v)[1]=clamp((v)[1]);\ + (v)[2]=clamp((v)[2]);\ +} + +static int WIDTH = 640; +static int HEIGHT = 480; + +static GLint T0 = 0; +static GLint Frames = 0; +static GLint NiceFog = 1; + +#define DIMP 20.0 +#define DIMTP 16.0 + +#define RIDCOL 0.4 + +#define NUMTREE 50 +#define TREEINR 2.5 +#define TREEOUTR 8.0 + +#define AGRAV -9.8 + +typedef struct +{ + int age; + float p[3][3]; + float v[3]; + float c[3][4]; +} +part; + +static float treepos[NUMTREE][3]; + +static float black[3] = { 0.0, 0.0, 0.0 }; +static float blu[3] = { 1.0, 0.2, 0.0 }; +static float blu2[3] = { 1.0, 1.0, 0.0 }; + +static float fogcolor[4] = { 1.0, 1.0, 1.0, 1.0 }; + +static float q[4][3] = { + {-DIMP, 0.0, -DIMP}, + {DIMP, 0.0, -DIMP}, + {DIMP, 0.0, DIMP}, + {-DIMP, 0.0, DIMP} +}; + +static float qt[4][2] = { + {-DIMTP, -DIMTP}, + {DIMTP, -DIMTP}, + {DIMTP, DIMTP}, + {-DIMTP, DIMTP} +}; + +static int win = 0; + +static int np; +static float eject_r, dt, maxage, eject_vy, eject_vl; +static short shadows; +static float ridtri; +static int fog = 1; +static int help = 1; +static int joyavailable = 0; +static int joyactive = 0; + +static part *p; + +static GLuint groundid; +static GLuint treeid; + +static float obs[3] = { 2.0, 1.0, 0.0 }; +static float dir[3]; +static float v = 0.0; +static float alpha = -84.0; +static float beta = 90.0; + +static float +vrnd(void) +{ + return (((float) rand()) / RAND_MAX); +} + +static void +setnewpart(part * p) +{ + float a, v[3], *c; + + p->age = 0; + + a = vrnd() * 3.14159265359 * 2.0; + + vinit(v, sin(a) * eject_r * vrnd(), 0.15, cos(a) * eject_r * vrnd()); + vinit(p->p[0], v[0] + vrnd() * ridtri, v[1] + vrnd() * ridtri, + v[2] + vrnd() * ridtri); + vinit(p->p[1], v[0] + vrnd() * ridtri, v[1] + vrnd() * ridtri, + v[2] + vrnd() * ridtri); + vinit(p->p[2], v[0] + vrnd() * ridtri, v[1] + vrnd() * ridtri, + v[2] + vrnd() * ridtri); + + vinit(p->v, v[0] * eject_vl / (eject_r / 2), + vrnd() * eject_vy + eject_vy / 2, v[2] * eject_vl / (eject_r / 2)); + + c = blu; + + vinit4(p->c[0], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); + vinit4(p->c[1], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); + vinit4(p->c[2], c[0] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[1] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), + c[2] * ((1.0 - RIDCOL) + vrnd() * RIDCOL), 1.0); +} + +static void +setpart(part * p) +{ + float fact; + + if (p->p[0][1] < 0.1) { + setnewpart(p); + return; + } + + p->v[1] += AGRAV * dt; + + vadds(p->p[0], dt, p->v); + vadds(p->p[1], dt, p->v); + vadds(p->p[2], dt, p->v); + + p->age++; + + if ((p->age) > maxage) { + vequ(p->c[0], blu2); + vequ(p->c[1], blu2); + vequ(p->c[2], blu2); + } + else { + fact = 1.0 / maxage; + vadds(p->c[0], fact, blu2); + vclamp(p->c[0]); + p->c[0][3] = fact * (maxage - p->age); + + vadds(p->c[1], fact, blu2); + vclamp(p->c[1]); + p->c[1][3] = fact * (maxage - p->age); + + vadds(p->c[2], fact, blu2); + vclamp(p->c[2]); + p->c[2][3] = fact * (maxage - p->age); + } +} + +static void +drawtree(float x, float y, float z) +{ + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); + glVertex3f(x - 1.5, y + 0.0, z); + + glTexCoord2f(1.0, 0.0); + glVertex3f(x + 1.5, y + 0.0, z); + + glTexCoord2f(1.0, 1.0); + glVertex3f(x + 1.5, y + 3.0, z); + + glTexCoord2f(0.0, 1.0); + glVertex3f(x - 1.5, y + 3.0, z); + + + glTexCoord2f(0.0, 0.0); + glVertex3f(x, y + 0.0, z - 1.5); + + glTexCoord2f(1.0, 0.0); + glVertex3f(x, y + 0.0, z + 1.5); + + glTexCoord2f(1.0, 1.0); + glVertex3f(x, y + 3.0, z + 1.5); + + glTexCoord2f(0.0, 1.0); + glVertex3f(x, y + 3.0, z - 1.5); + + glEnd(); + +} + +static void +calcposobs(void) +{ + dir[0] = sin(alpha * M_PI / 180.0); + dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[1] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + obs[0] += v * dir[0]; + obs[1] += v * dir[1]; + obs[2] += v * dir[2]; +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +reshape(int width, int height) +{ + WIDTH = width; + HEIGHT = height; + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(70.0, width / (float) height, 0.1, 30.0); + + glMatrixMode(GL_MODELVIEW); +} + +static void +printhelp(void) +{ + glColor4f(0.0, 0.0, 0.0, 0.5); + glRecti(40, 40, 600, 440); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help"); + + glRasterPos2i(60, 360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Increase particle size"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "T - Decrease particle size"); + + glRasterPos2i(60, 300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "r - Increase emission radius"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "R - Decrease emission radius"); + + glRasterPos2i(60, 240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "s - Toggle shadows"); + glRasterPos2i(60, 180); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate"); + glRasterPos2i(60, 150); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "a - Increase velocity"); + glRasterPos2i(60, 120); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "z - Decrease velocity"); + + glRasterPos2i(60, 90); + if (joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "(No Joystick control available)"); +} + +static void +dojoy(void) +{ +#ifdef WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha += + 2.5 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.5 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.01; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.01; + } + } + else + joyavailable = 0; +#endif +} + +static void +drawfire(void) +{ + static char frbuf[80] = ""; + int j; + static double t0 = -1.; + double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = (t - t0) * 1.0; + t0 = t; + + dojoy(); + + if (NiceFog) + glHint(GL_FOG_HINT, GL_NICEST); + else + glHint(GL_FOG_HINT, GL_DONT_CARE); + + glEnable(GL_DEPTH_TEST); + + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glDepthMask(GL_TRUE); + glClearColor(1.0, 1.0, 1.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + calcposobs(); + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 1.0, 0.0); + + glColor4f(1.0, 1.0, 1.0, 1.0); + + glEnable(GL_TEXTURE_2D); + + glBindTexture(GL_TEXTURE_2D, groundid); +#if 1 + glBegin(GL_QUADS); + glTexCoord2fv(qt[0]); + glVertex3fv(q[0]); + glTexCoord2fv(qt[1]); + glVertex3fv(q[1]); + glTexCoord2fv(qt[2]); + glVertex3fv(q[2]); + glTexCoord2fv(qt[3]); + glVertex3fv(q[3]); + glEnd(); +#else + /* Subdivide the ground into a bunch of quads. This improves fog + * if GL_FOG_HINT != GL_NICEST + */ + { + float x, y; + float dx = 1.0, dy = 1.0; + glBegin(GL_QUADS); + for (y = -DIMP; y < DIMP; y += 1.0) { + for (x = -DIMP; x < DIMP; x += 1.0) { + glTexCoord2f(0, 0); glVertex3f(x, 0, y); + glTexCoord2f(1, 0); glVertex3f(x+dx, 0, y); + glTexCoord2f(1, 1); glVertex3f(x+dx, 0, y+dy); + glTexCoord2f(0, 1); glVertex3f(x, 0, y+dy); + } + } + glEnd(); + } +#endif + + + glEnable(GL_ALPHA_TEST); + glAlphaFunc(GL_GEQUAL, 0.9); + + glBindTexture(GL_TEXTURE_2D, treeid); + for (j = 0; j < NUMTREE; j++) + drawtree(treepos[j][0], treepos[j][1], treepos[j][2]); + + glDisable(GL_TEXTURE_2D); + glDepthMask(GL_FALSE); + glDisable(GL_ALPHA_TEST); + + if (shadows) { + glBegin(GL_TRIANGLES); + for (j = 0; j < np; j++) { + glColor4f(black[0], black[1], black[2], p[j].c[0][3]); + glVertex3f(p[j].p[0][0], 0.1, p[j].p[0][2]); + + glColor4f(black[0], black[1], black[2], p[j].c[1][3]); + glVertex3f(p[j].p[1][0], 0.1, p[j].p[1][2]); + + glColor4f(black[0], black[1], black[2], p[j].c[2][3]); + glVertex3f(p[j].p[2][0], 0.1, p[j].p[2][2]); + } + glEnd(); + } + + glBegin(GL_TRIANGLES); + for (j = 0; j < np; j++) { + glColor4fv(p[j].c[0]); + glVertex3fv(p[j].p[0]); + + glColor4fv(p[j].c[1]); + glVertex3fv(p[j].p[1]); + + glColor4fv(p[j].c[2]); + glVertex3fv(p[j].p[2]); + + setpart(&p[j]); + } + glEnd(); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_ALPHA_TEST); + glDisable(GL_DEPTH_TEST); + glDisable(GL_FOG); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(370, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "Fire V1.5 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if (help) + printhelp(); + + reshape(WIDTH, HEIGHT); + glPopMatrix(); + + glutSwapBuffers(); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + + +static void +idle(void) +{ + glutPostRedisplay(); +} + + +static void +special(int key, int x, int y) +{ + switch (key) { + case GLUT_KEY_LEFT: + alpha += 2.0; + break; + case GLUT_KEY_RIGHT: + alpha -= 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } + glutPostRedisplay(); +} + +static void +key(unsigned char key, int x, int y) +{ + switch (key) { + case 27: + exit(0); + break; + + case 'a': + v += 0.0005; + break; + case 'z': + v -= 0.0005; + break; + + case 'j': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + case 's': + shadows = !shadows; + break; + case 'R': + eject_r -= 0.03; + break; + case 'r': + eject_r += 0.03; + break; + case 't': + ridtri += 0.005; + break; + case 'T': + ridtri -= 0.005; + break; +#ifdef XMESA + case ' ': + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + fullscreen = (!fullscreen); + break; +#endif + case 'n': + NiceFog = !NiceFog; + printf("NiceFog %d\n", NiceFog); + break; + } + glutPostRedisplay(); +} + +static void +inittextures(void) +{ + GLenum gluerr; + GLubyte tex[128][128][4]; + + glGenTextures(1, &groundid); + glBindTexture(GL_TEXTURE_2D, groundid); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + if (!LoadRGBMipmaps("../images/s128.rgb", GL_RGB)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glGenTextures(1, &treeid); + glBindTexture(GL_TEXTURE_2D, treeid); + + if (1) + { + int w, h; + GLenum format; + int x, y; + GLubyte *image = LoadRGBImage("../images/tree3.rgb", &w, &h, &format); + + if (!image) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + for (y = 0; y < 128; y++) + for (x = 0; x < 128; x++) { + tex[x][y][0] = image[(y + x * 128) * 3]; + tex[x][y][1] = image[(y + x * 128) * 3 + 1]; + tex[x][y][2] = image[(y + x * 128) * 3 + 2]; + if ((tex[x][y][0] == tex[x][y][1]) && + (tex[x][y][1] == tex[x][y][2]) && (tex[x][y][2] == 255)) + tex[x][y][3] = 0; + else + tex[x][y][3] = 255; + } + + if ((gluerr = gluBuild2DMipmaps(GL_TEXTURE_2D, 4, 128, 128, GL_RGBA, + GL_UNSIGNED_BYTE, (GLvoid *) (tex)))) { + fprintf(stderr, "GLULib%s\n", (char *) gluErrorString(gluerr)); + exit(-1); + } + } + else { + if (!LoadRGBMipmaps("../images/tree2.rgba", GL_RGBA)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +} + +static void +inittree(void) +{ + int i; + float dist; + + for (i = 0; i < NUMTREE; i++) + do { + treepos[i][0] = vrnd() * TREEOUTR * 2.0 - TREEOUTR; + treepos[i][1] = 0.0; + treepos[i][2] = vrnd() * TREEOUTR * 2.0 - TREEOUTR; + dist = + sqrt(treepos[i][0] * treepos[i][0] + + treepos[i][2] * treepos[i][2]); + } while ((dist < TREEINR) || (dist > TREEOUTR)); +} + +int +main(int ac, char **av) +{ + int i; + + fprintf(stderr, + "Fire V1.5\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + /* Default settings */ + + np = 800; + eject_r = -0.65; + dt = 0.015; + eject_vy = 4; + eject_vl = 1; + shadows = 1; + ridtri = 0.25; + + maxage = 1.0 / dt; + + if (ac == 2) + np = atoi(av[1]); + + if (ac == 4) { + WIDTH = atoi(av[2]); + HEIGHT = atoi(av[3]); + } + + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); + + if (!(win = glutCreateWindow("Fire"))) { + fprintf(stderr, "Error opening a window.\n"); + exit(-1); + } + + reshape(WIDTH, HEIGHT); + + inittextures(); + + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP); + glFogfv(GL_FOG_COLOR, fogcolor); + glFogf(GL_FOG_DENSITY, 0.1); + + p = (part *) malloc(sizeof(part) * np); + + for (i = 0; i < np; i++) + setnewpart(&p[i]); + + inittree(); + + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutDisplayFunc(drawfire); + glutIdleFunc(idle); + glutReshapeFunc(reshape); + glutMainLoop(); + + return (0); +} diff --git a/progs/demos/fogcoord.c b/progs/demos/fogcoord.c new file mode 100644 index 000000000..19a15f05b --- /dev/null +++ b/progs/demos/fogcoord.c @@ -0,0 +1,420 @@ +/* + * EXT_fog_coord. + * + * Based on glutskel.c by Brian Paul + * and NeHe's Volumetric fog tutorial! + * + * Daniel Borca + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define TEXTURE_FILE "../images/bw.rgb" + +#define ARRAYS 0 /* use glDrawElements */ + +#define VERBOSE 1 /* tell me what happens */ + +#define DEPTH 15.0f + +#if !defined(GLAPIENTRYP) +# define GLAPIENTRYP * +#endif + +typedef void (GLAPIENTRYP GLFOGCOORDFEXTPROC) (GLfloat f); +typedef void (GLAPIENTRYP GLFOGCOORDPOINTEREXTPROC) (GLenum, GLsizei, const GLvoid *); + +static GLFOGCOORDFEXTPROC glFogCoordf_ext; +#if ARRAYS +static GLFOGCOORDPOINTEREXTPROC glFogCoordPointer_ext; +#endif +static GLboolean have_fog_coord; + +static GLfloat camz; +static GLuint texture[1]; + +static GLint fogMode; +static GLboolean fogCoord; +static GLfloat fogDensity = 0.75; +static GLfloat fogStart = 1.0, fogEnd = 40.0; +static GLfloat fogColor[4] = {0.6f, 0.3f, 0.0f, 1.0f}; + + +static void APIENTRY glFogCoordf_nop (GLfloat f) +{ + (void)f; +} + + +static int BuildTexture (const char *filename, GLuint texid[]) +{ + GLubyte *tex_data; + GLenum tex_format; + GLint tex_width, tex_height; + + tex_data = LoadRGBImage(filename, &tex_width, &tex_height, &tex_format); + if (tex_data == NULL) { + return -1; + } + + { + GLint tex_max; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &tex_max); + if ((tex_width > tex_max) || (tex_height > tex_max)) { + return -1; + } + } + + glGenTextures(1, texid); + + glBindTexture(GL_TEXTURE_2D, texid[0]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexImage2D(GL_TEXTURE_2D, 0, tex_format, tex_width, tex_height, 0, + tex_format, GL_UNSIGNED_BYTE, tex_data); + + return 0; +} + + +static int SetFogMode (GLint fogMode) +{ + fogMode &= 3; + switch (fogMode) { + case 0: + glDisable(GL_FOG); +#if VERBOSE + printf("fog(disable)\n"); +#endif + break; + case 1: + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_LINEAR); + glFogf(GL_FOG_START, fogStart); + glFogf(GL_FOG_END, fogEnd); +#if VERBOSE + printf("fog(GL_LINEAR, %.2f, %.2f)\n", fogStart, fogEnd); +#endif + break; + case 2: + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP); + glFogf(GL_FOG_DENSITY, fogDensity); +#if VERBOSE + printf("fog(GL_EXP, %.2f)\n", fogDensity); +#endif + break; + case 3: + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogf(GL_FOG_DENSITY, fogDensity); +#if VERBOSE + printf("fog(GL_EXP2, %.2f)\n", fogDensity); +#endif + break; + } + return fogMode; +} + + +static GLboolean SetFogCoord (GLboolean fogCoord) +{ + glFogCoordf_ext = glFogCoordf_nop; + + if (!have_fog_coord) { +#if VERBOSE + printf("fog(GL_FRAGMENT_DEPTH_EXT)%s\n", fogCoord ? " EXT_fog_coord not available!" : ""); +#endif + return GL_FALSE; + } + + if (fogCoord) { + glFogCoordf_ext = (GLFOGCOORDFEXTPROC)glutGetProcAddress("glFogCoordfEXT"); + glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT); +#if VERBOSE + printf("fog(GL_FOG_COORDINATE_EXT)\n"); +#endif + } else { + glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT); +#if VERBOSE + printf("fog(GL_FRAGMENT_DEPTH_EXT)\n"); +#endif + } + return fogCoord; +} + + +#if ARRAYS +/* could reuse vertices */ +static GLuint vertex_index[] = { + /* Back */ + 0, 1, 2, 3, + + /* Floor */ + 4, 5, 6, 7, + + /* Roof */ + 8, 9, 10, 11, + + /* Right */ + 12, 13, 14, 15, + + /* Left */ + 16, 17, 18, 19 +}; + +static GLfloat vertex_pointer[][3] = { + /* Back */ + {-2.5f,-2.5f,-DEPTH}, { 2.5f,-2.5f,-DEPTH}, { 2.5f, 2.5f,-DEPTH}, {-2.5f, 2.5f,-DEPTH}, + + /* Floor */ + {-2.5f,-2.5f,-DEPTH}, { 2.5f,-2.5f,-DEPTH}, { 2.5f,-2.5f, DEPTH}, {-2.5f,-2.5f, DEPTH}, + + /* Roof */ + {-2.5f, 2.5f,-DEPTH}, { 2.5f, 2.5f,-DEPTH}, { 2.5f, 2.5f, DEPTH}, {-2.5f, 2.5f, DEPTH}, + + /* Right */ + { 2.5f,-2.5f, DEPTH}, { 2.5f, 2.5f, DEPTH}, { 2.5f, 2.5f,-DEPTH}, { 2.5f,-2.5f,-DEPTH}, + + /* Left */ + {-2.5f,-2.5f, DEPTH}, {-2.5f, 2.5f, DEPTH}, {-2.5f, 2.5f,-DEPTH}, {-2.5f,-2.5f,-DEPTH} +}; + +static GLfloat texcoord_pointer[][2] = { + /* Back */ + {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}, + + /* Floor */ + {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}, + + /* Roof */ + {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}, + + /* Right */ + {0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f}, + + /* Left */ + {0.0f, 0.0f}, {0.0f, 1.0f}, {1.0f, 1.0f}, {1.0f, 0.0f} +}; + +static GLfloat fogcoord_pointer[][1] = { + /* Back */ + {1.0f}, {1.0f}, {1.0f}, {1.0f}, + + /* Floor */ + {1.0f}, {1.0f}, {0.0f}, {0.0f}, + + /* Roof */ + {1.0f}, {1.0f}, {0.0f}, {0.0f}, + + /* Right */ + {0.0f}, {0.0f}, {1.0f}, {1.0f}, + + /* Left */ + {0.0f}, {0.0f}, {1.0f}, {1.0f} +}; +#endif + + +static void Display( void ) +{ + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLoadIdentity (); + + glTranslatef(0.0f, 0.0f, camz); + +#if ARRAYS + glDrawElements(GL_QUADS, sizeof(vertex_index) / sizeof(vertex_index[0]), GL_UNSIGNED_INT, vertex_index); +#else + /* Back */ + glBegin(GL_QUADS); + glFogCoordf_ext(1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f,-DEPTH); + glEnd(); + + /* Floor */ + glBegin(GL_QUADS); + glFogCoordf_ext(1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f,-2.5f, DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f,-2.5f, DEPTH); + glEnd(); + + /* Roof */ + glBegin(GL_QUADS); + glFogCoordf_ext(1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f, 2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f, 2.5f,-DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f, DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f, DEPTH); + glEnd(); + + /* Right */ + glBegin(GL_QUADS); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 2.5f,-2.5f, DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 2.5f, 2.5f, DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 2.5f, 2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 2.5f,-2.5f,-DEPTH); + glEnd(); + + /* Left */ + glBegin(GL_QUADS); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-2.5f,-2.5f, DEPTH); + glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-2.5f, 2.5f, DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-2.5f, 2.5f,-DEPTH); + glFogCoordf_ext(1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-2.5f,-2.5f,-DEPTH); + glEnd(); +#endif + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport(0, 0, width, height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0f, (GLfloat)(width)/(GLfloat)(height), 0.1f, 100.0f); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 'f': + fogMode = SetFogMode(fogMode + 1); + break; + case '+': + if (fogDensity < 1.0) { + fogDensity += 0.05; + } + SetFogMode(fogMode); + break; + case '-': + if (fogDensity > 0.0) { + fogDensity -= 0.05; + } + SetFogMode(fogMode); + break; + case 's': + if (fogStart > 0.0) { + fogStart -= 1.0; + } + SetFogMode(fogMode); + break; + case 'S': + if (fogStart < fogEnd) { + fogStart += 1.0; + } + SetFogMode(fogMode); + break; + case 'e': + if (fogEnd > fogStart) { + fogEnd -= 1.0; + } + SetFogMode(fogMode); + break; + case 'E': + if (fogEnd < 100.0) { + fogEnd += 1.0; + } + SetFogMode(fogMode); + break; + case 'c': + fogCoord = SetFogCoord(fogCoord ^ GL_TRUE); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + if (camz < (DEPTH - 1.0)) { + camz += 1.0f; + } + break; + case GLUT_KEY_DOWN: + if (camz > -19.0) { + camz -= 1.0f; + } + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + have_fog_coord = glutExtensionSupported("GL_EXT_fog_coord"); + + if (BuildTexture(TEXTURE_FILE, texture) == -1) { + exit(1); + } + + glEnable(GL_TEXTURE_2D); + glClearColor(0.0f, 0.0f, 0.0f, 0.5f); + glClearDepth(1.0f); + glDepthFunc(GL_LEQUAL); + glEnable(GL_DEPTH_TEST); + glShadeModel(GL_SMOOTH); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + + glFogfv(GL_FOG_COLOR, fogColor); + glHint(GL_FOG_HINT, GL_NICEST); + fogCoord = SetFogCoord(GL_TRUE); /* try to enable fog_coord */ + fogMode = SetFogMode(2); /* GL_EXP */ + + camz = -19.0f; + +#if ARRAYS + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, vertex_pointer); + + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, 0, texcoord_pointer); + + if (have_fog_coord) { + glFogCoordPointer_ext = (GLFOGCOORDPOINTEREXTPROC)glutGetProcAddress("glFogCoordPointerEXT"); + glEnableClientState(GL_FOG_COORDINATE_ARRAY_EXT); + glFogCoordPointer_ext(GL_FLOAT, 0, fogcoord_pointer); + } +#endif +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 640, 480 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/fplight.c b/progs/demos/fplight.c new file mode 100644 index 000000000..c7a38248d --- /dev/null +++ b/progs/demos/fplight.c @@ -0,0 +1,285 @@ +/* + * Use GL_NV_fragment_program to implement per-pixel lighting. + * + * Brian Paul + * 7 April 2003 + */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + +static GLfloat Diffuse[4] = { 0.5, 0.5, 1.0, 1.0 }; +static GLfloat Specular[4] = { 0.8, 0.8, 0.8, 1.0 }; +static GLfloat LightPos[4] = { 0.0, 10.0, 20.0, 1.0 }; +static GLfloat Delta = 1.0; + +static GLuint FragProg; +static GLuint VertProg; +static GLboolean Anim = GL_TRUE; +static GLboolean Wire = GL_FALSE; +static GLboolean PixelLight = GL_TRUE; + +static GLfloat Xrot = 0, Yrot = 0; + + +#define NAMED_PARAMETER4FV(prog, name, v) \ + glProgramNamedParameter4fvNV(prog, strlen(name), (const GLubyte *) name, v) + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + if (PixelLight) { +#if defined(GL_NV_fragment_program) + NAMED_PARAMETER4FV(FragProg, "LightPos", LightPos); + glEnable(GL_FRAGMENT_PROGRAM_NV); + glEnable(GL_VERTEX_PROGRAM_NV); +#endif + glDisable(GL_LIGHTING); + } + else { + glLightfv(GL_LIGHT0, GL_POSITION, LightPos); +#if defined(GL_NV_fragment_program) + glDisable(GL_FRAGMENT_PROGRAM_NV); + glDisable(GL_VERTEX_PROGRAM_NV); +#endif + glEnable(GL_LIGHTING); + } + + glPushMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + +#if 1 + glutSolidSphere(2.0, 10, 5); +#else + { + GLUquadricObj *q = gluNewQuadric(); + gluQuadricNormals(q, GL_SMOOTH); + gluQuadricTexture(q, GL_TRUE); + glRotatef(90, 1, 0, 0); + glTranslatef(0, 0, -1); + gluCylinder(q, 1.0, 1.0, 2.0, 24, 1); + gluDeleteQuadric(q); + } +#endif + + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void Idle(void) +{ + LightPos[0] += Delta; + if (LightPos[0] > 25.0) + Delta = -1.0; + else if (LightPos[0] <- 25.0) + Delta = 1.0; + glutPostRedisplay(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + /*glOrtho( -2.0, 2.0, -2.0, 2.0, 5.0, 25.0 );*/ + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -15.0 ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + Anim = !Anim; + if (Anim) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 'x': + LightPos[0] -= 1.0; + break; + case 'X': + LightPos[0] += 1.0; + break; + case 'w': + Wire = !Wire; + if (Wire) + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + else + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + break; + case 'p': + PixelLight = !PixelLight; + if (PixelLight) { + printf("Per-pixel lighting\n"); + } + else { + printf("Conventional lighting\n"); + } + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + +static void SpecialKey( int key, int x, int y ) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Xrot -= step; + break; + case GLUT_KEY_DOWN: + Xrot += step; + break; + case GLUT_KEY_LEFT: + Yrot -= step; + break; + case GLUT_KEY_RIGHT: + Yrot += step; + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + static const char *fragProgramText = + "!!FP1.0\n" + "DECLARE Diffuse; \n" + "DECLARE Specular; \n" + "DECLARE LightPos; \n" + + "# Compute normalized LightPos, put it in R0\n" + "DP3 R0.x, LightPos, LightPos;\n" + "RSQ R0.y, R0.x;\n" + "MUL R0, LightPos, R0.y;\n" + + "# Compute normalized normal, put it in R1\n" + "DP3 R1, f[TEX0], f[TEX0]; \n" + "RSQ R1.y, R1.x;\n" + "MUL R1, f[TEX0], R1.y;\n" + + "# Compute dot product of light direction and normal vector\n" + "DP3_SAT R2, R0, R1;" + + "MUL R3, Diffuse, R2; # diffuse attenuation\n" + + "POW R4, R2.x, {20.0}.x; # specular exponent\n" + + "MUL R5, Specular, R4; # specular attenuation\n" + + "ADD o[COLR], R3, R5; # add diffuse and specular colors\n" + "END \n" + ; + + static const char *vertProgramText = + "!!VP1.0\n" + "# typical modelview/projection transform\n" + "DP4 o[HPOS].x, c[0], v[OPOS] ;\n" + "DP4 o[HPOS].y, c[1], v[OPOS] ;\n" + "DP4 o[HPOS].z, c[2], v[OPOS] ;\n" + "DP4 o[HPOS].w, c[3], v[OPOS] ;\n" + "# transform normal by inv transpose of modelview, put in tex0\n" + "DP3 o[TEX0].x, c[4], v[NRML] ;\n" + "DP3 o[TEX0].y, c[5], v[NRML] ;\n" + "DP3 o[TEX0].z, c[6], v[NRML] ;\n" + "DP3 o[TEX0].w, c[7], v[NRML] ;\n" + "END\n"; + ; + + if (!glutExtensionSupported("GL_NV_vertex_program")) { + printf("Sorry, this demo requires GL_NV_vertex_program\n"); + exit(1); + } + if (!glutExtensionSupported("GL_NV_fragment_program")) { + printf("Sorry, this demo requires GL_NV_fragment_program\n"); + exit(1); + } + +#if defined(GL_NV_fragment_program) + glGenProgramsNV(1, &FragProg); + assert(FragProg > 0); + glGenProgramsNV(1, &VertProg); + assert(VertProg > 0); + + /* + * Fragment program + */ + glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV, FragProg, + strlen(fragProgramText), + (const GLubyte *) fragProgramText); + assert(glIsProgramNV(FragProg)); + glBindProgramNV(GL_FRAGMENT_PROGRAM_NV, FragProg); + + NAMED_PARAMETER4FV(FragProg, "Diffuse", Diffuse); + NAMED_PARAMETER4FV(FragProg, "Specular", Specular); + + /* + * Vertex program + */ + glLoadProgramNV(GL_VERTEX_PROGRAM_NV, VertProg, + strlen(vertProgramText), + (const GLubyte *) vertProgramText); + assert(glIsProgramNV(VertProg)); + glBindProgramNV(GL_VERTEX_PROGRAM_NV, VertProg); + glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 0, GL_MODELVIEW_PROJECTION_NV, GL_IDENTITY_NV); + glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 4, GL_MODELVIEW, GL_INVERSE_TRANSPOSE_NV); +#endif + + /* + * Misc init + */ + glClearColor(0.3, 0.3, 0.3, 0.0); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHTING); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Diffuse); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Specular); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 20.0); + + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("Press p to toggle between per-pixel and per-vertex lighting\n"); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 200, 200 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + if (Anim) + glutIdleFunc(Idle); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/gamma.c b/progs/demos/gamma.c new file mode 100644 index 000000000..9b2c3e105 --- /dev/null +++ b/progs/demos/gamma.c @@ -0,0 +1,162 @@ + +/* Draw test patterns to help determine correct gamma value for a display. + When the intensities of the inner squares nearly match the intensities + of their frames (from some distance the borders should disappear) then + you've found the right gamma value. + + You can set Mesa's gamma values (for red, green and blue) with the + MESA_GAMMA environment variable. But only on X windows! + For example: + setenv MESA_GAMMA 1.5 1.6 1.4 + Sets the red gamma value to 1.5, green to 1.6 and blue to 1.4. + See the main README file for more information. + + For more info about gamma correction see: + http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html + + This program is in the public domain + + Brian Paul 19 Oct 1995 + Kai Schuetz 05 Jun 1999 */ + +/* Conversion to GLUT by Mark J. Kilgard */ + + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <GL/glut.h> + +static void +Reshape(int width, int height) +{ + glViewport(0, 0, (GLint) width, (GLint) height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + glShadeModel(GL_FLAT); +} + +/* ARGSUSED1 */ +static void +key_esc(unsigned char key, int x, int y) +{ + if(key == 27) exit(0); /* Exit on Escape */ +} + +static GLubyte p25[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, + 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, +}; + +static GLubyte p50[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, + 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, +}; + +static GLubyte p75[] = { + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff, +}; + +static GLubyte *stippletab[4] = {NULL, p25, p50, p75}; + +static void +gamma_ramp(GLfloat yoffs, GLfloat r, GLfloat g, GLfloat b) +{ + GLint d; + + glColor3f(0.0, 0.0, 0.0); /* solid black, no stipple */ + glRectf(-1.0, yoffs, -0.6, yoffs + 0.5); + + for(d = 1; d < 4; d++) { /* increasing density from 25% to 75% */ + GLfloat xcoord = (-1.0 + d*0.4); + GLfloat t = d * 0.25; + + glColor3f(r*t, g*t, b*t); /* draw outer rect */ + glRectf(xcoord, yoffs, xcoord+0.4, yoffs + 0.5); + + glColor3f(0.0, 0.0, 0.0); /* "clear" inner rect */ + glRectf(xcoord + 0.1, yoffs + 0.125, xcoord + 0.3, yoffs + 0.375); + + glColor3f(r, g, b); /* draw stippled inner rect */ + glEnable(GL_POLYGON_STIPPLE); + glPolygonStipple(stippletab[d]); + glRectf(xcoord + 0.1, yoffs + 0.125, xcoord + 0.3, yoffs + 0.375); + glDisable(GL_POLYGON_STIPPLE); + } + glColor3f(r, g, b); /* solid color, no stipple */ + glRectf(0.6, yoffs, 1.0, yoffs + 0.5); +} + +static void +display(void) +{ + gamma_ramp( 0.5, 1.0, 1.0, 1.0); /* white ramp */ + gamma_ramp( 0.0, 1.0, 0.0, 0.0); /* red ramp */ + gamma_ramp(-0.5, 0.0, 1.0, 0.0); /* green ramp */ + gamma_ramp(-1.0, 0.0, 0.0, 1.0); /* blue ramp */ + glFlush(); +} + +int +main(int argc, char **argv) +{ + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); + + glutInitWindowPosition(50, 50); + glutInitWindowSize(500, 400); + + glutCreateWindow("gamma test patterns"); + glutReshapeFunc(Reshape); + glutDisplayFunc(display); + glutKeyboardFunc(key_esc); + + glutMainLoop(); + return 0; /* ANSI C requires main to return int. */ +} diff --git a/progs/demos/gears.c b/progs/demos/gears.c new file mode 100644 index 000000000..ab9bc0074 --- /dev/null +++ b/progs/demos/gears.c @@ -0,0 +1,381 @@ +/* + * 3-D gear wheels. This program is in the public domain. + * + * Command line options: + * -info print GL implementation information + * -exit automatically exit after 30 seconds + * + * + * Brian Paul + */ + +/* Conversion to GLUT by Mark J. Kilgard */ + + + +#include <math.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <GL/glut.h> + +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +static GLint T0 = 0; +static GLint Frames = 0; +static GLint autoexit = 0; +static GLint win = 0; + + +/** + + Draw a gear wheel. You'll probably want to call this function when + building a display list since we do a lot of trig here. + + Input: inner_radius - radius of hole at center + outer_radius - radius at center of teeth + width - width of gear + teeth - number of teeth + tooth_depth - depth of tooth + + **/ + +static void +gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, + GLint teeth, GLfloat tooth_depth) +{ + GLint i; + GLfloat r0, r1, r2; + GLfloat angle, da; + GLfloat u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth / 2.0; + r2 = outer_radius + tooth_depth / 2.0; + + da = 2.0 * M_PI / teeth / 4.0; + + glShadeModel(GL_FLAT); + + glNormal3f(0.0, 0.0, 1.0); + + /* draw front face */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + if (i < teeth) { + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); + } + } + glEnd(); + + /* draw front sides of teeth */ + glBegin(GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); + } + glEnd(); + + glNormal3f(0.0, 0.0, -1.0); + + /* draw back face */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + if (i < teeth) { + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + } + } + glEnd(); + + /* draw back sides of teeth */ + glBegin(GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + } + glEnd(); + + /* draw outward faces of teeth */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); + glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); + u = r2 * cos(angle + da) - r1 * cos(angle); + v = r2 * sin(angle + da) - r1 * sin(angle); + len = sqrt(u * u + v * v); + u /= len; + v /= len; + glNormal3f(v, -u, 0.0); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); + glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); + glNormal3f(cos(angle), sin(angle), 0.0); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5); + glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5); + u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da); + v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da); + glNormal3f(v, -u, 0.0); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5); + glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5); + glNormal3f(cos(angle), sin(angle), 0.0); + } + + glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5); + glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5); + + glEnd(); + + glShadeModel(GL_SMOOTH); + + /* draw inside radius cylinder */ + glBegin(GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) { + angle = i * 2.0 * M_PI / teeth; + glNormal3f(-cos(angle), -sin(angle), 0.0); + glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); + glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); + } + glEnd(); + +} + +static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0; +static GLint gear1, gear2, gear3; +static GLfloat angle = 0.0; + +static void +cleanup(void) +{ + glDeleteLists(gear1, 1); + glDeleteLists(gear2, 1); + glDeleteLists(gear3, 1); + glutDestroyWindow(win); +} + +static void +draw(void) +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + glRotatef(view_rotx, 1.0, 0.0, 0.0); + glRotatef(view_roty, 0.0, 1.0, 0.0); + glRotatef(view_rotz, 0.0, 0.0, 1.0); + + glPushMatrix(); + glTranslatef(-3.0, -2.0, 0.0); + glRotatef(angle, 0.0, 0.0, 1.0); + glCallList(gear1); + glPopMatrix(); + + glPushMatrix(); + glTranslatef(3.1, -2.0, 0.0); + glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0); + glCallList(gear2); + glPopMatrix(); + + glPushMatrix(); + glTranslatef(-3.1, 4.2, 0.0); + glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0); + glCallList(gear3); + glPopMatrix(); + + glPopMatrix(); + + glutSwapBuffers(); + + Frames++; + + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + if ((t >= 999.0 * autoexit) && (autoexit)) { + cleanup(); + exit(0); + } + } + } +} + + +static void +idle(void) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + angle += 70.0 * dt; /* 70 degrees per second */ + angle = fmod(angle, 360.0); /* prevents eventual overflow */ + + glutPostRedisplay(); +} + +/* change view angle, exit upon ESC */ +/* ARGSUSED1 */ +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 'z': + view_rotz += 5.0; + break; + case 'Z': + view_rotz -= 5.0; + break; + case 27: /* Escape */ + cleanup(); + exit(0); + break; + default: + return; + } + glutPostRedisplay(); +} + +/* change view angle */ +/* ARGSUSED1 */ +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_UP: + view_rotx += 5.0; + break; + case GLUT_KEY_DOWN: + view_rotx -= 5.0; + break; + case GLUT_KEY_LEFT: + view_roty += 5.0; + break; + case GLUT_KEY_RIGHT: + view_roty -= 5.0; + break; + default: + return; + } + glutPostRedisplay(); +} + +/* new window size or exposure */ +static void +reshape(int width, int height) +{ + GLfloat h = (GLfloat) height / (GLfloat) width; + + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -40.0); +} + +static void +init(int argc, char *argv[]) +{ + static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0}; + static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0}; + static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0}; + static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0}; + GLint i; + + glLightfv(GL_LIGHT0, GL_POSITION, pos); + glEnable(GL_CULL_FACE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_DEPTH_TEST); + + /* make the gears */ + gear1 = glGenLists(1); + glNewList(gear1, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red); + gear(1.0, 4.0, 1.0, 20, 0.7); + glEndList(); + + gear2 = glGenLists(1); + glNewList(gear2, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green); + gear(0.5, 2.0, 2.0, 10, 0.7); + glEndList(); + + gear3 = glGenLists(1); + glNewList(gear3, GL_COMPILE); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue); + gear(1.3, 2.0, 0.5, 10, 0.7); + glEndList(); + + glEnable(GL_NORMALIZE); + + for ( i=1; i<argc; i++ ) { + if (strcmp(argv[i], "-info")==0) { + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); + printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); + } + else if ( strcmp(argv[i], "-exit")==0) { + autoexit = 30; + printf("Auto Exit after %i seconds.\n", autoexit ); + } + } +} + +static void +visible(int vis) +{ + if (vis == GLUT_VISIBLE) + glutIdleFunc(idle); + else + glutIdleFunc(NULL); +} + +int main(int argc, char *argv[]) +{ + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(300, 300); + win = glutCreateWindow("Gears"); + init(argc, argv); + + glutDisplayFunc(draw); + glutReshapeFunc(reshape); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutVisibilityFunc(visible); + + glutMainLoop(); + return 0; /* ANSI C requires main to return int. */ +} diff --git a/progs/demos/geartrain.c b/progs/demos/geartrain.c new file mode 100644 index 000000000..3feb2a052 --- /dev/null +++ b/progs/demos/geartrain.c @@ -0,0 +1,1073 @@ + +/* + * GearTrain Simulator * Version: 1.00 + * + * Copyright (C) 1999 Shobhan Kumar Dutta All Rights Reserved. + * <skdutta@del3.vsnl.net.in> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * SHOBHAN KUMAR DUTTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT + * OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + +#include <math.h> +#include <stdlib.h> +#include <GL/glut.h> +#include <string.h> +#include <stdio.h> + +#ifndef min +#define min(x, y) ( x < y ? x : y ) +#endif + +#ifndef M_PI +#define M_PI 3.14159265 +#endif /* */ +typedef GLfloat TDA[4]; + +TDA background; + + +struct AXLE + { + char name[20]; + GLint id; + GLfloat radius; + GLint axis; + TDA color; + TDA position; + GLfloat length; + GLint motored; + GLfloat angular_velocity; + GLint direction; + }; + + +struct GEAR + { + char name[20]; + char type[7]; + GLint face; + GLint id; + GLfloat radius; + GLfloat width; + GLint teeth; + GLfloat tooth_depth; + GLfloat angle; + GLfloat angular_velocity; + TDA color; + GLint relative_position; + TDA position; + char axle_name[20]; + GLint axis; + GLint direction; + GLint motored; + }; + + +struct BELT + { + char name[20]; + GLint id; + char gear1_name[20]; + char gear2_name[20]; + }; + + +FILE * mainfile; +struct GEAR g[10]; +struct AXLE a[10]; +struct BELT b[10]; +int number_of_gears; +int number_of_axles; +int number_of_belts; + + +char Buf1[256], Buf2[256], Buf3[256], Buf4[256], Buf5[256]; + +static GLint T0 = 0; +static GLint Frames = 0; + + +#ifndef _WIN32 +static void +strset (char buf[], char ch) +{ + int i; + for (i = 0; i < strlen (buf); i++) + buf[i] = ch; +} +#endif + + +static void +Clear_Buffers () +{ + strset (Buf1, 0); + strset (Buf2, 0); + strset (Buf3, 0); + strset (Buf4, 0); + strset (Buf5, 0); +} + + +static void +LoadTriplet (TDA A) +{ + Clear_Buffers (); + fscanf (mainfile, "%s %s %s %s", Buf1, Buf2, Buf3, Buf4); + A[0] = atof (Buf2); + A[1] = atof (Buf3); + A[2] = atof (Buf4); +} + + +static void +LoadReal (float *a) +{ + Clear_Buffers (); + fscanf (mainfile, "%s %s", Buf1, Buf2); + *a = atof (Buf2); +} + + +static void +LoadInteger (int *a) +{ + Clear_Buffers (); + fscanf (mainfile, "%s %s", Buf1, Buf2); + *a = atoi (Buf2); +} + + +static void +LoadText (char *a) +{ + Clear_Buffers (); + fscanf (mainfile, "%s %s", Buf1, Buf2); + strcpy (a, Buf2); +} + + +static void +getdata (char filename[]) +{ + int gear_count = 0, axle_count = 0, belt_count = 0, i; + + mainfile = fopen (filename, "r"); + if (!mainfile) { + printf("Error: couldn't open %s\n", filename); + exit(-1); + } + + do + { + Clear_Buffers (); + fscanf (mainfile, "%s", Buf1); + if (ferror (mainfile)) + { + printf ("\nError opening file !\n"); + exit (1); + } + + if (!(strcmp (Buf1, "BACKGROUND"))) + LoadTriplet (background); + + if (!(strcmp (Buf1, "ANAME"))) + { + LoadText (a[axle_count].name); + axle_count++; + } + + if (!(strcmp (Buf1, "ARADIUS"))) + LoadReal (&a[axle_count - 1].radius); + + if (!(strcmp (Buf1, "AAXIS"))) + LoadInteger (&a[axle_count - 1].axis); + + if (!(strcmp (Buf1, "ACOLOR"))) + LoadTriplet (a[axle_count - 1].color); + + if (!(strcmp (Buf1, "APOSITION"))) + LoadTriplet (a[axle_count - 1].position); + + if (!(strcmp (Buf1, "ALENGTH"))) + LoadReal (&a[axle_count - 1].length); + + if (!(strcmp (Buf1, "AMOTORED"))) + LoadInteger (&a[axle_count - 1].motored); + + if (!(strcmp (Buf1, "AANGULARVELOCITY"))) + LoadReal (&a[axle_count - 1].angular_velocity); + + if (!(strcmp (Buf1, "ADIRECTION"))) + LoadInteger (&a[axle_count - 1].direction); + + if (!(strcmp (Buf1, "GNAME"))) + { + LoadText (g[gear_count].name); + gear_count++; + } + + if (!(strcmp (Buf1, "GTYPE"))) + LoadText (g[gear_count - 1].type); + + if (!(strcmp (Buf1, "GFACE"))) + LoadInteger (&g[gear_count - 1].face); + + if (!(strcmp (Buf1, "GRADIUS"))) + LoadReal (&g[gear_count - 1].radius); + + if (!(strcmp (Buf1, "GWIDTH"))) + LoadReal (&g[gear_count - 1].width); + + if (!(strcmp (Buf1, "GTEETH"))) + LoadInteger (&g[gear_count - 1].teeth); + + if (!(strcmp (Buf1, "GTOOTHDEPTH"))) + LoadReal (&g[gear_count - 1].tooth_depth); + + if (!(strcmp (Buf1, "GCOLOR"))) + LoadTriplet (g[gear_count - 1].color); + + if (!(strcmp (Buf1, "GAXLE"))) + LoadText (g[gear_count - 1].axle_name); + + if (!(strcmp (Buf1, "GPOSITION"))) + LoadInteger (&g[gear_count - 1].relative_position); + + if (!(strcmp (Buf1, "BELTNAME"))) + { + LoadText (b[belt_count].name); + belt_count++; + } + + if (!(strcmp (Buf1, "GEAR1NAME"))) + LoadText (b[belt_count - 1].gear1_name); + + if (!(strcmp (Buf1, "GEAR2NAME"))) + LoadText (b[belt_count - 1].gear2_name); + } + + while (Buf1[0] != 0); + + for (i = 0; i < number_of_gears; i++) + { + g[i].axis = -1; + g[i].direction = 0; + g[i].angular_velocity = 0.0; + } + + number_of_gears = gear_count; + number_of_axles = axle_count; + number_of_belts = belt_count; + fclose (mainfile); +} + + +static void +axle (GLint j, GLfloat radius, GLfloat length) +{ + GLfloat angle, rad, incr = 10.0 * M_PI / 180.0; + + /* draw main cylinder */ + glBegin (GL_QUADS); + for (angle = 0.0; angle < 360.0; angle += 5.0) + { + rad = angle * M_PI / 180.0; + glNormal3f (cos (rad), sin (rad), 0.0); + glVertex3f (radius * cos (rad), radius * sin (rad), length / 2); + glVertex3f (radius * cos (rad), radius * sin (rad), -length / 2); + glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), -length / 2); + glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), length / 2); + } + glEnd (); + + /* draw front face */ + glNormal3f (0.0, 0.0, 1.0); + glBegin (GL_TRIANGLES); + for (angle = 0.0; angle < 360.0; angle += 5.0) + { + rad = angle * M_PI / 180.0; + glVertex3f (0.0, 0.0, length / 2); + glVertex3f (radius * cos (rad), radius * sin (rad), length / 2); + glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), length / 2); + glVertex3f (0.0, 0.0, length / 2); + } + glEnd (); + + /* draw back face */ + glNormal3f (0.0, 0.0, -1.0); + glBegin (GL_TRIANGLES); + for (angle = 0.0; angle <= 360.0; angle += 5.0) + { + rad = angle * M_PI / 180.0; + glVertex3f (0.0, 0.0, -length / 2); + glVertex3f (radius * cos (rad), radius * sin (rad), -length / 2); + glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), -length / 2); + glVertex3f (0.0, 0.0, -length / 2); + } + glEnd (); +} + + + +static void +gear (GLint j, char type[], GLfloat radius, GLfloat width, + GLint teeth, GLfloat tooth_depth) +{ + GLint i; + GLfloat r1, r2; + GLfloat angle, da; + GLfloat u, v, len, fraction = 0.5; + GLfloat n = 1.0; + + r1 = radius - tooth_depth; + r2 = radius; + + da = 2.0 * M_PI / teeth / 4.0; + if (!g[j].face) + { + fraction = -0.5; + n = -1.0; + } + if (!(strcmp (type, "NORMAL"))) + { + fraction = 0.5; + n = 1.0; + } + + /* draw front face */ + if (!(strcmp (type, "NORMAL"))) + { + glNormal3f (0.0, 0.0, 1.0 * n); + glBegin (GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (0.0, 0.0, width * fraction); + glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction); + glVertex3f (0.0, 0.0, width * fraction); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), width * fraction); + } + glEnd (); + } + else + { + glNormal3f (0.0, 0.0, 1.0 * n); + glBegin (GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (0.0, 0.0, width * fraction); + glVertex3f ((r2 - width) * cos (angle), (r2 - width) * sin (angle), width * fraction); + glVertex3f (0.0, 0.0, width * fraction); + glVertex3f ((r2 - width) * cos (angle + 3 * da), (r2 - width) * sin (angle + 3 * da), width * fraction); + } + glEnd (); + } + + /* draw front sides of teeth */ + if (!(strcmp (type, "NORMAL"))) + { + glNormal3f (0.0, 0.0, 1.0 * n); + glBegin (GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction); + glVertex3f (r2 * cos (angle + da), r2 * sin (angle + da), width * fraction); + glVertex3f (r2 * cos (angle + 2 * da), r2 * sin (angle + 2 * da), width * fraction); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), width * fraction); + } + glEnd (); + } + + glNormal3f (0.0, 0.0, -1.0 * n); + + /* draw back face */ + glBegin (GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction); + glVertex3f (0.0, 0.0, -width * fraction); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), -width * fraction); + glVertex3f (0.0, 0.0, -width * fraction); + } + glEnd (); + + /* draw back sides of teeth */ + glNormal3f (0.0, 0.0, -1.0 * n); + glBegin (GL_QUADS); + da = 2.0 * M_PI / teeth / 4.0; + for (i = 0; i < teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), -width * fraction); + glVertex3f (r2 * cos (angle + 2 * da), r2 * sin (angle + 2 * da), -width * fraction); + glVertex3f (r2 * cos (angle + da), r2 * sin (angle + da), -width * fraction); + glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction); + } + glEnd (); + + + /* draw outward faces of teeth */ + if (!(strcmp (type, "NORMAL"))) + { + glBegin (GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + + glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction); + glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction); + u = r2 * cos (angle + da) - r1 * cos (angle); + v = r2 * sin (angle + da) - r1 * sin (angle); + len = sqrt (u * u + v * v); + u /= len; + v /= len; + glNormal3f (v, -u, 0.0); + glVertex3f (r2 * cos (angle + da), r2 * sin (angle + da), width * fraction); + glVertex3f (r2 * cos (angle + da), r2 * sin (angle + da), -width * fraction); + glNormal3f (cos (angle), sin (angle), 0.0); + glVertex3f (r2 * cos (angle + 2 * da), r2 * sin (angle + 2 * da), width * fraction); + glVertex3f (r2 * cos (angle + 2 * da), r2 * sin (angle + 2 * da), -width * fraction); + u = r1 * cos (angle + 3 * da) - r2 * cos (angle + 2 * da); + v = r1 * sin (angle + 3 * da) - r2 * sin (angle + 2 * da); + glNormal3f (v, -u, 0.0); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), width * fraction); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), -width * fraction); + glNormal3f (cos (angle), sin (angle), 0.0); + } + } + else + { + glBegin (GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0 * M_PI / teeth; + glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction); + glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction); + u = r2 * cos (angle + da) - r1 * cos (angle); + v = r2 * sin (angle + da) - r1 * sin (angle); + len = sqrt (u * u + v * v); + u /= len; + v /= len; + glNormal3f (v, -u, 0.0); + glVertex3f ((r2 - width) * cos (angle + da), (r2 - width) * sin (angle + da), width * fraction); + glVertex3f (r2 * cos (angle + da), r2 * sin (angle + da), -width * fraction); + glNormal3f (cos (angle), sin (angle), n); + glVertex3f ((r2 - width) * cos (angle + 2 * da), (r2 - width) * sin (angle + 2 * da), width * fraction); + glVertex3f (r2 * cos (angle + 2 * da), r2 * sin (angle + 2 * da), -width * fraction); + u = r1 * cos (angle + 3 * da) - r2 * cos (angle + 2 * da); + v = r1 * sin (angle + 3 * da) - r2 * sin (angle + 2 * da); + glNormal3f (v, -u, 0.0); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), width * fraction); + glVertex3f (r1 * cos (angle + 3 * da), r1 * sin (angle + 3 * da), -width * fraction); + glNormal3f (cos (angle), sin (angle), n); + } + } + + glVertex3f (r1 * cos (0), r1 * sin (0), width * fraction); + glVertex3f (r1 * cos (0), r1 * sin (0), -width * fraction); + glEnd (); +} + + +static void +belt (struct GEAR g1, struct GEAR g2) +{ + GLfloat D, alpha, phi, angle, incr, width; + GLint indexes[3] = + { + 0, 0, 0 + }; + + GLfloat col[3] = + { + 0.0, 0.0, 0.0 + }; + + width = min (g1.width, g2.width); + D = sqrt (pow (g1.position[0] - g2.position[0], 2) + pow (g1.position[1] - g2.position[1], 2) + pow (g1.position[2] - g2.position[2], 2)); + alpha = acos ((g2.position[0] - g1.position[0]) / D); + phi = acos ((g1.radius - g2.radius) / D); + glBegin (GL_QUADS); + glColor3fv (col); + glMaterialiv (GL_FRONT, GL_COLOR_INDEXES, indexes); + incr = 1.2 * 360.0 / g1.teeth * M_PI / 180.00; + for (angle = alpha + phi; angle <= 2 * M_PI - phi + alpha; angle += 360.0 / g1.teeth * M_PI / 180.00) + { + glNormal3f (cos (angle), sin (angle), 0.0); + glVertex3f (g1.radius * cos (angle), g1.radius * sin (angle), width * 0.5); + glVertex3f (g1.radius * cos (angle), g1.radius * sin (angle), -width * 0.5); + glVertex3f (g1.radius * cos (angle + incr), g1.radius * sin (angle + incr), -width * 0.5); + glVertex3f (g1.radius * cos (angle + incr), g1.radius * sin (angle + incr), width * 0.5); + } + glEnd (); + glBegin (GL_QUADS); + glColor3fv (col); + glMaterialiv (GL_FRONT, GL_COLOR_INDEXES, indexes); + incr = 1.2 * 360.0 / g2.teeth * M_PI / 180.00; + for (angle = -phi + alpha; angle <= phi + alpha; angle += 360.0 / g1.teeth * M_PI / 180.0) + { + glNormal3f (cos (angle), sin (angle), 0.0); + glVertex3f (g2.radius * cos (angle) + g2.position[0] - g1.position[0], g2.radius * sin (angle) + g2.position[1] - g1.position[1], width * 0.5); + glVertex3f (g2.radius * cos (angle) + g2.position[0] - g1.position[0], g2.radius * sin (angle) + g2.position[1] - g1.position[1], width * -0.5); + glVertex3f (g2.radius * cos (angle + incr) + g2.position[0] - g1.position[0], g2.radius * sin (angle + incr) + g2.position[1] - g1.position[1], width * -0.5); + glVertex3f (g2.radius * cos (angle + incr) + g2.position[0] - g1.position[0], g2.radius * sin (angle + incr) + g2.position[1] - g1.position[1], width * 0.5); + } + glEnd (); + + glBegin (GL_QUADS); + glColor3fv (col); + glMaterialiv (GL_FRONT, GL_COLOR_INDEXES, indexes); + glVertex3f (g1.radius * cos (alpha + phi), g1.radius * sin (alpha + phi), width * 0.5); + glVertex3f (g1.radius * cos (alpha + phi), g1.radius * sin (alpha + phi), width * -0.5); + glVertex3f (g2.radius * cos (alpha + phi) + g2.position[0] - g1.position[0], g2.radius * sin (alpha + phi) + g2.position[1] - g1.position[1], width * -0.5); + glVertex3f (g2.radius * cos (alpha + phi) + g2.position[0] - g1.position[0], g2.radius * sin (alpha + phi) + g2.position[1] - g1.position[1], width * 0.5); + glVertex3f (g1.radius * cos (alpha - phi), g1.radius * sin (alpha - phi), width * 0.5); + glVertex3f (g1.radius * cos (alpha - phi), g1.radius * sin (alpha - phi), width * -0.5); + glVertex3f (g2.radius * cos (alpha - phi) + g2.position[0] - g1.position[0], g2.radius * sin (alpha - phi) + g2.position[1] - g1.position[1], width * -0.5); + glVertex3f (g2.radius * cos (alpha - phi) + g2.position[0] - g1.position[0], g2.radius * sin (alpha - phi) + g2.position[1] - g1.position[1], width * 0.5); + glEnd (); +} + + +static int +axle_find (char axle_name[]) +{ + int i; + + for (i = 0; i < number_of_axles; i++) + { + if (!(strcmp (axle_name, a[i].name))) + break; + } + return i; +} + + +static int +gear_find (char gear_name[]) +{ + int i; + + for (i = 0; i < number_of_gears; i++) + { + if (!(strcmp (gear_name, g[i].name))) + break; + } + return i; +} + + +static void +process () +{ + GLfloat x, y, z, D, dist; + GLint axle_index, i, j, g1, g2, k; + char error[80]; + + for (i = 0; i < number_of_gears; i++) + { + x = 0.0; + y = 0.0; + z = 0.0; + axle_index = axle_find (g[i].axle_name); + g[i].axis = a[axle_index].axis; + g[i].motored = a[axle_index].motored; + if (a[axle_index].motored) + { + g[i].direction = a[axle_index].direction; + g[i].angular_velocity = a[axle_index].angular_velocity; + } + if (g[i].axis == 0) + x = 1.0; + else if (g[i].axis == 1) + y = 1.0; + else + z = 1.0; + + g[i].position[0] = a[axle_index].position[0] + x * g[i].relative_position; + g[i].position[1] = a[axle_index].position[1] + y * g[i].relative_position; + g[i].position[2] = a[axle_index].position[2] + z * g[i].relative_position; + } + + for (k = 0; k < number_of_axles; k++) + { + for (i = 0; i < number_of_gears - 1; i++) + { + for (j = 0; j < number_of_gears; j++) + { + if (!(strcmp (g[i].type, g[j].type)) && (!(strcmp (g[i].type, "NORMAL"))) && ((strcmp (g[i].axle_name, g[j].axle_name) != 0)) && (g[i].axis == g[j].axis)) + { + D = sqrt (pow (g[i].position[0] - g[j].position[0], 2) + pow (g[i].position[1] - g[j].position[1], 2) + pow (g[i].position[2] - g[j].position[2], 2)); + if (D < 1.1 * (g[i].radius - g[i].tooth_depth + g[j].radius - g[j].tooth_depth)) + { + printf (error, "Gear %s and %s are too close to each other.", g[i].name, g[j].name); + + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + if (g[i].axis == 0) + { + dist = g[i].position[0] - g[j].position[0]; + } + else if (g[i].axis == 1) + { + dist = g[i].position[1] - g[j].position[1]; + } + else + dist = g[i].position[2] - g[j].position[2]; + + dist = fabs (dist); + + if (dist < (g[i].width / 2 + g[j].width / 2)) + { + if ((g[i].motored) && (!(g[j].motored)) && (D < 0.95 * (g[i].radius + g[j].radius))) + { + axle_index = axle_find (g[j].axle_name); + if ((a[axle_index].direction != 0) && (g[j].angular_velocity != g[i].angular_velocity * g[i].teeth / g[j].teeth * g[i].radius / g[j].radius)) + { + printf (error, "Error in tooth linkage of gears %s and %s.", g[i].name, g[j].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + g[j].motored = (a[axle_index].motored = 1); + g[j].direction = (a[axle_index].direction = -g[i].direction); + a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth; + g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius); + } + + if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * (g[i].radius + g[j].radius))) + { + axle_index = axle_find (g[i].axle_name); + if ((a[axle_index].direction != 0) && (g[i].angular_velocity != g[j].angular_velocity * g[j].teeth / g[i].teeth * g[j].radius / g[i].radius)) + { + printf (error, "Error in tooth linkage of gears %s and %s.", g[i].name, g[j].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + g[i].motored = (a[axle_index].motored = 1); + g[i].direction = (a[axle_index].direction = -g[j].direction); + a[axle_index].angular_velocity = g[j].angular_velocity * g[j].teeth / g[i].teeth; + g[i].angular_velocity = (a[axle_index].angular_velocity *= g[j].radius / g[i].radius); + + } + } + } + + if (!(strcmp (g[i].type, g[j].type)) && (!(strcmp (g[i].type, "BEVEL"))) && ((strcmp (g[i].axle_name, g[j].axle_name) != 0)) && (g[i].axis != g[j].axis)) + { + D = sqrt (pow (g[i].position[0] - g[j].position[0], 2) + pow (g[i].position[1] - g[j].position[1], 2) + pow (g[i].position[2] - g[j].position[2], 2)); + if ((g[i].motored) && (!(g[j].motored)) && (D < 0.95 * sqrt (g[i].radius * g[i].radius + g[j].radius * g[j].radius))) + { + axle_index = axle_find (g[j].axle_name); + if ((a[axle_index].direction != 0) && (g[j].angular_velocity != g[i].angular_velocity * g[i].teeth / g[j].teeth * g[i].radius / g[j].radius)) + { + printf (error, "Error in tooth linkage of gears %s and %s.", g[i].name, g[j].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + g[j].motored = (a[axle_index].motored = 1); + g[j].direction = (a[axle_index].direction = -g[i].direction); + a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth; + g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius); + } + + + if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * sqrt (g[i].radius * g[i].radius + g[j].radius * g[j].radius))) + { + axle_index = axle_find (g[i].axle_name); + if ((a[axle_index].direction != 0) && (g[i].angular_velocity != g[j].angular_velocity * g[j].teeth / g[i].teeth * g[j].radius / g[i].radius)) + { + printf (error, "Error in tooth linkage of gears %s and %s.", g[i].name, g[j].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + g[i].motored = (a[axle_index].motored = 1); + g[i].direction = (a[axle_index].direction = -g[j].direction); + a[axle_index].angular_velocity = g[j].angular_velocity * g[j].teeth / g[i].teeth; + g[i].angular_velocity = (a[axle_index].angular_velocity *= g[j].radius / g[i].radius); + } + } + } + } + + for (i = 0; i < number_of_gears; i++) + { + axle_index = axle_find (g[i].axle_name); + g[i].motored = a[axle_index].motored; + if (a[axle_index].motored) + { + g[i].direction = a[axle_index].direction; + g[i].angular_velocity = a[axle_index].angular_velocity; + } + } + + for (i = 0; i < number_of_belts; i++) + { + g1 = gear_find (b[i].gear1_name); + g2 = gear_find (b[i].gear2_name); + D = sqrt (pow (g[g1].position[0] - g[g2].position[0], 2) + pow (g[g1].position[1] - g[g2].position[1], 2) + pow (g[g1].position[2] - g[g2].position[2], 2)); + if (!((g[g1].axis == g[g2].axis) && (!strcmp (g[g1].type, g[g2].type)) && (!strcmp (g[g1].type, "NORMAL")))) + { + printf (error, "Belt %s invalid.", b[i].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + if ((g[g1].axis == g[g2].axis) && (!strcmp (g[g1].type, g[g2].type)) && (!strcmp (g[g1].type, "NORMAL"))) + { + /* + if((g[g1].motored)&&(g[g2].motored)) + if(g[g2].angular_velocity!=(g[g1].angular_velocity*g[g1].radius/g[g2].radius)) + { + printf(error,"Error in belt linkage of gears %s and %s".,g[g1].name,g[g2].name); + MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK); + exit(1); + } + */ + if (g[g1].axis == 0) + { + dist = g[g1].position[0] - g[g2].position[0]; + } + else if (g[i].axis == 1) + { + dist = g[g1].position[1] - g[g2].position[1]; + } + else + dist = g[g1].position[2] - g[g2].position[2]; + + dist = fabs (dist); + + if (dist > (g[g1].width / 2 + g[g2].width / 2)) + { + printf (error, "Belt %s invalid.", b[i].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + if (dist < (g[g1].width / 2 + g[g2].width / 2)) + { + if (D < g[g1].radius + g[g2].radius) + { + printf (error, "Gears %s and %s too close to be linked with belts", g[g1].name, g[g2].name); + /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/ + exit (1); + } + + if ((g[g1].motored) && (!(g[g2].motored))) + { + axle_index = axle_find (g[g2].axle_name); + g[g2].motored = (a[axle_index].motored = 1); + g[g2].direction = (a[axle_index].direction = g[g1].direction); + g[g2].angular_velocity = (a[axle_index].angular_velocity = g[g1].angular_velocity * g[g1].radius / g[g2].radius); + } + + if ((!(g[g1].motored)) && (g[g2].motored)) + { + axle_index = axle_find (g[g1].axle_name); + g[g1].motored = (a[axle_index].motored = 1); + g[g1].direction = (a[axle_index].direction = g[g2].direction); + g[g1].angular_velocity = (a[axle_index].angular_velocity = g[g2].angular_velocity * g[g2].radius / g[g1].radius); + } + } + } + } + + for (i = 0; i < number_of_gears; i++) + { + axle_index = axle_find (g[i].axle_name); + g[i].motored = a[axle_index].motored; + if (a[axle_index].motored) + { + g[i].direction = a[axle_index].direction; + g[i].angular_velocity = a[axle_index].angular_velocity; + } + } + } +} + + + +GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 10.0; + + +static void +draw (void) +{ + int i; + GLfloat x, y, z; + int index; + + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix (); + glRotatef (view_rotx, 1.0, 0.0, 0.0); + glRotatef (view_roty, 0.0, 1.0, 0.0); + glRotatef (view_rotz, 0.0, 0.0, 1.0); + + for (i = 0; i < number_of_gears; i++) + { + x = 0.0; + y = 0.0; + z = 0.0; + glPushMatrix (); +/*glTranslatef( -3.0, -2.0, 0.0 );*/ + glTranslatef (g[i].position[0], g[i].position[1], g[i].position[2]); + if (g[i].axis == 0) + y = 1.0; + else if (g[i].axis == 1) + x = 1.0; + else + z = 1.0; + + if (z != 1.0) + glRotatef (90.0, x, y, z); + + glRotatef (g[i].direction * g[i].angle, 0.0, 0.0, 1.0); + glCallList (g[i].id); + glPopMatrix (); + } + + for (i = 0; i < number_of_axles; i++) + { + x = 0.0; + y = 0.0; + z = 0.0; + glPushMatrix (); + glTranslatef (a[i].position[0], a[i].position[1], a[i].position[2]); + if (a[i].axis == 0) + y = 1.0; + else if (a[i].axis == 1) + x = 1.0; + else + z = 1.0; + + if (z != 1.0) + glRotatef (90.0, x, y, z); + + glCallList (a[i].id); + glPopMatrix (); + } + + for (i = 0; i < number_of_belts; i++) + { + x = 0.0; + y = 0.0; + z = 0.0; + glPushMatrix (); + index = gear_find (b[i].gear1_name); + glTranslatef (g[index].position[0], g[index].position[1], g[index].position[2]); + if (g[index].axis == 0) + y = 1.0; + else if (g[index].axis == 1) + x = 1.0; + else + z = 1.0; + + if (z != 1.0) + glRotatef (90.0, x, y, z); + + glCallList (b[i].id); + glPopMatrix (); + } + + glPopMatrix (); + glutSwapBuffers (); + + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + Frames++; + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + } + } +} + + +static void +idle (void) +{ + int i; + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + for (i = 0; i < number_of_gears; i++) + g[i].angle += g[i].angular_velocity * dt; + glutPostRedisplay(); +} + + + + +/* change view angle, exit upon ESC */ +static void +key (unsigned char k, int x, int y) +{ + switch (k) + { + case 'x': + view_rotx += 5.0; + break; + case 'X': + view_rotx -= 5.0; + break; + case 'y': + view_roty += 5.0; + break; + case 'Y': + view_roty -= 5.0; + break; + case 'z': + view_rotz += 5.0; + break; + case 'Z': + view_rotz -= 5.0; + break; + case 0x1B: + exit(0); + } +} + + + + +/* new window size or exposure */ +static void +reshape (int width, int height) +{ + glViewport (0, 0, (GLint) width, (GLint) height); + glMatrixMode (GL_PROJECTION); + glLoadIdentity (); + if (width > height) + { + GLfloat w = (GLfloat) width / (GLfloat) height; + glFrustum (-w, w, -1.0, 1.0, 5.0, 60.0); + } + else + { + GLfloat h = (GLfloat) height / (GLfloat) width; + glFrustum (-1.0, 1.0, -h, h, 5.0, 60.0); + } + + glMatrixMode (GL_MODELVIEW); + glLoadIdentity (); + glTranslatef (0.0, 0.0, -40.0); + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + + + +static void +init (void) +{ + GLfloat matShine = 20.00F; + GLfloat light0Pos[4] = + { + 0.70F, 0.70F, 1.25F, 0.50F + }; + int i; + + glClearColor (background[0], background[1], background[2], 1.0F); + glClearIndex ((GLfloat) 0.0); + + glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, matShine); + glLightfv (GL_LIGHT0, GL_POSITION, light0Pos); + glEnable (GL_LIGHT0); + + glEnable (GL_LIGHTING); + glEnable (GL_DEPTH_TEST); + for (i = 0; i < number_of_gears; i++) + g[i].angle = 0.0; + + for (i = 0; i < number_of_gears; i++) + { + g[i].id = glGenLists (1); + glNewList (g[i].id, GL_COMPILE); + glColor3fv (g[i].color); + glMaterialfv (GL_FRONT, GL_SPECULAR, g[i].color); + gear (i, g[i].type, g[i].radius, g[i].width, g[i].teeth, g[i].tooth_depth); + glEndList (); + } + + for (i = 0; i < number_of_axles; i++) + { + a[i].id = glGenLists (1); + glNewList (a[i].id, GL_COMPILE); + glColor3fv (a[i].color); + glMaterialfv (GL_FRONT, GL_SPECULAR, a[i].color); + axle (i, a[i].radius, a[i].length); + glEndList (); + } + + for (i = 0; i < number_of_belts; i++) + { + b[i].id = glGenLists (1); + glNewList (b[i].id, GL_COMPILE); + belt (g[gear_find (b[i].gear1_name)], g[gear_find (b[i].gear2_name)]); + glEndList (); + } + + glEnable (GL_COLOR_MATERIAL); +} + + + +int +main (int argc, char *argv[]) +{ + char *file; + + if (argc < 2) + file = "geartrain.dat"; + else + file = argv[1]; + + glutInitWindowPosition (0, 0); + glutInitWindowSize(640,480); + glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); + + if (glutCreateWindow ("Gear Train Simulation") == GL_FALSE) + exit (1); + + getdata (file); + process (); + init (); + + glutDisplayFunc (draw); + glutReshapeFunc (reshape); + glutKeyboardFunc (key); + glutIdleFunc (idle); + glutMainLoop (); + return 0; +} diff --git a/progs/demos/geartrain.dat b/progs/demos/geartrain.dat new file mode 100644 index 000000000..374de48bd --- /dev/null +++ b/progs/demos/geartrain.dat @@ -0,0 +1,119 @@ +BACKGROUND = 0.000 0.500 0.700
+
+ANAME = AXLE1
+ARADIUS = 1.000
+AAXIS = 2
+APOSITION = -7.000 0.000 0.000
+ACOLOR = 0.800 0.500 0.200
+ALENGTH = 6.000
+AMOTORED = 1
+AANGULARVELOCITY = 90.000
+ADIRECTION = 1
+
+ANAME = AXLE2
+ARADIUS = 1.000
+AAXIS = 2
+APOSITION = -3.000 0.000 0.000
+ACOLOR = 0.800 0.500 0.200
+ALENGTH = 12.000
+AMOTORED = 0
+
+ANAME = AXLE3
+ARADIUS = 1.000
+AAXIS = 2
+APOSITION = 1.000 0.000 0.000
+ACOLOR = 0.800 0.500 0.200
+ALENGTH = 6.000
+AMOTORED = 0
+
+ANAME = AXLE4
+ARADIUS = 1.000
+AAXIS = 2
+APOSITION = 8.000 0.000 0.000
+ACOLOR = 0.800 0.500 0.200
+ALENGTH = 18.000
+AMOTORED = 0
+
+ANAME = AXLE5
+ARADIUS = 1.000
+AAXIS = 1
+APOSITION = 8.000 -8.200 -7.400
+ACOLOR = 0.800 0.500 0.200
+ALENGTH = 12.000
+AMOTORED = 0
+
+GNAME = GEAR1
+GTYPE = NORMAL
+GRADIUS = 2.200
+GWIDTH = 3.000
+GTEETH = 40
+GTOOTHDEPTH = 0.500
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE1
+GPOSITION = 0.000
+
+GNAME = GEAR2
+GTYPE = NORMAL
+GRADIUS = 2.200
+GWIDTH = 3.000
+GTEETH = 30
+GTOOTHDEPTH = 0.500
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE2
+GPOSITION = 0.000
+
+GNAME = GEAR3
+GTYPE = NORMAL
+GRADIUS = 2.200
+GWIDTH = 3.000
+GTEETH = 20
+GTOOTHDEPTH = 0.500
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE3
+GPOSITION = 0.000
+
+GNAME = GEAR4
+GTYPE = NORMAL
+GRADIUS = 1.700
+GWIDTH = 1.000
+GTEETH = 20
+GTOOTHDEPTH = 0.500
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE2
+GPOSITION = 5.000
+
+GNAME = GEAR5
+GTYPE = NORMAL
+GRADIUS = 3.000
+GWIDTH = 1.000
+GTEETH = 20
+GTOOTHDEPTH = 0.500
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE4
+GPOSITION = 5.000
+
+GNAME = GEAR6
+GTYPE = BEVEL
+GFACE = 0
+GRADIUS = 4.000
+GWIDTH = 1.000
+GTEETH = 20
+GTOOTHDEPTH = 1.700
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE4
+GPOSITION = -4.000
+
+GNAME = GEAR7
+GTYPE = BEVEL
+GFACE = 0
+GRADIUS = 4.000
+GWIDTH = 1.000
+GTEETH = 20
+GTOOTHDEPTH = 1.700
+GCOLOR = 0.500 0.500 0.500
+GAXLE = AXLE5
+GPOSITION = 5.000
+
+BELTNAME = BELT1
+GEAR1NAME = GEAR5
+GEAR2NAME = GEAR4
diff --git a/progs/demos/glinfo.c b/progs/demos/glinfo.c new file mode 100644 index 000000000..a6a747828 --- /dev/null +++ b/progs/demos/glinfo.c @@ -0,0 +1,32 @@ + +/* + * Print GL, GLU and GLUT version and extension info + * + * Brian Paul This file in public domain. + * October 3, 1997 + */ + + +#include <stdio.h> +#include <GL/glut.h> + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitDisplayMode( GLUT_RGB ); + glutCreateWindow(argv[0]); + + printf("GL_VERSION: %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_EXTENSIONS: %s\n", (char *) glGetString(GL_EXTENSIONS)); + printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VENDOR: %s\n", (char *) glGetString(GL_VENDOR)); + printf("GLU_VERSION: %s\n", (char *) gluGetString(GLU_VERSION)); + printf("GLU_EXTENSIONS: %s\n", (char *) gluGetString(GLU_EXTENSIONS)); + printf("GLUT_API_VERSION: %d\n", GLUT_API_VERSION); +#ifdef GLUT_XLIB_IMPLEMENTATION + printf("GLUT_XLIB_IMPLEMENTATION: %d\n", GLUT_XLIB_IMPLEMENTATION); +#endif + + return 0; +} diff --git a/progs/demos/gloss.c b/progs/demos/gloss.c new file mode 100644 index 000000000..4e7adc8d4 --- /dev/null +++ b/progs/demos/gloss.c @@ -0,0 +1,435 @@ + +/* + * Specular reflection demo. The specular highlight is modulated by + * a sphere-mapped texture. The result is a high-gloss surface. + * NOTE: you really need hardware acceleration for this. + * Also note, this technique can't be implemented with multi-texture + * and separate specular color interpolation because there's no way + * to indicate that the second texture unit (the reflection map) + * should modulate the specular color and not the base color. + * A future multi-texture extension could fix that. + * + * Command line options: + * -info print GL implementation information + * + * + * Brian Paul October 22, 1999 This program is in the public domain. + */ + + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define SPECULAR_TEXTURE_FILE "../images/reflect.rgb" +#define BASE_TEXTURE_FILE "../images/tile.rgb" + +/* Menu items */ +#define DO_SPEC_TEXTURE 1 +#define OBJECT 2 +#define ANIMATE 3 +#define QUIT 100 + +/* for convolution */ +#define FILTER_SIZE 7 + +static GLuint CylinderObj = 0; +static GLuint TeapotObj = 0; +static GLuint Object = 0; +static GLboolean Animate = GL_TRUE; + +static GLfloat Xrot = 0.0, Yrot = 0.0, Zrot = 0.0; +static GLfloat DXrot = 20.0, DYrot = 50.; + +static GLfloat Black[4] = { 0, 0, 0, 0 }; +static GLfloat White[4] = { 1, 1, 1, 1 }; +static GLfloat Diffuse[4] = { .3, .3, 1.0, 1.0 }; /* blue */ +static GLfloat Shininess = 6; + +static GLuint BaseTexture, SpecularTexture; +static GLboolean DoSpecTexture = GL_TRUE; + +/* performance info */ +static GLint T0 = 0; +static GLint Frames = 0; + + +static void Idle( void ) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + if (Animate) { + Xrot += DXrot*dt; + Yrot += DYrot*dt; + glutPostRedisplay(); + } +} + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glPushMatrix(); + glRotatef(Xrot, 1.0, 0.0, 0.0); + glRotatef(Yrot, 0.0, 1.0, 0.0); + glRotatef(Zrot, 0.0, 0.0, 1.0); + + /* First pass: diffuse lighting with base texture */ + glMaterialfv(GL_FRONT, GL_DIFFUSE, Diffuse); + glMaterialfv(GL_FRONT, GL_SPECULAR, Black); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, BaseTexture); + glCallList(Object); + + /* Second pass: specular lighting with reflection texture */ + glEnable(GL_POLYGON_OFFSET_FILL); + glBlendFunc(GL_ONE, GL_ONE); /* add */ + glEnable(GL_BLEND); + glMaterialfv(GL_FRONT, GL_DIFFUSE, Black); + glMaterialfv(GL_FRONT, GL_SPECULAR, White); + if (DoSpecTexture) { + glBindTexture(GL_TEXTURE_2D, SpecularTexture); + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + } + else { + glDisable(GL_TEXTURE_2D); + } + glCallList(Object); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_BLEND); + glDisable(GL_POLYGON_OFFSET_FILL); + + glPopMatrix(); + + glutSwapBuffers(); + + if (Animate) { + GLint t = glutGet(GLUT_ELAPSED_TIME); + Frames++; + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + } + } +} + + +static void Reshape( int width, int height ) +{ + GLfloat h = 30.0; + GLfloat w = h * width / height; + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -w, w, -h, h, 150.0, 500.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -380.0 ); +} + + +static void ToggleAnimate(void) +{ + Animate = !Animate; + if (Animate) { + glutIdleFunc( Idle ); + T0 = glutGet(GLUT_ELAPSED_TIME); + Frames = 0; + } + else { + glutIdleFunc( NULL ); + } +} + + +static void ModeMenu(int entry) +{ + if (entry==ANIMATE) { + ToggleAnimate(); + } + else if (entry==DO_SPEC_TEXTURE) { + DoSpecTexture = !DoSpecTexture; + } + else if (entry==OBJECT) { + if (Object == TeapotObj) + Object = CylinderObj; + else + Object = TeapotObj; + } + else if (entry==QUIT) { + exit(0); + } + glutPostRedisplay(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 's': + Shininess--; + if (Shininess < 0.0) + Shininess = 0.0; + glMaterialf(GL_FRONT, GL_SHININESS, Shininess); + printf("Shininess = %g\n", Shininess); + break; + case 'S': + Shininess++; + if (Shininess > 128.0) + Shininess = 128.0; + glMaterialf(GL_FRONT, GL_SHININESS, Shininess); + printf("Shininess = %g\n", Shininess); + break; + case ' ': + ToggleAnimate(); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + float step = 3.0; + (void) x; + (void) y; + + switch (key) { + case GLUT_KEY_UP: + Xrot += step; + break; + case GLUT_KEY_DOWN: + Xrot -= step; + break; + case GLUT_KEY_LEFT: + Yrot += step; + break; + case GLUT_KEY_RIGHT: + Yrot -= step; + break; + } + glutPostRedisplay(); +} + + +static void Init( int argc, char *argv[] ) +{ + GLboolean convolve = GL_FALSE; + int i; + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-info")==0) { + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); + printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); + } + else if (strcmp(argv[i], "-c")==0) { + convolve = GL_TRUE; + } + } + + + /* Cylinder object */ + { + static GLfloat height = 100.0; + static GLfloat radius = 40.0; + static GLint slices = 24; /* pie slices around Z axis */ + static GLint stacks = 10; /* subdivisions along length of cylinder */ + static GLint rings = 4; /* rings in the end disks */ + GLUquadricObj *q = gluNewQuadric(); + assert(q); + gluQuadricTexture(q, GL_TRUE); + + CylinderObj = glGenLists(1); + glNewList(CylinderObj, GL_COMPILE); + + glPushMatrix(); + glTranslatef(0.0, 0.0, -0.5 * height); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + /*glScalef(8.0, 4.0, 2.0);*/ + glMatrixMode(GL_MODELVIEW); + + /* cylinder */ + gluQuadricNormals(q, GL_SMOOTH); + gluQuadricTexture(q, GL_TRUE); + gluCylinder(q, radius, radius, height, slices, stacks); + + /* end cap */ + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glScalef(3.0, 3.0, 1.0); + glMatrixMode(GL_MODELVIEW); + + glTranslatef(0.0, 0.0, height); + gluDisk(q, 0.0, radius, slices, rings); + + /* other end cap */ + glTranslatef(0.0, 0.0, -height); + gluQuadricOrientation(q, GLU_INSIDE); + gluDisk(q, 0.0, radius, slices, rings); + + glPopMatrix(); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + + glEndList(); + gluDeleteQuadric(q); + } + + /* Teapot */ + { + TeapotObj = glGenLists(1); + glNewList(TeapotObj, GL_COMPILE); + + glFrontFace(GL_CW); + glutSolidTeapot(40.0); + glFrontFace(GL_CCW); + + glEndList(); + } + + /* show cylinder by default */ + Object = CylinderObj; + + + /* lighting */ + glEnable(GL_LIGHTING); + { + GLfloat pos[4] = { 3, 3, 3, 1 }; + glLightfv(GL_LIGHT0, GL_AMBIENT, Black); + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); + glLightfv(GL_LIGHT0, GL_SPECULAR, White); + glLightfv(GL_LIGHT0, GL_POSITION, pos); + glEnable(GL_LIGHT0); + glMaterialfv(GL_FRONT, GL_AMBIENT, Black); + glMaterialf(GL_FRONT, GL_SHININESS, Shininess); + glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); + } + + /* Base texture */ + glGenTextures(1, &BaseTexture); + glBindTexture(GL_TEXTURE_2D, BaseTexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + if (!LoadRGBMipmaps(BASE_TEXTURE_FILE, GL_RGB)) { + printf("Error: couldn't load texture image file %s\n", BASE_TEXTURE_FILE); + exit(1); + } + + /* Specular texture */ + glGenTextures(1, &SpecularTexture); + glBindTexture(GL_TEXTURE_2D, SpecularTexture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + if (convolve) { + /* use convolution to blur the texture to simulate a dull finish + * on the object. + */ + GLubyte *img; + GLenum format; + GLint w, h; + GLfloat filter[FILTER_SIZE][FILTER_SIZE][4]; + + for (h = 0; h < FILTER_SIZE; h++) { + for (w = 0; w < FILTER_SIZE; w++) { + const GLfloat k = 1.0 / (FILTER_SIZE * FILTER_SIZE); + filter[h][w][0] = k; + filter[h][w][1] = k; + filter[h][w][2] = k; + filter[h][w][3] = k; + } + } + + glEnable(GL_CONVOLUTION_2D); + glConvolutionParameteri(GL_CONVOLUTION_2D, + GL_CONVOLUTION_BORDER_MODE, GL_CONSTANT_BORDER); + glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGBA, + FILTER_SIZE, FILTER_SIZE, + GL_RGBA, GL_FLOAT, filter); + + img = LoadRGBImage(SPECULAR_TEXTURE_FILE, &w, &h, &format); + if (!img) { + printf("Error: couldn't load texture image file %s\n", + SPECULAR_TEXTURE_FILE); + exit(1); + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, + format, GL_UNSIGNED_BYTE, img); + free(img); + } + else { + /* regular path */ + if (!LoadRGBMipmaps(SPECULAR_TEXTURE_FILE, GL_RGB)) { + printf("Error: couldn't load texture image file %s\n", + SPECULAR_TEXTURE_FILE); + exit(1); + } + } + + /* misc */ + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + + glPolygonOffset( -1, -1 ); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition(0, 0); + glutInitWindowSize( 500, 500 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + + glutCreateWindow(argv[0] ); + + Init(argc, argv); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutCreateMenu(ModeMenu); + glutAddMenuEntry("Toggle Highlight", DO_SPEC_TEXTURE); + glutAddMenuEntry("Toggle Object", OBJECT); + glutAddMenuEntry("Toggle Animate", ANIMATE); + glutAddMenuEntry("Quit", QUIT); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/gltestperf.c b/progs/demos/gltestperf.c new file mode 100644 index 000000000..be9539010 --- /dev/null +++ b/progs/demos/gltestperf.c @@ -0,0 +1,580 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <math.h> +#include <GL/glut.h> + +typedef struct +{ + char *name; + char *unit; + void (*init) (void); + int (*run) (int, int); + int type; + int numsize; + int size[10]; +} +benchmark; + +static int frontbuffer = 1; + +/***************************************************************************/ + +static void +init_test01(void) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluOrtho2D(-0.5, 639.5, -0.5, 479.5); + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_FLAT); + glDisable(GL_DEPTH_TEST); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + glColor3f(1.0, 0.0, 0.0); +} + +static int +test01(int size, int num) +{ + int x, y; + + glBegin(GL_POINTS); + for (y = 0; y < num; y++) + for (x = 0; x < 480; x++) + glVertex2i(x, x); + glEnd(); + + return 480 * num; +} + +/***************************************************************************/ + +static void +init_test02(void) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluOrtho2D(-0.5, 639.5, -0.5, 479.5); + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glDisable(GL_DEPTH_TEST); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); +} + +static int +test02(int size, int num) +{ + int x, y; + + glBegin(GL_LINES); + for (y = 0; y < num; y++) + for (x = 0; x < size; x++) { + glColor3f(0.0, 1.0, y / (float) num); + glVertex2i(0, size - 1); + glColor3f(1.0, 0.0, x / (float) size); + glVertex2i(x, x); + } + glEnd(); + + return num * size; +} + +/***************************************************************************/ + +static void +init_test03(void) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, 1.0, -1000.0 * 480.0); + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +static int +test03(int size, int num) +{ + int x, y, z; + + glBegin(GL_TRIANGLES); + for (y = 0; y < num; y++) + for (x = 0; x < size; x += 5) { + z = num * size - (y * size + x); + glColor3f(0.0, 1.0, 0.0); + glVertex3i(0, x, z); + + glColor3f(1.0, 0.0, x / (float) size); + glVertex3i(size - 1 - x, 0, z); + + glColor3f(1.0, x / (float) size, 0.0); + glVertex3i(x, size - 1 - x, z); + } + glEnd(); + + return size * num / 5; +} + +/***************************************************************************/ + +static void +init_test04(void) +{ + int x, y; + GLubyte tex[128 * 128 * 3]; + GLenum gluerr; + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, 1.0, -1000.0 * 480.0); + + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + for (y = 0; y < 128; y++) + for (x = 0; x < 128; x++) { + tex[(x + y * 128) * 3 + 0] = ((x % (128 / 4)) < (128 / 8)) ? 255 : 0; + tex[(x + y * 128) * 3 + 1] = ((y % (128 / 4)) < (128 / 8)) ? 255 : 0; + tex[(x + y * 128) * 3 + 2] = x; + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if ((gluerr = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 128, 128, GL_RGB, + GL_UNSIGNED_BYTE, (GLvoid *) (&tex[0])))) { + fprintf(stderr, "GLULib%s\n", (char *) gluErrorString(gluerr)); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_TEXTURE_2D); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +static int +test04(int size, int num) +{ + int x, y, z; + + glBegin(GL_TRIANGLES); + for (y = 0; y < num; y++) + for (x = 0; x < size; x += 5) { + z = num * size - (y * size + x); + glTexCoord2f(1.0, 1.0); + glColor3f(1.0, 0.0, 0.0); + glVertex3i(0, x, z); + + glTexCoord2f(0.0, 1.0); + glColor3f(0.0, 1.0, 0.0); + glVertex3i(size - 1 - x, 0, z); + + glTexCoord2f(1.0, 0.0); + glColor3f(0.0, 0.0, 1.0); + glVertex3i(x, size - 1 - x, z); + } + glEnd(); + + return num * size / 5; +} + +/***************************************************************************/ + +static void +init_test05(void) +{ + int x, y; + GLubyte tex[128 * 128 * 3]; + GLenum gluerr; + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + for (y = 0; y < 128; y++) + for (x = 0; x < 128; x++) { + tex[(x + y * 128) * 3 + 0] = ((x % (128 / 4)) < (128 / 8)) ? 255 : 0; + tex[(x + y * 128) * 3 + 1] = ((y % (128 / 4)) < (128 / 8)) ? 255 : 0; + tex[(x + y * 128) * 3 + 2] = x; + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if ((gluerr = gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 128, 128, GL_RGB, + GL_UNSIGNED_BYTE, (GLvoid *) (&tex[0])))) { + fprintf(stderr, "GLULib%s\n", (char *) gluErrorString(gluerr)); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_TEXTURE_2D); + + glDepthFunc(GL_ALWAYS); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +static int +test05(int size, int num) +{ + int y; + float v0[3], v1[3], v2[3], v3[3]; + float cv0[3], cv1[3], cv2[3], cv3[3]; + float tv0[3], tv1[3], tv2[3], tv3[3]; + + v0[0] = 320 - size / 2; + v0[1] = 240 - size / 2; + v0[2] = 0.0; + v1[0] = 320 + size / 2; + v1[1] = 240 - size / 2; + v1[2] = 0.0; + v2[0] = 320 - size / 2; + v2[1] = 240 + size / 2; + v2[2] = 0.0; + v3[0] = 320 + size / 2; + v3[1] = 240 + size / 2; + v3[2] = 0.0; + cv0[0] = 1.0; + cv0[1] = 0.0; + cv0[2] = 0.0; + cv1[0] = 1.0; + cv1[1] = 1.0; + cv1[2] = 0.0; + cv2[0] = 1.0; + cv2[1] = 0.0; + cv2[2] = 1.0; + cv3[0] = 1.0; + cv3[1] = 1.0; + cv3[2] = 1.0; + tv0[0] = 0.0; + tv0[1] = 0.0; + tv0[2] = 0.0; + tv1[0] = 1.0; + tv1[1] = 0.0; + tv1[2] = 0.0; + tv2[0] = 0.0; + tv2[1] = 1.0; + tv2[2] = 0.0; + tv3[0] = 1.0; + tv3[1] = 1.0; + tv3[2] = 0.0; + + glBegin(GL_TRIANGLE_STRIP); + for (y = 0; y < num; y++) { + glColor3fv(cv0); + glTexCoord2fv(tv0); + glVertex3fv(v0); + + glColor3fv(cv1); + glTexCoord2fv(tv1); + glVertex3fv(v1); + + glColor3fv(cv2); + glTexCoord2fv(tv2); + glVertex3fv(v2); + + glColor3fv(cv3); + glTexCoord2fv(tv3); + glVertex3fv(v3); + } + glEnd(); + + return 4 * num - 2; +} + +/***************************************************************************/ + +static void +init_test06(void) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluOrtho2D(-0.5, 639.5, -0.5, 479.5); + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + glClearColor(0.0, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +static int +test06(int size, int num) +{ + int y; + + for (y = 0; y < num; y++) { + glClearColor(y / (float) num, 0.1, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + } + + return num; +} + +/***************************************************************************/ + +#define BMARKS_TIME 5.0 + +#define NUM_BMARKS 6 + +/* 554 ~= sqrt(640*480) */ + +static benchmark bmarks[NUM_BMARKS] = { + {"Simple Points", "Pnts", init_test01, test01, 0, 0, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + {"Smooth Lines", "Lins", init_test02, test02, 1, 5, + {480, 250, 100, 50, 25, 0, 0, 0, 0, 0}}, + {"ZSmooth Triangles", "Tris", init_test03, test03, 1, 5, + {480, 250, 100, 50, 25, 0, 0, 0, 0, 0}}, + {"ZSmooth Tex Blend Triangles", "Tris", init_test04, test04, 1, 5, + {480, 250, 100, 50, 25, 0, 0, 0, 0, 0}}, + {"ZSmooth Tex Blend TMesh Triangles", "Tris", init_test05, test05, 2, 8, + {400, 250, 100, 50, 25, 10, 5, 2, 0, 0}}, + {"Color/Depth Buffer Clears", "Clrs", init_test06, test06, 3, 0, + {554, 0, 0, 0, 0, 0, 0, 0, 0, 0}} +}; + +/***************************************************************************/ + +static void +dotest0param(benchmark * bmark) +{ + float stime, etime, dtime, tottime, maxtime, mintime; + int num, numelem, calibnum, j; + + glPushAttrib(GL_ALL_ATTRIB_BITS); + bmark->init(); + + stime = glutGet(GLUT_ELAPSED_TIME); + + dtime = 0.0; + calibnum = 0; + while (dtime < 2.0) { + bmark->run(0, 1); + glFinish(); + etime = glutGet(GLUT_ELAPSED_TIME); + dtime = (etime - stime) / 1000.0; + calibnum++; + } + glPopAttrib(); + + fprintf(stderr, "Elapsed time for the calibration test (%d): %f\n", + calibnum, dtime); + + num = (int) ((BMARKS_TIME / dtime) * calibnum); + + if (num < 1) + num = 1; + + fprintf(stderr, "Selected number of benchmark iterations: %d\n", num); + + mintime = HUGE_VAL; + maxtime = -HUGE_VAL; + + for (tottime = 0.0, j = 0; j < 5; j++) { + glPushAttrib(GL_ALL_ATTRIB_BITS); + bmark->init(); + + stime = glutGet(GLUT_ELAPSED_TIME); + numelem = bmark->run(0, num); + glFinish(); + etime = glutGet(GLUT_ELAPSED_TIME); + + glPopAttrib(); + + dtime = (etime - stime) / 1000.0; + tottime += dtime; + + fprintf(stderr, "Elapsed time for run %d: %f\n", j, dtime); + + if (dtime < mintime) + mintime = dtime; + if (dtime > maxtime) + maxtime = dtime; + } + + tottime -= mintime + maxtime; + + fprintf(stdout, "%s\n%f %s/sec", bmark->name, numelem / (tottime / 3.0), + bmark->unit); + + if (bmark->type == 3) + fprintf(stdout, ", MPixel Fill/sec: %f\n\n", + (numelem * bmark->size[0] * (float) bmark->size[0]) / + (1000000.0 * tottime / 3.0)); + else + fprintf(stdout, "\n\n"); +} + +/***************************************************************************/ + +static void +dotest1param(benchmark * bmark) +{ + float stime, etime, dtime, tottime, maxtime, mintime; + int num, numelem, calibnum, j, k; + + fprintf(stdout, "%s\n", bmark->name); + + for (j = 0; j < bmark->numsize; j++) { + fprintf(stderr, "Current size: %d\n", bmark->size[j]); + + glPushAttrib(GL_ALL_ATTRIB_BITS); + bmark->init(); + + stime = glutGet(GLUT_ELAPSED_TIME); + + dtime = 0.0; + calibnum = 0; + while (dtime < 2.0) { + bmark->run(bmark->size[j], 1); + glFinish(); + etime = glutGet(GLUT_ELAPSED_TIME); + dtime = (etime - stime) / 1000.0; + calibnum++; + } + glPopAttrib(); + + fprintf(stderr, "Elapsed time for the calibration test (%d): %f\n", + calibnum, dtime); + + num = (int) ((BMARKS_TIME / dtime) * calibnum); + + if (num < 1) + num = 1; + + fprintf(stderr, "Selected number of benchmark iterations: %d\n", num); + + mintime = HUGE_VAL; + maxtime = -HUGE_VAL; + + for (numelem = 1, tottime = 0.0, k = 0; k < 5; k++) { + glPushAttrib(GL_ALL_ATTRIB_BITS); + bmark->init(); + + stime = glutGet(GLUT_ELAPSED_TIME); + numelem = bmark->run(bmark->size[j], num); + glFinish(); + etime = glutGet(GLUT_ELAPSED_TIME); + + glPopAttrib(); + + dtime = (etime - stime) / 1000.0; + tottime += dtime; + + fprintf(stderr, "Elapsed time for run %d: %f\n", k, dtime); + + if (dtime < mintime) + mintime = dtime; + if (dtime > maxtime) + maxtime = dtime; + } + + tottime -= mintime + maxtime; + + fprintf(stdout, "SIZE=%03d => %f %s/sec", bmark->size[j], + numelem / (tottime / 3.0), bmark->unit); + if (bmark->type == 2) + fprintf(stdout, ", MPixel Fill/sec: %f\n", + (numelem * bmark->size[j] * bmark->size[j] / 2) / + (1000000.0 * tottime / 3.0)); + else + fprintf(stdout, "\n"); + } + + fprintf(stdout, "\n\n"); +} + +/***************************************************************************/ + +static void +display(void) +{ + int i; + + if (frontbuffer) + glDrawBuffer(GL_FRONT); + else + glDrawBuffer(GL_BACK); + + for (i = 0; i < NUM_BMARKS; i++) { + fprintf(stderr, "Benchmark: %d\n", i); + + switch (bmarks[i].type) { + case 0: + case 3: + dotest0param(&bmarks[i]); + break; + case 1: + case 2: + dotest1param(&bmarks[i]); + break; + } + } + + exit(0); +} + +int +main(int ac, char **av) +{ + fprintf(stderr, "GLTest v1.0\nWritten by David Bucciarelli\n"); + + if (ac == 2) + frontbuffer = 0; + + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); + glutInitWindowPosition(0, 0); + glutInitWindowSize(640, 480); + glutCreateWindow("OpenGL/Mesa Performances"); + glutDisplayFunc(display); + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/glutfx.c b/progs/demos/glutfx.c new file mode 100644 index 000000000..8bf558238 --- /dev/null +++ b/progs/demos/glutfx.c @@ -0,0 +1,189 @@ + +/* + * Example of how one might use GLUT with the 3Dfx driver in full-screen mode. + * Note: this only works with X since we're using Mesa's GLX "hack" for + * using Glide. + * + * Goals: + * easy setup and input event handling with GLUT + * use 3Dfx hardware + * automatically set MESA environment variables + * don't lose mouse input focus + * + * Brian Paul This file is in the public domain. + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + + +#define WIDTH 640 +#define HEIGHT 480 + + +static int Window = 0; +static int ScreenWidth, ScreenHeight; +static GLuint Torus = 0; +static GLfloat Xrot = 0.0, Yrot = 0.0; + + + +static void Display( void ) +{ + static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0}; + static GLfloat red[4] = {1.0, 0.2, 0.2, 1.0}; + static GLfloat green[4] = {0.2, 1.0, 0.2, 1.0}; + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glPushMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue); + glCallList(Torus); + + glRotatef(90.0, 1, 0, 0); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, red); + glCallList(Torus); + + glRotatef(90.0, 0, 1, 0); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green); + glCallList(Torus); + + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + float ratio = (float) width / (float) height; + + ScreenWidth = width; + ScreenHeight = height; + + /* + * The 3Dfx driver is limited to 640 x 480 but the X window may be larger. + * Enforce that here. + */ + if (width > WIDTH) + width = WIDTH; + if (height > HEIGHT) + height = HEIGHT; + + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -ratio, ratio, -1.0, 1.0, 5.0, 30.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -20.0 ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + glutDestroyWindow(Window); + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + break; + case GLUT_KEY_DOWN: + break; + case GLUT_KEY_LEFT: + break; + case GLUT_KEY_RIGHT: + break; + } + glutPostRedisplay(); +} + + +static void MouseMove( int x, int y ) +{ + Xrot = y - ScreenWidth / 2; + Yrot = x - ScreenHeight / 2; + glutPostRedisplay(); +} + + +static void Init( void ) +{ + Torus = glGenLists(1); + glNewList(Torus, GL_COMPILE); + glutSolidTorus(0.5, 2.0, 10, 20); + glEndList(); + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); +} + + +int main( int argc, char *argv[] ) +{ +#ifndef _WIN32 + printf("NOTE: if you've got 3Dfx VooDoo hardware you must run this"); + printf(" program as root.\n\n"); + printf("Move the mouse. Press ESC to exit.\n\n"); +#endif + + /* Tell Mesa GLX to use 3Dfx driver in fullscreen mode. */ + putenv("MESA_GLX_FX=fullscreen"); + + /* Disable 3Dfx Glide splash screen */ + putenv("FX_GLIDE_NO_SPLASH="); + + /* Give an initial size and position so user doesn't have to place window */ + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit( &argc, argv ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + + Window = glutCreateWindow(argv[0]); + if (!Window) { + printf("Error, couldn't open window\n"); + exit(1); + } + + /* + * Want the X window to fill the screen so that we don't have to + * worry about losing the mouse input focus. + * Note that we won't actually see the X window since we never draw + * to it, hence, the original X screen's contents aren't disturbed. + */ + glutFullScreen(); + + Init(); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + glutPassiveMotionFunc( MouseMove ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/ipers.c b/progs/demos/ipers.c new file mode 100644 index 000000000..6e153c04e --- /dev/null +++ b/progs/demos/ipers.c @@ -0,0 +1,712 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#if defined (WIN32)|| defined(_WIN32) +#include <windows.h> +#include <mmsystem.h> +#endif + +#include <GL/glut.h> + +#include "readtex.h" + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +static int WIDTH = 640; +static int HEIGHT = 480; + +static GLint T0; +static GLint Frames; + +#define MAX_LOD 9 + +#define TEX_SKY_WIDTH 256 +#define TEX_SKY_HEIGHT TEX_SKY_WIDTH + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +#define FROM_NONE 0 +#define FROM_DOWN 1 +#define FROM_UP 2 +#define FROM_LEFT 3 +#define FROM_RIGHT 4 +#define FROM_FRONT 5 +#define FROM_BACK 6 + +static int win = 0; + +static float obs[3] = { 3.8, 0.0, 0.0 }; +static float dir[3]; +static float v = 0.0; +static float alpha = -90.0; +static float beta = 90.0; + +static int fog = 1; +static int bfcull = 1; +static int usetex = 1; +static int help = 1; +static int poutline = 0; +static int normext = 1; +static int joyavailable = 0; +static int joyactive = 0; +static int LODbias = 3; +static int maxdepth = MAX_LOD; + +static unsigned int totpoly = 0; + +static GLuint t1id, t2id; +static GLuint skydlist, LODdlist[MAX_LOD], LODnumpoly[MAX_LOD]; + +static void +initlight(void) +{ + GLfloat lspec[4] = { 1.0, 1.0, 1.0, 1.0 }; + static GLfloat lightpos[4] = { 30, 15.0, 30.0, 1.0 }; + + glLightfv(GL_LIGHT0, GL_POSITION, lightpos); + glLightfv(GL_LIGHT0, GL_SPECULAR, lspec); + + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 32.0); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, lspec); +} + +static void +initdlists(void) +{ + static int slicetable[MAX_LOD][2] = { + {21, 10}, + {18, 9}, + {15, 8}, + {12, 7}, + {9, 6}, + {7, 5}, + {5, 4}, + {4, 3}, + {3, 2} + }; + GLUquadricObj *obj; + int i, xslices, yslices; + + obj = gluNewQuadric(); + + skydlist = glGenLists(1); + glNewList(skydlist, GL_COMPILE); + glBindTexture(GL_TEXTURE_2D, t2id); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glColor3f(1.0f, 1.0f, 1.0f); + + gluQuadricDrawStyle(obj, GLU_FILL); + gluQuadricNormals(obj, GLU_NONE); + gluQuadricTexture(obj, GL_TRUE); + gluQuadricOrientation(obj, GLU_INSIDE); + gluSphere(obj, 40.0f, 18, 9); + + glEndList(); + + for (i = 0; i < MAX_LOD; i++) { + LODdlist[i] = glGenLists(1); + glNewList(LODdlist[i], GL_COMPILE); + + gluQuadricDrawStyle(obj, GLU_FILL); + gluQuadricNormals(obj, GLU_SMOOTH); + gluQuadricTexture(obj, GL_TRUE); + gluQuadricOrientation(obj, GLU_OUTSIDE); + xslices = slicetable[i][0]; + yslices = slicetable[i][1]; + gluSphere(obj, 1.0f, xslices, yslices); + LODnumpoly[i] = xslices * (yslices - 2) + 2 * (xslices - 1); + + glEndList(); + } +} + +static void +inittextures(void) +{ + GLubyte tsky[TEX_SKY_HEIGHT][TEX_SKY_WIDTH][3]; + GLuint x, y; + GLfloat fact; + GLenum gluerr; + + /* Brick */ + + glGenTextures(1, &t1id); + glBindTexture(GL_TEXTURE_2D, t1id); + + if (!LoadRGBMipmaps("../images/bw.rgb", 3)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + /* Sky */ + + glGenTextures(1, &t2id); + glBindTexture(GL_TEXTURE_2D, t2id); + + for (y = 0; y < TEX_SKY_HEIGHT; y++) + for (x = 0; x < TEX_SKY_WIDTH; x++) + if (y < TEX_SKY_HEIGHT / 2) { + fact = y / (GLfloat) (TEX_SKY_HEIGHT / 2); + tsky[y][x][0] = + (GLubyte) (255.0f * (0.1f * fact + 0.3f * (1.0f - fact))); + tsky[y][x][1] = + (GLubyte) (255.0f * (0.2f * fact + 1.0f * (1.0f - fact))); + tsky[y][x][2] = 255; + } + else { + tsky[y][x][0] = tsky[TEX_SKY_HEIGHT - y - 1][x][0]; + tsky[y][x][1] = tsky[TEX_SKY_HEIGHT - y - 1][x][1]; + tsky[y][x][2] = 255; + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if ( + (gluerr = + gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TEX_SKY_WIDTH, TEX_SKY_HEIGHT, + GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) (tsky)))) { + fprintf(stderr, "GLULib%s\n", (char *) gluErrorString(gluerr)); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); +} + +static void +calcposobs(void) +{ + dir[0] = sin(alpha * M_PI / 180.0); + dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[2] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + obs[0] += v * dir[0]; + obs[1] += v * dir[1]; + obs[2] += v * dir[2]; +} + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_LEFT: + alpha -= 2.0; + break; + case GLUT_KEY_RIGHT: + alpha += 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } +} + +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: + exit(0); + break; + + case 'a': + v += 0.01; + break; + case 'z': + v -= 0.01; + break; + +#ifdef XMESA + case ' ': + fullscreen = (!fullscreen); + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + break; +#endif + + case '+': + LODbias--; + break; + case '-': + LODbias++; + break; + case 'j': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + case 't': + usetex = (!usetex); + break; + case 'n': + normext = (!normext); + break; + case 'b': + if (bfcull) { + glDisable(GL_CULL_FACE); + bfcull = 0; + } + else { + glEnable(GL_CULL_FACE); + bfcull = 1; + } + break; + case 'p': + if (poutline) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + poutline = 0; + usetex = 1; + } + else { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + poutline = 1; + usetex = 0; + } + break; + } +} + +static void +reshape(int w, int h) +{ + WIDTH = w; + HEIGHT = h; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(90.0, w / (float) h, 0.8, 100.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glViewport(0, 0, w, h); +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +printhelp(void) +{ + glEnable(GL_BLEND); + glColor4f(0.5, 0.5, 0.5, 0.5); + glRecti(40, 40, 600, 440); + glDisable(GL_BLEND); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help"); + glRasterPos2i(60, 360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog"); + glRasterPos2i(60, 300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate"); + glRasterPos2i(60, 240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "a - Increase velocity"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "z - Decrease velocity"); + glRasterPos2i(60, 180); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "p - Toggle Wire frame"); + glRasterPos2i(60, 150); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "n - Toggle GL_EXT_rescale_normal extension"); + glRasterPos2i(60, 120); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "+/- - Increase/decrease the Object maximum LOD"); + + glRasterPos2i(60, 90); + if (joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "(No Joystick control available)"); +} + +static void +dojoy(void) +{ +#ifdef _WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha -= + 2.0 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.0 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.01; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.01; + } + } + else + joyavailable = 0; +#endif +} + +static void +drawipers(int depth, int from) +{ + int lod; + + if (depth == maxdepth) + return; + + lod = depth + LODbias; + if (lod < 0) + lod = 0; + if (lod >= MAX_LOD) + return; + + switch (from) { + case FROM_NONE: + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_UP); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_LEFT); + drawipers(depth, FROM_RIGHT); + break; + case FROM_FRONT: + glPushMatrix(); + glTranslatef(0.0f, -1.5f, 0.0f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_UP); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_LEFT); + drawipers(depth, FROM_RIGHT); + glPopMatrix(); + break; + case FROM_BACK: + glPushMatrix(); + glTranslatef(0.0f, 1.5f, 0.0f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_UP); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_LEFT); + drawipers(depth, FROM_RIGHT); + glPopMatrix(); + break; + case FROM_LEFT: + glPushMatrix(); + glTranslatef(-1.5f, 0.0f, 0.0f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_UP); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_LEFT); + glPopMatrix(); + break; + case FROM_RIGHT: + glPushMatrix(); + glTranslatef(1.5f, 0.0f, 0.0f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_UP); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_RIGHT); + glPopMatrix(); + break; + case FROM_DOWN: + glPushMatrix(); + glTranslatef(0.0f, 0.0f, 1.5f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_DOWN); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_LEFT); + drawipers(depth, FROM_RIGHT); + glPopMatrix(); + break; + case FROM_UP: + glPushMatrix(); + glTranslatef(0.0f, 0.0f, -1.5f); + glScalef(0.5f, 0.5f, 0.5f); + + glCallList(LODdlist[lod]); + + depth++; + drawipers(depth, FROM_UP); + drawipers(depth, FROM_FRONT); + drawipers(depth, FROM_BACK); + drawipers(depth, FROM_LEFT); + drawipers(depth, FROM_RIGHT); + glPopMatrix(); + break; + } + + totpoly += LODnumpoly[lod]; +} + +static void +draw(void) +{ + static char frbuf[80] = ""; + static GLfloat alpha = 0.0f; + static GLfloat beta = 0.0f; + static float fr = 0.0; + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + dojoy(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + if (usetex) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glPushMatrix(); + calcposobs(); + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 0.0, 1.0); + + /* Scene */ + glEnable(GL_DEPTH_TEST); + + glShadeModel(GL_SMOOTH); + glBindTexture(GL_TEXTURE_2D, t1id); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glColor3f(1.0f, 1.0f, 1.0f); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHTING); + + if (normext) + glEnable(GL_RESCALE_NORMAL_EXT); + else + glEnable(GL_NORMALIZE); + + glPushMatrix(); + glRotatef(alpha, 0.0f, 0.0f, 1.0f); + glRotatef(beta, 1.0f, 0.0f, 0.0f); + totpoly = 0; + drawipers(0, FROM_NONE); + glPopMatrix(); + + alpha += 4.f * dt; + beta += 2.4f * dt; + + glDisable(GL_LIGHTING); + glDisable(GL_LIGHT0); + glShadeModel(GL_FLAT); + + if (normext) + glDisable(GL_RESCALE_NORMAL_EXT); + else + glDisable(GL_NORMALIZE); + + glCallList(skydlist); + + glPopMatrix(); + + /* Help Screen */ + + sprintf(frbuf, + "Frame rate: %0.2f LOD: %d Tot. poly.: %d Poly/sec: %.1f", + fr, LODbias, totpoly, totpoly * fr); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_FOG); + glShadeModel(GL_FLAT); + glDisable(GL_DEPTH_TEST); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(350, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "IperS V1.0 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if (help) + printhelp(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + glutSwapBuffers(); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + fr = Frames / seconds; + T0 = t; + Frames = 0; + } + } +} + +int +main(int ac, char **av) +{ + float fogcolor[4] = { 0.7, 0.7, 0.7, 1.0 }; + + fprintf(stderr, + "IperS V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); + + if (!(win = glutCreateWindow("IperS"))) { + fprintf(stderr, "Error, couldn't open window\n"); + exit(-1); + } + + reshape(WIDTH, HEIGHT); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogfv(GL_FOG_COLOR, fogcolor); + + glFogf(GL_FOG_DENSITY, 0.006); + + glHint(GL_FOG_HINT, GL_NICEST); + + inittextures(); + initdlists(); + initlight(); + + glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], fogcolor[3]); + glClear(GL_COLOR_BUFFER_BIT); + + calcposobs(); + + glutReshapeFunc(reshape); + glutDisplayFunc(draw); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutIdleFunc(draw); + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/isosurf.c b/progs/demos/isosurf.c new file mode 100644 index 000000000..0710bc604 --- /dev/null +++ b/progs/demos/isosurf.c @@ -0,0 +1,1125 @@ + +/* + * Display an isosurface of 3-D wind speed volume. + * + * Command line options: + * -info print GL implementation information + * + * Brian Paul This file in public domain. + */ + + +/* Keys: + * ===== + * + * - Arrow keys to rotate + * - 's' toggles smooth shading + * - 'l' toggles lighting + * - 'f' toggles fog + * - 'I' and 'i' zoom in and out + * - 'c' toggles a user clip plane + * - 'm' toggles colorful materials in GL_TRIANGLES modes. + * - '+' and '-' move the user clip plane + * + * Other options are available via the popup menu. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#ifdef _WIN32 +#include <windows.h> +#undef CLIP_MASK +#endif +#define GL_GLEXT_PROTOTYPES +#include "GL/glut.h" + +#include "readtex.h" +#define TEXTURE_FILE "../images/reflect.rgb" + +#define LIT 0x00000001 +#define UNLIT 0x00000002 +#define REFLECT 0x00000004 +#define POINT_FILTER 0x00000008 +#define LINEAR_FILTER 0x00000010 +#define GLVERTEX 0x00000020 +#define DRAW_ELTS 0x00000040 +#define DRAW_ARRAYS 0x00000080 +#define ARRAY_ELT 0x00000100 +#define LOCKED 0x00000200 +#define UNLOCKED 0x00000400 +#define IMMEDIATE 0x00000800 +#define DISPLAYLIST 0x00001000 +#define SHADE_SMOOTH 0x00002000 +#define SHADE_FLAT 0x00004000 +#define TRIANGLES 0x00008000 +#define STRIPS 0x00010000 +#define POINTS 0x00020000 +#define USER_CLIP 0x00040000 +#define NO_USER_CLIP 0x00080000 +#define MATERIALS 0x00100000 +#define NO_MATERIALS 0x00200000 +#define FOG 0x00400000 +#define NO_FOG 0x00800000 +#define QUIT 0x01000000 +#define GLINFO 0x02000000 +#define STIPPLE 0x04000000 +#define NO_STIPPLE 0x08000000 +#define POLYGON_FILL 0x10000000 +#define POLYGON_LINE 0x20000000 + +#define LIGHT_MASK (LIT|UNLIT|REFLECT) +#define FILTER_MASK (POINT_FILTER|LINEAR_FILTER) +#define RENDER_STYLE_MASK (GLVERTEX|DRAW_ARRAYS|DRAW_ELTS|ARRAY_ELT) +#define DLIST_MASK (IMMEDIATE|DISPLAYLIST) +#define LOCK_MASK (LOCKED|UNLOCKED) +#define MATERIAL_MASK (MATERIALS|NO_MATERIALS) +#define PRIMITIVE_MASK (TRIANGLES|STRIPS|POINTS) +#define CLIP_MASK (USER_CLIP|NO_USER_CLIP) +#define SHADE_MASK (SHADE_SMOOTH|SHADE_FLAT) +#define FOG_MASK (FOG|NO_FOG) +#define STIPPLE_MASK (STIPPLE|NO_STIPPLE) +#define POLYGON_MASK (POLYGON_FILL|POLYGON_LINE) + +#define MAXVERTS 10000 +static GLint maxverts = MAXVERTS; +static float data[MAXVERTS][6]; +static float compressed_data[MAXVERTS][6]; +static float expanded_data[MAXVERTS*3][6]; +static GLuint indices[MAXVERTS]; +static GLuint tri_indices[MAXVERTS*3]; +static GLuint strip_indices[MAXVERTS]; +static GLfloat col[100][4]; +static GLint numverts, num_tri_verts, numuniq; + +static GLfloat xrot; +static GLfloat yrot; +static GLfloat dist; +static GLint state, allowed = ~0; +static GLboolean doubleBuffer = GL_TRUE; +static GLdouble plane[4]; +static GLuint surf1, dlist_state; + +static GLboolean PrintInfo = GL_FALSE; + + +static GLubyte halftone[] = { + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, + 0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55, + 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55}; + + +static void read_surface( char *filename ) +{ + FILE *f; + + f = fopen(filename,"r"); + if (!f) { + printf("couldn't read %s\n", filename); + exit(1); + } + + numverts = 0; + while (!feof(f) && numverts<maxverts) { + fscanf( f, "%f %f %f %f %f %f", + &data[numverts][0], &data[numverts][1], &data[numverts][2], + &data[numverts][3], &data[numverts][4], &data[numverts][5] ); + numverts++; + } + numverts--; + + printf("%d vertices, %d triangles\n", numverts, numverts-2); + fclose(f); +} + + + +static void print_flags( const char *msg, GLuint flags ) +{ + fprintf(stderr, + "%s (0x%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + msg, flags, + (flags & GLVERTEX) ? "glVertex, " : "", + (flags & DRAW_ARRAYS) ? "glDrawArrays, " : "", + (flags & DRAW_ELTS) ? "glDrawElements, " : "", + (flags & ARRAY_ELT) ? "glArrayElement, " : "", + (flags & LOCKED) ? "locked arrays, " : "", + (flags & TRIANGLES) ? "GL_TRIANGLES, " : "", + (flags & STRIPS) ? "GL_TRIANGLE_STRIP, " : "", + (flags & POINTS) ? "GL_POINTS, " : "", + (flags & DISPLAYLIST) ? "as a displaylist, " : "", + (flags & LIT) ? "lit, " : "", + (flags & UNLIT) ? "unlit, " : "", + (flags & REFLECT) ? "reflect, " : "", + (flags & SHADE_FLAT) ? "flat-shaded, " : "", + (flags & USER_CLIP) ? "user_clip, " : "", + (flags & MATERIALS) ? "materials, " : "", + (flags & FOG) ? "fog, " : "", + (flags & STIPPLE) ? "stipple, " : "", + (flags & POLYGON_LINE) ? "polygon mode line, " : ""); +} + + + +struct data_idx { + float *data; + int idx; + int uniq_idx; +}; + + +#define COMPARE_FUNC( AXIS ) \ +static int compare_axis_##AXIS( const void *a, const void *b ) \ +{ \ + float t = ( (*(struct data_idx *)a).data[AXIS] - \ + (*(struct data_idx *)b).data[AXIS] ); \ + \ + if (t < 0) return -1; \ + if (t > 0) return 1; \ + return 0; \ +} + +COMPARE_FUNC(0) +COMPARE_FUNC(1) +COMPARE_FUNC(2) +COMPARE_FUNC(3) +COMPARE_FUNC(4) +COMPARE_FUNC(5) +COMPARE_FUNC(6) + +int (*(compare[7]))( const void *a, const void *b ) = +{ + compare_axis_0, + compare_axis_1, + compare_axis_2, + compare_axis_3, + compare_axis_4, + compare_axis_5, + compare_axis_6, +}; + + +#define VEC_ELT(f, s, i) (float *)(((char *)f) + s * i) + +static int sort_axis( int axis, + int vec_size, + int vec_stride, + struct data_idx *indices, + int start, + int finish, + float *out, + int uniq, + const float fudge ) +{ + int i; + + if (finish-start > 2) + { + qsort( indices+start, finish-start, sizeof(*indices), compare[axis] ); + } + else if (indices[start].data[axis] > indices[start+1].data[axis]) + { + struct data_idx tmp = indices[start]; + indices[start] = indices[start+1]; + indices[start+1] = tmp; + } + + if (axis == vec_size-1) { + for (i = start ; i < finish ; ) { + float max = indices[i].data[axis] + fudge; + float *dest = VEC_ELT(out, vec_stride, uniq); + int j; + + for (j = 0 ; j < vec_size ; j++) + dest[j] = indices[i].data[j]; + + for ( ; i < finish && max >= indices[i].data[axis]; i++) + indices[i].uniq_idx = uniq; + + uniq++; + } + } else { + for (i = start ; i < finish ; ) { + int j = i + 1; + float max = indices[i].data[axis] + fudge; + while (j < finish && max >= indices[j].data[axis]) j++; + if (j == i+1) { + float *dest = VEC_ELT(out, vec_stride, uniq); + int k; + + indices[i].uniq_idx = uniq; + + for (k = 0 ; k < vec_size ; k++) + dest[k] = indices[i].data[k]; + + uniq++; + } else { + uniq = sort_axis( axis+1, vec_size, vec_stride, + indices, i, j, out, uniq, fudge ); + } + i = j; + } + } + + return uniq; +} + + +static void extract_indices1( const struct data_idx *in, unsigned int *out, + int n ) +{ + int i; + for ( i = 0 ; i < n ; i++ ) { + out[in[i].idx] = in[i].uniq_idx; + } +} + + +static void compactify_arrays(void) +{ + int i; + struct data_idx *ind; + + ind = (struct data_idx *) malloc( sizeof(struct data_idx) * numverts ); + + for (i = 0 ; i < numverts ; i++) { + ind[i].idx = i; + ind[i].data = data[i]; + } + + numuniq = sort_axis(0, + sizeof(compressed_data[0])/sizeof(float), + sizeof(compressed_data[0]), + ind, + 0, + numverts, + (float *)compressed_data, + 0, + 1e-6); + + printf("Nr unique vertex/normal pairs: %d\n", numuniq); + + extract_indices1( ind, indices, numverts ); + free( ind ); +} + +static void expand_arrays(void) +{ + int i; + int parity = 0; + for (i = 2 ; i < numverts ; i++, parity ^= 1) { + int v0 = i-2+parity; + int v1 = i-1-parity; + int v2 = i; + memcpy( expanded_data[(i-2)*3+0], data[v0], sizeof(data[0]) ); + memcpy( expanded_data[(i-2)*3+1], data[v1], sizeof(data[0]) ); + memcpy( expanded_data[(i-2)*3+2], data[v2], sizeof(data[0]) ); + } +} + +static float myrand( float max ) +{ + return max*rand()/(RAND_MAX+1.0); +} + + +static void make_tri_indices( void ) +{ + unsigned int *v = tri_indices; + unsigned int parity = 0; + int i, j; + + for (j=2;j<numverts;j++,parity^=1) { + if (parity) { + *v++ = indices[j-1]; + *v++ = indices[j-2]; + *v++ = indices[j]; + } else { + *v++ = indices[j-2]; + *v++ = indices[j-1]; + *v++ = indices[j]; + } + } + + num_tri_verts = v - tri_indices; + printf("num_tri_verts: %d\n", num_tri_verts); + + for (i = j = 0 ; i < num_tri_verts ; i += 600, j++) { + col[j][3] = 1; + col[j][2] = myrand(1); + col[j][1] = myrand(1); + col[j][0] = myrand(1); + } + + for (i = 0; i < numverts ; i++) + strip_indices[i] = i; +} + +#define MIN(x,y) (x < y) ? x : y + +static void draw_surface( unsigned int with_state ) +{ + GLint i, j; + + if (with_state & DISPLAYLIST) { + if ((with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK|MATERIAL_MASK)) != + dlist_state) { + /* + */ + fprintf(stderr, "rebuilding displaylist\n"); + + if (dlist_state) + glDeleteLists( surf1, 1 ); + + dlist_state = with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK| + MATERIAL_MASK); + surf1 = glGenLists(1); + glNewList(surf1, GL_COMPILE); + draw_surface( dlist_state ); + glEndList(); + } + + glCallList( surf1 ); + return; + } + + switch (with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK)) { +#ifdef GL_EXT_vertex_array + + case (DRAW_ELTS|TRIANGLES): + if (with_state & MATERIALS) { + for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) { + GLuint nr = MIN(num_tri_verts-i, 600); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col[j]); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col[j]); + glDrawElements( GL_TRIANGLES, nr, GL_UNSIGNED_INT, tri_indices+i ); + } + } else { + glDrawElements( GL_TRIANGLES, num_tri_verts, GL_UNSIGNED_INT, + tri_indices ); + } + break; + + case (DRAW_ARRAYS|TRIANGLES): + glDrawArraysEXT( GL_TRIANGLES, 0, (numverts-2)*3 ); + break; + + case (ARRAY_ELT|TRIANGLES): + if (with_state & MATERIALS) { + for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) { + GLuint nr = MIN(num_tri_verts-i, 600); + GLuint k; + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col[j]); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col[j]); + glBegin( GL_TRIANGLES ); + for (k = 0 ; k < nr ; k++) + glArrayElement( tri_indices[i+k] ); + glEnd(); + } + } else { + glBegin( GL_TRIANGLES ); + for (i = 0 ; i < num_tri_verts ; i++) + glArrayElement( tri_indices[i] ); + + glEnd(); + } + break; + + + /* Uses the original arrays (including duplicate elements): + */ + case (DRAW_ARRAYS|STRIPS): + glDrawArraysEXT( GL_TRIANGLE_STRIP, 0, numverts ); + break; + case (DRAW_ELTS|STRIPS): + glDrawElements( GL_TRIANGLE_STRIP, numverts, + GL_UNSIGNED_INT, strip_indices ); + break; + + /* Uses the original arrays (including duplicate elements): + */ + case (ARRAY_ELT|STRIPS): + glBegin( GL_TRIANGLE_STRIP ); + for (i = 0 ; i < numverts ; i++) + glArrayElement( i ); + glEnd(); + break; + + case (DRAW_ARRAYS|POINTS): + glDrawArraysEXT( GL_POINTS, 0, numuniq ); + break; + case (DRAW_ELTS|POINTS): + /* can use numuniq with strip_indices as strip_indices[i] == i. + */ + glDrawElements( GL_POINTS, numuniq, + GL_UNSIGNED_INT, strip_indices ); + break; + case (ARRAY_ELT|POINTS): + /* just emit each unique element once: + */ + glBegin( GL_POINTS ); + for (i = 0 ; i < numuniq ; i++) + glArrayElement( i ); + glEnd(); + break; +#endif + + case (GLVERTEX|TRIANGLES): + if (with_state & MATERIALS) { + for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) { + GLuint nr = MIN(num_tri_verts-i, 600); + GLuint k; + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col[j]); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col[j]); + glBegin( GL_TRIANGLES ); + for (k = 0 ; k < nr ; k++) { + glNormal3fv( &compressed_data[tri_indices[i+k]][3] ); + glVertex3fv( &compressed_data[tri_indices[i+k]][0] ); + } + glEnd(); + } + } else { + glBegin( GL_TRIANGLES ); + for (i = 0 ; i < num_tri_verts ; i++) { + glNormal3fv( &compressed_data[tri_indices[i]][3] ); + glVertex3fv( &compressed_data[tri_indices[i]][0] ); + } + glEnd(); + } + break; + + case (GLVERTEX|POINTS): + /* Renders all points, but not in strip order... Shouldn't be a + * problem, but people may be confused as to why points are so + * much faster in this demo... And why cva doesn't help them... + */ + glBegin( GL_POINTS ); + for ( i = 0 ; i < numuniq ; i++ ) { + glNormal3fv( &compressed_data[i][3] ); + glVertex3fv( &compressed_data[i][0] ); + } + glEnd(); + break; + + case (GLVERTEX|STRIPS): + glBegin( GL_TRIANGLE_STRIP ); + for (i=0;i<numverts;i++) { + glNormal3fv( &data[i][3] ); + glVertex3fv( &data[i][0] ); + } + glEnd(); + break; + + default: + fprintf(stderr, "unimplemented mode %x...\n", + (with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK))); + break; + } +} + + + +static void Display(void) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + draw_surface( state ); + glFlush(); + if (doubleBuffer) glutSwapBuffers(); +} + + +/* KW: only do this when necessary, so CVA can re-use results. + */ +static void set_matrix( void ) +{ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, dist ); + glRotatef( yrot, 0.0, 1.0, 0.0 ); + glRotatef( xrot, 1.0, 0.0, 0.0 ); +} + +static void Benchmark( float xdiff, float ydiff ) +{ + int startTime, endTime; + int draws; + double seconds, fps, triPerSecond; + + printf("Benchmarking...\n"); + + draws = 0; + startTime = glutGet(GLUT_ELAPSED_TIME); + xrot = 0.0; + do { + xrot += xdiff; + yrot += ydiff; + set_matrix(); + Display(); + draws++; + endTime = glutGet(GLUT_ELAPSED_TIME); + } while (endTime - startTime < 5000); /* 5 seconds */ + + /* Results */ + seconds = (double) (endTime - startTime) / 1000.0; + triPerSecond = (numverts - 2) * draws / seconds; + fps = draws / seconds; + printf("Result: triangles/sec: %g fps: %g\n", triPerSecond, fps); +} + + +static void InitMaterials(void) +{ + static float ambient[] = {0.1, 0.1, 0.1, 1.0}; + static float diffuse[] = {0.5, 1.0, 1.0, 1.0}; + static float position0[] = {0.0, 0.0, 20.0, 0.0}; + static float position1[] = {0.0, 0.0, -20.0, 0.0}; + static float front_mat_shininess[] = {60.0}; + static float front_mat_specular[] = {0.2, 0.2, 0.2, 1.0}; + static float front_mat_diffuse[] = {0.5, 0.28, 0.38, 1.0}; + /* + static float back_mat_shininess[] = {60.0}; + static float back_mat_specular[] = {0.5, 0.5, 0.2, 1.0}; + static float back_mat_diffuse[] = {1.0, 1.0, 0.2, 1.0}; + */ + static float lmodel_ambient[] = {1.0, 1.0, 1.0, 1.0}; + static float lmodel_twoside[] = {GL_FALSE}; + + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); + glLightfv(GL_LIGHT0, GL_POSITION, position0); + glEnable(GL_LIGHT0); + + glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); + glLightfv(GL_LIGHT1, GL_POSITION, position1); + glEnable(GL_LIGHT1); + + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); + glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); + + glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_mat_shininess); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_mat_specular); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, front_mat_diffuse); + + glPolygonStipple (halftone); +} + + + +#define UPDATE(o,n,mask) (o&=~mask, o|=n&mask) +#define CHANGED(o,n,mask) ((n&mask) && (n&mask) != (o&mask) ) + +static void ModeMenu(int m) +{ + m &= allowed; + + if (!m) return; + + if (m==QUIT) + exit(0); + + if (m==GLINFO) { + printf("GL_VERSION: %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_EXTENSIONS: %s\n", (char *) glGetString(GL_EXTENSIONS)); + printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER)); + return; + } + + if (CHANGED(state, m, FILTER_MASK)) { + UPDATE(state, m, FILTER_MASK); + if (m & LINEAR_FILTER) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + } + } + + if (CHANGED(state, m, LIGHT_MASK)) { + UPDATE(state, m, LIGHT_MASK); + if (m & LIT) { + glEnable(GL_LIGHTING); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_2D); + } + else if (m & UNLIT) { + glDisable(GL_LIGHTING); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_2D); + } + else if (m & REFLECT) { + glDisable(GL_LIGHTING); + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + glEnable(GL_TEXTURE_2D); + } + } + + if (CHANGED(state, m, SHADE_MASK)) { + UPDATE(state, m, SHADE_MASK); + if (m & SHADE_SMOOTH) + glShadeModel(GL_SMOOTH); + else + glShadeModel(GL_FLAT); + } + + + if (CHANGED(state, m, CLIP_MASK)) { + UPDATE(state, m, CLIP_MASK); + if (m & USER_CLIP) { + glEnable(GL_CLIP_PLANE0); + } else { + glDisable(GL_CLIP_PLANE0); + } + } + + if (CHANGED(state, m, FOG_MASK)) { + UPDATE(state, m, FOG_MASK); + if (m & FOG) { + glEnable(GL_FOG); + } + else { + glDisable(GL_FOG); + } + } + + if (CHANGED(state, m, STIPPLE_MASK)) { + UPDATE(state, m, STIPPLE_MASK); + if (m & STIPPLE) { + glEnable(GL_POLYGON_STIPPLE); + } + else { + glDisable(GL_POLYGON_STIPPLE); + } + } + + if (CHANGED(state, m, POLYGON_MASK)) { + UPDATE(state, m, POLYGON_MASK); + if (m & POLYGON_FILL) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + else { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + } + } + +#ifdef GL_EXT_vertex_array + if (CHANGED(state, m, (LOCK_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK))) + { + if (m & (PRIMITIVE_MASK)) { + UPDATE(state, m, (PRIMITIVE_MASK)); + } + + if (m & (RENDER_STYLE_MASK)) { + UPDATE(state, m, (RENDER_STYLE_MASK)); + } + + if (m & LOCK_MASK) { + UPDATE(state, m, (LOCK_MASK)); + } + + + print_flags("primitive", state & PRIMITIVE_MASK); + print_flags("render style", state & RENDER_STYLE_MASK); + + if ((state & PRIMITIVE_MASK) != STRIPS && + ((state & RENDER_STYLE_MASK) == DRAW_ELTS || + (state & RENDER_STYLE_MASK) == ARRAY_ELT || + (state & PRIMITIVE_MASK) == POINTS)) + { + fprintf(stderr, "enabling small arrays\n"); + /* Rendering any primitive with draw-element/array-element + * --> Can't do strips here as ordering has been lost in + * compaction process... + */ + glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), numuniq, + compressed_data ); + glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), numuniq, + &compressed_data[0][3]); +#ifdef GL_EXT_compiled_vertex_array + if (allowed & LOCKED) { + if (state & LOCKED) { + glLockArraysEXT( 0, numuniq ); + } else { + glUnlockArraysEXT(); + } + } +#endif + } + else if ((state & PRIMITIVE_MASK) == TRIANGLES && + (state & RENDER_STYLE_MASK) == DRAW_ARRAYS) { + fprintf(stderr, "enabling big arrays\n"); + /* Only get here for TRIANGLES and drawarrays + */ + glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), (numverts-2) * 3, + expanded_data ); + glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), (numverts-2) * 3, + &expanded_data[0][3]); + +#ifdef GL_EXT_compiled_vertex_array + if (allowed & LOCKED) { + if (state & LOCKED) { + glLockArraysEXT( 0, (numverts-2)*3 ); + } else { + glUnlockArraysEXT(); + } + } +#endif + } + else { + fprintf(stderr, "enabling normal arrays\n"); + glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), numverts, data ); + glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), numverts, &data[0][3]); +#ifdef GL_EXT_compiled_vertex_array + if (allowed & LOCKED) { + if (state & LOCKED) { + glLockArraysEXT( 0, numverts ); + } else { + glUnlockArraysEXT(); + } + } +#endif + } + + } +#endif + + + if (m & DLIST_MASK) { + UPDATE(state, m, DLIST_MASK); + } + + if (m & MATERIAL_MASK) { + UPDATE(state, m, MATERIAL_MASK); + } + + print_flags("new flags", state); + + glutPostRedisplay(); +} + + + +static void Init(int argc, char *argv[]) +{ + GLfloat fogColor[4] = {0.5,1.0,0.5,1.0}; + + xrot = 0; + yrot = 0; + dist = -6; + plane[0] = 1.0; + plane[1] = 0.0; + plane[2] = -1.0; + plane[3] = 0.0; + + glClearColor(0.0, 0.0, 1.0, 0.0); + glEnable( GL_DEPTH_TEST ); + glEnable( GL_VERTEX_ARRAY_EXT ); + glEnable( GL_NORMAL_ARRAY_EXT ); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5, 25 ); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glClipPlane(GL_CLIP_PLANE0, plane); + + InitMaterials(); + + set_matrix(); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); + + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + + + /* Green fog is easy to see */ + glFogi(GL_FOG_MODE,GL_EXP2); + glFogfv(GL_FOG_COLOR,fogColor); + glFogf(GL_FOG_DENSITY,0.15); + glHint(GL_FOG_HINT,GL_DONT_CARE); + + { + static int firsttime = 1; + if (firsttime) { + firsttime = 0; + compactify_arrays(); + expand_arrays(); + make_tri_indices(); + + if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) { + printf("Error: couldn't load texture image\n"); + exit(1); + } + } + } + + ModeMenu(SHADE_SMOOTH| + LIT| + POINT_FILTER| + NO_USER_CLIP| + NO_MATERIALS| + NO_FOG| + NO_STIPPLE| + IMMEDIATE| + STRIPS| + UNLOCKED| + GLVERTEX); + + if (PrintInfo) { + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); + printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); + } +} + + + +static void Reshape(int width, int height) +{ + glViewport(0, 0, (GLint)width, (GLint)height); +} + + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + case 'f': + ModeMenu((state ^ FOG_MASK) & FOG_MASK); + break; + case 's': + ModeMenu((state ^ SHADE_MASK) & SHADE_MASK); + break; + case 't': + ModeMenu((state ^ STIPPLE_MASK) & STIPPLE_MASK); + break; + case 'l': + ModeMenu((state ^ LIGHT_MASK) & (LIT|UNLIT)); + break; + case 'm': + ModeMenu((state ^ MATERIAL_MASK) & MATERIAL_MASK); + break; + case 'c': + ModeMenu((state ^ CLIP_MASK) & CLIP_MASK); + break; + case 'v': + ModeMenu((LOCKED|IMMEDIATE|DRAW_ELTS|TRIANGLES) & allowed); + break; + case 'V': + ModeMenu(UNLOCKED|IMMEDIATE|GLVERTEX|STRIPS); + break; + case 'b': + Benchmark(5.0, 0); + break; + case 'B': + Benchmark(0, 5.0); + break; + case 'i': + dist += .25; + set_matrix(); + glutPostRedisplay(); + break; + case 'I': + dist -= .25; + set_matrix(); + glutPostRedisplay(); + break; + case '-': + case '_': + plane[3] += 2.0; + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glClipPlane(GL_CLIP_PLANE0, plane); + set_matrix(); + glutPostRedisplay(); + break; + case '+': + case '=': + plane[3] -= 2.0; + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glClipPlane(GL_CLIP_PLANE0, plane); + set_matrix(); + glutPostRedisplay(); + break; + case ' ': + Init(0,0); + break; + } +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_LEFT: + yrot -= 15.0; + break; + case GLUT_KEY_RIGHT: + yrot += 15.0; + break; + case GLUT_KEY_UP: + xrot += 15.0; + break; + case GLUT_KEY_DOWN: + xrot -= 15.0; + break; + default: + return; + } + set_matrix(); + glutPostRedisplay(); +} + + + +static GLint Args(int argc, char **argv) +{ + GLint i; + GLint mode = 0; + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "-sb") == 0) { + doubleBuffer = GL_FALSE; + } + else if (strcmp(argv[i], "-db") == 0) { + doubleBuffer = GL_TRUE; + } + else if (strcmp(argv[i], "-info") == 0) { + PrintInfo = GL_TRUE; + } + else if (strcmp(argv[i], "-10") == 0) { + maxverts = 10; + } + else if (strcmp(argv[i], "-100") == 0) { + maxverts = 100; + } + else if (strcmp(argv[i], "-1000") == 0) { + maxverts = 1000; + } + else { + printf("%s (Bad option).\n", argv[i]); + return QUIT; + } + } + + return mode; +} + +int main(int argc, char **argv) +{ + GLenum type; + char *extensions; + + GLuint arg_mode = Args(argc, argv); + + if (arg_mode & QUIT) + exit(0); + + read_surface( "isosurf.dat" ); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(400, 400); + + type = GLUT_DEPTH; + type |= GLUT_RGB; + type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE; + glutInitDisplayMode(type); + + if (glutCreateWindow("Isosurface") <= 0) { + exit(0); + } + + /* Make sure server supports the vertex array extension */ + extensions = (char *) glGetString( GL_EXTENSIONS ); + + if (!strstr( extensions, "GL_EXT_vertex_array" )) + { + printf("Vertex arrays not supported by this renderer\n"); + allowed &= ~(LOCKED|DRAW_ARRAYS|DRAW_ELTS|ARRAY_ELT); + } + else if (!strstr( extensions, "GL_EXT_compiled_vertex_array" )) + { + printf("Compiled vertex arrays not supported by this renderer\n"); + allowed &= ~LOCKED; + } + + Init(argc, argv); + ModeMenu(arg_mode); + + glutCreateMenu(ModeMenu); + glutAddMenuEntry("GL info", GLINFO); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Lit", LIT); + glutAddMenuEntry("Unlit", UNLIT); + glutAddMenuEntry("Reflect", REFLECT); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Smooth", SHADE_SMOOTH); + glutAddMenuEntry("Flat", SHADE_FLAT); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Fog", FOG); + glutAddMenuEntry("No Fog", NO_FOG); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Stipple", STIPPLE); + glutAddMenuEntry("No Stipple", NO_STIPPLE); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Polygon Mode Fill", POLYGON_FILL); + glutAddMenuEntry("Polygon Mode Line", POLYGON_LINE); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Point Filtered", POINT_FILTER); + glutAddMenuEntry("Linear Filtered", LINEAR_FILTER); + glutAddMenuEntry("", 0); + glutAddMenuEntry("GL_TRIANGLES", TRIANGLES); + glutAddMenuEntry("GL_TRIANGLE_STRIPS", STRIPS); + glutAddMenuEntry("GL_POINTS", POINTS); + glutAddMenuEntry("", 0); + glutAddMenuEntry("Displaylist", DISPLAYLIST); + glutAddMenuEntry("Immediate", IMMEDIATE); + glutAddMenuEntry("", 0); + if (allowed & LOCKED) { + glutAddMenuEntry("Locked Arrays (CVA)", LOCKED); + glutAddMenuEntry("Unlocked Arrays", UNLOCKED); + glutAddMenuEntry("", 0); + } + glutAddMenuEntry("glVertex", GLVERTEX); + if (allowed & DRAW_ARRAYS) { + glutAddMenuEntry("glDrawElements", DRAW_ELTS); + glutAddMenuEntry("glDrawArrays", DRAW_ARRAYS); + glutAddMenuEntry("glArrayElement", ARRAY_ELT); + } + glutAddMenuEntry("", 0); + glutAddMenuEntry("Quit", QUIT); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutReshapeFunc(Reshape); + glutKeyboardFunc(Key); + glutSpecialFunc(SpecialKey); + glutDisplayFunc(Display); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/isosurf.dat b/progs/demos/isosurf.dat new file mode 100644 index 000000000..5cadecdb4 --- /dev/null +++ b/progs/demos/isosurf.dat @@ -0,0 +1,7179 @@ +-1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 +-1.000000 0.061400 0.243900 0.248000 0.608000 0.744000 +-0.973900 0.050200 0.243900 0.312000 0.448000 0.832000 +-1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 +-0.950000 0.050200 0.232900 0.312000 0.424000 0.840000 +-0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 +-0.900000 0.050200 0.202100 0.368000 0.256000 0.888000 +-0.900000 0.100400 0.184100 0.296000 0.408000 0.856000 +-0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 +-0.897500 0.100400 0.182900 0.392000 0.408000 0.816000 +-0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 +-0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 +-0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 +-0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 +-0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 +-0.800000 0.100400 0.105500 0.480000 0.456000 0.736000 +-0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 +-0.750000 0.100400 0.065100 0.488000 0.448000 0.736000 +-0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 +-0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 +-0.700000 0.050200 0.061900 0.536000 0.368000 0.752000 +-0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 +-0.699000 0.050200 0.060900 0.608000 0.360000 0.696000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 +-0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 +-0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 +-0.650000 0.100400 -0.043200 0.600000 0.608000 0.496000 +-0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 +-0.638000 0.100400 -0.060900 0.672000 0.632000 0.368000 +-0.600000 0.050200 -0.054100 0.640000 0.448000 0.616000 +-0.600000 0.057600 -0.060900 0.728000 0.536000 0.408000 +-0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 +-0.600000 0.050200 -0.083400 0.800000 0.528000 -0.248000 +-0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 +-0.600000 0.000000 -0.117700 0.848000 0.200000 -0.488000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.600000 -0.008200 -0.121900 0.848000 0.208000 -0.472000 +-0.586600 -0.050200 -0.121900 0.872000 0.224000 -0.424000 +-0.600000 -0.050200 -0.162700 0.904000 0.232000 -0.344000 +-0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 +-0.600000 -0.077900 -0.182900 0.856000 0.208000 -0.464000 +-0.594100 -0.100400 -0.182900 0.816000 0.296000 -0.480000 +-0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 +-0.561800 -0.150600 -0.182900 0.544000 0.784000 -0.280000 +-0.600000 -0.150600 -0.229400 0.416000 0.744000 -0.512000 +-0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 +-0.600000 -0.160400 -0.243900 0.432000 0.688000 -0.576000 +-0.550000 -0.172700 -0.243900 0.008000 0.856000 -0.512000 +-0.600000 -0.200800 -0.299500 0.000000 0.872000 -0.480000 +-0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 +-0.600000 -0.203400 -0.304800 0.008000 0.768000 -0.632000 +-0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 +-0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 +-0.550000 -0.245600 -0.365800 -0.104000 0.680000 -0.720000 +-0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 +-0.550000 -0.251000 -0.371400 -0.120000 0.616000 -0.768000 +-0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 +-0.550000 -0.301200 -0.401000 0.000000 0.424000 -0.904000 +-0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 +-0.550000 -0.349500 -0.426800 0.056000 0.416000 -0.904000 +-0.600000 -0.340300 -0.426800 0.032000 0.512000 -0.848000 +-0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 +-0.650000 -0.337200 -0.426800 0.016000 0.520000 -0.848000 +-0.650000 -0.301200 -0.398600 0.000000 0.528000 -0.840000 +-0.700000 -0.338200 -0.426800 -0.192000 0.592000 -0.776000 +-0.700000 -0.301200 -0.401600 0.016000 0.504000 -0.856000 +-0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 +-0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 +-0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 +-0.800000 -0.301200 -0.380800 -0.264000 0.104000 -0.952000 +-0.800000 -0.351500 -0.388300 -0.664000 -0.152000 -0.728000 +-0.826000 -0.301200 -0.365800 -0.648000 -0.448000 -0.600000 +-0.812200 -0.351500 -0.365800 -0.856000 -0.296000 -0.408000 +-0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 +-0.821000 -0.351500 -0.304800 -0.824000 -0.504000 0.232000 +-0.850000 -0.306900 -0.304800 -0.768000 -0.624000 0.072000 +-0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 +-0.850000 -0.301200 -0.293400 -0.744000 -0.560000 0.336000 +-0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 +-0.850000 -0.276800 -0.243900 -0.792000 -0.552000 0.248000 +-0.831100 -0.301200 -0.182900 -0.848000 -0.520000 0.016000 +-0.850000 -0.271300 -0.182900 -0.816000 -0.568000 0.032000 +-0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 +-0.850000 -0.274400 -0.121900 -0.816000 -0.568000 0.008000 +-0.826600 -0.301200 -0.060900 -0.824000 -0.544000 0.120000 +-0.850000 -0.265600 -0.060900 -0.808000 -0.568000 0.104000 +-0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 +-0.850000 -0.254700 0.000000 -0.800000 -0.568000 0.168000 +-0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 +-0.850000 -0.251000 0.014600 -0.800000 -0.560000 0.176000 +-0.838400 -0.251000 0.060900 -0.808000 -0.528000 0.248000 +-0.850000 -0.233200 0.060900 -0.816000 -0.512000 0.248000 +-0.819200 -0.251000 0.121900 -0.760000 -0.496000 0.400000 +-0.850000 -0.203500 0.121900 -0.792000 -0.528000 0.288000 +-0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 +-0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 +-0.800000 -0.206500 0.182900 -0.304000 -0.264000 0.912000 +-0.803100 -0.200800 0.182900 -0.456000 -0.168000 0.864000 +-0.800000 -0.200800 0.184500 -0.256000 -0.128000 0.952000 +-0.836800 -0.150600 0.182900 -0.304000 -0.304000 0.896000 +-0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 +-0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 +-0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 +-0.850000 -0.050200 0.193400 0.200000 0.072000 0.968000 +-0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 +-0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 +-0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 +-0.850000 0.016800 0.182900 0.328000 0.184000 0.920000 +-0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 +-0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 +-0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 +-0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 +-0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 +-0.750000 0.000000 0.129400 0.496000 0.360000 0.776000 +-0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 +-0.740500 0.000000 0.121900 0.504000 0.352000 0.784000 +-0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 +-0.700000 0.000000 0.089700 0.584000 0.336000 0.736000 +-0.700000 0.050200 0.061900 0.536000 0.368000 0.752000 +-0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 +-0.699000 0.050200 0.060900 0.608000 0.360000 0.696000 +-0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 +-0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 +-0.609800 0.000000 0.000000 0.696000 0.384000 0.592000 +-0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 +-0.600000 0.000000 -0.017800 0.736000 0.384000 0.544000 +-0.600000 0.050200 -0.054100 0.640000 0.448000 0.616000 +-0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 +-0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 +-0.594700 0.050200 -0.060900 0.744000 0.504000 0.416000 +-1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 +-1.000000 0.050200 0.254800 0.280000 0.504000 0.808000 +-1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 +-0.973900 0.050200 0.243900 0.312000 0.448000 0.832000 +-0.976100 0.000000 0.243900 0.464000 -0.432000 0.768000 +-0.950000 0.050200 0.232900 0.312000 0.424000 0.840000 +-0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 +-0.900000 0.050200 0.202100 0.368000 0.256000 0.888000 +-0.900000 0.000000 0.204000 0.296000 0.088000 0.944000 +-0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 +-0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 +-0.850000 0.016800 0.182900 0.328000 0.184000 0.920000 +-0.865600 0.050200 0.182900 0.480000 0.256000 0.832000 +-0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 +-0.850000 0.050200 0.170400 0.488000 0.296000 0.816000 +-1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 +-1.000000 0.000000 0.260200 0.424000 -0.312000 0.840000 +-0.976100 0.000000 0.243900 0.464000 -0.432000 0.768000 +-1.000000 -0.016700 0.243900 0.424000 -0.608000 0.656000 +-0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 +-1.000000 -0.050200 0.185900 -0.256000 -0.768000 0.576000 +-0.950000 -0.050200 0.212200 0.160000 -0.384000 0.904000 +-1.000000 -0.052000 0.182900 -0.336000 -0.760000 0.544000 +-0.950000 -0.074300 0.182900 -0.344000 -0.776000 0.520000 +-1.000000 -0.075600 0.121900 -0.328000 -0.896000 0.264000 +-0.950000 -0.095300 0.121900 -0.400000 -0.864000 0.280000 +-1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 +-0.950000 -0.100400 0.101700 -0.400000 -0.872000 0.264000 +-0.973400 -0.100400 0.060900 -0.344000 -0.904000 0.240000 +-0.950000 -0.110600 0.060900 -0.432000 -0.856000 0.248000 +-1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 +-0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 +-1.000000 -0.103100 0.000000 -0.304000 -0.920000 0.208000 +-0.950000 -0.136200 -0.060900 -0.528000 -0.832000 0.152000 +-1.000000 -0.112800 -0.060900 -0.376000 -0.912000 0.144000 +-0.950000 -0.144800 -0.121900 -0.536000 -0.832000 0.120000 +-1.000000 -0.120900 -0.121900 -0.400000 -0.904000 0.136000 +-0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 +-1.000000 -0.129600 -0.182900 -0.400000 -0.904000 0.136000 +-0.952800 -0.150600 -0.182900 -0.568000 -0.808000 0.136000 +-1.000000 -0.135800 -0.243900 -0.400000 -0.904000 0.096000 +-0.966700 -0.150600 -0.243900 -0.472000 -0.864000 0.152000 +-1.000000 -0.142300 -0.304800 -0.328000 -0.456000 -0.824000 +-0.989000 -0.150600 -0.304800 -0.440000 -0.624000 -0.640000 +-1.000000 -0.100400 -0.332000 -0.256000 -0.392000 -0.880000 +-0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 +-0.950000 -0.100400 -0.349400 -0.088000 -0.160000 -0.976000 +-0.900000 -0.150600 -0.338300 -0.216000 -0.104000 -0.968000 +-0.900000 -0.100400 -0.346700 0.112000 -0.048000 -0.984000 +-0.850000 -0.150600 -0.349400 0.072000 0.056000 -0.992000 +-0.850000 -0.100400 -0.332400 0.280000 0.112000 -0.952000 +-0.800000 -0.150600 -0.340500 0.312000 0.288000 -0.896000 +-0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 +-0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 +-0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 +-0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 +-0.750000 -0.100400 -0.291100 0.336000 0.256000 -0.896000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.700000 -0.100400 -0.274700 0.392000 0.112000 -0.904000 +-0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 +-0.650000 -0.100400 -0.251900 0.448000 0.224000 -0.856000 +-0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 +-0.638400 -0.100400 -0.243900 0.560000 0.160000 -0.808000 +-0.612700 -0.150600 -0.243900 0.496000 0.576000 -0.640000 +-0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 +-0.600000 -0.150600 -0.229400 0.416000 0.744000 -0.512000 +-0.612700 -0.150600 -0.243900 0.496000 0.576000 -0.640000 +-0.600000 -0.160400 -0.243900 0.432000 0.688000 -0.576000 +-0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 +-0.600000 -0.200800 -0.299500 0.000000 0.872000 -0.480000 +-0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 +-0.600000 -0.203400 -0.304800 0.008000 0.768000 -0.632000 +-0.650000 -0.201600 -0.304800 0.104000 0.688000 -0.704000 +-0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 +-0.650000 -0.251000 -0.354800 0.152000 0.632000 -0.752000 +-0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 +-0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 +-0.600000 -0.301200 -0.399100 0.008000 0.480000 -0.872000 +-0.650000 -0.301200 -0.398600 0.000000 0.528000 -0.840000 +-0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 +-0.700000 -0.301200 -0.401600 0.016000 0.504000 -0.856000 +-0.700000 -0.252100 -0.365800 0.096000 0.552000 -0.824000 +-0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 +-0.707800 -0.251000 -0.365800 0.064000 0.432000 -0.896000 +-0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 +-0.750000 -0.240500 -0.365800 0.056000 0.272000 -0.952000 +-0.800000 -0.251000 -0.370300 -0.064000 0.200000 -0.976000 +-0.800000 -0.234100 -0.365800 -0.112000 0.264000 -0.952000 +-0.828000 -0.251000 -0.365800 -0.248000 0.216000 -0.936000 +-0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 +-0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 +-0.850000 -0.200800 -0.351200 -0.168000 0.112000 -0.976000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 +-0.900000 -0.236500 -0.304800 -0.680000 -0.456000 -0.560000 +-0.931500 -0.200800 -0.304800 -0.648000 -0.520000 -0.544000 +-0.900000 -0.212400 -0.243900 -0.672000 -0.712000 0.176000 +-0.914100 -0.200800 -0.243900 -0.664000 -0.728000 0.128000 +-0.900000 -0.206900 -0.182900 -0.648000 -0.752000 0.056000 +-0.907400 -0.200800 -0.182900 -0.688000 -0.712000 0.072000 +-0.900000 -0.204500 -0.121900 -0.688000 -0.712000 0.104000 +-0.903800 -0.200800 -0.121900 -0.696000 -0.704000 0.120000 +-0.900000 -0.200800 -0.096200 -0.752000 -0.632000 0.128000 +-0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 +-0.900000 -0.192500 -0.060900 -0.856000 -0.488000 0.144000 +-0.932400 -0.150600 -0.060900 -0.688000 -0.696000 0.176000 +-0.900000 -0.169600 0.000000 -0.800000 -0.552000 0.224000 +-0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 +-0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 +-0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 +-0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 +-0.950000 -0.110600 0.060900 -0.432000 -0.856000 0.248000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.950000 -0.100400 0.101700 -0.400000 -0.872000 0.264000 +-0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 +-0.950000 -0.095300 0.121900 -0.400000 -0.864000 0.280000 +-0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 +-0.950000 -0.074300 0.182900 -0.344000 -0.776000 0.520000 +-0.900000 -0.094400 0.182900 -0.312000 -0.608000 0.720000 +-0.950000 -0.050200 0.212200 0.160000 -0.384000 0.904000 +-0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 +-0.950000 0.000000 0.224500 0.344000 -0.144000 0.920000 +-0.900000 0.000000 0.204000 0.296000 0.088000 0.944000 +-0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 +-0.850000 0.000000 0.186200 0.256000 0.144000 0.952000 +-0.850000 -0.050200 0.193400 0.200000 0.072000 0.968000 +-0.900000 -0.050200 0.208600 0.200000 -0.168000 0.960000 +-0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 +-0.900000 -0.094400 0.182900 -0.312000 -0.608000 0.720000 +-0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 +-0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.850000 -0.150600 0.175600 -0.632000 -0.392000 0.664000 +-0.878400 -0.150600 0.121900 -0.736000 -0.560000 0.368000 +-0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 +-0.851500 -0.200800 0.121900 -0.832000 -0.360000 0.408000 +-0.850000 -0.203500 0.121900 -0.792000 -0.528000 0.288000 +-0.869300 -0.200800 0.060900 -0.824000 -0.496000 0.248000 +-0.850000 -0.233200 0.060900 -0.816000 -0.512000 0.248000 +-0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 +-0.850000 -0.251000 0.014600 -0.800000 -0.560000 0.176000 +-0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 +-0.850000 -0.254700 0.000000 -0.800000 -0.568000 0.168000 +-0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 +-0.850000 -0.265600 -0.060900 -0.808000 -0.568000 0.104000 +-0.866600 -0.251000 -0.121900 -0.808000 -0.576000 0.072000 +-0.850000 -0.274400 -0.121900 -0.816000 -0.568000 0.008000 +-0.864200 -0.251000 -0.182900 -0.800000 -0.592000 0.000000 +-0.850000 -0.271300 -0.182900 -0.816000 -0.568000 0.032000 +-0.869200 -0.251000 -0.243900 -0.768000 -0.600000 0.200000 +-0.850000 -0.276800 -0.243900 -0.792000 -0.552000 0.248000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-0.850000 -0.301200 -0.293400 -0.744000 -0.560000 0.336000 +-0.854400 -0.301200 -0.304800 -0.776000 -0.608000 0.112000 +-0.850000 -0.306900 -0.304800 -0.768000 -0.624000 0.072000 +-0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 +-0.854400 -0.301200 -0.304800 -0.776000 -0.608000 0.112000 +-0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 +-1.000000 0.100400 0.207000 0.040000 0.608000 0.784000 +-0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 +-1.000000 0.136100 0.182900 0.152000 0.600000 0.776000 +-0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 +-1.000000 0.150600 0.170300 0.208000 0.568000 0.792000 +-0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 +-1.000000 0.192500 0.121900 0.192000 0.664000 0.720000 +-0.950000 0.178500 0.121900 0.272000 0.648000 0.704000 +-1.000000 0.200800 0.112700 0.192000 0.656000 0.720000 +-0.950000 0.200800 0.096100 0.208000 0.672000 0.704000 +-1.000000 0.241600 0.060900 0.248000 0.768000 0.584000 +-0.950000 0.226300 0.060900 0.264000 0.760000 0.584000 +-1.000000 0.251000 0.045400 0.264000 0.768000 0.568000 +-0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 +-1.000000 0.274600 0.000000 0.264000 0.848000 0.448000 +-0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 +-1.000000 0.294800 -0.060900 0.312000 0.944000 0.080000 +-0.950000 0.277400 -0.060900 0.336000 0.928000 0.080000 +-1.000000 0.286500 -0.121900 0.328000 0.872000 -0.344000 +-0.950000 0.267200 -0.121900 0.344000 0.864000 -0.336000 +-1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 +-0.950000 0.251000 -0.157200 0.320000 0.808000 -0.480000 +-0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 +-0.950000 0.237800 -0.182900 0.296000 0.760000 -0.568000 +-1.000000 0.251000 -0.191500 0.280000 0.728000 -0.616000 +-0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 +-1.000000 0.207900 -0.243900 0.232000 0.640000 -0.728000 +-0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 +-1.000000 0.200800 -0.251300 0.232000 0.624000 -0.736000 +-0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 +-1.000000 0.150600 -0.296000 0.168000 0.544000 -0.816000 +-0.950000 0.150600 -0.281200 0.240000 0.600000 -0.752000 +-1.000000 0.137800 -0.304800 0.104000 0.472000 -0.872000 +-0.950000 0.126000 -0.304800 0.168000 0.528000 -0.824000 +-1.000000 0.100400 -0.326700 0.072000 0.384000 -0.912000 +-0.950000 0.100400 -0.325900 0.192000 0.384000 -0.896000 +-1.000000 0.050200 -0.349300 0.080000 0.216000 -0.968000 +-0.950000 0.050200 -0.340200 0.184000 0.072000 -0.976000 +-1.000000 0.000000 -0.357700 0.216000 -0.064000 -0.968000 +-0.950000 0.000000 -0.337100 0.184000 -0.088000 -0.976000 +-1.000000 -0.050200 -0.339100 0.152000 -0.176000 -0.968000 +-0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 +-1.000000 -0.100400 -0.332000 -0.256000 -0.392000 -0.880000 +-0.950000 -0.100400 -0.349400 -0.088000 -0.160000 -0.976000 +-0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 +-0.900000 -0.100400 -0.346700 0.112000 -0.048000 -0.984000 +-0.900000 -0.050200 -0.330000 0.160000 0.128000 -0.976000 +-0.850000 -0.100400 -0.332400 0.280000 0.112000 -0.952000 +-0.850000 -0.050200 -0.323400 0.248000 0.176000 -0.944000 +-0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 +-0.808200 -0.050200 -0.304800 0.280000 0.136000 -0.944000 +-0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 +-0.800000 -0.050200 -0.302200 0.264000 0.120000 -0.952000 +-0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 +-0.750000 -0.050200 -0.287100 0.288000 0.040000 -0.952000 +-0.750000 -0.100400 -0.291100 0.336000 0.256000 -0.896000 +-0.700000 -0.050200 -0.272000 0.360000 0.104000 -0.920000 +-0.700000 -0.100400 -0.274700 0.392000 0.112000 -0.904000 +-0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 +-0.650000 -0.100400 -0.251900 0.448000 0.224000 -0.856000 +-0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 +-0.638400 -0.100400 -0.243900 0.560000 0.160000 -0.808000 +-0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 +-0.600000 -0.100400 -0.193800 0.776000 0.296000 -0.544000 +-0.600000 -0.077900 -0.182900 0.856000 0.208000 -0.464000 +-0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 +-0.600000 -0.050200 -0.162700 0.904000 0.232000 -0.344000 +-0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 +-0.600000 -0.008200 -0.121900 0.848000 0.208000 -0.472000 +-0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 +-0.600000 0.000000 -0.117700 0.848000 0.200000 -0.488000 +-0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 +-0.600000 0.050200 -0.083400 0.800000 0.528000 -0.248000 +-0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 +-0.600000 0.057600 -0.060900 0.728000 0.536000 0.408000 +-0.650000 0.100400 -0.098000 0.720000 0.624000 -0.288000 +-0.638000 0.100400 -0.060900 0.672000 0.632000 0.368000 +-0.650000 0.112000 -0.060900 0.672000 0.704000 0.200000 +-0.650000 0.100400 -0.043200 0.600000 0.608000 0.496000 +-0.689800 0.150600 -0.060900 0.640000 0.736000 0.192000 +-0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 +-0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 +-0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 +-0.734000 0.150600 0.000000 0.496000 0.640000 0.576000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 +-0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 +-0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 +-0.750000 0.100400 0.065100 0.488000 0.448000 0.736000 +-0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 +-0.800000 0.100400 0.105500 0.480000 0.456000 0.736000 +-0.800000 0.150600 0.064100 0.424000 0.560000 0.704000 +-0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 +-0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 +-0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 +-0.892900 0.150600 0.121900 0.360000 0.624000 0.680000 +-0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.897500 0.100400 0.182900 0.392000 0.408000 0.816000 +-0.900000 0.101900 0.182900 0.304000 0.552000 0.768000 +-0.900000 0.100400 0.184100 0.296000 0.408000 0.856000 +-0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 +-0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 +-0.950000 0.100400 0.204500 0.176000 0.504000 0.840000 +-0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 +-0.886800 -0.100400 0.182900 -0.288000 -0.576000 0.752000 +-0.850000 -0.100400 0.192600 -0.136000 -0.312000 0.936000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 +-0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 +-0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 +-0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 +-0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 +-0.750000 -0.100400 0.174700 0.320000 0.192000 0.920000 +-0.750000 -0.050200 0.155100 0.464000 0.288000 0.832000 +-0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 +-0.708600 -0.050200 0.121900 0.496000 0.344000 0.784000 +-0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 +-0.700000 -0.050200 0.115300 0.496000 0.344000 0.792000 +-0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 +-0.650000 -0.050200 0.076400 0.576000 0.320000 0.744000 +-0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 +-0.635700 -0.050200 0.060900 0.640000 0.304000 0.696000 +-0.612900 -0.100400 0.060900 0.624000 0.376000 0.672000 +-0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 +-0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 +-0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 +-0.565600 -0.100400 0.000000 0.744000 0.440000 0.496000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 +-0.550000 -0.066800 -0.060900 0.944000 0.320000 -0.008000 +-0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 +-0.550000 -0.100400 -0.079500 0.552000 0.552000 -0.616000 +-0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 +-0.550000 -0.145600 -0.121900 0.512000 0.792000 -0.312000 +-0.500000 -0.144400 -0.121900 -0.376000 0.880000 -0.280000 +-0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 +-0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 +-0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 +-0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 +-0.550000 -0.172700 -0.243900 0.008000 0.856000 -0.512000 +-0.500000 -0.169200 -0.243900 -0.328000 0.880000 -0.312000 +-0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 +-0.500000 -0.196700 -0.304800 -0.120000 0.848000 -0.504000 +-0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 +-0.500000 -0.200800 -0.313000 -0.112000 0.824000 -0.544000 +-0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 +-0.500000 -0.238600 -0.365800 -0.072000 0.656000 -0.744000 +-0.550000 -0.245600 -0.365800 -0.104000 0.680000 -0.720000 +-0.500000 -0.251000 -0.377000 -0.032000 0.528000 -0.840000 +-0.550000 -0.251000 -0.371400 -0.120000 0.616000 -0.768000 +-0.500000 -0.301200 -0.402500 0.040000 0.344000 -0.936000 +-0.550000 -0.301200 -0.401000 0.000000 0.424000 -0.904000 +-0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 +-0.550000 -0.349500 -0.426800 0.056000 0.416000 -0.904000 +-0.538500 -0.351500 -0.426800 0.048000 0.480000 -0.872000 +-0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 +-0.500000 -0.355300 -0.426800 0.056000 0.520000 -0.848000 +-0.450000 -0.351500 -0.418600 0.080000 0.512000 -0.848000 +-0.450000 -0.362400 -0.426800 0.064000 0.520000 -0.848000 +-0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 +-0.400000 -0.368700 -0.426800 0.024000 0.560000 -0.824000 +-0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 +-0.350000 -0.360100 -0.426800 -0.128000 0.680000 -0.712000 +-0.319100 -0.351500 -0.426800 -0.216000 0.568000 -0.784000 +-0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 +-0.300000 -0.341100 -0.426800 -0.128000 0.536000 -0.832000 +-0.350000 -0.301200 -0.377400 0.232000 0.208000 -0.944000 +-0.300000 -0.301200 -0.369600 0.320000 0.544000 -0.768000 +-0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 +-0.300000 -0.296900 -0.365800 0.296000 0.528000 -0.784000 +-0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 +-0.300000 -0.251000 -0.348000 0.192000 0.248000 -0.944000 +-0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 +-0.300000 -0.200800 -0.340600 0.016000 0.280000 -0.952000 +-0.350000 -0.200800 -0.339000 0.200000 0.416000 -0.880000 +-0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 +-0.350000 -0.159400 -0.304800 -0.248000 0.528000 -0.808000 +-0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 +-0.350000 -0.150600 -0.298700 -0.264000 0.464000 -0.840000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 +-0.300000 -0.100400 -0.298100 -0.480000 0.288000 -0.824000 +-0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 +-0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 +-0.321700 -0.050200 -0.243900 -0.656000 0.344000 -0.656000 +-0.300000 0.000000 -0.248500 -0.656000 0.560000 -0.488000 +-0.301700 0.000000 -0.243900 -0.744000 0.392000 -0.536000 +-0.300000 0.001800 -0.243900 -0.496000 0.680000 -0.520000 +-0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 +-0.300000 0.050200 -0.185100 -0.648000 0.560000 -0.504000 +-0.301000 0.050200 -0.182900 -0.704000 0.472000 -0.512000 +-0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 +-0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 +-0.300000 0.100400 -0.141500 -0.560000 0.512000 -0.640000 +-0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 +-0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 +-0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 +-0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 +-0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 +-0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 +-0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 +-0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 +-0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 +-0.300000 0.112500 0.000000 -0.064000 0.472000 0.872000 +-0.300000 0.100400 0.006400 -0.200000 0.408000 0.880000 +-0.250000 0.104200 0.000000 0.144000 0.480000 0.856000 +-0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 +-0.238500 0.100400 0.000000 0.152000 0.496000 0.848000 +-0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 +-0.200000 0.089800 0.000000 0.216000 0.544000 0.800000 +-0.200000 0.050200 0.037800 0.512000 0.448000 0.720000 +-0.163800 0.050200 0.000000 0.704000 0.216000 0.664000 +-0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 +-0.150800 0.000000 0.000000 0.744000 0.072000 0.656000 +-0.190300 0.000000 0.060900 0.816000 0.200000 0.536000 +-0.152800 -0.050200 0.000000 0.848000 0.032000 0.520000 +-0.193200 -0.050200 0.060900 0.808000 0.008000 0.584000 +-0.150600 -0.100400 0.000000 0.800000 0.040000 0.592000 +-0.190200 -0.100400 0.060900 0.752000 -0.248000 0.600000 +-0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 +-0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 +-0.150000 -0.150600 0.010200 0.376000 0.208000 0.896000 +-0.200000 -0.150600 0.042600 0.640000 -0.096000 0.752000 +-0.150000 -0.200800 0.013600 0.104000 0.200000 0.968000 +-0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 +-0.150000 -0.251000 0.002400 -0.056000 -0.176000 0.976000 +-0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 +-0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 +-0.200000 -0.279600 0.000000 -0.016000 -0.496000 0.864000 +-0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 +-0.200000 -0.301200 -0.017500 -0.064000 -0.432000 0.896000 +-0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 +-0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 +-0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 +-0.200000 -0.401700 -0.023400 -0.056000 -0.008000 0.992000 +-0.150000 -0.401700 -0.019000 0.408000 -0.232000 0.880000 +-0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 +-0.150000 -0.451900 -0.041900 0.560000 -0.440000 0.696000 +-0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 +-0.150000 -0.470000 -0.060900 0.568000 -0.552000 0.600000 +-0.181900 -0.502100 -0.060900 0.504000 -0.680000 0.520000 +-0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 +-0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 +-0.150000 -0.505100 -0.121900 0.584000 -0.768000 0.240000 +-0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 +-0.150000 -0.510100 -0.182900 0.616000 -0.760000 0.168000 +-0.200000 -0.549300 -0.182900 0.504000 -0.784000 0.344000 +-0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 +-0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 +-0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 +-0.200000 -0.579600 -0.243900 0.568000 -0.648000 0.496000 +-0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 +-0.200000 -0.602500 -0.268600 0.488000 -0.432000 0.752000 +-0.150000 -0.602500 -0.302600 0.392000 -0.240000 0.880000 +-0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 +-0.150000 -0.609400 -0.304800 0.840000 -0.512000 0.152000 +-0.171500 -0.652700 -0.304800 0.576000 -0.304000 0.752000 +-0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 +-0.200000 -0.652700 -0.326500 0.488000 -0.272000 -0.824000 +-0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 +-0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 +-0.229500 -0.602500 -0.365800 0.408000 -0.240000 -0.872000 +-0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 +-0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 +-0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 +-0.300000 -0.602500 -0.397300 -0.248000 -0.488000 -0.832000 +-0.300000 -0.652700 -0.367500 0.064000 -0.112000 -0.984000 +-0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 +-0.350000 -0.652700 -0.376000 0.560000 0.160000 -0.808000 +-0.350000 -0.629600 -0.365800 0.056000 0.640000 -0.760000 +-0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 +-0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 +-0.400000 -0.621700 -0.426800 0.392000 -0.856000 -0.304000 +-0.370300 -0.602500 -0.426800 0.624000 -0.760000 -0.160000 +-0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 +-0.350000 -0.582100 -0.426800 0.344000 -0.808000 -0.456000 +-0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 +-0.300000 -0.582000 -0.426800 0.336000 -0.608000 -0.712000 +-0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 +-0.300000 -0.602500 -0.397300 -0.248000 -0.488000 -0.832000 +-0.300000 -0.582000 -0.426800 0.336000 -0.608000 -0.712000 +-0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 +-0.275900 -0.552300 -0.426800 0.528000 -0.480000 -0.696000 +-0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 +-0.250000 -0.526200 -0.426800 0.576000 -0.448000 -0.672000 +-0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 +-0.235700 -0.502100 -0.426800 0.696000 -0.464000 -0.536000 +-0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 +-0.200000 -0.459900 -0.426800 0.560000 -0.592000 -0.576000 +-0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 +-0.191200 -0.451900 -0.426800 0.664000 -0.480000 -0.560000 +-0.150000 -0.451900 -0.368100 0.456000 -0.056000 -0.880000 +-0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 +-0.150000 -0.417500 -0.365800 0.544000 0.056000 -0.832000 +-0.151700 -0.401700 -0.365800 0.568000 0.104000 -0.808000 +-0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 +-0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 +-0.150000 -0.351500 -0.350300 0.512000 0.192000 -0.832000 +-0.200000 -0.351500 -0.343300 0.312000 0.640000 -0.696000 +-0.150000 -0.301200 -0.318500 -0.024000 0.504000 -0.856000 +-0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 +-0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 +-0.200000 -0.251000 -0.307600 0.408000 0.096000 -0.904000 +-0.195100 -0.251000 -0.304800 0.376000 0.112000 -0.912000 +-0.200000 -0.200800 -0.306700 0.368000 -0.184000 -0.904000 +-0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 +-0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 +-0.150000 -0.159100 -0.304800 0.152000 -0.400000 -0.896000 +-0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 +-0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 +-0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 +-0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 +-0.050000 -0.150600 -0.332400 0.016000 -0.080000 -0.992000 +-0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 +0.000000 -0.150600 -0.318000 0.160000 0.016000 -0.984000 +0.000000 -0.200800 -0.332000 -0.296000 0.528000 -0.784000 +0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 +0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +0.100000 -0.200800 -0.352600 0.240000 0.528000 -0.800000 +0.100000 -0.151600 -0.304800 -0.176000 0.536000 -0.816000 +0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 +0.101900 -0.150600 -0.304800 -0.296000 0.368000 -0.872000 +0.150000 -0.150600 -0.323600 -0.232000 0.464000 -0.848000 +0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 +0.150000 -0.100400 -0.322200 0.000000 0.224000 -0.968000 +0.150000 -0.064700 -0.304800 -0.200000 0.328000 -0.912000 +0.185500 -0.100400 -0.304800 0.296000 0.104000 -0.944000 +0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 +0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 +0.188500 -0.050200 -0.304800 -0.128000 0.184000 -0.968000 +0.200000 -0.061600 -0.304800 0.000000 -0.144000 -0.984000 +0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 +0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 +0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 +0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 +0.200000 0.000000 -0.277300 0.080000 0.528000 -0.840000 +0.250000 0.000000 -0.271900 -0.336000 0.528000 -0.776000 +0.200000 0.025700 -0.243900 0.016000 0.752000 -0.648000 +0.250000 0.018500 -0.243900 -0.144000 0.856000 -0.480000 +0.200000 0.019700 -0.182900 0.160000 0.648000 0.736000 +0.250000 0.002800 -0.182900 0.128000 0.640000 0.752000 +0.200000 0.000000 -0.161400 0.032000 0.656000 0.752000 +0.250000 0.000000 -0.180400 0.176000 0.568000 0.792000 +0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 +0.250000 -0.050200 -0.132500 0.192000 0.528000 0.816000 +0.222300 -0.050200 -0.121900 0.200000 0.432000 0.872000 +0.250000 -0.068700 -0.121900 0.096000 0.400000 0.904000 +0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 +0.250000 -0.100400 -0.106800 0.080000 0.336000 0.936000 +0.200000 -0.100400 -0.095800 0.064000 0.272000 0.952000 +0.250000 -0.150600 -0.087200 0.040000 0.104000 0.992000 +0.200000 -0.150600 -0.099300 0.040000 0.104000 0.992000 +0.250000 -0.200800 -0.084100 0.120000 -0.168000 0.976000 +0.200000 -0.200800 -0.086600 0.112000 -0.336000 0.928000 +0.250000 -0.237200 -0.121900 0.048000 -0.656000 0.744000 +0.200000 -0.240500 -0.121900 0.152000 -0.656000 0.728000 +0.250000 -0.251000 -0.140300 -0.072000 -0.512000 0.848000 +0.200000 -0.251000 -0.134700 0.128000 -0.784000 0.600000 +0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 +0.200000 -0.290700 -0.182900 -0.520000 -0.680000 0.512000 +0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 +0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 +0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 +0.200000 -0.319700 -0.243900 -0.624000 -0.696000 0.328000 +0.250000 -0.343100 -0.243900 -0.320000 -0.920000 0.208000 +0.200000 -0.340400 -0.304800 -0.480000 -0.448000 -0.744000 +0.250000 -0.348300 -0.304800 -0.128000 -0.736000 -0.656000 +0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 +0.250000 -0.313600 -0.365800 -0.336000 -0.640000 -0.680000 +0.236200 -0.301200 -0.365800 -0.608000 -0.320000 -0.712000 +0.250000 -0.301200 -0.379400 -0.536000 -0.264000 -0.792000 +0.250000 -0.271800 -0.365800 -0.320000 0.360000 -0.872000 +0.300000 -0.301200 -0.372900 0.128000 -0.472000 -0.864000 +0.300000 -0.284400 -0.365800 0.136000 0.360000 -0.920000 +0.333500 -0.301200 -0.365800 0.208000 -0.080000 -0.968000 +0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 +0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 +0.350000 -0.251000 -0.329500 0.536000 0.472000 -0.688000 +0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 +0.366700 -0.251000 -0.304800 0.704000 0.488000 -0.496000 +0.400000 -0.299100 -0.304800 0.736000 0.472000 -0.472000 +0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 +0.400000 -0.252300 -0.243900 0.744000 0.488000 -0.440000 +0.398900 -0.251000 -0.182900 0.896000 -0.160000 0.400000 +0.400000 -0.252800 -0.182900 0.760000 0.464000 0.440000 +0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 +0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 +0.350000 -0.260400 -0.121900 0.448000 -0.472000 0.752000 +0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 +0.328900 -0.251000 -0.121900 -0.264000 -0.304000 0.912000 +0.300000 -0.301200 -0.149800 -0.024000 -0.480000 0.872000 +0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 +0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 +0.250000 -0.251000 -0.140300 -0.072000 -0.512000 0.848000 +0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 +0.250000 -0.237200 -0.121900 0.048000 -0.656000 0.744000 +0.300000 -0.234400 -0.121900 0.104000 -0.472000 0.872000 +0.250000 -0.200800 -0.084100 0.120000 -0.168000 0.976000 +0.300000 -0.200800 -0.101500 0.424000 -0.216000 0.872000 +0.250000 -0.150600 -0.087200 0.040000 0.104000 0.992000 +0.300000 -0.150600 -0.090800 0.240000 -0.024000 0.968000 +0.250000 -0.100400 -0.106800 0.080000 0.336000 0.936000 +0.300000 -0.100400 -0.098900 -0.360000 0.344000 0.856000 +0.250000 -0.068700 -0.121900 0.096000 0.400000 0.904000 +0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 +0.250000 -0.050200 -0.132500 0.192000 0.528000 0.816000 +0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 +0.250000 0.000000 -0.180400 0.176000 0.568000 0.792000 +0.300000 0.000000 -0.166100 -0.488000 0.464000 0.728000 +0.250000 0.002800 -0.182900 0.128000 0.640000 0.752000 +0.300000 0.018000 -0.182900 -0.296000 0.768000 0.552000 +0.250000 0.018500 -0.243900 -0.144000 0.856000 -0.480000 +0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 +0.250000 0.000000 -0.271900 -0.336000 0.528000 -0.776000 +0.300000 0.000000 -0.302400 -0.544000 0.608000 -0.568000 +0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 +0.300000 -0.003100 -0.304800 -0.376000 0.424000 -0.816000 +0.266500 -0.050200 -0.304800 -0.280000 0.064000 -0.952000 +0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 +0.278900 -0.100400 -0.304800 -0.176000 0.256000 -0.944000 +0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 +0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 +0.300000 -0.150600 -0.312600 0.312000 -0.200000 -0.920000 +0.250000 -0.150600 -0.317700 0.024000 0.336000 -0.936000 +0.300000 -0.200800 -0.324200 0.480000 0.248000 -0.832000 +0.250000 -0.200800 -0.343100 0.104000 0.232000 -0.960000 +0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 +0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 +0.300000 -0.284400 -0.365800 0.136000 0.360000 -0.920000 +0.250000 -0.271800 -0.365800 -0.320000 0.360000 -0.872000 +0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 +0.236200 -0.301200 -0.365800 -0.608000 -0.320000 -0.712000 +0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 +0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 +0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 +0.170700 -0.301200 -0.304800 -0.520000 -0.608000 -0.592000 +0.150000 -0.287400 -0.304800 0.000000 -0.712000 -0.688000 +0.176900 -0.301200 -0.243900 -0.504000 -0.800000 0.304000 +0.150000 -0.287700 -0.243900 -0.208000 -0.968000 0.064000 +0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 +0.150000 -0.278000 -0.182900 -0.064000 -0.936000 0.328000 +0.200000 -0.290700 -0.182900 -0.520000 -0.680000 0.512000 +0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 +0.200000 -0.251000 -0.134700 0.128000 -0.784000 0.600000 +0.161400 -0.251000 -0.121900 0.152000 -0.792000 0.576000 +0.200000 -0.240500 -0.121900 0.152000 -0.656000 0.728000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +0.200000 -0.200800 -0.086600 0.112000 -0.336000 0.928000 +0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 +0.200000 -0.150600 -0.099300 0.040000 0.104000 0.992000 +0.150000 -0.150600 -0.071000 0.136000 0.176000 0.968000 +0.200000 -0.100400 -0.095800 0.064000 0.272000 0.952000 +0.150000 -0.100400 -0.080500 0.184000 0.336000 0.920000 +0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 +0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 +0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 +0.150000 -0.036300 -0.121900 0.008000 0.488000 0.864000 +0.200000 0.000000 -0.161400 0.032000 0.656000 0.752000 +0.150000 0.000000 -0.166100 -0.096000 0.688000 0.712000 +0.200000 0.019700 -0.182900 0.160000 0.648000 0.736000 +0.150000 0.016800 -0.182900 -0.152000 0.840000 0.520000 +0.200000 0.025700 -0.243900 0.016000 0.752000 -0.648000 +0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 +0.200000 0.000000 -0.277300 0.080000 0.528000 -0.840000 +0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 +0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 +0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 +0.188500 -0.050200 -0.304800 -0.128000 0.184000 -0.968000 +0.200000 -0.045300 -0.304800 -0.008000 0.344000 -0.936000 +0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 +0.200000 -0.050200 -0.307000 0.000000 0.192000 -0.976000 +-0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 +-0.800000 -0.100400 0.186900 0.104000 0.048000 0.992000 +-0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 +-0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 +-0.750000 -0.136500 0.182900 0.216000 0.112000 0.968000 +-0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 +-0.743500 -0.150600 0.182900 0.192000 0.096000 0.968000 +-0.750000 -0.200800 0.187200 0.064000 -0.048000 0.992000 +-0.703900 -0.200800 0.182900 0.128000 0.064000 0.984000 +-0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 +-0.700000 -0.208700 0.182900 0.176000 0.120000 0.968000 +-0.700000 -0.251000 0.184700 0.008000 -0.024000 0.992000 +-0.650000 -0.249200 0.182900 0.176000 0.464000 0.864000 +-0.650000 -0.251000 0.183700 0.152000 0.272000 0.944000 +-0.638500 -0.251000 0.182900 0.072000 0.424000 0.896000 +-0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 +-0.600000 -0.260000 0.182900 0.056000 0.320000 0.944000 +-0.600000 -0.301200 0.196400 -0.152000 0.176000 0.968000 +-0.550000 -0.264400 0.182900 -0.072000 0.456000 0.880000 +-0.550000 -0.301200 0.200100 -0.040000 0.312000 0.944000 +-0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 +-0.500000 -0.301200 0.199600 -0.128000 0.216000 0.960000 +-0.500000 -0.251000 0.185100 -0.112000 0.632000 0.760000 +-0.450000 -0.301200 0.203900 0.032000 0.168000 0.984000 +-0.450000 -0.251000 0.195400 -0.152000 0.392000 0.904000 +-0.400000 -0.301200 0.211000 0.416000 0.000000 0.904000 +-0.400000 -0.251000 0.203200 0.024000 0.208000 0.976000 +-0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 +-0.350000 -0.251000 0.206900 0.584000 -0.272000 0.760000 +-0.350000 -0.276800 0.182900 0.600000 -0.432000 0.664000 +-0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 +-0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 +-0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 +-0.300000 -0.301200 0.065200 0.504000 -0.568000 0.640000 +-0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 +-0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 +-0.250000 -0.251000 0.071500 0.528000 -0.408000 0.736000 +-0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 +-0.236900 -0.251000 0.060900 0.464000 -0.480000 0.728000 +-0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 +-0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 +-0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 +-0.200000 -0.279600 0.000000 -0.016000 -0.496000 0.864000 +-0.200000 -0.301200 -0.017500 -0.064000 -0.432000 0.896000 +-0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 +-0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 +-0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 +-0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 +-0.300000 -0.343500 0.000000 0.832000 -0.408000 0.360000 +-0.300000 -0.351500 -0.012600 0.872000 -0.352000 0.320000 +-0.303300 -0.351500 0.000000 0.888000 -0.344000 0.288000 +-0.300000 -0.401700 -0.045100 0.792000 -0.248000 0.544000 +-0.319500 -0.401700 0.000000 0.536000 -0.584000 0.592000 +-0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 +-0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 +-0.338500 -0.451900 -0.060900 0.112000 -0.632000 0.760000 +-0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 +-0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 +-0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 +-0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 +-0.400000 -0.502100 -0.024700 0.848000 -0.224000 0.464000 +-0.400000 -0.527700 -0.060900 0.080000 -0.768000 0.624000 +-0.450000 -0.502100 -0.045100 0.560000 -0.696000 0.432000 +-0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 +-0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 +-0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 +-0.500000 -0.548400 0.000000 0.368000 -0.816000 0.432000 +-0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 +-0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 +-0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 +-0.550000 -0.565800 0.000000 0.224000 -0.872000 0.424000 +-0.550000 -0.588500 -0.060900 0.224000 -0.888000 0.384000 +-0.600000 -0.566300 0.000000 -0.184000 -0.816000 0.544000 +-0.600000 -0.601900 -0.060900 -0.072000 -0.808000 0.568000 +-0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 +-0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 +-0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 +-0.685200 -0.552300 -0.060900 -0.696000 -0.384000 0.592000 +-0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 +-0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 +-0.674300 -0.502100 0.000000 -0.656000 -0.632000 0.384000 +-0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 +-0.700000 -0.478200 0.000000 -0.704000 -0.632000 0.312000 +-0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 +-0.719800 -0.451900 0.000000 -0.816000 -0.520000 0.240000 +-0.735400 -0.451900 -0.060900 -0.768000 -0.512000 0.360000 +-0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 +-0.750000 -0.426100 -0.060900 -0.864000 -0.448000 0.200000 +-0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 +-0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 +-0.782800 -0.351500 0.000000 -0.816000 -0.536000 0.208000 +-0.794800 -0.351500 -0.060900 -0.816000 -0.552000 0.144000 +-0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 +-0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 +-0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 +-0.826600 -0.301200 -0.060900 -0.824000 -0.544000 0.120000 +-0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 +-0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 +-0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 +-0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 +-0.800000 -0.354700 -0.121900 -0.848000 -0.512000 0.080000 +-0.802200 -0.351500 -0.182900 -0.872000 -0.480000 0.016000 +-0.800000 -0.355500 -0.182900 -0.872000 -0.472000 0.032000 +-0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 +-0.800000 -0.365300 -0.243900 -0.880000 -0.440000 0.160000 +-0.821000 -0.351500 -0.304800 -0.824000 -0.504000 0.232000 +-0.800000 -0.395700 -0.304800 -0.920000 -0.376000 0.000000 +-0.812200 -0.351500 -0.365800 -0.856000 -0.296000 -0.408000 +-0.800000 -0.388500 -0.365800 -0.864000 -0.288000 -0.400000 +-0.800000 -0.351500 -0.388300 -0.664000 -0.152000 -0.728000 +-0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 +-0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 +-0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 +-0.750000 -0.359700 -0.426800 -0.368000 0.408000 -0.832000 +-0.750000 -0.351500 -0.422100 -0.312000 0.448000 -0.824000 +-0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 +-0.736800 -0.351500 -0.426800 -0.240000 0.480000 -0.832000 +-0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 +-0.750000 -0.150600 0.184600 0.192000 0.080000 0.976000 +-0.800000 -0.150600 0.189500 -0.240000 -0.056000 0.960000 +-0.750000 -0.200800 0.187200 0.064000 -0.048000 0.992000 +-0.800000 -0.200800 0.184500 -0.256000 -0.128000 0.952000 +-0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 +-0.800000 -0.206500 0.182900 -0.304000 -0.264000 0.912000 +-0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 +-0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 +-0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 +-0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 +-0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 +-0.783300 -0.301200 0.121900 -0.688000 -0.568000 0.440000 +-0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 +-0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 +-0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 +-0.800000 -0.310100 0.060900 -0.800000 -0.544000 0.224000 +-0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 +-0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 +-0.782800 -0.351500 0.000000 -0.816000 -0.536000 0.208000 +-0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 +-0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 +-0.750000 -0.377100 0.060900 -0.760000 -0.552000 0.320000 +-0.750000 -0.401700 0.004100 -0.816000 -0.520000 0.232000 +-0.731300 -0.401700 0.060900 -0.784000 -0.496000 0.344000 +-0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 +-0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 +-0.719800 -0.451900 0.000000 -0.816000 -0.520000 0.240000 +-0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 +-0.700000 -0.478200 0.000000 -0.704000 -0.632000 0.312000 +-0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 +-0.674300 -0.502100 0.000000 -0.656000 -0.632000 0.384000 +-0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 +-0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 +-0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 +-0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 +-0.600000 -0.531600 0.060900 -0.448000 -0.736000 0.496000 +-0.600000 -0.552300 0.023900 -0.224000 -0.776000 0.584000 +-0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 +-0.550000 -0.552300 0.031000 0.256000 -0.800000 0.528000 +-0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 +-0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 +-0.500000 -0.548400 0.000000 0.368000 -0.816000 0.432000 +-0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 +-0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 +-0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 +-0.450000 -0.489500 0.000000 0.584000 -0.760000 0.264000 +-0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 +-0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 +-0.425300 -0.451900 0.060900 0.696000 -0.640000 0.304000 +-0.400000 -0.447100 0.000000 0.720000 -0.584000 0.344000 +-0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 +-0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 +-0.350000 -0.406300 0.060900 0.592000 -0.728000 0.320000 +-0.319500 -0.401700 0.000000 0.536000 -0.584000 0.592000 +-0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 +-0.303300 -0.351500 0.000000 0.888000 -0.344000 0.288000 +-0.319700 -0.351500 0.060900 0.864000 -0.376000 0.328000 +-0.300000 -0.343500 0.000000 0.832000 -0.408000 0.360000 +-0.300000 -0.305300 0.060900 0.512000 -0.568000 0.632000 +-0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 +-0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 +-0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 +-0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 +-0.250000 -0.262800 0.060900 0.496000 -0.520000 0.688000 +-0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 +-0.762000 -0.251000 0.182900 -0.256000 -0.192000 0.936000 +-0.750000 -0.251000 0.186100 -0.160000 -0.136000 0.976000 +-0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 +-0.700000 -0.251000 0.184700 0.008000 -0.024000 0.992000 +-0.700000 -0.272200 0.182900 -0.072000 -0.128000 0.984000 +-0.650000 -0.251000 0.183700 0.152000 0.272000 0.944000 +-0.671000 -0.301200 0.182900 -0.120000 -0.104000 0.984000 +-0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 +-0.663400 -0.351500 0.182900 -0.304000 -0.080000 0.944000 +-0.650000 -0.351500 0.187800 -0.272000 -0.048000 0.952000 +-0.650000 -0.385200 0.182900 -0.496000 -0.152000 0.848000 +-0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 +-0.644900 -0.401700 0.182900 -0.528000 -0.240000 0.808000 +-0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 +-0.600000 -0.446800 0.182900 -0.240000 -0.464000 0.848000 +-0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 +-0.583500 -0.451900 0.182900 -0.128000 -0.544000 0.824000 +-0.550000 -0.451900 0.188900 -0.024000 -0.624000 0.776000 +-0.550000 -0.456500 0.182900 0.056000 -0.736000 0.672000 +-0.523100 -0.451900 0.182900 0.136000 -0.648000 0.744000 +-0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 +-0.500000 -0.451900 0.177400 0.160000 -0.648000 0.736000 +-0.500000 -0.486900 0.121900 0.296000 -0.800000 0.504000 +-0.450000 -0.451900 0.126400 0.752000 -0.472000 0.448000 +-0.450000 -0.453600 0.121900 0.584000 -0.744000 0.288000 +-0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 +-0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 +-0.425300 -0.451900 0.060900 0.696000 -0.640000 0.304000 +-0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 +-0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 +-0.404400 -0.401700 0.121900 0.648000 -0.656000 0.368000 +-0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 +-0.400000 -0.397400 0.121900 0.632000 -0.672000 0.368000 +-0.350000 -0.401700 0.073400 0.632000 -0.688000 0.344000 +-0.350000 -0.369000 0.121900 0.736000 -0.464000 0.480000 +-0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 +-0.341600 -0.351500 0.121900 0.808000 -0.352000 0.456000 +-0.319700 -0.351500 0.060900 0.864000 -0.376000 0.328000 +-0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 +-0.300000 -0.305300 0.060900 0.512000 -0.568000 0.632000 +-0.300000 -0.301200 0.065200 0.504000 -0.568000 0.640000 +-0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 +-0.295000 -0.301200 0.060900 0.472000 -0.584000 0.648000 +-0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 +-0.650000 -0.301200 0.185200 -0.152000 0.008000 0.984000 +-0.650000 -0.351500 0.187800 -0.272000 -0.048000 0.952000 +-0.600000 -0.301200 0.196400 -0.152000 0.176000 0.968000 +-0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 +-0.550000 -0.301200 0.200100 -0.040000 0.312000 0.944000 +-0.550000 -0.351500 0.211500 0.000000 0.128000 0.984000 +-0.500000 -0.301200 0.199600 -0.128000 0.216000 0.960000 +-0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 +-0.450000 -0.301200 0.203900 0.032000 0.168000 0.984000 +-0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 +-0.400000 -0.301200 0.211000 0.416000 0.000000 0.904000 +-0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 +-0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 +-0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 +-0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 +-0.350000 -0.351500 0.138600 0.680000 -0.440000 0.568000 +-0.327200 -0.301200 0.121900 0.792000 -0.368000 0.472000 +-0.341600 -0.351500 0.121900 0.808000 -0.352000 0.456000 +-0.350000 -0.351500 0.138600 0.680000 -0.440000 0.568000 +-0.350000 -0.369000 0.121900 0.736000 -0.464000 0.480000 +-0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 +-0.400000 -0.397400 0.121900 0.632000 -0.672000 0.368000 +-0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 +-0.404400 -0.401700 0.121900 0.648000 -0.656000 0.368000 +-0.445800 -0.401700 0.182900 0.648000 -0.488000 0.568000 +-0.447800 -0.451900 0.121900 0.672000 -0.648000 0.344000 +-0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 +-0.450000 -0.451900 0.126400 0.752000 -0.472000 0.448000 +-0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 +-0.500000 -0.451900 0.177400 0.160000 -0.648000 0.736000 +-0.523100 -0.451900 0.182900 0.136000 -0.648000 0.744000 +-0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 +-0.550000 -0.451900 0.188900 -0.024000 -0.624000 0.776000 +-0.500000 -0.401700 0.210500 0.208000 -0.296000 0.928000 +-0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 +-0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 +-0.550000 -0.351500 0.211500 0.000000 0.128000 0.984000 +-0.550000 -0.401700 0.218500 0.000000 -0.272000 0.960000 +-0.600000 -0.351500 0.201700 -0.216000 0.016000 0.968000 +-0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 +-0.600000 -0.401700 0.205900 -0.320000 -0.144000 0.928000 +-0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 +-0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 +-0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 +-0.500000 -0.251000 0.185100 -0.112000 0.632000 0.760000 +-0.450000 -0.233700 0.182900 -0.216000 0.472000 0.848000 +-0.450000 -0.251000 0.195400 -0.152000 0.392000 0.904000 +-0.400000 -0.206800 0.182900 -0.168000 0.424000 0.880000 +-0.400000 -0.251000 0.203200 0.024000 0.208000 0.976000 +-0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 +-0.350000 -0.251000 0.206900 0.584000 -0.272000 0.760000 +-0.350000 -0.200800 0.190300 -0.112000 0.384000 0.912000 +-0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 +-0.300000 -0.200800 0.189700 0.744000 -0.432000 0.496000 +-0.300000 -0.205800 0.182900 0.768000 -0.472000 0.416000 +-0.296900 -0.200800 0.182900 0.792000 -0.440000 0.408000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.278100 -0.200800 0.121900 0.816000 -0.432000 0.368000 +-0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 +-0.250000 -0.200800 0.078600 0.664000 -0.312000 0.672000 +-0.250000 -0.251000 0.071500 0.528000 -0.408000 0.736000 +-0.222100 -0.200800 0.060900 0.488000 -0.184000 0.848000 +-0.236900 -0.251000 0.060900 0.464000 -0.480000 0.728000 +-0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 +-0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 +-0.200000 -0.251000 0.018200 0.408000 -0.392000 0.816000 +-0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 +-0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 +-0.500000 -0.351500 0.209200 0.072000 0.104000 0.984000 +-0.450000 -0.401700 0.188700 0.656000 -0.464000 0.584000 +-0.500000 -0.401700 0.210500 0.208000 -0.296000 0.928000 +-0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 +-0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 +-0.500000 -0.444100 0.182900 0.168000 -0.480000 0.848000 +-0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 +-0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 +-0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 +-0.450000 -0.351500 0.215900 0.592000 -0.216000 0.768000 +-0.445800 -0.401700 0.182900 0.648000 -0.488000 0.568000 +-0.450000 -0.401700 0.188700 0.656000 -0.464000 0.584000 +-0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 +-0.450000 -0.407300 0.182900 0.664000 -0.488000 0.552000 +-0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 +-0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 +-0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 +-0.350000 -0.200800 0.190300 -0.112000 0.384000 0.912000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.300000 -0.200800 0.189700 0.744000 -0.432000 0.496000 +-0.300000 -0.150600 0.190700 0.000000 0.520000 0.848000 +-0.296900 -0.200800 0.182900 0.792000 -0.440000 0.408000 +-0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 +-0.278100 -0.200800 0.121900 0.816000 -0.432000 0.368000 +-0.252800 -0.150600 0.121900 0.720000 -0.296000 0.616000 +-0.250000 -0.200800 0.078600 0.664000 -0.312000 0.672000 +-0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 +-0.222100 -0.200800 0.060900 0.488000 -0.184000 0.848000 +-0.212600 -0.150600 0.060900 0.712000 -0.216000 0.664000 +-0.200000 -0.200800 0.045500 0.568000 -0.152000 0.808000 +-0.200000 -0.150600 0.042600 0.640000 -0.096000 0.752000 +-0.212600 -0.150600 0.060900 0.712000 -0.216000 0.664000 +-0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 +-0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 +-0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 +-0.250000 -0.144000 0.121900 0.720000 -0.312000 0.608000 +-0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 +-0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 +-0.247100 -0.050200 0.121900 0.488000 0.512000 0.696000 +-0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 +-0.250000 -0.048000 0.121900 0.272000 0.640000 0.704000 +-0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 +-0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 +-0.300000 -0.050200 0.104800 -0.312000 0.512000 0.792000 +-0.300000 0.000000 0.088800 -0.240000 0.432000 0.864000 +-0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 +-0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 +-0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 +-0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.373100 0.000000 0.000000 -0.880000 0.240000 0.392000 +-0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 +-0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 +-0.400000 -0.050200 -0.003200 -0.712000 0.672000 0.168000 +-0.400000 -0.037800 -0.060900 -0.728000 0.664000 0.152000 +-0.406900 -0.050200 -0.060900 -0.848000 0.520000 0.000000 +-0.400000 -0.050200 -0.118700 -0.832000 0.528000 -0.160000 +-0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 +-0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 +-0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 +-0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 +-0.450000 -0.111500 -0.121900 -0.376000 0.896000 -0.224000 +-0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 +-0.450000 -0.128500 -0.182900 -0.504000 0.800000 -0.296000 +-0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 +-0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 +-0.400000 -0.131400 -0.243900 -0.384000 0.744000 -0.536000 +-0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 +-0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 +-0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 +-0.400000 -0.174400 -0.304800 -0.224000 0.736000 -0.632000 +-0.450000 -0.186700 -0.304800 -0.216000 0.808000 -0.528000 +-0.400000 -0.200800 -0.333600 -0.064000 0.568000 -0.816000 +-0.450000 -0.200800 -0.327900 -0.112000 0.704000 -0.696000 +-0.400000 -0.239300 -0.365800 0.048000 0.512000 -0.848000 +-0.450000 -0.235000 -0.365800 -0.016000 0.592000 -0.800000 +-0.400000 -0.251000 -0.373300 0.080000 0.400000 -0.904000 +-0.450000 -0.251000 -0.376500 0.032000 0.432000 -0.896000 +-0.400000 -0.301200 -0.390900 0.144000 0.296000 -0.936000 +-0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 +-0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 +-0.450000 -0.351500 -0.418600 0.080000 0.512000 -0.848000 +-0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 +-0.500000 -0.351500 -0.423900 0.056000 0.504000 -0.856000 +-0.500000 -0.301200 -0.402500 0.040000 0.344000 -0.936000 +-0.450000 -0.301200 -0.399100 0.080000 0.320000 -0.936000 +-0.500000 -0.251000 -0.377000 -0.032000 0.528000 -0.840000 +-0.450000 -0.251000 -0.376500 0.032000 0.432000 -0.896000 +-0.500000 -0.238600 -0.365800 -0.072000 0.656000 -0.744000 +-0.450000 -0.235000 -0.365800 -0.016000 0.592000 -0.800000 +-0.500000 -0.200800 -0.313000 -0.112000 0.824000 -0.544000 +-0.450000 -0.200800 -0.327900 -0.112000 0.704000 -0.696000 +-0.500000 -0.196700 -0.304800 -0.120000 0.848000 -0.504000 +-0.450000 -0.186700 -0.304800 -0.216000 0.808000 -0.528000 +-0.500000 -0.169200 -0.243900 -0.328000 0.880000 -0.312000 +-0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 +-0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 +-0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 +-0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 +-0.450000 -0.128500 -0.182900 -0.504000 0.800000 -0.296000 +-0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 +-0.450000 -0.111500 -0.121900 -0.376000 0.896000 -0.224000 +-0.500000 -0.144400 -0.121900 -0.376000 0.880000 -0.280000 +-0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 +-0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 +-0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 +-0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 +-0.450000 -0.100400 -0.057100 -0.400000 0.872000 0.264000 +-0.450000 -0.112700 0.000000 -0.520000 0.784000 0.320000 +-0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 +-0.450000 -0.136300 0.060900 -0.512000 0.720000 0.448000 +-0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 +-0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 +-0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 +-0.414900 -0.150600 0.121900 -0.424000 0.616000 0.648000 +-0.400000 -0.140400 0.121900 -0.448000 0.624000 0.632000 +-0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.350000 -0.150600 0.151300 -0.584000 0.352000 0.720000 +-0.350000 -0.100400 0.123500 -0.608000 0.328000 0.712000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.300000 -0.100400 0.149000 -0.304000 0.432000 0.840000 +-0.300000 -0.142200 0.182900 0.000000 0.616000 0.776000 +-0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 +-0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 +-0.250000 -0.144000 0.121900 0.720000 -0.312000 0.608000 +-0.252800 -0.150600 0.121900 0.720000 -0.296000 0.616000 +-0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 +-0.250000 -0.150600 0.117900 0.712000 -0.320000 0.616000 +-0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 +-0.400000 -0.351500 0.196700 0.560000 -0.576000 0.584000 +-0.389000 -0.351500 0.182900 0.544000 -0.632000 0.536000 +-0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 +-0.400000 -0.359600 0.182900 0.520000 -0.680000 0.496000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.300000 -0.142200 0.182900 0.000000 0.616000 0.776000 +-0.300000 -0.150600 0.190700 0.000000 0.520000 0.848000 +-0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 +-0.288800 -0.150600 0.182900 0.600000 0.360000 0.712000 +0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 +0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 +0.600000 0.327100 0.182900 -0.144000 0.552000 0.816000 +0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 +0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 +0.650000 0.301200 0.190400 0.408000 0.464000 0.776000 +0.660200 0.301200 0.182900 0.480000 0.488000 0.720000 +0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 +0.700000 0.263400 0.182900 0.512000 0.536000 0.664000 +0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 +0.711700 0.251000 0.182900 0.560000 0.528000 0.624000 +0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 +0.750000 0.208300 0.182900 0.448000 0.624000 0.632000 +0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 +0.761100 0.200800 0.182900 0.432000 0.472000 0.760000 +0.750000 0.150600 0.201100 0.320000 0.240000 0.912000 +0.797300 0.150600 0.182900 0.336000 0.288000 0.888000 +0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 +0.800000 0.148000 0.182900 0.424000 0.336000 0.832000 +0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 +0.850000 0.129700 0.182900 0.408000 0.752000 0.504000 +0.850000 0.100400 0.222500 0.440000 0.584000 0.672000 +0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.900000 0.093100 0.182900 0.568000 0.672000 0.464000 +0.900000 0.050200 0.226800 0.488000 0.496000 0.712000 +0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +0.950000 0.037400 0.182900 0.520000 0.504000 0.680000 +0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 +1.000000 0.004900 0.182900 0.336000 0.520000 0.776000 +1.000000 0.000000 0.186800 0.376000 0.128000 0.912000 +0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 +1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 +0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 +0.975800 -0.050200 0.182900 0.464000 -0.232000 0.848000 +0.950000 -0.100400 0.196500 0.208000 -0.704000 0.672000 +0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 +0.950000 -0.108800 0.182900 0.232000 -0.768000 0.584000 +1.000000 -0.100400 0.134700 0.432000 -0.528000 0.720000 +0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 +1.000000 -0.126300 0.121900 0.016000 -0.480000 0.872000 +0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 +1.000000 -0.150600 0.101600 -0.080000 -0.576000 0.808000 +0.950000 -0.158100 0.060900 -0.608000 -0.760000 0.200000 +1.000000 -0.176100 0.060900 -0.688000 -0.632000 0.336000 +0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 +1.000000 -0.200800 0.012500 -0.656000 -0.696000 0.264000 +0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 +1.000000 -0.204500 0.000000 -0.624000 -0.728000 0.256000 +0.973000 -0.200800 -0.060900 -0.584000 -0.760000 0.264000 +1.000000 -0.224100 -0.060900 -0.616000 -0.728000 0.280000 +0.950500 -0.200800 -0.121900 -0.632000 -0.744000 0.192000 +1.000000 -0.243600 -0.121900 -0.640000 -0.736000 0.184000 +0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 +1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 +0.950000 -0.211700 -0.182900 -0.704000 -0.680000 0.176000 +0.993400 -0.251000 -0.182900 -0.736000 -0.640000 0.200000 +0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 +0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 +0.950000 -0.251000 -0.295200 -0.640000 -0.496000 0.576000 +1.000000 -0.277900 -0.243900 -0.712000 -0.592000 0.360000 +0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 +1.000000 -0.301200 -0.291200 -0.640000 -0.488000 0.576000 +0.989600 -0.301200 -0.304800 -0.816000 -0.560000 0.128000 +1.000000 -0.316200 -0.304800 -0.800000 -0.552000 0.224000 +1.000000 -0.301200 -0.328200 -0.784000 -0.440000 -0.424000 +0.989600 -0.301200 -0.304800 -0.816000 -0.560000 0.128000 +1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 +0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 +0.950000 -0.251000 -0.328200 -0.712000 -0.568000 -0.392000 +0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 +0.950000 -0.200800 -0.357000 -0.272000 -0.104000 -0.952000 +0.911900 -0.200800 -0.304800 -0.864000 -0.480000 -0.128000 +0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 +0.900000 -0.181100 -0.304800 -0.768000 -0.440000 -0.448000 +0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 +0.883200 -0.150600 -0.304800 -0.864000 -0.368000 -0.320000 +0.900000 -0.100400 -0.341700 -0.464000 -0.104000 -0.872000 +0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 +0.900000 -0.050200 -0.348300 -0.256000 0.192000 -0.944000 +0.867300 -0.050200 -0.304800 -0.784000 -0.136000 -0.600000 +0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 +0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 +0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 +0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 +0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 +0.850000 0.042400 -0.243900 -0.408000 0.528000 -0.736000 +0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 +0.850000 0.050200 -0.237100 -0.376000 0.576000 -0.720000 +0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 +0.850000 0.100400 -0.218500 0.128000 0.592000 -0.784000 +0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 +0.850000 0.127100 -0.182900 0.192000 0.744000 -0.632000 +0.900000 0.111100 -0.182900 0.552000 0.712000 -0.416000 +0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 +0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 +0.859300 0.150600 -0.121900 0.456000 0.840000 -0.272000 +0.900000 0.143500 -0.060900 0.528000 0.808000 -0.240000 +0.888500 0.150600 -0.060900 0.504000 0.856000 -0.040000 +0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 +0.867700 0.150600 0.000000 0.552000 0.816000 0.152000 +0.900000 0.118900 0.060900 0.472000 0.856000 0.184000 +0.855400 0.150600 0.060900 0.680000 0.720000 0.072000 +0.900000 0.107300 0.121900 0.512000 0.832000 0.184000 +0.850900 0.150600 0.121900 0.704000 0.704000 0.080000 +0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 +0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 +0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 +0.850000 0.129700 0.182900 0.408000 0.752000 0.504000 +0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 +0.800000 0.148000 0.182900 0.424000 0.336000 0.832000 +0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 +0.797300 0.150600 0.182900 0.336000 0.288000 0.888000 +0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 +0.761100 0.200800 0.182900 0.432000 0.472000 0.760000 +0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 +0.750000 0.208300 0.182900 0.448000 0.624000 0.632000 +0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 +0.711700 0.251000 0.182900 0.560000 0.528000 0.624000 +0.736800 0.251000 0.121900 0.752000 0.632000 0.144000 +0.700000 0.263400 0.182900 0.512000 0.536000 0.664000 +0.700000 0.297800 0.121900 0.728000 0.680000 -0.032000 +0.660200 0.301200 0.182900 0.480000 0.488000 0.720000 +0.696500 0.301200 0.121900 0.712000 0.672000 0.168000 +0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 +0.653800 0.351500 0.121900 0.656000 0.616000 0.424000 +0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 +0.650000 0.355500 0.121900 0.632000 0.632000 0.432000 +0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 +0.600000 0.382600 0.121900 0.272000 0.776000 0.560000 +0.566500 0.351500 0.121900 -0.632000 0.576000 0.496000 +0.600000 0.401700 0.085900 0.096000 0.928000 0.336000 +0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 +0.584600 0.401700 0.060900 -0.416000 0.872000 0.248000 +0.550000 0.359900 0.060900 -0.592000 0.640000 0.480000 +0.568400 0.401700 0.000000 -0.472000 0.832000 -0.264000 +0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 +0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 +0.550000 0.398000 -0.060900 0.000000 0.968000 -0.216000 +0.600000 0.400600 -0.060900 -0.072000 0.912000 -0.384000 +0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 +0.600000 0.351500 -0.101600 0.448000 0.496000 -0.736000 +0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 +0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 +0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 +0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 +0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 +0.600000 0.256700 -0.182900 0.328000 0.496000 -0.792000 +0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 +0.600000 0.251000 -0.187000 0.320000 0.456000 -0.816000 +0.550000 0.251000 -0.199600 0.176000 0.288000 -0.936000 +0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 +0.550000 0.200800 -0.211100 0.016000 0.048000 -0.992000 +0.600000 0.150600 -0.225200 0.008000 0.128000 -0.984000 +0.550000 0.150600 -0.215400 -0.144000 0.080000 -0.984000 +0.600000 0.100400 -0.237100 -0.096000 0.168000 -0.976000 +0.550000 0.100400 -0.212600 -0.200000 0.352000 -0.904000 +0.600000 0.076600 -0.243900 -0.096000 0.360000 -0.920000 +0.550000 0.067800 -0.243900 0.024000 0.672000 -0.728000 +0.600000 0.050200 -0.251100 0.248000 0.344000 -0.896000 +0.550000 0.050200 -0.258400 0.160000 0.632000 -0.752000 +0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 +0.550000 0.015600 -0.304800 0.472000 0.712000 -0.512000 +0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 +0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 +0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 +0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 +0.550000 -0.083700 -0.304800 0.088000 -0.736000 -0.664000 +0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 +0.500000 -0.082600 -0.304800 0.216000 -0.680000 -0.688000 +0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 +0.475800 -0.100400 -0.304800 0.512000 -0.104000 -0.848000 +0.450000 -0.100400 -0.322200 0.392000 -0.360000 -0.840000 +0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 +0.450000 -0.150600 -0.321300 -0.008000 0.120000 -0.992000 +0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 +0.450000 -0.200800 -0.331300 -0.472000 -0.400000 -0.776000 +0.500000 -0.200800 -0.334200 -0.376000 -0.448000 -0.800000 +0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 +0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 +0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 +0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 +0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 +0.500000 -0.282700 -0.243900 -0.568000 -0.592000 -0.560000 +0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 +0.500000 -0.288400 -0.182900 -0.520000 -0.656000 0.528000 +0.450000 -0.255300 -0.182900 -0.208000 -0.656000 0.712000 +0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 +0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 +0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 +0.450000 -0.227100 -0.121900 -0.296000 -0.712000 0.624000 +0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 +0.450000 -0.200800 -0.072200 -0.256000 -0.536000 0.800000 +0.491400 -0.200800 -0.060900 -0.168000 -0.584000 0.784000 +0.450000 -0.150600 -0.064700 -0.192000 0.128000 0.968000 +0.463100 -0.150600 -0.060900 -0.168000 0.352000 0.912000 +0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 +0.500000 -0.139000 -0.060900 0.080000 0.536000 0.832000 +0.500000 -0.100400 -0.086800 -0.048000 0.256000 0.960000 +0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 +0.550000 -0.100400 -0.076900 0.056000 0.056000 0.992000 +0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 +0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 +0.600000 -0.150600 -0.093600 0.304000 0.568000 0.752000 +0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 +0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 +0.650000 -0.146100 -0.121900 0.720000 0.504000 0.464000 +0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 +0.650000 -0.117900 -0.182900 0.792000 0.600000 0.024000 +0.675300 -0.150600 -0.182900 0.768000 0.552000 0.296000 +0.650000 -0.120200 -0.243900 0.704000 0.520000 -0.472000 +0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 +0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 +0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 +0.650000 -0.200800 -0.297000 0.088000 0.616000 -0.776000 +0.700000 -0.200800 -0.294000 0.576000 0.608000 -0.536000 +0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 +0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 +0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 +0.700000 -0.251000 -0.357800 0.296000 0.496000 -0.808000 +0.678000 -0.251000 -0.365800 0.264000 0.520000 -0.808000 +0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 +0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 +0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 +0.600000 -0.288400 -0.365800 -0.376000 -0.712000 -0.584000 +0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 +0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 +0.567500 -0.301200 -0.304800 -0.696000 0.400000 -0.584000 +0.550000 -0.251000 -0.326800 -0.648000 -0.504000 -0.560000 +0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 +0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 +0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 +0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 +0.513800 -0.301200 -0.243900 -0.728000 0.592000 -0.328000 +0.500000 -0.282700 -0.243900 -0.568000 -0.592000 -0.560000 +0.511800 -0.301200 -0.182900 -0.912000 0.352000 0.176000 +0.500000 -0.288400 -0.182900 -0.520000 -0.656000 0.528000 +0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 +0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 +0.550000 -0.300100 -0.121900 -0.624000 -0.616000 0.472000 +0.501100 -0.251000 -0.121900 -0.552000 -0.624000 0.544000 +0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 +0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 +0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 +0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 +0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 +0.500000 -0.200800 -0.058700 -0.200000 -0.576000 0.784000 +0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 +0.500000 -0.150600 -0.051600 0.024000 0.352000 0.928000 +0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 +0.500000 -0.139000 -0.060900 0.080000 0.536000 0.832000 +0.500000 -0.150600 -0.051600 0.024000 0.352000 0.928000 +0.463100 -0.150600 -0.060900 -0.168000 0.352000 0.912000 +0.500000 -0.200800 -0.058700 -0.200000 -0.576000 0.784000 +0.491400 -0.200800 -0.060900 -0.168000 -0.584000 0.784000 +0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 +0.500000 -0.203100 -0.060900 -0.256000 -0.616000 0.736000 +0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 +0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 +0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 +0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 +0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 +0.550000 0.251000 0.125100 -0.872000 -0.184000 0.440000 +0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 +0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 +0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 +0.533200 0.251000 0.060900 -0.856000 0.032000 0.512000 +0.526500 0.301200 0.060900 -0.896000 0.008000 0.432000 +0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 +0.500000 0.301200 0.002700 -0.768000 -0.080000 0.624000 +0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 +0.497900 0.301200 0.000000 -0.728000 -0.144000 0.664000 +0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 +0.450000 0.301200 -0.039700 -0.448000 -0.256000 0.848000 +0.450000 0.251000 -0.039600 -0.400000 -0.080000 0.904000 +0.400000 0.301200 -0.051900 -0.168000 -0.472000 0.856000 +0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 +0.353900 0.301200 -0.060900 -0.128000 -0.544000 0.824000 +0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 +0.350000 0.301200 -0.062100 -0.176000 -0.704000 0.680000 +0.350000 0.251000 -0.088400 -0.448000 -0.320000 0.824000 +0.300000 0.301200 -0.077400 -0.160000 -0.712000 0.680000 +0.300000 0.251000 -0.114600 -0.168000 -0.536000 0.824000 +0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 +0.271900 0.251000 -0.121900 -0.240000 -0.760000 0.592000 +0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 +0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 +0.250000 0.284000 -0.182900 -0.096000 -0.256000 -0.952000 +0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 +0.250000 0.301200 -0.184400 -0.080000 -0.056000 -0.992000 +0.300000 0.301200 -0.184400 -0.064000 -0.072000 -0.992000 +0.250000 0.351500 -0.189100 -0.160000 0.168000 -0.968000 +0.300000 0.351500 -0.193900 -0.008000 0.064000 -0.992000 +0.250000 0.370000 -0.182900 -0.184000 0.304000 -0.928000 +0.300000 0.379400 -0.182900 -0.016000 0.272000 -0.960000 +0.250000 0.401700 -0.172700 -0.016000 0.288000 -0.952000 +0.300000 0.401700 -0.174800 0.040000 0.368000 -0.920000 +0.250000 0.451900 -0.137900 0.128000 0.536000 -0.824000 +0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 +0.250000 0.466900 -0.121900 0.232000 0.968000 0.016000 +0.300000 0.458100 -0.121900 0.224000 0.952000 -0.176000 +0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 +0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 +0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 +0.300000 0.430700 -0.060900 0.128000 0.808000 0.568000 +0.250000 0.401700 -0.026800 -0.216000 0.176000 0.952000 +0.300000 0.401700 -0.022200 0.096000 0.472000 0.864000 +0.250000 0.351500 -0.020200 -0.488000 -0.416000 0.760000 +0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 +0.250000 0.317900 -0.060900 -0.432000 -0.680000 0.584000 +0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 +0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 +0.300000 0.301200 -0.077400 -0.160000 -0.712000 0.680000 +0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 +0.350000 0.301200 -0.062100 -0.176000 -0.704000 0.680000 +0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 +0.353900 0.301200 -0.060900 -0.128000 -0.544000 0.824000 +0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 +0.400000 0.301200 -0.051900 -0.168000 -0.472000 0.856000 +0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 +0.450000 0.301200 -0.039700 -0.448000 -0.256000 0.848000 +0.450000 0.351500 -0.003200 -0.296000 0.344000 0.888000 +0.497900 0.301200 0.000000 -0.728000 -0.144000 0.664000 +0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 +0.500000 0.301200 0.002700 -0.768000 -0.080000 0.624000 +0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 +0.526500 0.301200 0.060900 -0.896000 0.008000 0.432000 +0.540600 0.351500 0.060900 -0.584000 0.632000 0.496000 +0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 +0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 +0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 +0.566500 0.351500 0.121900 -0.632000 0.576000 0.496000 +0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 +0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 +0.577700 0.301200 0.182900 -0.536000 0.272000 0.792000 +0.600000 0.327100 0.182900 -0.144000 0.552000 0.816000 +0.600000 0.351500 0.157200 -0.376000 0.584000 0.704000 +0.650000 0.311500 0.182900 0.424000 0.496000 0.752000 +0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 +0.650000 0.351500 0.128300 0.616000 0.616000 0.480000 +0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 +0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 +0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 +0.600000 0.211800 0.182900 -0.672000 -0.280000 0.672000 +0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 +0.604600 0.200800 0.182900 -0.672000 -0.288000 0.664000 +0.650000 0.200800 0.219700 -0.496000 -0.256000 0.824000 +0.641000 0.150600 0.182900 -0.528000 -0.464000 0.696000 +0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 +0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 +0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 +0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 +0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 +0.700000 0.088000 0.182900 -0.464000 -0.608000 0.640000 +0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 +0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 +0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 +0.762700 0.050200 0.182900 -0.512000 -0.672000 0.520000 +0.800000 0.050200 0.211000 -0.336000 -0.552000 0.752000 +0.800000 0.035400 0.182900 -0.432000 -0.808000 0.384000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.846600 0.000000 0.182900 -0.736000 -0.616000 0.264000 +0.850000 0.000000 0.194300 -0.704000 -0.640000 0.296000 +0.850000 -0.004200 0.182900 -0.720000 -0.616000 0.288000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +0.880500 -0.050200 0.182900 -0.744000 -0.528000 0.384000 +0.900000 -0.050200 0.230400 -0.448000 -0.568000 0.680000 +0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 +0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 +0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 +0.950000 -0.100400 0.196500 0.208000 -0.704000 0.672000 +0.950000 -0.108800 0.182900 0.232000 -0.768000 0.584000 +0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 +0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 +0.900000 -0.100400 0.145900 -0.608000 -0.728000 0.304000 +0.900000 -0.107100 0.121900 -0.584000 -0.768000 0.240000 +0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 +0.900000 -0.117100 0.060900 -0.656000 -0.736000 0.136000 +0.881900 -0.100400 0.060900 -0.752000 -0.632000 0.152000 +0.900000 -0.125700 0.000000 -0.664000 -0.728000 0.136000 +0.873300 -0.100400 0.000000 -0.752000 -0.632000 0.120000 +0.900000 -0.135500 -0.060900 -0.672000 -0.712000 0.168000 +0.865600 -0.100400 -0.060900 -0.776000 -0.616000 0.120000 +0.900000 -0.148200 -0.121900 -0.664000 -0.728000 0.088000 +0.858300 -0.100400 -0.121900 -0.792000 -0.600000 0.056000 +0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 +0.858100 -0.100400 -0.182900 -0.824000 -0.552000 0.000000 +0.895100 -0.150600 -0.182900 -0.744000 -0.648000 0.104000 +0.860900 -0.100400 -0.243900 -0.856000 -0.496000 -0.072000 +0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 +0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 +0.883200 -0.150600 -0.304800 -0.864000 -0.368000 -0.320000 +0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 +0.900000 -0.181100 -0.304800 -0.768000 -0.440000 -0.448000 +0.900000 -0.163000 -0.243900 -0.816000 -0.552000 0.128000 +0.911900 -0.200800 -0.304800 -0.864000 -0.480000 -0.128000 +0.928800 -0.200800 -0.243900 -0.736000 -0.616000 0.240000 +0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 +0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 +0.950000 -0.251000 -0.295200 -0.640000 -0.496000 0.576000 +0.942100 -0.251000 -0.304800 -0.752000 -0.552000 0.344000 +0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 +0.950000 -0.261400 -0.304800 -0.752000 -0.584000 0.288000 +0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 +0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 +0.600000 0.251000 0.198700 -0.584000 -0.144000 0.792000 +0.650000 0.301200 0.190400 0.408000 0.464000 0.776000 +0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 +0.600000 0.301200 0.199900 -0.528000 0.136000 0.832000 +0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 +0.700000 0.251000 0.193900 0.488000 0.504000 0.704000 +0.650000 0.251000 0.217300 -0.016000 0.232000 0.968000 +0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 +0.650000 0.200800 0.219700 -0.496000 -0.256000 0.824000 +0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 +0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 +0.650000 0.150600 0.191100 -0.504000 -0.472000 0.720000 +0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 +0.750000 0.200800 0.191100 0.424000 0.552000 0.712000 +0.700000 0.200800 0.226400 0.328000 0.432000 0.832000 +0.750000 0.150600 0.201100 0.320000 0.240000 0.912000 +0.700000 0.150600 0.220800 -0.264000 -0.416000 0.864000 +0.750000 0.100400 0.207000 0.032000 -0.192000 0.976000 +0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 +0.700000 0.100400 0.197200 -0.456000 -0.560000 0.680000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.800000 0.050200 0.211000 -0.336000 -0.552000 0.752000 +0.850000 0.100400 0.222500 0.440000 0.584000 0.672000 +0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 +0.800000 0.100400 0.199400 -0.032000 0.024000 0.992000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +0.850000 0.000000 0.194300 -0.704000 -0.640000 0.296000 +0.900000 0.050200 0.226800 0.488000 0.496000 0.712000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.850000 0.050200 0.216300 -0.184000 -0.272000 0.936000 +0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 +0.950000 -0.050200 0.197900 0.336000 -0.192000 0.920000 +0.900000 -0.050200 0.230400 -0.448000 -0.568000 0.680000 +0.950000 0.000000 0.206500 0.400000 0.008000 0.912000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +0.900000 0.000000 0.237100 -0.176000 -0.616000 0.760000 +-0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 +-0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.950000 0.178500 0.121900 0.272000 0.648000 0.704000 +-0.900000 0.154600 0.121900 0.352000 0.624000 0.688000 +-0.950000 0.200800 0.096100 0.208000 0.672000 0.704000 +-0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 +-0.950000 0.226300 0.060900 0.264000 0.760000 0.584000 +-0.900000 0.210300 0.060900 0.312000 0.744000 0.576000 +-0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 +-0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 +-0.928700 0.251000 0.000000 0.312000 0.848000 0.408000 +-0.900000 0.251000 -0.035000 0.384000 0.864000 0.312000 +-0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 +-0.900000 0.258900 -0.060900 0.400000 0.896000 0.144000 +-0.950000 0.277400 -0.060900 0.336000 0.928000 0.080000 +-0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 +-0.950000 0.267200 -0.121900 0.344000 0.864000 -0.336000 +-0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 +-0.950000 0.251000 -0.157200 0.320000 0.808000 -0.480000 +-0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 +-0.950000 0.237800 -0.182900 0.296000 0.760000 -0.568000 +-0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 +-0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 +-0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 +-0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 +-0.900000 0.162400 -0.243900 0.336000 0.616000 -0.704000 +-0.950000 0.150600 -0.281200 0.240000 0.600000 -0.752000 +-0.900000 0.150600 -0.256300 0.328000 0.616000 -0.704000 +-0.950000 0.126000 -0.304800 0.168000 0.528000 -0.824000 +-0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 +-0.950000 0.100400 -0.325900 0.192000 0.384000 -0.896000 +-0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 +-0.950000 0.050200 -0.340200 0.184000 0.072000 -0.976000 +-0.900000 0.050200 -0.331200 0.320000 0.232000 -0.912000 +-0.950000 0.000000 -0.337100 0.184000 -0.088000 -0.976000 +-0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 +-0.950000 -0.050200 -0.337400 0.088000 0.008000 -0.992000 +-0.900000 -0.050200 -0.330000 0.160000 0.128000 -0.976000 +-0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 +-0.850000 -0.050200 -0.323400 0.248000 0.176000 -0.944000 +-0.850000 0.000000 -0.313800 0.264000 0.064000 -0.960000 +-0.808200 -0.050200 -0.304800 0.280000 0.136000 -0.944000 +-0.823600 0.000000 -0.304800 0.296000 0.080000 -0.944000 +-0.800000 -0.050200 -0.302200 0.264000 0.120000 -0.952000 +-0.800000 0.000000 -0.298500 0.248000 0.080000 -0.960000 +-0.750000 -0.050200 -0.287100 0.288000 0.040000 -0.952000 +-0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 +-0.700000 -0.050200 -0.272000 0.360000 0.104000 -0.920000 +-0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 +-0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 +-0.669700 0.000000 -0.243900 0.480000 0.312000 -0.808000 +-0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 +-0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 +-0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 +-0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 +-0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 +-0.606100 -0.050200 -0.182900 0.864000 0.248000 -0.424000 +-0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 +-0.950000 0.127100 0.182900 0.248000 0.536000 0.800000 +-0.950000 0.150600 0.154300 0.208000 0.640000 0.736000 +-0.900000 0.101900 0.182900 0.304000 0.552000 0.768000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 +-0.939400 -0.100400 0.121900 -0.456000 -0.816000 0.336000 +-0.900000 -0.100400 0.174900 -0.400000 -0.624000 0.656000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.900000 0.150600 0.126400 0.344000 0.632000 0.688000 +-0.900000 0.154600 0.121900 0.352000 0.624000 0.688000 +-0.892900 0.150600 0.121900 0.360000 0.624000 0.680000 +-0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 +-0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 +-0.879600 0.200800 0.060900 0.352000 0.712000 0.600000 +-0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 +-0.850000 0.200800 0.035600 0.384000 0.744000 0.536000 +-0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 +-0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 +-0.800000 0.195100 0.000000 0.456000 0.768000 0.432000 +-0.800000 0.200800 -0.016800 0.416000 0.840000 0.336000 +-0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 +-0.768900 0.200800 -0.060900 0.424000 0.888000 0.160000 +-0.750000 0.191300 -0.060900 0.496000 0.856000 0.072000 +-0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 +-0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 +-0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 +-0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 +-0.800000 0.163000 -0.182900 0.392000 0.688000 -0.600000 +-0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 +-0.800000 0.150600 -0.199200 0.384000 0.648000 -0.648000 +-0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 +-0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 +-0.750000 0.100400 -0.222000 0.432000 0.576000 -0.680000 +-0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 +-0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 +-0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 +-0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 +-0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 +-0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 +-0.800000 0.000000 -0.298500 0.248000 0.080000 -0.960000 +-0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 +-0.823600 0.000000 -0.304800 0.296000 0.080000 -0.944000 +-0.836500 0.050200 -0.304800 0.336000 0.344000 -0.872000 +-0.850000 0.000000 -0.313800 0.264000 0.064000 -0.960000 +-0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 +-0.900000 0.000000 -0.328400 0.216000 0.000000 -0.968000 +-0.900000 0.050200 -0.331200 0.320000 0.232000 -0.912000 +-0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 +-0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 +-0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 +-0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 +-0.850000 0.100400 -0.281200 0.344000 0.488000 -0.792000 +-0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 +-0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 +-0.900000 0.150600 -0.256300 0.328000 0.616000 -0.704000 +-0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 +-0.900000 0.162400 -0.243900 0.336000 0.616000 -0.704000 +-0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 +-0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 +-0.850000 0.188600 -0.182900 0.360000 0.712000 -0.592000 +-0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 +-0.850000 0.200800 -0.163600 0.360000 0.768000 -0.512000 +-0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 +-0.850000 0.222300 -0.121900 0.408000 0.856000 -0.296000 +-0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 +-0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 +-0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 +-0.884300 0.251000 -0.060900 0.432000 0.880000 0.144000 +-0.900000 0.258900 -0.060900 0.400000 0.896000 0.144000 +-0.900000 0.251000 -0.035000 0.384000 0.864000 0.312000 +-0.884300 0.251000 -0.060900 0.432000 0.880000 0.144000 +-0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 +-0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 +-0.850000 0.219100 0.000000 0.368000 0.824000 0.424000 +-0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 +-0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 +-0.800000 0.200800 -0.016800 0.416000 0.840000 0.336000 +-0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 +-0.768900 0.200800 -0.060900 0.424000 0.888000 0.160000 +-0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 +-0.800000 0.214400 -0.060900 0.400000 0.896000 0.176000 +-0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 +-0.850000 0.235300 -0.060900 0.408000 0.904000 0.008000 +-0.850000 0.222300 -0.121900 0.408000 0.856000 -0.296000 +-0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 +-0.850000 0.200800 -0.163600 0.360000 0.768000 -0.512000 +-0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 +-0.850000 0.188600 -0.182900 0.360000 0.712000 -0.592000 +-0.800000 0.163000 -0.182900 0.392000 0.688000 -0.600000 +-0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 +-0.800000 0.150600 -0.199200 0.384000 0.648000 -0.648000 +-0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 +-0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 +-0.850000 0.100400 -0.281200 0.344000 0.488000 -0.792000 +-0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 +-0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 +-0.800000 0.050200 -0.288900 0.352000 0.360000 -0.856000 +-0.836500 0.050200 -0.304800 0.336000 0.344000 -0.872000 +-0.850000 0.061400 -0.304800 0.336000 0.392000 -0.848000 +-0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 +-0.850000 0.050200 -0.311100 0.336000 0.328000 -0.872000 +-0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 +-0.850000 0.127100 0.121900 0.424000 0.560000 0.704000 +-0.820700 0.100400 0.121900 0.496000 0.488000 0.704000 +-0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 +-0.850000 0.100400 0.150400 0.488000 0.512000 0.696000 +-0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 +-0.839600 0.000000 0.182900 0.264000 0.152000 0.944000 +-0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 +-0.800000 0.000000 0.163200 0.400000 0.288000 0.864000 +-0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 +-0.750000 0.000000 0.129400 0.496000 0.360000 0.776000 +-0.750000 -0.050200 0.155100 0.464000 0.288000 0.832000 +-0.740500 0.000000 0.121900 0.504000 0.352000 0.784000 +-0.708600 -0.050200 0.121900 0.496000 0.344000 0.784000 +-0.700000 0.000000 0.089700 0.584000 0.336000 0.736000 +-0.700000 -0.050200 0.115300 0.496000 0.344000 0.792000 +-0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 +-0.650000 -0.050200 0.076400 0.576000 0.320000 0.744000 +-0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 +-0.635700 -0.050200 0.060900 0.640000 0.304000 0.696000 +-0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 +-0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 +-0.609800 0.000000 0.000000 0.696000 0.384000 0.592000 +-0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 +-0.600000 0.000000 -0.017800 0.736000 0.384000 0.544000 +-0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 +-0.573200 0.000000 -0.060900 0.920000 0.296000 -0.248000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 +-0.800000 -0.063400 0.182900 0.240000 0.160000 0.952000 +-0.809300 -0.050200 0.182900 0.232000 0.160000 0.952000 +-0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 +-0.800000 -0.050200 0.179900 0.264000 0.176000 0.944000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.850000 -0.137400 0.182900 -0.304000 -0.312000 0.896000 +-0.836800 -0.150600 0.182900 -0.304000 -0.304000 0.896000 +-0.850000 -0.150600 0.175600 -0.632000 -0.392000 0.664000 +-0.803100 -0.200800 0.182900 -0.456000 -0.168000 0.864000 +-0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 +-0.850000 -0.200800 0.125700 -0.776000 -0.360000 0.504000 +-0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 +-0.800000 -0.251000 0.157900 -0.576000 -0.400000 0.696000 +-0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 +-0.819200 -0.251000 0.121900 -0.760000 -0.496000 0.400000 +-0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 +-0.838400 -0.251000 0.060900 -0.808000 -0.528000 0.248000 +-0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 +-0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 +-0.800000 -0.310100 0.060900 -0.800000 -0.544000 0.224000 +-0.805900 -0.301200 0.060900 -0.800000 -0.536000 0.232000 +-0.800000 -0.327900 0.000000 -0.800000 -0.560000 0.176000 +-0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 +-0.817700 -0.301200 0.000000 -0.808000 -0.560000 0.168000 +-0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 +-0.800000 0.077200 0.121900 0.512000 0.416000 0.744000 +-0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 +-0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 +-0.800000 0.050200 0.139800 0.504000 0.392000 0.760000 +-0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 +-0.776900 -0.100400 0.182900 0.184000 0.120000 0.968000 +-0.750000 -0.100400 0.174700 0.320000 0.192000 0.920000 +-0.750000 -0.136500 0.182900 0.216000 0.112000 0.968000 +-0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 +-0.743500 -0.150600 0.182900 0.192000 0.096000 0.968000 +-0.700000 -0.150600 0.164200 0.408000 0.248000 0.872000 +-0.703900 -0.200800 0.182900 0.128000 0.064000 0.984000 +-0.700000 -0.200800 0.182200 0.152000 0.072000 0.984000 +-0.700000 -0.208700 0.182900 0.176000 0.120000 0.968000 +-0.650000 -0.200800 0.153500 0.376000 0.280000 0.872000 +-0.650000 -0.249200 0.182900 0.176000 0.464000 0.864000 +-0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 +-0.638500 -0.251000 0.182900 0.072000 0.424000 0.896000 +-0.600000 -0.251000 0.177800 0.080000 0.520000 0.840000 +-0.600000 -0.260000 0.182900 0.056000 0.320000 0.944000 +-0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 +-0.550000 -0.264400 0.182900 -0.072000 0.456000 0.880000 +-0.512000 -0.251000 0.182900 -0.112000 0.632000 0.760000 +-0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 +-0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 +-0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 +-0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 +-0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 +-0.500000 -0.196200 0.121900 -0.112000 0.784000 0.600000 +-0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 +-0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 +-0.550000 -0.166800 0.060900 0.264000 0.816000 0.504000 +-0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 +-0.550000 -0.150600 0.029600 0.504000 0.688000 0.512000 +-0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 +-0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 +-0.500000 -0.119500 -0.060900 -0.160000 0.976000 0.112000 +-0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 +-0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 +-0.533200 -0.100400 -0.060900 0.712000 0.696000 -0.024000 +-0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 +-0.750000 -0.267900 0.182900 -0.232000 -0.192000 0.944000 +-0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 +-0.700000 -0.272200 0.182900 -0.072000 -0.128000 0.984000 +-0.700000 -0.301200 0.175400 -0.248000 -0.280000 0.920000 +-0.671000 -0.301200 0.182900 -0.120000 -0.104000 0.984000 +-0.700000 -0.351500 0.155000 -0.664000 -0.344000 0.656000 +-0.663400 -0.351500 0.182900 -0.304000 -0.080000 0.944000 +-0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 +-0.650000 -0.385200 0.182900 -0.496000 -0.152000 0.848000 +-0.650000 -0.401700 0.178700 -0.552000 -0.344000 0.752000 +-0.644900 -0.401700 0.182900 -0.528000 -0.240000 0.808000 +-0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 +-0.600000 -0.446800 0.182900 -0.240000 -0.464000 0.848000 +-0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 +-0.583500 -0.451900 0.182900 -0.128000 -0.544000 0.824000 +-0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 +-0.550000 -0.456500 0.182900 0.056000 -0.736000 0.672000 +-0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 +-0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 +-0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 +-0.600000 -0.502100 0.110700 -0.280000 -0.792000 0.528000 +-0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 +-0.600000 -0.531600 0.060900 -0.448000 -0.736000 0.496000 +-0.600000 -0.502100 0.110700 -0.280000 -0.792000 0.528000 +-0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 +-0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 +-0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 +-0.650000 -0.463300 0.121900 -0.512000 -0.696000 0.496000 +-0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 +-0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 +-0.700000 -0.451900 0.063700 -0.672000 -0.600000 0.424000 +-0.700000 -0.404000 0.121900 -0.624000 -0.536000 0.560000 +-0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 +-0.701700 -0.401700 0.121900 -0.704000 -0.408000 0.568000 +-0.731300 -0.401700 0.060900 -0.784000 -0.496000 0.344000 +-0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 +-0.750000 -0.377100 0.060900 -0.760000 -0.552000 0.320000 +-0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 +-0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 +-0.767900 -0.351500 0.060900 -0.760000 -0.568000 0.296000 +-0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 +-0.750000 -0.301200 0.168400 -0.360000 -0.432000 0.816000 +-0.700000 -0.301200 0.175400 -0.248000 -0.280000 0.920000 +-0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 +-0.700000 -0.351500 0.155000 -0.664000 -0.344000 0.656000 +-0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 +-0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 +-0.701700 -0.401700 0.121900 -0.704000 -0.408000 0.568000 +-0.700000 -0.404000 0.121900 -0.624000 -0.536000 0.560000 +-0.700000 -0.401700 0.124500 -0.664000 -0.408000 0.616000 +-0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 +-0.650000 -0.401700 0.178700 -0.552000 -0.344000 0.752000 +-0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 +-0.664200 -0.451900 0.121900 -0.552000 -0.696000 0.448000 +-0.650000 -0.463300 0.121900 -0.512000 -0.696000 0.496000 +-0.650000 -0.451900 0.140100 -0.528000 -0.568000 0.624000 +-0.600000 -0.495400 0.121900 -0.392000 -0.720000 0.560000 +-0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 +-0.600000 -0.451900 0.179400 -0.216000 -0.496000 0.832000 +-0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 +-0.700000 -0.062200 0.121900 0.504000 0.344000 0.784000 +-0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 +-0.700000 -0.100400 0.138900 0.488000 0.288000 0.816000 +-0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 +-0.700000 -0.150600 0.164200 0.408000 0.248000 0.872000 +-0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 +-0.700000 -0.200800 0.182200 0.152000 0.072000 0.984000 +-0.650000 -0.200800 0.153500 0.376000 0.280000 0.872000 +-0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 +-0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 +-0.642900 -0.150600 0.121900 0.408000 0.352000 0.832000 +-0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 +-0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 +-0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 +-0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 +-0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 +-0.550000 -0.166800 0.060900 0.264000 0.816000 0.504000 +-0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 +-0.550000 -0.150600 0.029600 0.504000 0.688000 0.512000 +-0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 +-0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 +-0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 +-0.565600 -0.100400 0.000000 0.744000 0.440000 0.496000 +-0.550000 -0.125000 0.000000 0.608000 0.616000 0.488000 +-0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 +-0.550000 -0.100400 -0.036900 0.792000 0.376000 0.464000 +-0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 +-0.650000 -0.150600 0.126000 0.408000 0.336000 0.840000 +-0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 +-0.642900 -0.150600 0.121900 0.408000 0.352000 0.832000 +-0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 +-0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 +-0.612900 -0.100400 0.060900 0.624000 0.376000 0.672000 +-0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 +-0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 +-0.600000 -0.100400 0.044600 0.672000 0.336000 0.656000 +-0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 +-0.600000 -0.190600 0.121900 0.296000 0.496000 0.808000 +-0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 +-0.600000 -0.200800 0.130000 0.152000 0.560000 0.808000 +-0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 +-0.600000 -0.251000 0.177800 0.080000 0.520000 0.840000 +-0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 +-0.550000 -0.251000 0.173600 -0.016000 0.472000 0.872000 +-0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 +-0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 +-0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 +-0.500000 -0.196200 0.121900 -0.112000 0.784000 0.600000 +-0.450000 -0.173700 0.121900 -0.368000 0.648000 0.656000 +-0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 +-0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 +-0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 +-0.450000 -0.136300 0.060900 -0.512000 0.720000 0.448000 +-0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 +-0.450000 -0.112700 0.000000 -0.520000 0.784000 0.320000 +-0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 +-0.500000 -0.141000 0.000000 -0.040000 0.880000 0.456000 +-0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 +-0.500000 -0.200800 0.127000 -0.088000 0.600000 0.784000 +-0.500000 -0.249000 0.182900 -0.112000 0.656000 0.744000 +-0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 +-0.450000 -0.233700 0.182900 -0.216000 0.472000 0.848000 +-0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 +-0.400000 -0.206800 0.182900 -0.168000 0.424000 0.880000 +-0.383500 -0.200800 0.182900 -0.152000 0.448000 0.872000 +-0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 +-0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 +-0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 +-0.350000 -0.150600 0.151300 -0.584000 0.352000 0.720000 +-0.350000 -0.189600 0.182900 -0.288000 0.472000 0.824000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.311100 -0.150600 0.182900 -0.424000 0.464000 0.768000 +-0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 +-0.400000 -0.200800 0.179200 -0.200000 0.464000 0.856000 +-0.450000 -0.200800 0.150000 -0.304000 0.608000 0.720000 +-0.400000 -0.150600 0.133500 -0.392000 0.600000 0.688000 +-0.450000 -0.173700 0.121900 -0.368000 0.648000 0.656000 +-0.414900 -0.150600 0.121900 -0.424000 0.616000 0.648000 +-0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 +-0.450000 -0.150600 0.089400 -0.440000 0.744000 0.496000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.350000 -0.097900 0.121900 -0.560000 0.424000 0.704000 +-0.350000 -0.100400 0.123500 -0.608000 0.328000 0.712000 +-0.300000 -0.066800 0.121900 -0.280000 0.584000 0.752000 +-0.300000 -0.100400 0.149000 -0.304000 0.432000 0.840000 +-0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 +-0.250000 -0.100400 0.155000 0.480000 0.160000 0.856000 +-0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 +-0.250000 -0.050200 0.123600 0.200000 0.440000 0.864000 +-0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 +-0.369700 -0.301200 0.182900 0.552000 -0.328000 0.752000 +-0.350000 -0.276800 0.182900 0.600000 -0.432000 0.664000 +-0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 +-0.350000 -0.301200 0.167500 0.592000 -0.368000 0.712000 +-0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 +-0.334800 -0.251000 0.182900 0.672000 -0.480000 0.552000 +-0.300000 -0.205800 0.182900 0.768000 -0.472000 0.416000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.300000 -0.251000 0.131000 0.632000 -0.616000 0.464000 +-0.294600 -0.251000 0.121900 0.616000 -0.600000 0.488000 +-0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 +-0.300000 -0.256400 0.121900 0.624000 -0.624000 0.456000 +0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 +0.550000 0.331800 0.121900 -0.696000 0.536000 0.456000 +0.550000 0.301200 0.149100 -0.896000 -0.096000 0.416000 +0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 +0.538800 0.301200 0.121900 -0.912000 0.128000 0.376000 +0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 +0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 +0.550000 0.251000 0.125100 -0.872000 -0.184000 0.440000 +0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 +0.586200 0.251000 0.182900 -0.672000 -0.144000 0.720000 +0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 +0.600000 0.211800 0.182900 -0.672000 -0.280000 0.672000 +0.600000 0.200800 0.176700 -0.712000 -0.296000 0.624000 +0.604600 0.200800 0.182900 -0.672000 -0.288000 0.664000 +0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 +0.641000 0.150600 0.182900 -0.528000 -0.464000 0.696000 +0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 +0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 +0.627900 0.100400 0.121900 -0.608000 -0.608000 0.504000 +0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 +0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 +0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 +0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 +0.700000 0.088000 0.182900 -0.464000 -0.608000 0.640000 +0.700000 0.050200 0.131500 -0.112000 -0.824000 0.544000 +0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 +0.744700 0.050200 0.121900 0.096000 -0.864000 0.480000 +0.750000 0.050900 0.121900 0.096000 -0.792000 0.600000 +0.750000 0.050200 0.120200 -0.160000 -0.904000 0.376000 +0.751700 0.050200 0.121900 -0.392000 -0.816000 0.416000 +0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 +0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 +0.798100 0.000000 0.060900 -0.504000 -0.792000 0.312000 +0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 +0.800000 -0.001000 0.060900 -0.584000 -0.776000 0.216000 +0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 +0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 +0.850000 -0.029600 0.121900 -0.840000 -0.432000 0.312000 +0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 +0.857500 -0.050200 0.121900 -0.848000 -0.448000 0.272000 +0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 +0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 +0.881900 -0.100400 0.060900 -0.752000 -0.632000 0.152000 +0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 +0.873300 -0.100400 0.000000 -0.752000 -0.632000 0.120000 +0.850000 -0.068700 0.000000 -0.752000 -0.640000 0.136000 +0.865600 -0.100400 -0.060900 -0.776000 -0.616000 0.120000 +0.850000 -0.079400 -0.060900 -0.768000 -0.616000 0.120000 +0.858300 -0.100400 -0.121900 -0.792000 -0.600000 0.056000 +0.850000 -0.088400 -0.121900 -0.808000 -0.584000 0.016000 +0.858100 -0.100400 -0.182900 -0.824000 -0.552000 0.000000 +0.850000 -0.086900 -0.182900 -0.848000 -0.512000 -0.048000 +0.860900 -0.100400 -0.243900 -0.856000 -0.496000 -0.072000 +0.850000 -0.077200 -0.243900 -0.824000 -0.432000 -0.344000 +0.869700 -0.100400 -0.304800 -0.880000 -0.248000 -0.400000 +0.850000 -0.050200 -0.276700 -0.784000 -0.280000 -0.544000 +0.867300 -0.050200 -0.304800 -0.784000 -0.136000 -0.600000 +0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 +0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 +0.877300 0.000000 -0.304800 -0.592000 0.480000 -0.632000 +0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 +0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 +0.600000 0.200800 0.176700 -0.712000 -0.296000 0.624000 +0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 +0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 +0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 +0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 +0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 +0.538800 0.200800 0.060900 -0.824000 -0.216000 0.520000 +0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 +0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 +0.510200 0.150600 0.000000 -0.752000 -0.384000 0.520000 +0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 +0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 +0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 +0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 +0.450000 0.200800 -0.035500 -0.536000 -0.264000 0.792000 +0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 +0.416500 0.200800 -0.060900 -0.560000 -0.352000 0.744000 +0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 +0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 +0.401900 0.150600 -0.121900 -0.864000 -0.496000 -0.024000 +0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 +0.407800 0.150600 -0.182900 -0.544000 -0.240000 -0.800000 +0.400000 0.155900 -0.182900 -0.216000 -0.144000 -0.960000 +0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 +0.400000 0.200800 -0.189400 -0.152000 -0.072000 -0.984000 +0.450000 0.200800 -0.192400 -0.128000 -0.040000 -0.984000 +0.400000 0.251000 -0.186400 -0.152000 0.040000 -0.984000 +0.450000 0.251000 -0.188200 -0.104000 0.040000 -0.992000 +0.400000 0.301200 -0.184200 -0.016000 -0.016000 -0.992000 +0.450000 0.301200 -0.186200 0.000000 -0.016000 -0.992000 +0.400000 0.351500 -0.194500 0.000000 0.072000 -0.992000 +0.450000 0.351500 -0.196000 0.120000 0.128000 -0.976000 +0.400000 0.377300 -0.182900 0.016000 0.320000 -0.944000 +0.450000 0.373800 -0.182900 0.104000 0.432000 -0.888000 +0.400000 0.401700 -0.171200 0.088000 0.472000 -0.872000 +0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 +0.400000 0.432800 -0.121900 0.160000 0.904000 -0.384000 +0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 +0.400000 0.419800 -0.060900 0.080000 0.848000 0.520000 +0.450000 0.414500 -0.060900 0.192000 0.928000 0.304000 +0.400000 0.401700 -0.034800 -0.040000 0.584000 0.808000 +0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 +0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 +0.450000 0.351500 -0.003200 -0.296000 0.344000 0.888000 +0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 +0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 +0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 +0.500000 0.369100 0.000000 -0.184000 0.800000 0.552000 +0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 +0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 +0.550000 0.398000 -0.060900 0.000000 0.968000 -0.216000 +0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 +0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 +0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 +0.500000 0.393600 -0.121900 0.504000 0.744000 -0.432000 +0.488600 0.401700 -0.121900 0.504000 0.776000 -0.368000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 +0.450000 0.373800 -0.182900 0.104000 0.432000 -0.888000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.450000 0.351500 -0.196000 0.120000 0.128000 -0.976000 +0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 +0.450000 0.301200 -0.186200 0.000000 -0.016000 -0.992000 +0.500000 0.301200 -0.193500 0.168000 0.072000 -0.976000 +0.450000 0.251000 -0.188200 -0.104000 0.040000 -0.992000 +0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 +0.450000 0.200800 -0.192400 -0.128000 -0.040000 -0.984000 +0.500000 0.200800 -0.200200 -0.104000 -0.048000 -0.992000 +0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 +0.500000 0.150600 -0.194400 -0.208000 0.240000 -0.944000 +0.450000 0.100400 -0.233000 -0.008000 0.816000 -0.568000 +0.500000 0.100400 -0.210700 0.048000 0.704000 -0.704000 +0.450000 0.095300 -0.243900 -0.008000 0.856000 -0.512000 +0.500000 0.082500 -0.243900 0.216000 0.832000 -0.504000 +0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 +0.500000 0.050200 -0.303800 0.264000 0.816000 -0.504000 +0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 +0.500000 0.049600 -0.304800 0.264000 0.736000 -0.616000 +0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 +0.500000 0.014000 -0.365800 0.216000 0.784000 -0.568000 +0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 +0.500000 0.000000 -0.393700 0.528000 0.072000 -0.840000 +0.450000 0.000000 -0.377000 -0.360000 0.400000 -0.840000 +0.500000 -0.027200 -0.365800 0.264000 -0.576000 -0.768000 +0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 +0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 +0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 +0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 +0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 +0.431500 0.000000 -0.365800 -0.424000 0.312000 -0.840000 +0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 +0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 +0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 +0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 +0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 +0.450000 0.095300 -0.243900 -0.008000 0.856000 -0.512000 +0.400000 0.083700 -0.243900 -0.328000 0.768000 -0.536000 +0.450000 0.100400 -0.233000 -0.008000 0.816000 -0.568000 +0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 +0.450000 0.150600 -0.187200 -0.088000 0.168000 -0.976000 +0.400000 0.146600 -0.182900 -0.440000 0.464000 -0.760000 +0.407800 0.150600 -0.182900 -0.544000 -0.240000 -0.800000 +0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 +0.401900 0.150600 -0.121900 -0.864000 -0.496000 -0.024000 +0.415000 0.100400 -0.121900 -0.640000 0.192000 0.736000 +0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 +0.450000 0.100400 -0.090700 -0.384000 -0.320000 0.856000 +0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 +0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 +0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 +0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 +0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 +0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 +0.510200 0.150600 0.000000 -0.752000 -0.384000 0.520000 +0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 +0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 +0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 +0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 +0.593200 0.100400 0.060900 -0.640000 -0.584000 0.496000 +0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 +0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 +0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 +0.627900 0.100400 0.121900 -0.608000 -0.608000 0.504000 +0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 +0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 +0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 +0.650000 0.050200 0.073400 -0.576000 -0.624000 0.512000 +0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 +0.650000 0.041800 0.060900 -0.568000 -0.648000 0.504000 +0.602900 0.050200 0.000000 -0.576000 -0.704000 0.400000 +0.650000 0.013100 0.000000 -0.448000 -0.792000 0.392000 +0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 +0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 +0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 +0.650000 -0.010200 -0.060900 0.168000 -0.784000 0.592000 +0.600000 -0.012300 -0.060900 0.104000 -0.576000 0.800000 +0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 +0.600000 -0.050200 -0.088500 0.448000 -0.400000 0.792000 +0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 +0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 +0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 +0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 +0.638900 -0.100400 -0.182900 0.920000 0.368000 0.072000 +0.649100 -0.050200 -0.182900 0.816000 -0.544000 0.144000 +0.637300 -0.100400 -0.243900 0.848000 0.016000 -0.520000 +0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 +0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 +0.600000 -0.050200 -0.286000 0.712000 0.144000 -0.680000 +0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 +0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 +0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 +0.550000 -0.083700 -0.304800 0.088000 -0.736000 -0.664000 +0.550000 -0.100400 -0.280800 -0.008000 -0.528000 -0.840000 +0.500000 -0.082600 -0.304800 0.216000 -0.680000 -0.688000 +0.500000 -0.100400 -0.277800 0.560000 -0.104000 -0.816000 +0.475800 -0.100400 -0.304800 0.512000 -0.104000 -0.848000 +0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 +0.500000 -0.100400 -0.277800 0.560000 -0.104000 -0.816000 +0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 +0.550000 -0.100400 -0.280800 -0.008000 -0.528000 -0.840000 +0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 +0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 +0.600000 -0.150600 -0.265200 0.248000 0.032000 -0.960000 +0.600000 -0.105700 -0.304800 0.312000 -0.728000 -0.600000 +0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 +0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 +0.650000 -0.120200 -0.243900 0.704000 0.520000 -0.472000 +0.637300 -0.100400 -0.243900 0.848000 0.016000 -0.520000 +0.650000 -0.117900 -0.182900 0.792000 0.600000 0.024000 +0.638900 -0.100400 -0.182900 0.920000 0.368000 0.072000 +0.650000 -0.146100 -0.121900 0.720000 0.504000 0.464000 +0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 +0.626600 -0.100400 -0.121900 0.848000 0.208000 0.472000 +0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 +0.591100 0.150600 0.121900 -0.792000 -0.400000 0.440000 +0.600000 0.150600 0.141200 -0.712000 -0.440000 0.536000 +0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 +0.600000 0.134700 0.121900 -0.776000 -0.456000 0.424000 +0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 +0.650000 0.141000 0.182900 -0.512000 -0.488000 0.704000 +0.685300 0.100400 0.182900 -0.504000 -0.560000 0.648000 +0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 +0.650000 0.100400 0.150000 -0.536000 -0.592000 0.592000 +0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 +0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 +0.700000 0.050200 0.131500 -0.112000 -0.824000 0.544000 +0.700000 0.046100 0.121900 -0.152000 -0.904000 0.376000 +0.744700 0.050200 0.121900 0.096000 -0.864000 0.480000 +0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 +0.750000 0.050200 0.120200 -0.160000 -0.904000 0.376000 +0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 +0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 +0.750000 0.013300 0.000000 -0.240000 -0.936000 0.240000 +0.700000 0.012000 0.000000 -0.032000 -0.960000 0.272000 +0.750000 0.001600 -0.060900 -0.416000 -0.904000 -0.016000 +0.700000 0.001400 -0.060900 0.088000 -0.968000 0.192000 +0.750000 0.004300 -0.121900 -0.408000 -0.880000 -0.216000 +0.700000 0.000400 -0.121900 0.224000 -0.968000 0.032000 +0.750000 0.019900 -0.182900 -0.176000 -0.792000 -0.576000 +0.700000 0.009000 -0.182900 0.456000 -0.744000 -0.472000 +0.750000 0.050200 -0.223600 -0.168000 -0.552000 -0.808000 +0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 +0.750000 0.100400 -0.218500 0.200000 0.232000 -0.944000 +0.700000 0.100400 -0.234000 0.272000 0.000000 -0.960000 +0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 +0.700000 0.150600 -0.210500 0.296000 0.424000 -0.848000 +0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 +0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 +0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 +0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 +0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 +0.700000 0.229200 -0.121900 0.528000 0.656000 -0.528000 +0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 +0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 +0.750000 0.228900 -0.060900 0.576000 0.696000 -0.416000 +0.725300 0.251000 -0.060900 0.696000 0.648000 -0.288000 +0.750000 0.219200 0.000000 0.672000 0.728000 0.080000 +0.721000 0.251000 0.000000 0.784000 0.608000 -0.040000 +0.750000 0.222200 0.060900 0.704000 0.696000 -0.080000 +0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 +0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 +0.736800 0.251000 0.121900 0.752000 0.632000 0.144000 +0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 +0.700000 0.297800 0.121900 0.728000 0.680000 -0.032000 +0.700000 0.290800 0.060900 0.800000 0.576000 -0.104000 +0.696500 0.301200 0.121900 0.712000 0.672000 0.168000 +0.692400 0.301200 0.060900 0.752000 0.648000 -0.056000 +0.653800 0.351500 0.121900 0.656000 0.616000 0.424000 +0.663900 0.351500 0.060900 0.768000 0.624000 0.096000 +0.650000 0.355500 0.121900 0.632000 0.632000 0.432000 +0.650000 0.370100 0.060900 0.776000 0.624000 0.048000 +0.600000 0.382600 0.121900 0.272000 0.776000 0.560000 +0.612200 0.401700 0.060900 0.488000 0.832000 0.224000 +0.600000 0.401700 0.085900 0.096000 0.928000 0.336000 +0.600000 0.407100 0.060900 0.120000 0.968000 0.184000 +0.584600 0.401700 0.060900 -0.416000 0.872000 0.248000 +0.600000 0.410900 0.000000 0.104000 0.992000 -0.032000 +0.568400 0.401700 0.000000 -0.472000 0.832000 -0.264000 +0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 +0.600000 0.410900 0.000000 0.104000 0.992000 -0.032000 +0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 +0.600000 0.407100 0.060900 0.120000 0.968000 0.184000 +0.612200 0.401700 0.060900 0.488000 0.832000 0.224000 +0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 +0.650000 0.370100 0.060900 0.776000 0.624000 0.048000 +0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 +0.663900 0.351500 0.060900 0.768000 0.624000 0.096000 +0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 +0.692400 0.301200 0.060900 0.752000 0.648000 -0.056000 +0.685300 0.301200 0.000000 0.832000 0.536000 -0.104000 +0.700000 0.290800 0.060900 0.800000 0.576000 -0.104000 +0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 +0.727500 0.251000 0.060900 0.792000 0.584000 -0.112000 +0.721000 0.251000 0.000000 0.784000 0.608000 -0.040000 +0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 +0.725300 0.251000 -0.060900 0.696000 0.648000 -0.288000 +0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 +0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 +0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 +0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 +0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 +0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 +0.608400 0.301200 -0.121900 0.448000 0.488000 -0.744000 +0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 +0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 +0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 +0.600000 0.256700 -0.182900 0.328000 0.496000 -0.792000 +0.600000 0.251000 -0.187000 0.320000 0.456000 -0.816000 +0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 +0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 +0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 +0.650000 0.200800 -0.204000 0.272000 0.408000 -0.864000 +0.687200 0.200800 -0.182900 0.432000 0.544000 -0.712000 +0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 +0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 +0.700000 0.150600 -0.210500 0.296000 0.424000 -0.848000 +0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 +0.700000 0.100400 -0.234000 0.272000 0.000000 -0.960000 +0.650000 0.100400 -0.241400 0.232000 0.064000 -0.968000 +0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 +0.650000 0.067400 -0.243900 0.208000 0.056000 -0.968000 +0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 +0.650000 0.050200 -0.244900 0.216000 0.040000 -0.968000 +0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 +0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 +0.650000 -0.016900 -0.243900 0.704000 -0.184000 -0.672000 +0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 +0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 +0.600000 -0.050200 -0.286000 0.712000 0.144000 -0.680000 +0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 +0.587300 -0.050200 -0.304800 0.688000 0.056000 -0.712000 +0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 +0.578400 0.000000 -0.304800 0.536000 0.480000 -0.688000 +0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 +0.750000 0.062100 0.182900 -0.416000 -0.632000 0.648000 +0.750000 0.050900 0.121900 0.096000 -0.792000 0.600000 +0.762700 0.050200 0.182900 -0.512000 -0.672000 0.520000 +0.751700 0.050200 0.121900 -0.392000 -0.816000 0.416000 +0.800000 0.035400 0.182900 -0.432000 -0.808000 0.384000 +0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 +0.846600 0.000000 0.182900 -0.736000 -0.616000 0.264000 +0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 +0.850000 -0.004200 0.182900 -0.720000 -0.616000 0.288000 +0.850000 -0.029600 0.121900 -0.840000 -0.432000 0.312000 +0.880500 -0.050200 0.182900 -0.744000 -0.528000 0.384000 +0.857500 -0.050200 0.121900 -0.848000 -0.448000 0.272000 +0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 +0.892500 -0.100400 0.121900 -0.688000 -0.680000 0.240000 +0.900000 -0.100400 0.145900 -0.608000 -0.728000 0.304000 +0.900000 -0.076800 0.182900 -0.504000 -0.624000 0.592000 +0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 +0.934300 -0.100400 0.182900 -0.392000 -0.752000 0.520000 +0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 +0.800000 0.150600 0.181400 0.520000 0.336000 0.776000 +0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 +0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 +0.850000 0.151600 0.121900 0.680000 0.720000 0.080000 +0.800000 0.182100 0.060900 0.560000 0.824000 -0.024000 +0.850000 0.154700 0.060900 0.576000 0.800000 0.096000 +0.800000 0.184600 0.000000 0.464000 0.872000 0.120000 +0.850000 0.161100 0.000000 0.480000 0.856000 0.160000 +0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 +0.850000 0.171300 -0.060900 0.448000 0.864000 -0.216000 +0.800000 0.164900 -0.121900 0.312000 0.800000 -0.504000 +0.850000 0.155600 -0.121900 0.432000 0.856000 -0.272000 +0.800000 0.150600 -0.164100 0.256000 0.800000 -0.528000 +0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 +0.800000 0.138600 -0.182900 0.232000 0.712000 -0.656000 +0.850000 0.127100 -0.182900 0.192000 0.744000 -0.632000 +0.800000 0.100400 -0.216300 0.104000 0.416000 -0.896000 +0.850000 0.100400 -0.218500 0.128000 0.592000 -0.784000 +0.800000 0.050200 -0.233400 -0.176000 0.416000 -0.880000 +0.850000 0.050200 -0.237100 -0.376000 0.576000 -0.720000 +0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 +0.850000 0.042400 -0.243900 -0.408000 0.528000 -0.736000 +0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 +0.850000 0.000000 -0.279000 -0.536000 0.488000 -0.680000 +0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 +0.850000 -0.050200 -0.276700 -0.784000 -0.280000 -0.544000 +0.850000 -0.077200 -0.243900 -0.824000 -0.432000 -0.344000 +0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 +0.850000 -0.086900 -0.182900 -0.848000 -0.512000 -0.048000 +0.822900 -0.050200 -0.182900 -0.792000 -0.592000 -0.088000 +0.850000 -0.088400 -0.121900 -0.808000 -0.584000 0.016000 +0.818400 -0.050200 -0.121900 -0.760000 -0.640000 0.016000 +0.850000 -0.079400 -0.060900 -0.768000 -0.616000 0.120000 +0.823600 -0.050200 -0.060900 -0.736000 -0.664000 0.112000 +0.850000 -0.068700 0.000000 -0.752000 -0.640000 0.136000 +0.832800 -0.050200 0.000000 -0.728000 -0.656000 0.144000 +0.850000 -0.056700 0.060900 -0.720000 -0.664000 0.176000 +0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 +0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 +0.850000 -0.050200 0.089500 -0.768000 -0.592000 0.216000 +0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 +0.850000 0.150600 0.126500 0.640000 0.560000 0.512000 +0.850000 0.151600 0.121900 0.680000 0.720000 0.080000 +0.850900 0.150600 0.121900 0.704000 0.704000 0.080000 +0.850000 0.154700 0.060900 0.576000 0.800000 0.096000 +0.855400 0.150600 0.060900 0.680000 0.720000 0.072000 +0.850000 0.161100 0.000000 0.480000 0.856000 0.160000 +0.867700 0.150600 0.000000 0.552000 0.816000 0.152000 +0.850000 0.171300 -0.060900 0.448000 0.864000 -0.216000 +0.888500 0.150600 -0.060900 0.504000 0.856000 -0.040000 +0.850000 0.155600 -0.121900 0.432000 0.856000 -0.272000 +0.859300 0.150600 -0.121900 0.456000 0.840000 -0.272000 +0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 +0.850000 0.150600 -0.140900 0.432000 0.840000 -0.304000 +0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 +0.891700 0.100400 0.182900 0.576000 0.688000 0.424000 +0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 +0.900000 0.093100 0.182900 0.568000 0.672000 0.464000 +0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 +0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 +0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 +0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 +1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 +1.000000 0.050200 0.131000 0.336000 0.784000 0.512000 +0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 +1.000000 0.004900 0.182900 0.336000 0.520000 0.776000 +0.950000 0.037400 0.182900 0.520000 0.504000 0.680000 +0.950000 0.050200 0.169400 0.600000 0.560000 0.560000 +0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 +0.940200 0.050200 0.182900 0.624000 0.528000 0.568000 +0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 +0.900000 0.100400 0.165200 0.584000 0.744000 0.296000 +0.900000 0.107300 0.121900 0.512000 0.832000 0.184000 +0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 +0.900000 0.118900 0.060900 0.472000 0.856000 0.184000 +0.936800 0.100400 0.060900 0.456000 0.872000 0.168000 +0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 +0.950000 0.100400 0.012800 0.496000 0.848000 0.136000 +0.950000 0.102000 0.000000 0.472000 0.864000 0.120000 +0.952900 0.100400 0.000000 0.504000 0.848000 0.120000 +0.950000 0.106300 -0.060900 0.576000 0.776000 -0.240000 +0.957800 0.100400 -0.060900 0.544000 0.824000 -0.120000 +0.950000 0.100400 -0.078300 0.560000 0.768000 -0.304000 +1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 +0.950000 0.086300 -0.121900 0.544000 0.784000 -0.280000 +1.000000 0.056100 -0.121900 0.488000 0.808000 -0.304000 +0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 +1.000000 0.050200 -0.141200 0.512000 0.792000 -0.320000 +0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 +1.000000 0.035800 -0.182900 0.504000 0.768000 -0.376000 +0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 +1.000000 0.004200 -0.243900 0.464000 0.680000 -0.552000 +0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 +1.000000 0.000000 -0.249700 0.512000 0.464000 -0.720000 +0.950000 0.000000 -0.291100 0.424000 0.536000 -0.720000 +1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 +0.950000 -0.016600 -0.304800 0.448000 0.520000 -0.720000 +0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 +0.950000 -0.050200 -0.338500 0.440000 0.400000 -0.800000 +1.000000 -0.073100 -0.304800 0.536000 0.424000 -0.720000 +0.950000 -0.100400 -0.351000 0.336000 0.064000 -0.936000 +1.000000 -0.100400 -0.325200 0.488000 0.344000 -0.792000 +0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 +1.000000 -0.150600 -0.335800 0.136000 0.136000 -0.976000 +0.950000 -0.200800 -0.357000 -0.272000 -0.104000 -0.952000 +1.000000 -0.200800 -0.338800 0.136000 -0.384000 -0.904000 +0.950000 -0.251000 -0.328200 -0.712000 -0.568000 -0.392000 +1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 +1.000000 -0.251000 -0.355700 -0.816000 -0.248000 -0.504000 +1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 +1.000000 -0.012000 0.182900 0.384000 -0.248000 0.880000 +1.000000 -0.050200 0.168100 0.416000 -0.344000 0.832000 +0.975800 -0.050200 0.182900 0.464000 -0.232000 0.848000 +1.000000 -0.100400 0.134700 0.432000 -0.528000 0.720000 +0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 +0.959000 -0.100400 0.182900 0.616000 -0.584000 0.520000 +-0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 +-0.900000 0.200800 0.074800 0.296000 0.712000 0.624000 +-0.900000 0.210300 0.060900 0.312000 0.744000 0.576000 +-0.879600 0.200800 0.060900 0.352000 0.712000 0.600000 +-0.900000 0.240500 0.000000 0.368000 0.840000 0.376000 +-0.850000 0.200800 0.035600 0.384000 0.744000 0.536000 +-0.850000 0.219100 0.000000 0.368000 0.824000 0.424000 +-0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 +-0.811000 0.200800 0.000000 0.408000 0.816000 0.392000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.900000 -0.127600 0.121900 -0.608000 -0.704000 0.344000 +-0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 +-0.878400 -0.150600 0.121900 -0.736000 -0.560000 0.368000 +-0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 +-0.851500 -0.200800 0.121900 -0.832000 -0.360000 0.408000 +-0.869300 -0.200800 0.060900 -0.824000 -0.496000 0.248000 +-0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 +-0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 +-0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 +-0.900000 -0.169600 0.000000 -0.800000 -0.552000 0.224000 +-0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 +-0.900000 -0.192500 -0.060900 -0.856000 -0.488000 0.144000 +-0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 +-0.900000 -0.200800 -0.096200 -0.752000 -0.632000 0.128000 +-0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 +-0.900000 -0.204500 -0.121900 -0.688000 -0.712000 0.104000 +-0.866600 -0.251000 -0.121900 -0.808000 -0.576000 0.072000 +-0.900000 -0.206900 -0.182900 -0.648000 -0.752000 0.056000 +-0.864200 -0.251000 -0.182900 -0.800000 -0.592000 0.000000 +-0.900000 -0.212400 -0.243900 -0.672000 -0.712000 0.176000 +-0.869200 -0.251000 -0.243900 -0.768000 -0.600000 0.200000 +-0.900000 -0.236500 -0.304800 -0.680000 -0.456000 -0.560000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-0.891700 -0.251000 -0.304800 -0.808000 -0.512000 -0.264000 +-0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 +-0.850000 0.184100 0.060900 0.376000 0.632000 0.664000 +-0.850000 0.150600 0.098600 0.360000 0.600000 0.704000 +-0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 +-0.800000 0.150600 0.064100 0.424000 0.560000 0.704000 +-0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 +-0.800000 0.153700 0.060900 0.432000 0.632000 0.632000 +-0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 +-0.800000 0.195100 0.000000 0.456000 0.768000 0.432000 +-0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 +-0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 +-0.734000 0.150600 0.000000 0.496000 0.640000 0.576000 +-0.750000 0.162200 0.000000 0.464000 0.672000 0.560000 +-0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 +-0.750000 0.191300 -0.060900 0.496000 0.856000 0.072000 +-0.700000 0.159000 -0.060900 0.600000 0.776000 0.184000 +-0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 +-0.700000 0.150600 -0.089800 0.592000 0.744000 -0.280000 +-0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 +-0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 +-0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 +-0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 +-0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 +-0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 +-0.750000 0.100400 -0.222000 0.432000 0.576000 -0.680000 +-0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 +-0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 +-0.700000 0.050200 -0.235800 0.504000 0.432000 -0.744000 +-0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 +-0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 +-0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 +-0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 +-0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 +-0.750000 0.000000 -0.285200 0.328000 0.160000 -0.920000 +-0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 +-0.750000 0.012900 0.121900 0.496000 0.384000 0.768000 +-0.781300 0.050200 0.121900 0.536000 0.400000 0.736000 +-0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 +-0.750000 0.050200 0.097600 0.464000 0.408000 0.776000 +-0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 +-0.800000 -0.280700 0.121900 -0.736000 -0.528000 0.408000 +-0.783300 -0.301200 0.121900 -0.688000 -0.568000 0.440000 +-0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 +-0.800000 -0.301200 0.085900 -0.768000 -0.544000 0.304000 +-0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 +-0.750000 -0.342500 0.121900 -0.536000 -0.592000 0.592000 +-0.739400 -0.351500 0.121900 -0.528000 -0.576000 0.616000 +-0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 +-0.750000 -0.351500 0.110100 -0.600000 -0.584000 0.536000 +-0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 +-0.701000 -0.451900 0.060900 -0.792000 -0.480000 0.344000 +-0.700000 -0.451900 0.063700 -0.672000 -0.600000 0.424000 +-0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 +-0.700000 -0.453200 0.060900 -0.560000 -0.720000 0.392000 +-0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 +-0.650000 -0.141800 0.121900 0.432000 0.328000 0.832000 +-0.677900 -0.100400 0.121900 0.528000 0.328000 0.776000 +-0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 +-0.650000 -0.100400 0.096100 0.592000 0.288000 0.744000 +-0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 +-0.600000 -0.122400 0.060900 0.616000 0.400000 0.664000 +-0.575700 -0.150600 0.060900 0.384000 0.664000 0.632000 +-0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 +-0.600000 -0.150600 0.080700 0.576000 0.424000 0.688000 +-0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 +-0.559300 -0.200800 0.121900 0.160000 0.720000 0.672000 +-0.550000 -0.200800 0.118700 0.032000 0.784000 0.608000 +-0.550000 -0.202900 0.121900 0.032000 0.728000 0.680000 +-0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 +-0.536800 -0.200800 0.121900 -0.104000 0.736000 0.664000 +-0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 +-0.550000 -0.494000 0.121900 0.024000 -0.832000 0.536000 +-0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 +-0.500000 -0.486900 0.121900 0.296000 -0.800000 0.504000 +-0.500000 -0.502100 0.088800 0.616000 -0.688000 0.376000 +-0.450000 -0.453600 0.121900 0.584000 -0.744000 0.288000 +-0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 +-0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 +-0.450000 -0.471900 0.060900 0.592000 -0.752000 0.272000 +-0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 +-0.550000 -0.502100 0.104800 0.104000 -0.840000 0.520000 +-0.550000 -0.532000 0.060900 0.080000 -0.776000 0.624000 +-0.500000 -0.502100 0.088800 0.616000 -0.688000 0.376000 +-0.500000 -0.517700 0.060900 0.632000 -0.632000 0.440000 +-0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 +-0.489100 -0.502100 0.060900 0.704000 -0.616000 0.328000 +-0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 +-0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 +-0.400000 -0.090100 0.060900 -0.696000 0.400000 0.584000 +-0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 +-0.350000 -0.097900 0.121900 -0.560000 0.424000 0.704000 +-0.300000 -0.050200 0.104800 -0.312000 0.512000 0.792000 +-0.300000 -0.066800 0.121900 -0.280000 0.584000 0.752000 +-0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 +-0.255700 -0.050200 0.121900 -0.192000 0.512000 0.832000 +-0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 +-0.350000 -0.001900 0.060900 -0.656000 0.280000 0.688000 +-0.350000 -0.050200 0.083200 -0.416000 0.344000 0.832000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.351400 -0.100400 0.121900 -0.608000 0.368000 0.696000 +-0.400000 -0.140400 0.121900 -0.448000 0.624000 0.632000 +-0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 +-0.400000 -0.100400 0.069600 -0.688000 0.456000 0.552000 +-0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 +-0.400000 -0.401700 0.111300 0.640000 -0.680000 0.336000 +-0.400000 -0.423000 0.060900 0.616000 -0.696000 0.360000 +-0.350000 -0.401700 0.073400 0.632000 -0.688000 0.344000 +-0.350000 -0.406300 0.060900 0.592000 -0.728000 0.320000 +-0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 +-0.344500 -0.401700 0.060900 0.632000 -0.688000 0.328000 +-0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 +-0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 +-0.300000 0.027200 0.060900 -0.160000 0.552000 0.808000 +-0.300000 0.000000 0.088800 -0.240000 0.432000 0.864000 +-0.250000 0.033500 0.060900 0.056000 0.528000 0.840000 +-0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 +-0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 +-0.200000 0.000000 0.081400 0.696000 0.336000 0.624000 +-0.190300 0.000000 0.060900 0.816000 0.200000 0.536000 +-0.200000 -0.050200 0.072600 0.688000 0.360000 0.624000 +-0.193200 -0.050200 0.060900 0.808000 0.008000 0.584000 +-0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 +-0.190200 -0.100400 0.060900 0.752000 -0.248000 0.600000 +-0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 +-0.200000 -0.121800 0.060900 0.728000 -0.328000 0.592000 +-0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 +-0.250000 0.000000 0.079500 -0.144000 0.552000 0.816000 +-0.200000 0.000000 0.081400 0.696000 0.336000 0.624000 +-0.250000 -0.048000 0.121900 0.272000 0.640000 0.704000 +-0.200000 -0.050200 0.072600 0.688000 0.360000 0.624000 +-0.247100 -0.050200 0.121900 0.488000 0.512000 0.696000 +-0.200000 -0.100400 0.076800 0.784000 -0.136000 0.600000 +-0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 +-0.230200 -0.100400 0.121900 0.776000 -0.176000 0.600000 +0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 +0.550000 0.351500 0.078000 -0.616000 0.672000 0.392000 +0.540600 0.351500 0.060900 -0.584000 0.632000 0.496000 +0.550000 0.359900 0.060900 -0.592000 0.640000 0.480000 +0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 +0.550000 0.388900 0.000000 -0.392000 0.856000 0.320000 +0.500000 0.369100 0.000000 -0.184000 0.800000 0.552000 +0.500000 0.351500 0.029100 -0.680000 0.048000 0.728000 +0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 +0.458200 0.351500 0.000000 -0.280000 0.520000 0.800000 +0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 +0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 +0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 +0.548800 0.251000 0.121900 -0.912000 -0.176000 0.360000 +0.538800 0.200800 0.060900 -0.824000 -0.216000 0.520000 +0.533200 0.251000 0.060900 -0.856000 0.032000 0.512000 +0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 +0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 +0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 +0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 +0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 +0.450000 0.251000 -0.039600 -0.400000 -0.080000 0.904000 +0.450000 0.200800 -0.035500 -0.536000 -0.264000 0.792000 +0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 +0.416500 0.200800 -0.060900 -0.560000 -0.352000 0.744000 +0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 +0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 +0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 +0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 +0.350000 0.251000 -0.088400 -0.448000 -0.320000 0.824000 +0.350000 0.218900 -0.121900 -0.504000 -0.816000 0.264000 +0.300000 0.251000 -0.114600 -0.168000 -0.536000 0.824000 +0.300000 0.236900 -0.121900 -0.304000 -0.688000 0.640000 +0.271900 0.251000 -0.121900 -0.240000 -0.760000 0.592000 +0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 +0.300000 0.236900 -0.121900 -0.304000 -0.688000 0.640000 +0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 +0.350000 0.218900 -0.121900 -0.504000 -0.816000 0.264000 +0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 +0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 +0.380800 0.200800 -0.182900 -0.440000 -0.264000 -0.856000 +0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 +0.400000 0.155900 -0.182900 -0.216000 -0.144000 -0.960000 +0.380800 0.200800 -0.182900 -0.440000 -0.264000 -0.856000 +0.400000 0.200800 -0.189400 -0.152000 -0.072000 -0.984000 +0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 +0.400000 0.251000 -0.186400 -0.152000 0.040000 -0.984000 +0.350000 0.251000 -0.187300 -0.168000 -0.184000 -0.960000 +0.400000 0.301200 -0.184200 -0.016000 -0.016000 -0.992000 +0.350000 0.301200 -0.184400 -0.056000 0.000000 -0.992000 +0.400000 0.351500 -0.194500 0.000000 0.072000 -0.992000 +0.350000 0.351500 -0.192800 0.000000 0.056000 -0.992000 +0.400000 0.377300 -0.182900 0.016000 0.320000 -0.944000 +0.350000 0.377400 -0.182900 0.000000 0.280000 -0.952000 +0.400000 0.401700 -0.171200 0.088000 0.472000 -0.872000 +0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 +0.400000 0.432800 -0.121900 0.160000 0.904000 -0.384000 +0.350000 0.445000 -0.121900 0.208000 0.960000 -0.152000 +0.400000 0.419800 -0.060900 0.080000 0.848000 0.520000 +0.350000 0.424300 -0.060900 0.120000 0.824000 0.544000 +0.400000 0.401700 -0.034800 -0.040000 0.584000 0.808000 +0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 +0.400000 0.351500 -0.018700 -0.136000 -0.208000 0.960000 +0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 +0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 +0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 +0.300000 0.401700 -0.022200 0.096000 0.472000 0.864000 +0.350000 0.401700 -0.031000 0.032000 0.488000 0.864000 +0.300000 0.430700 -0.060900 0.128000 0.808000 0.568000 +0.350000 0.424300 -0.060900 0.120000 0.824000 0.544000 +0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 +0.350000 0.445000 -0.121900 0.208000 0.960000 -0.152000 +0.323400 0.451900 -0.121900 0.248000 0.944000 -0.200000 +0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 +0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 +0.300000 0.401700 -0.174800 0.040000 0.368000 -0.920000 +0.350000 0.401700 -0.174600 0.056000 0.440000 -0.888000 +0.300000 0.379400 -0.182900 -0.016000 0.272000 -0.960000 +0.350000 0.377400 -0.182900 0.000000 0.280000 -0.952000 +0.300000 0.351500 -0.193900 -0.008000 0.064000 -0.992000 +0.350000 0.351500 -0.192800 0.000000 0.056000 -0.992000 +0.300000 0.301200 -0.184400 -0.064000 -0.072000 -0.992000 +0.350000 0.301200 -0.184400 -0.056000 0.000000 -0.992000 +0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 +0.350000 0.251000 -0.187300 -0.168000 -0.184000 -0.960000 +0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 +0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 +0.350000 0.236900 -0.182900 -0.272000 -0.424000 -0.856000 +0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 +0.550000 0.246100 0.121900 -0.904000 -0.224000 0.352000 +0.567500 0.200800 0.121900 -0.784000 -0.344000 0.504000 +0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 +0.550000 0.200800 0.086900 -0.880000 -0.256000 0.392000 +0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 +0.600000 0.100400 0.071800 -0.648000 -0.592000 0.472000 +0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 +0.593200 0.100400 0.060900 -0.640000 -0.584000 0.496000 +0.600000 0.053300 0.000000 -0.472000 -0.712000 0.512000 +0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 +0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 +0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 +0.550000 0.050200 -0.037800 -0.320000 -0.688000 0.640000 +0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 +0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 +0.500000 0.067400 -0.060900 -0.592000 0.120000 0.792000 +0.495100 0.050200 -0.060900 -0.456000 0.136000 0.872000 +0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 +0.450000 0.050200 -0.077000 -0.360000 0.120000 0.920000 +0.450000 0.100400 -0.090700 -0.384000 -0.320000 0.856000 +0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 +0.415000 0.100400 -0.121900 -0.640000 0.192000 0.736000 +0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 +0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 +0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 +0.381500 0.100400 -0.182900 -0.896000 0.440000 -0.008000 +0.357200 0.050200 -0.182900 -0.736000 0.640000 0.184000 +0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 +0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 +0.400000 0.083700 -0.243900 -0.328000 0.768000 -0.536000 +0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 +0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.350000 0.049300 -0.243900 -0.512000 0.784000 -0.320000 +0.350000 0.024300 -0.304800 -0.456000 0.784000 -0.408000 +0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 +0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 +0.300000 0.000000 -0.302400 -0.544000 0.608000 -0.568000 +0.300000 -0.003100 -0.304800 -0.376000 0.424000 -0.816000 +0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 +0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 +0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 +0.342100 -0.050200 -0.365800 -0.640000 -0.104000 -0.752000 +0.350000 -0.037900 -0.365800 -0.440000 0.432000 -0.776000 +0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 +0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 +0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 +0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 +0.350000 -0.100400 -0.331300 -0.432000 -0.520000 -0.728000 +0.400000 -0.100400 -0.340000 -0.040000 -0.360000 -0.928000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.400000 -0.150600 -0.318400 -0.432000 -0.416000 -0.792000 +0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 +0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 +0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 +0.400000 -0.200800 -0.276700 0.448000 -0.472000 -0.752000 +0.350000 -0.200800 -0.271400 0.216000 0.224000 -0.944000 +0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 +0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 +0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 +0.366700 -0.251000 -0.304800 0.704000 0.488000 -0.496000 +0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 +0.350000 -0.251000 -0.329500 0.536000 0.472000 -0.688000 +0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 +0.300000 -0.251000 -0.347800 0.304000 0.384000 -0.864000 +0.300000 -0.200800 -0.324200 0.480000 0.248000 -0.832000 +0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 +0.300000 -0.150600 -0.312600 0.312000 -0.200000 -0.920000 +0.313400 -0.150600 -0.304800 0.400000 -0.360000 -0.840000 +0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.350000 -0.100400 -0.331300 -0.432000 -0.520000 -0.728000 +0.300000 -0.100400 -0.310000 -0.248000 0.072000 -0.960000 +0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 +0.300000 -0.050200 -0.319900 -0.536000 0.224000 -0.808000 +0.342100 -0.050200 -0.365800 -0.640000 -0.104000 -0.752000 +0.350000 -0.059800 -0.365800 -0.280000 -0.560000 -0.768000 +0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 +0.350000 -0.050200 -0.374000 -0.496000 -0.096000 -0.856000 +0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 +0.650000 0.080100 0.121900 -0.576000 -0.640000 0.496000 +0.692100 0.050200 0.121900 -0.432000 -0.784000 0.424000 +0.650000 0.050200 0.073400 -0.576000 -0.624000 0.512000 +0.700000 0.046100 0.121900 -0.152000 -0.904000 0.376000 +0.650000 0.041800 0.060900 -0.568000 -0.648000 0.504000 +0.700000 0.026800 0.060900 -0.288000 -0.896000 0.328000 +0.650000 0.013100 0.000000 -0.448000 -0.792000 0.392000 +0.700000 0.012000 0.000000 -0.032000 -0.960000 0.272000 +0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 +0.700000 0.001400 -0.060900 0.088000 -0.968000 0.192000 +0.686800 0.000000 -0.060900 0.208000 -0.960000 0.144000 +0.700000 0.000400 -0.121900 0.224000 -0.968000 0.032000 +0.698200 0.000000 -0.121900 0.296000 -0.952000 0.032000 +0.700000 0.009000 -0.182900 0.456000 -0.744000 -0.472000 +0.687300 0.000000 -0.182900 0.648000 -0.600000 -0.456000 +0.700000 0.050200 -0.225700 0.368000 -0.368000 -0.848000 +0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 +0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 +0.653800 0.050200 -0.243900 0.232000 0.032000 -0.968000 +0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 +0.750000 0.233400 0.121900 0.720000 0.680000 -0.080000 +0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 +0.750000 0.222200 0.060900 0.704000 0.696000 -0.080000 +0.772600 0.200800 0.060900 0.648000 0.736000 -0.136000 +0.750000 0.219200 0.000000 0.672000 0.728000 0.080000 +0.770200 0.200800 0.000000 0.616000 0.776000 0.056000 +0.750000 0.228900 -0.060900 0.576000 0.696000 -0.416000 +0.787300 0.200800 -0.060900 0.520000 0.824000 -0.184000 +0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 +0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 +0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 +0.800000 0.164900 -0.121900 0.312000 0.800000 -0.504000 +0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 +0.800000 0.150600 -0.164100 0.256000 0.800000 -0.528000 +0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 +0.800000 0.138600 -0.182900 0.232000 0.712000 -0.656000 +0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 +0.800000 0.100400 -0.216300 0.104000 0.416000 -0.896000 +0.750000 0.100400 -0.218500 0.200000 0.232000 -0.944000 +0.800000 0.050200 -0.233400 -0.176000 0.416000 -0.880000 +0.750000 0.050200 -0.223600 -0.168000 -0.552000 -0.808000 +0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 +0.750000 0.019900 -0.182900 -0.176000 -0.792000 -0.576000 +0.776700 0.000000 -0.182900 -0.576000 -0.728000 -0.360000 +0.750000 0.004300 -0.121900 -0.408000 -0.880000 -0.216000 +0.756600 0.000000 -0.121900 -0.496000 -0.856000 -0.080000 +0.750000 0.001600 -0.060900 -0.416000 -0.904000 -0.016000 +0.753100 0.000000 -0.060900 -0.472000 -0.872000 0.000000 +0.750000 0.013300 0.000000 -0.240000 -0.936000 0.240000 +0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 +0.750000 0.031700 0.060900 -0.136000 -0.928000 0.336000 +0.798100 0.000000 0.060900 -0.504000 -0.792000 0.312000 +0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 +0.800000 -0.001000 0.060900 -0.584000 -0.776000 0.216000 +0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 +0.843600 -0.050200 0.060900 -0.704000 -0.672000 0.184000 +0.832800 -0.050200 0.000000 -0.728000 -0.656000 0.144000 +0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 +0.823600 -0.050200 -0.060900 -0.736000 -0.664000 0.112000 +0.800000 -0.024700 -0.060900 -0.616000 -0.776000 0.088000 +0.818400 -0.050200 -0.121900 -0.760000 -0.640000 0.016000 +0.800000 -0.027900 -0.121900 -0.664000 -0.736000 -0.072000 +0.822900 -0.050200 -0.182900 -0.792000 -0.592000 -0.088000 +0.800000 -0.017800 -0.182900 -0.616000 -0.680000 -0.376000 +0.835300 -0.050200 -0.243900 -0.840000 -0.416000 -0.336000 +0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 +0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 +0.819700 0.000000 -0.243900 -0.752000 -0.192000 -0.616000 +0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 +0.788900 0.200800 0.121900 0.632000 0.744000 0.184000 +0.800000 0.190400 0.121900 0.624000 0.752000 0.168000 +0.772600 0.200800 0.060900 0.648000 0.736000 -0.136000 +0.800000 0.182100 0.060900 0.560000 0.824000 -0.024000 +0.770200 0.200800 0.000000 0.616000 0.776000 0.056000 +0.800000 0.184600 0.000000 0.464000 0.872000 0.120000 +0.787300 0.200800 -0.060900 0.520000 0.824000 -0.184000 +0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 +0.800000 0.194300 -0.060900 0.416000 0.824000 -0.360000 +0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 +0.800000 0.028400 0.121900 -0.376000 -0.808000 0.432000 +0.829700 0.000000 0.121900 -0.704000 -0.616000 0.344000 +0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 +0.800000 0.000000 0.064400 -0.576000 -0.736000 0.344000 +0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 +0.911800 0.100400 0.121900 0.528000 0.800000 0.264000 +0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 +0.936800 0.100400 0.060900 0.456000 0.872000 0.168000 +0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 +0.950000 0.100400 0.012800 0.496000 0.848000 0.136000 +1.000000 0.068400 0.060900 0.464000 0.872000 0.104000 +0.952900 0.100400 0.000000 0.504000 0.848000 0.120000 +1.000000 0.075000 0.000000 0.472000 0.872000 0.072000 +0.957800 0.100400 -0.060900 0.544000 0.824000 -0.120000 +1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 +1.000000 0.074600 -0.060900 0.496000 0.816000 -0.280000 +0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 +0.950000 -0.142500 0.121900 -0.608000 -0.672000 0.392000 +0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 +0.900000 -0.107100 0.121900 -0.584000 -0.768000 0.240000 +0.942000 -0.150600 0.060900 -0.704000 -0.672000 0.200000 +0.900000 -0.117100 0.060900 -0.656000 -0.736000 0.136000 +0.931300 -0.150600 0.000000 -0.640000 -0.744000 0.144000 +0.900000 -0.125700 0.000000 -0.664000 -0.728000 0.136000 +0.917800 -0.150600 -0.060900 -0.640000 -0.736000 0.184000 +0.900000 -0.135500 -0.060900 -0.672000 -0.712000 0.168000 +0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 +0.900000 -0.148200 -0.121900 -0.664000 -0.728000 0.088000 +0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 +0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 +0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 +0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 +0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 +0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 +0.950000 -0.211700 -0.182900 -0.704000 -0.680000 0.176000 +0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 +0.950000 -0.224400 -0.243900 -0.688000 -0.640000 0.328000 +0.928800 -0.200800 -0.243900 -0.736000 -0.616000 0.240000 +0.939100 -0.200800 -0.182900 -0.712000 -0.672000 0.160000 +0.900000 -0.163000 -0.243900 -0.816000 -0.552000 0.128000 +0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 +0.890800 -0.150600 -0.243900 -0.848000 -0.512000 0.064000 +0.895100 -0.150600 -0.182900 -0.744000 -0.648000 0.104000 +0.900000 -0.155900 -0.182900 -0.744000 -0.648000 0.112000 +0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 +0.900000 -0.150600 -0.145400 -0.696000 -0.704000 0.104000 +0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 +0.950000 -0.150600 0.094900 -0.648000 -0.696000 0.272000 +0.950000 -0.158100 0.060900 -0.608000 -0.760000 0.200000 +0.942000 -0.150600 0.060900 -0.704000 -0.672000 0.200000 +0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 +0.931300 -0.150600 0.000000 -0.640000 -0.744000 0.144000 +0.950000 -0.183700 -0.060900 -0.632000 -0.728000 0.232000 +0.917800 -0.150600 -0.060900 -0.640000 -0.736000 0.184000 +0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 +0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 +0.902600 -0.150600 -0.121900 -0.664000 -0.736000 0.096000 +1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 +1.000000 0.053600 0.121900 0.280000 0.872000 0.392000 +0.950000 0.069700 0.121900 0.360000 0.840000 0.384000 +1.000000 0.068400 0.060900 0.464000 0.872000 0.104000 +0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 +0.950000 0.091300 0.060900 0.600000 0.776000 0.176000 +-1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 +-1.000000 -0.090800 0.060900 -0.320000 -0.912000 0.248000 +-0.973400 -0.100400 0.060900 -0.344000 -0.904000 0.240000 +-1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 +-1.000000 -0.100400 0.014600 -0.304000 -0.920000 0.208000 +-0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 +-0.950000 0.258900 0.000000 0.296000 0.848000 0.432000 +-0.928700 0.251000 0.000000 0.312000 0.848000 0.408000 +-0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 +-0.950000 0.251000 0.016800 0.288000 0.808000 0.504000 +-0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 +-0.900000 -0.149700 0.060900 -0.696000 -0.664000 0.232000 +-0.899200 -0.150600 0.060900 -0.816000 -0.504000 0.256000 +-0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 +-0.900000 -0.150600 0.057700 -0.744000 -0.616000 0.232000 +-0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 +-0.750000 0.106000 0.060900 0.496000 0.464000 0.728000 +-0.796300 0.150600 0.060900 0.512000 0.584000 0.616000 +-0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 +-0.750000 0.150600 0.014500 0.472000 0.624000 0.608000 +-0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 +-0.750800 -0.401700 0.000000 -0.816000 -0.520000 0.208000 +-0.750000 -0.401700 0.004100 -0.816000 -0.520000 0.232000 +-0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 +-0.750000 -0.403200 0.000000 -0.832000 -0.504000 0.216000 +-0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 +-0.700000 0.051600 0.060900 0.528000 0.416000 0.728000 +-0.744800 0.100400 0.060900 0.496000 0.456000 0.728000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 +-0.700000 0.121800 0.000000 0.536000 0.544000 0.632000 +-0.680200 0.100400 0.000000 0.600000 0.440000 0.656000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.700000 0.100400 0.019100 0.504000 0.504000 0.688000 +-0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 +-0.650000 -0.023500 0.060900 0.576000 0.360000 0.720000 +-0.666100 0.000000 0.060900 0.560000 0.376000 0.728000 +-0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 +-0.650000 0.000000 0.045200 0.576000 0.400000 0.704000 +-0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 +-0.650000 0.063100 0.000000 0.592000 0.392000 0.696000 +-0.641800 0.050200 0.000000 0.616000 0.400000 0.664000 +-0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 +-0.650000 0.050200 0.008200 0.568000 0.384000 0.720000 +-0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 +-0.650000 -0.495900 0.060900 -0.528000 -0.720000 0.432000 +-0.640700 -0.502100 0.060900 -0.496000 -0.728000 0.456000 +-0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 +-0.650000 -0.502100 0.048300 -0.536000 -0.712000 0.440000 +-0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 +-0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 +-0.600000 -0.552300 0.023900 -0.224000 -0.776000 0.584000 +-0.600000 -0.566300 0.000000 -0.184000 -0.816000 0.544000 +-0.550000 -0.552300 0.031000 0.256000 -0.800000 0.528000 +-0.550000 -0.565800 0.000000 0.224000 -0.872000 0.424000 +-0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 +-0.509600 -0.552300 0.000000 0.320000 -0.840000 0.424000 +-0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 +-0.600000 -0.018300 0.000000 0.712000 0.368000 0.584000 +-0.584800 -0.050200 0.000000 0.744000 0.336000 0.568000 +-0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 +-0.600000 -0.050200 0.018400 0.648000 0.320000 0.688000 +-0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 +-0.472400 -0.150600 0.060900 -0.464000 0.768000 0.416000 +-0.500000 -0.166600 0.060900 -0.304000 0.832000 0.448000 +-0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 +-0.500000 -0.150600 0.019400 -0.216000 0.856000 0.464000 +-0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 +-0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 +-0.405500 -0.100400 0.060900 -0.712000 0.456000 0.520000 +-0.400000 -0.050900 0.000000 -0.776000 0.576000 0.224000 +-0.400000 -0.090100 0.060900 -0.696000 0.400000 0.584000 +-0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.367400 -0.050200 0.060900 -0.696000 0.408000 0.584000 +-0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 +-0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 +-0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 +-0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 +-0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 +-0.300000 0.050200 0.038600 -0.224000 0.544000 0.800000 +-0.300000 0.100400 0.006400 -0.200000 0.408000 0.880000 +-0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 +-0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 +-0.250000 0.100400 0.002600 0.144000 0.496000 0.848000 +-0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 +-0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 +-0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 +-0.373100 0.000000 0.000000 -0.880000 0.240000 0.392000 +-0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 +-0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 +-0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 +-0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 +-0.350000 0.050200 -0.078800 -0.832000 0.272000 -0.472000 +-0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 +-0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 +-0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 +-0.301000 0.050200 -0.182900 -0.704000 0.472000 -0.512000 +-0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 +-0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 +-0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 +-0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 +-0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 +-0.399400 -0.050200 -0.121900 -0.760000 0.504000 -0.392000 +-0.400000 -0.096400 -0.182900 -0.664000 0.552000 -0.496000 +-0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 +-0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 +-0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 +-0.434900 -0.100400 -0.121900 -0.608000 0.744000 -0.256000 +-0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 +-0.350000 0.000000 0.059800 -0.688000 0.400000 0.592000 +-0.350000 0.050200 0.010900 -0.568000 0.448000 0.680000 +-0.348200 0.000000 0.060900 -0.376000 0.448000 0.800000 +-0.300000 0.050200 0.038600 -0.224000 0.544000 0.800000 +-0.300000 0.027200 0.060900 -0.160000 0.552000 0.808000 +-0.250000 0.050200 0.048300 0.000000 0.552000 0.832000 +-0.250000 0.033500 0.060900 0.056000 0.528000 0.840000 +-0.200000 0.050200 0.037800 0.512000 0.448000 0.720000 +-0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 +-0.200000 0.020500 0.060900 0.664000 0.440000 0.600000 +-0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 +-0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 +-0.200000 0.408700 0.000000 -0.112000 0.496000 0.856000 +-0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 +-0.185900 0.401700 0.000000 0.264000 0.248000 0.928000 +-0.200000 0.384800 0.000000 -0.112000 -0.232000 0.960000 +-0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 +-0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 +-0.150000 0.351500 -0.029900 0.096000 -0.168000 0.976000 +-0.200000 0.301200 -0.022600 0.056000 -0.176000 0.976000 +-0.150000 0.301200 -0.033800 0.040000 -0.024000 0.992000 +-0.200000 0.251000 -0.048300 -0.120000 -0.296000 0.944000 +-0.150000 0.251000 -0.027500 -0.136000 -0.104000 0.984000 +-0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 +-0.150000 0.200800 -0.027500 -0.320000 -0.168000 0.928000 +-0.198000 0.200800 -0.060900 -0.464000 0.288000 0.832000 +-0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 +-0.200000 0.199100 -0.060900 -0.320000 0.504000 0.792000 +-0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 +-0.250000 0.177000 -0.060900 -0.096000 0.568000 0.808000 +-0.250000 0.150600 -0.042200 0.008000 0.568000 0.816000 +-0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 +-0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 +-0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 +-0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 +-0.350000 0.200800 -0.003200 -0.528000 -0.104000 0.832000 +-0.350000 0.153200 -0.060900 -0.608000 -0.784000 0.016000 +-0.368900 0.200800 -0.060900 -0.952000 0.040000 -0.280000 +-0.350000 0.200800 -0.076700 -0.368000 -0.104000 -0.920000 +-0.356100 0.251000 -0.060900 -0.936000 0.104000 -0.312000 +-0.350000 0.251000 -0.067500 -0.624000 0.048000 -0.768000 +-0.353500 0.301200 -0.060900 -0.872000 0.080000 -0.464000 +-0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 +-0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 +-0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 +-0.344500 0.351500 -0.060900 -0.776000 0.288000 0.552000 +-0.300000 0.351500 -0.083400 -0.432000 0.176000 -0.880000 +-0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 +-0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 +-0.300000 0.408800 -0.060900 -0.664000 0.712000 -0.184000 +-0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 +-0.250000 0.447500 -0.060900 -0.512000 0.744000 0.408000 +-0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 +-0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 +-0.200000 0.409200 -0.121900 -0.400000 0.464000 -0.776000 +-0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 +-0.152100 0.451900 -0.121900 -0.424000 0.536000 -0.720000 +-0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 +-0.150000 0.453400 -0.121900 -0.320000 0.624000 -0.704000 +-0.150000 0.501300 -0.060900 -0.376000 0.880000 -0.280000 +-0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 +-0.146800 0.502100 -0.060900 -0.272000 0.960000 0.016000 +-0.100000 0.502100 -0.081300 -0.184000 0.840000 -0.488000 +-0.100000 0.517800 -0.060900 -0.120000 0.976000 0.136000 +-0.050000 0.502100 -0.117100 -0.040000 0.912000 -0.392000 +-0.050000 0.515300 -0.060900 0.432000 0.792000 0.408000 +-0.033200 0.502100 -0.060900 0.616000 0.496000 0.600000 +-0.050000 0.502100 -0.046900 0.400000 0.496000 0.760000 +-0.023600 0.451900 -0.060900 0.376000 0.152000 0.904000 +-0.050000 0.451900 -0.049700 0.432000 0.024000 0.896000 +-0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 +-0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 +0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 +-0.050000 0.351500 -0.043600 0.248000 0.032000 0.960000 +0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 +-0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 +0.000000 0.334500 -0.060900 0.312000 -0.368000 0.864000 +-0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 +0.000000 0.301200 -0.076500 0.296000 -0.272000 0.904000 +-0.035000 0.251000 -0.060900 0.512000 -0.448000 0.728000 +0.000000 0.251000 -0.086600 0.344000 -0.360000 0.864000 +-0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 +0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 +-0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 +-0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 +-0.050000 0.170300 -0.121900 0.584000 -0.576000 0.560000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +0.000000 0.195100 -0.182900 0.504000 -0.656000 -0.544000 +-0.033200 0.150600 -0.182900 0.832000 -0.552000 -0.016000 +0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 +-0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 +-0.050000 0.200800 -0.204500 0.304000 -0.328000 -0.888000 +-0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 +-0.100000 0.200800 -0.221500 0.056000 0.392000 -0.912000 +-0.100000 0.164100 -0.243900 -0.032000 0.432000 -0.896000 +-0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 +-0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 +-0.150000 0.150600 -0.235500 -0.296000 0.536000 -0.784000 +-0.150000 0.141700 -0.243900 -0.352000 0.528000 -0.768000 +-0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 +-0.198500 0.100400 -0.243900 -0.376000 0.480000 -0.784000 +-0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 +-0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 +-0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 +-0.250000 0.055800 -0.243900 -0.560000 0.648000 -0.504000 +-0.250000 0.099600 -0.182900 -0.488000 0.616000 -0.608000 +-0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 +-0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 +-0.300000 0.050200 -0.185100 -0.648000 0.560000 -0.504000 +-0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 +-0.300000 0.001800 -0.243900 -0.496000 0.680000 -0.520000 +-0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 +-0.300000 0.000000 -0.248500 -0.656000 0.560000 -0.488000 +-0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 +-0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 +-0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 +-0.266700 -0.050200 -0.304800 -0.504000 0.288000 -0.808000 +-0.250000 -0.050200 -0.318700 -0.440000 0.320000 -0.832000 +-0.288100 -0.100400 -0.304800 -0.408000 0.240000 -0.872000 +-0.250000 -0.100400 -0.327300 -0.384000 0.152000 -0.904000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 +-0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 +-0.250000 -0.200800 -0.333200 0.168000 0.080000 -0.976000 +-0.300000 -0.200800 -0.340600 0.016000 0.280000 -0.952000 +-0.250000 -0.251000 -0.337900 0.384000 0.112000 -0.912000 +-0.300000 -0.251000 -0.348000 0.192000 0.248000 -0.944000 +-0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 +-0.300000 -0.296900 -0.365800 0.296000 0.528000 -0.784000 +-0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 +-0.300000 -0.301200 -0.369600 0.320000 0.544000 -0.768000 +-0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 +-0.300000 -0.341100 -0.426800 -0.128000 0.536000 -0.832000 +-0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 +-0.273100 -0.351500 -0.426800 0.480000 0.752000 -0.440000 +-0.250000 -0.368100 -0.426800 0.504000 0.792000 -0.336000 +-0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 +-0.200000 -0.393200 -0.426800 0.696000 0.632000 -0.328000 +-0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 +-0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 +-0.200000 -0.351500 -0.343300 0.312000 0.640000 -0.696000 +-0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 +-0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 +-0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 +-0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 +-0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 +-0.291400 -0.301200 -0.365800 0.272000 0.504000 -0.808000 +-0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 +-0.200000 0.401700 0.005100 -0.168000 0.288000 0.936000 +-0.200000 0.384800 0.000000 -0.112000 -0.232000 0.960000 +-0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 +-0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 +-0.250000 0.401700 -0.023000 -0.400000 -0.016000 0.912000 +-0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 +-0.300000 0.401700 -0.053800 -0.512000 0.520000 0.672000 +-0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 +-0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 +-0.344500 0.351500 -0.060900 -0.776000 0.288000 0.552000 +-0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 +-0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 +-0.300000 0.301200 -0.020200 -0.184000 0.032000 0.976000 +-0.350000 0.301200 -0.051600 -0.832000 0.120000 0.528000 +-0.300000 0.251000 -0.020200 0.208000 -0.160000 0.960000 +-0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 +-0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 +-0.350000 0.200800 -0.003200 -0.528000 -0.104000 0.832000 +-0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 +-0.368900 0.200800 -0.060900 -0.952000 0.040000 -0.280000 +-0.356100 0.251000 -0.060900 -0.936000 0.104000 -0.312000 +-0.350000 0.251000 -0.040500 -0.808000 0.200000 0.544000 +-0.353500 0.301200 -0.060900 -0.872000 0.080000 -0.464000 +-0.350000 0.301200 -0.051600 -0.832000 0.120000 0.528000 +-0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 +-0.350000 0.329400 -0.060900 -0.960000 0.152000 -0.224000 +-0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 +-0.250000 -0.301200 0.006000 0.344000 -0.608000 0.704000 +-0.235900 -0.301200 0.000000 0.272000 -0.568000 0.768000 +-0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 +-0.250000 -0.307700 0.000000 0.288000 -0.576000 0.760000 +-0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 +-0.169100 -0.301200 0.000000 -0.376000 -0.392000 0.832000 +-0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 +-0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 +-0.100000 -0.301200 0.037800 -0.016000 -0.152000 0.984000 +-0.100000 -0.344900 0.000000 0.072000 -0.528000 0.840000 +-0.050000 -0.301200 0.029100 0.312000 -0.280000 0.904000 +-0.050000 -0.329200 0.000000 0.264000 -0.624000 0.720000 +-0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 +-0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 +0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 +-0.029100 -0.351500 -0.060900 0.584000 -0.680000 0.424000 +0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 +0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 +0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 +0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 +0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 +0.050000 -0.321600 -0.121900 0.584000 -0.712000 0.376000 +0.074000 -0.301200 -0.121900 0.536000 -0.792000 0.264000 +0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 +0.088900 -0.301200 -0.182900 0.488000 -0.864000 0.072000 +0.050000 -0.327900 -0.243900 0.480000 -0.872000 0.000000 +0.091700 -0.301200 -0.243900 0.488000 -0.864000 -0.008000 +0.050000 -0.326800 -0.304800 0.424000 -0.880000 -0.184000 +0.085600 -0.301200 -0.304800 0.544000 -0.768000 -0.320000 +0.050000 -0.303000 -0.365800 0.400000 -0.792000 -0.448000 +0.052200 -0.301200 -0.365800 0.552000 -0.720000 -0.416000 +0.050000 -0.301200 -0.369000 0.376000 -0.768000 -0.512000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +0.050000 -0.251000 -0.406500 0.232000 -0.312000 -0.912000 +0.100000 -0.251000 -0.380100 0.472000 -0.384000 -0.784000 +0.050000 -0.206300 -0.365800 -0.112000 0.608000 -0.776000 +0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 +0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 +0.100000 -0.200800 -0.352600 0.240000 0.528000 -0.800000 +0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 +0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 +0.118000 -0.251000 -0.365800 0.536000 -0.224000 -0.808000 +0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +0.150000 -0.287400 -0.304800 0.000000 -0.712000 -0.688000 +0.100000 -0.292600 -0.304800 0.432000 -0.840000 -0.304000 +0.150000 -0.287700 -0.243900 -0.208000 -0.968000 0.064000 +0.100000 -0.296900 -0.243900 0.408000 -0.912000 0.000000 +0.150000 -0.278000 -0.182900 -0.064000 -0.936000 0.328000 +0.100000 -0.295100 -0.182900 0.440000 -0.880000 0.144000 +0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 +0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +0.100000 -0.256900 -0.060900 0.456000 -0.800000 0.368000 +0.110300 -0.251000 -0.060900 0.504000 -0.760000 0.392000 +0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 +0.130700 -0.200800 -0.060900 0.504000 0.008000 0.856000 +0.100000 -0.200800 -0.044900 0.416000 0.232000 0.872000 +0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 +0.050000 -0.200800 -0.016400 0.232000 0.648000 0.720000 +0.076800 -0.150600 -0.060900 0.208000 0.432000 0.872000 +0.050000 -0.150600 -0.053500 0.160000 0.448000 0.872000 +0.050000 -0.140200 -0.060900 0.152000 0.504000 0.848000 +0.000000 -0.150600 -0.047300 0.168000 0.600000 0.768000 +0.000000 -0.136800 -0.060900 0.088000 0.520000 0.840000 +-0.050000 -0.150600 -0.033100 0.152000 0.512000 0.840000 +-0.050000 -0.119400 -0.060900 0.168000 0.528000 0.824000 +-0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 +-0.100000 -0.105500 -0.060900 0.480000 0.464000 0.736000 +-0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 +-0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 +-0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 +-0.150000 -0.100400 -0.001300 0.848000 0.032000 0.520000 +-0.150600 -0.100400 0.000000 0.800000 0.040000 0.592000 +-0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 +-0.152800 -0.050200 0.000000 0.848000 0.032000 0.520000 +-0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 +-0.150800 0.000000 0.000000 0.744000 0.072000 0.656000 +-0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 +-0.163800 0.050200 0.000000 0.704000 0.216000 0.664000 +-0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 +-0.200000 0.089800 0.000000 0.216000 0.544000 0.800000 +-0.200000 0.100400 -0.008800 0.176000 0.488000 0.848000 +-0.238500 0.100400 0.000000 0.152000 0.496000 0.848000 +-0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 +-0.250000 0.104200 0.000000 0.144000 0.480000 0.856000 +-0.250000 0.150600 -0.042200 0.008000 0.568000 0.816000 +-0.300000 0.112500 0.000000 -0.064000 0.472000 0.872000 +-0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 +-0.300000 0.150600 -0.036000 -0.360000 0.064000 0.920000 +-0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 +-0.150000 -0.104300 0.000000 0.496000 0.120000 0.848000 +-0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 +-0.150000 -0.150600 0.010200 0.376000 0.208000 0.896000 +-0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 +-0.150000 -0.200800 0.013600 0.104000 0.200000 0.968000 +-0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 +-0.150000 -0.251000 0.002400 -0.056000 -0.176000 0.976000 +-0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 +-0.150000 -0.301200 0.010200 -0.304000 -0.280000 0.904000 +-0.100000 -0.301200 0.037800 -0.016000 -0.152000 0.984000 +-0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 +-0.050000 -0.301200 0.029100 0.312000 -0.280000 0.904000 +-0.050000 -0.251000 0.040700 0.136000 0.064000 0.984000 +-0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 +0.000000 -0.251000 0.031300 0.424000 -0.232000 0.872000 +0.000000 -0.299000 0.000000 0.440000 -0.464000 0.760000 +0.050000 -0.251000 0.003400 0.512000 0.320000 0.792000 +0.050000 -0.253500 0.000000 0.448000 -0.608000 0.648000 +0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 +0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 +0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 +0.100000 -0.256900 -0.060900 0.456000 -0.800000 0.368000 +0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 +0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 +0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 +0.074000 -0.301200 -0.121900 0.536000 -0.792000 0.264000 +0.100000 -0.284500 -0.121900 0.464000 -0.744000 0.472000 +0.088900 -0.301200 -0.182900 0.488000 -0.864000 0.072000 +0.100000 -0.295100 -0.182900 0.440000 -0.880000 0.144000 +0.091700 -0.301200 -0.243900 0.488000 -0.864000 -0.008000 +0.100000 -0.296900 -0.243900 0.408000 -0.912000 0.000000 +0.085600 -0.301200 -0.304800 0.544000 -0.768000 -0.320000 +0.100000 -0.292600 -0.304800 0.432000 -0.840000 -0.304000 +0.052200 -0.301200 -0.365800 0.552000 -0.720000 -0.416000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +-0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 +-0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 +-0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 +-0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 +-0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 +-0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 +-0.050000 -0.150600 -0.033100 0.152000 0.512000 0.840000 +-0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 +0.000000 -0.150600 -0.047300 0.168000 0.600000 0.768000 +0.000000 -0.198800 0.000000 0.160000 0.688000 0.704000 +0.050000 -0.150600 -0.053500 0.160000 0.448000 0.872000 +0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 +0.050000 -0.200800 -0.016400 0.232000 0.648000 0.720000 +0.050000 -0.244100 0.000000 0.488000 0.320000 0.800000 +0.100000 -0.200800 -0.044900 0.416000 0.232000 0.872000 +0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 +0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 +0.100000 -0.251000 -0.044600 0.544000 -0.608000 0.568000 +-0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 +-0.100000 -0.200800 0.005100 0.056000 0.344000 0.936000 +-0.100000 -0.251000 0.029400 -0.128000 0.120000 0.976000 +-0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 +-0.050000 -0.251000 0.040700 0.136000 0.064000 0.984000 +0.000000 -0.200800 0.002300 0.160000 0.560000 0.808000 +0.000000 -0.251000 0.031300 0.424000 -0.232000 0.872000 +0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 +0.050000 -0.251000 0.003400 0.512000 0.320000 0.792000 +0.050000 -0.244100 0.000000 0.488000 0.320000 0.800000 +0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 +0.054200 -0.251000 0.000000 0.552000 0.192000 0.800000 +-0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 +-0.050000 -0.190400 0.000000 0.096000 0.648000 0.744000 +-0.050000 -0.200800 0.008600 0.032000 0.536000 0.840000 +0.000000 -0.198800 0.000000 0.160000 0.688000 0.704000 +0.000000 -0.200800 0.002300 0.160000 0.560000 0.808000 +0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 +0.006800 -0.200800 0.000000 0.232000 0.576000 0.776000 +0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 +0.500000 0.245700 0.000000 -0.568000 0.120000 0.808000 +0.500000 0.200800 0.008600 -0.576000 -0.176000 0.792000 +0.488800 0.200800 0.000000 -0.512000 0.024000 0.856000 +0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 +0.500000 0.181600 0.000000 -0.600000 -0.304000 0.728000 +0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 +0.550000 0.174700 0.060900 -0.744000 -0.320000 0.576000 +0.560700 0.150600 0.060900 -0.704000 -0.368000 0.592000 +0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 +0.550000 0.150600 0.048400 -0.632000 -0.416000 0.640000 +0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 +0.641200 0.050200 0.060900 -0.600000 -0.608000 0.512000 +0.600000 0.093600 0.060900 -0.624000 -0.616000 0.464000 +0.602900 0.050200 0.000000 -0.576000 -0.704000 0.400000 +0.600000 0.053300 0.000000 -0.472000 -0.712000 0.512000 +0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 +0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 +-0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 +-0.915700 -0.150600 0.000000 -0.696000 -0.672000 0.232000 +-0.950000 -0.123700 0.000000 -0.488000 -0.840000 0.216000 +-0.932400 -0.150600 -0.060900 -0.688000 -0.696000 0.176000 +-0.950000 -0.136200 -0.060900 -0.528000 -0.832000 0.152000 +-0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 +-0.950000 -0.144800 -0.121900 -0.536000 -0.832000 0.120000 +-0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 +-0.943100 -0.150600 -0.121900 -0.672000 -0.720000 0.120000 +-0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 +-0.903800 -0.200800 -0.121900 -0.696000 -0.704000 0.120000 +-0.907400 -0.200800 -0.182900 -0.688000 -0.712000 0.072000 +-0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 +-0.914100 -0.200800 -0.243900 -0.664000 -0.728000 0.128000 +-0.950000 -0.161800 -0.243900 -0.584000 -0.784000 0.176000 +-0.931500 -0.200800 -0.304800 -0.648000 -0.520000 -0.544000 +-0.950000 -0.180000 -0.304800 -0.552000 -0.600000 -0.568000 +-0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 +-0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 +-0.900000 -0.150600 -0.338300 -0.216000 -0.104000 -0.968000 +-0.900000 -0.200800 -0.331500 -0.576000 -0.328000 -0.736000 +-0.850000 -0.150600 -0.349400 0.072000 0.056000 -0.992000 +-0.850000 -0.200800 -0.351200 -0.168000 0.112000 -0.976000 +-0.800000 -0.150600 -0.340500 0.312000 0.288000 -0.896000 +-0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 +-0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 +-0.750000 -0.200800 -0.348300 0.272000 0.384000 -0.872000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 +-0.700000 -0.175200 -0.304800 0.352000 0.528000 -0.768000 +-0.651700 -0.200800 -0.304800 0.320000 0.544000 -0.768000 +-0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 +-0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 +-0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 +-0.650000 -0.150600 -0.267500 0.376000 0.464000 -0.792000 +-0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 +-0.895700 -0.200800 -0.060900 -0.864000 -0.480000 0.136000 +-0.882700 -0.200800 0.000000 -0.840000 -0.496000 0.192000 +-0.860100 -0.251000 -0.060900 -0.808000 -0.568000 0.112000 +-0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 +-0.852600 -0.251000 0.000000 -0.800000 -0.568000 0.168000 +-0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 +-0.700000 -0.502100 -0.057900 -0.752000 -0.512000 0.400000 +-0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 +-0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 +-0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 +-0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 +-0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 +-0.750000 -0.549900 -0.121900 0.080000 0.648000 0.752000 +-0.800000 -0.552300 -0.095900 0.424000 0.264000 0.864000 +-0.800000 -0.539500 -0.121900 0.176000 0.680000 0.704000 +-0.850000 -0.552300 -0.082300 -0.704000 -0.480000 0.504000 +-0.850000 -0.519700 -0.121900 0.200000 0.624000 0.752000 +-0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 +-0.850000 -0.502100 -0.144600 0.400000 0.776000 0.480000 +-0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 +-0.878700 -0.502100 -0.121900 0.408000 0.368000 0.832000 +-0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 +-0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 +-0.906100 -0.502100 -0.121900 -0.920000 0.072000 0.376000 +-0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 +-0.925200 -0.502100 -0.182900 -0.976000 -0.008000 0.208000 +-0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 +-0.929300 -0.502100 -0.243900 -0.992000 0.064000 -0.008000 +-0.921000 -0.451900 -0.243900 -0.184000 0.968000 0.160000 +-0.920600 -0.502100 -0.304800 -0.888000 -0.288000 -0.344000 +-0.912200 -0.451900 -0.304800 -0.496000 0.720000 -0.464000 +-0.900000 -0.502100 -0.352600 -0.672000 0.128000 -0.720000 +-0.900000 -0.451900 -0.318500 0.104000 0.872000 -0.464000 +-0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 +-0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 +-0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 +-0.850000 -0.473200 -0.304800 0.272000 0.896000 -0.336000 +-0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 +-0.800000 -0.473000 -0.304800 -0.736000 0.648000 -0.168000 +-0.786000 -0.451900 -0.365800 -0.872000 0.080000 -0.472000 +-0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 +-0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 +-0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 +-0.800000 -0.388500 -0.365800 -0.864000 -0.288000 -0.400000 +-0.800000 -0.395700 -0.304800 -0.920000 -0.376000 0.000000 +-0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 +-0.800000 -0.365300 -0.243900 -0.880000 -0.440000 0.160000 +-0.781800 -0.401700 -0.243900 -0.912000 -0.336000 0.208000 +-0.800000 -0.355500 -0.182900 -0.872000 -0.472000 0.032000 +-0.775200 -0.401700 -0.182900 -0.904000 -0.400000 0.120000 +-0.800000 -0.354700 -0.121900 -0.848000 -0.512000 0.080000 +-0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 +-0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 +-0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 +-0.794800 -0.351500 -0.060900 -0.816000 -0.552000 0.144000 +-0.800000 -0.351500 -0.101400 -0.840000 -0.528000 0.104000 +-0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 +-0.800000 -0.343900 -0.060900 -0.816000 -0.552000 0.128000 +-0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 +-0.700000 0.150600 -0.043600 0.552000 0.712000 0.424000 +-0.700000 0.159000 -0.060900 0.600000 0.776000 0.184000 +-0.689800 0.150600 -0.060900 0.640000 0.736000 0.192000 +-0.700000 0.150600 -0.089800 0.592000 0.744000 -0.280000 +-0.650000 0.112000 -0.060900 0.672000 0.704000 0.200000 +-0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 +-0.650000 0.100400 -0.098000 0.720000 0.624000 -0.288000 +-0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 +-0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 +-0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 +-0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 +-0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 +-0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 +-0.700000 0.050200 -0.235800 0.504000 0.432000 -0.744000 +-0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 +-0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 +-0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 +-0.669700 0.000000 -0.243900 0.480000 0.312000 -0.808000 +-0.700000 0.037400 -0.243900 0.440000 0.392000 -0.800000 +-0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 +-0.700000 0.000000 -0.262900 0.392000 0.288000 -0.864000 +-0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 +-0.650000 -0.541900 0.000000 -0.528000 -0.600000 0.592000 +-0.633400 -0.552300 0.000000 -0.384000 -0.672000 0.624000 +-0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 +-0.650000 -0.552300 -0.012600 -0.496000 -0.592000 0.624000 +-0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 +-0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 +-0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 +-0.450000 -0.100400 -0.057100 -0.400000 0.872000 0.264000 +-0.406900 -0.050200 -0.060900 -0.848000 0.520000 0.000000 +-0.434300 -0.100400 0.000000 -0.648000 0.720000 0.208000 +-0.400000 -0.050200 -0.003200 -0.712000 0.672000 0.168000 +-0.400000 -0.050900 0.000000 -0.776000 0.576000 0.224000 +-0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 +-0.399300 -0.050200 0.000000 -0.696000 0.680000 0.184000 +-0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 +-0.466200 -0.502100 0.000000 0.712000 -0.616000 0.320000 +-0.450000 -0.489500 0.000000 0.584000 -0.760000 0.264000 +-0.450000 -0.502100 -0.045100 0.560000 -0.696000 0.432000 +-0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 +-0.400000 -0.502100 -0.024700 0.848000 -0.224000 0.464000 +-0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 +-0.403800 -0.451900 0.000000 0.744000 -0.560000 0.352000 +-0.400000 -0.447100 0.000000 0.720000 -0.584000 0.344000 +-0.400000 -0.451900 -0.009600 0.744000 -0.536000 0.376000 +-0.350000 -0.427600 0.000000 0.560000 -0.752000 0.336000 +-0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 +-0.350000 -0.451900 -0.058800 0.248000 -0.624000 0.728000 +-0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 +-0.500000 -0.552300 -0.009400 0.352000 -0.840000 0.400000 +-0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 +-0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 +-0.452200 -0.552300 -0.121900 0.864000 0.184000 0.464000 +-0.500000 -0.589900 -0.121900 0.408000 -0.832000 0.352000 +-0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 +-0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 +-0.450000 -0.558900 -0.121900 0.808000 0.320000 0.488000 +-0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 +-0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 +-0.450000 -0.612400 -0.121900 0.032000 -0.944000 0.312000 +-0.410500 -0.602500 -0.121900 0.456000 -0.632000 0.616000 +-0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 +-0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 +-0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 +-0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 +-0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 +-0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 +-0.396000 -0.652700 -0.182900 -0.176000 0.000000 0.984000 +-0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 +-0.350700 -0.703000 -0.182900 -0.792000 -0.176000 0.576000 +-0.350000 -0.703000 -0.180700 -0.616000 -0.504000 0.592000 +-0.350000 -0.704300 -0.182900 -0.112000 -0.808000 0.576000 +-0.300000 -0.703000 -0.173800 0.616000 -0.544000 0.552000 +-0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 +-0.293800 -0.703000 -0.182900 0.608000 -0.624000 0.488000 +-0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 +-0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 +-0.300000 -0.753200 -0.286100 0.088000 -0.928000 0.352000 +-0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 +-0.281500 -0.753200 -0.304800 0.312000 -0.920000 -0.216000 +-0.250000 -0.737300 -0.304800 0.568000 -0.808000 -0.112000 +-0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 +-0.250000 -0.703000 -0.346500 0.432000 -0.280000 -0.848000 +-0.300000 -0.703000 -0.365100 0.056000 -0.232000 -0.968000 +-0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 +-0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 +-0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 +-0.300000 -0.652700 -0.367500 0.064000 -0.112000 -0.984000 +-0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 +-0.350000 -0.652700 -0.376000 0.560000 0.160000 -0.808000 +-0.350000 -0.679200 -0.365800 -0.072000 -0.176000 -0.976000 +-0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 +-0.400000 -0.653700 -0.365800 -0.176000 -0.888000 -0.416000 +-0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 +-0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 +-0.450000 -0.652700 -0.319500 -0.256000 -0.952000 -0.136000 +-0.450000 -0.654300 -0.304800 -0.272000 -0.952000 0.040000 +-0.455200 -0.652700 -0.304800 -0.280000 -0.952000 0.040000 +-0.450000 -0.652700 -0.293400 -0.288000 -0.936000 0.160000 +-0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 +-0.450000 -0.644000 -0.243900 -0.352000 -0.912000 0.200000 +-0.500000 -0.625200 -0.243900 -0.096000 -0.960000 0.240000 +-0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 +-0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 +-0.450000 -0.612400 -0.121900 0.032000 -0.944000 0.312000 +-0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 +-0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 +-0.474100 -0.602500 -0.121900 -0.520000 -0.712000 0.456000 +-0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 +-0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 +-0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 +-0.361800 0.100400 -0.060900 -0.920000 0.112000 -0.352000 +-0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 +-0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 +-0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 +-0.355100 0.050200 0.000000 -0.872000 0.216000 0.416000 +-0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 +-0.307400 0.401700 -0.060900 -0.696000 0.688000 -0.152000 +-0.300000 0.408800 -0.060900 -0.664000 0.712000 -0.184000 +-0.300000 0.401700 -0.053800 -0.512000 0.520000 0.672000 +-0.250000 0.447500 -0.060900 -0.512000 0.744000 0.408000 +-0.250000 0.401700 -0.023000 -0.400000 -0.016000 0.912000 +-0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 +-0.208400 0.401700 0.000000 -0.424000 0.248000 0.864000 +-0.200000 0.451900 -0.034900 -0.360000 0.584000 0.720000 +-0.200000 0.408700 0.000000 -0.112000 0.496000 0.856000 +-0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 +-0.185900 0.401700 0.000000 0.264000 0.248000 0.928000 +-0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 +-0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 +-0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 +-0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 +-0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 +-0.050000 0.451900 -0.049700 0.432000 0.024000 0.896000 +-0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 +-0.050000 0.502100 -0.046900 0.400000 0.496000 0.760000 +-0.100000 0.502100 -0.041900 -0.080000 0.528000 0.840000 +-0.050000 0.515300 -0.060900 0.432000 0.792000 0.408000 +-0.100000 0.517800 -0.060900 -0.120000 0.976000 0.136000 +-0.100000 0.502100 -0.041900 -0.080000 0.528000 0.840000 +-0.146800 0.502100 -0.060900 -0.272000 0.960000 0.016000 +-0.100000 0.451900 -0.019200 0.136000 0.056000 0.984000 +-0.150000 0.501300 -0.060900 -0.376000 0.880000 -0.280000 +-0.150000 0.451900 -0.004000 -0.136000 0.584000 0.792000 +-0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 +-0.200000 0.451900 -0.034900 -0.360000 0.584000 0.720000 +-0.242600 0.451900 -0.060900 -0.440000 0.728000 0.512000 +-0.200000 0.477600 -0.060900 -0.544000 0.808000 -0.208000 +-0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 +-0.200000 0.451900 -0.081300 -0.400000 0.504000 -0.752000 +-0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 +-0.321000 0.100400 0.000000 -0.264000 0.416000 0.864000 +-0.350000 0.077100 0.000000 -0.776000 0.256000 0.568000 +-0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 +-0.350000 0.100400 -0.017600 -0.744000 0.352000 0.552000 +-0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 +-0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 +-0.300000 0.351500 -0.024700 -0.384000 0.216000 0.896000 +-0.250000 0.301200 -0.005700 0.112000 -0.104000 0.984000 +-0.300000 0.301200 -0.020200 -0.184000 0.032000 0.976000 +-0.250000 0.251000 -0.029400 0.176000 -0.456000 0.864000 +-0.300000 0.251000 -0.020200 0.208000 -0.160000 0.960000 +-0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 +-0.300000 0.200800 -0.040500 0.440000 0.208000 0.864000 +-0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 +-0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 +-0.250000 0.200800 -0.094600 -0.184000 -0.064000 0.976000 +-0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 +-0.200000 0.200800 -0.062300 -0.304000 0.376000 0.864000 +-0.198000 0.200800 -0.060900 -0.464000 0.288000 0.832000 +-0.200000 0.199100 -0.060900 -0.320000 0.504000 0.792000 +-0.200000 0.200800 -0.062300 -0.304000 0.376000 0.864000 +-0.250000 0.177000 -0.060900 -0.096000 0.568000 0.808000 +-0.250000 0.200800 -0.094600 -0.184000 -0.064000 0.976000 +-0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 +-0.277600 0.200800 -0.060900 0.584000 -0.072000 0.800000 +-0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 +-0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 +-0.300000 -0.351500 -0.012600 0.872000 -0.352000 0.320000 +-0.250000 -0.401700 -0.058800 -0.096000 -0.136000 0.984000 +-0.300000 -0.401700 -0.045100 0.792000 -0.248000 0.544000 +-0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 +-0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 +-0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 +-0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 +-0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 +-0.300000 -0.502100 -0.097100 -0.592000 -0.576000 0.560000 +-0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 +-0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 +-0.250000 -0.552300 -0.101500 -0.080000 -0.904000 0.400000 +-0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 +-0.250000 -0.559400 -0.121900 -0.088000 -0.912000 0.384000 +-0.285200 -0.552300 -0.182900 -0.616000 -0.680000 0.384000 +-0.250000 -0.581300 -0.182900 -0.104000 -0.888000 0.440000 +-0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 +-0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 +-0.300000 -0.594300 -0.243900 -0.424000 -0.464000 0.768000 +-0.286800 -0.602500 -0.243900 -0.320000 0.232000 0.912000 +-0.300000 -0.602500 -0.250000 -0.408000 0.368000 0.824000 +-0.300000 -0.607200 -0.243900 -0.248000 0.672000 0.688000 +-0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 +-0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 +-0.350000 -0.605300 -0.304800 0.248000 0.960000 -0.032000 +-0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 +-0.351600 -0.602500 -0.304800 0.944000 0.304000 0.024000 +-0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 +-0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 +-0.350000 -0.552300 -0.283400 -0.096000 -0.680000 0.720000 +-0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 +-0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 +-0.300000 -0.602500 -0.250000 -0.408000 0.368000 0.824000 +-0.300000 -0.594300 -0.243900 -0.424000 -0.464000 0.768000 +-0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 +-0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 +-0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 +-0.300000 -0.538300 -0.182900 -0.584000 -0.696000 0.408000 +-0.350000 -0.518400 -0.182900 -0.088000 -0.928000 0.360000 +-0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 +-0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 +-0.300000 -0.502100 -0.097100 -0.592000 -0.576000 0.560000 +-0.350000 -0.502100 -0.119400 0.240000 -0.864000 0.424000 +-0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 +-0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 +-0.338500 -0.451900 -0.060900 0.112000 -0.632000 0.760000 +-0.300000 -0.451900 -0.070300 -0.328000 -0.392000 0.856000 +-0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 +-0.300000 -0.435300 -0.060900 -0.192000 -0.360000 0.912000 +-0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 +-0.287100 -0.451900 -0.060900 -0.448000 -0.328000 0.824000 +-0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 +-0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 +-0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 +-0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 +-0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 +-0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 +-0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 +-0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 +-0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 +-0.250000 -0.552300 -0.101500 -0.080000 -0.904000 0.400000 +-0.235800 -0.552300 -0.121900 0.448000 -0.816000 0.336000 +-0.250000 -0.559400 -0.121900 -0.088000 -0.912000 0.384000 +-0.204600 -0.552300 -0.182900 0.504000 -0.776000 0.360000 +-0.250000 -0.581300 -0.182900 -0.104000 -0.888000 0.440000 +-0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 +-0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 +-0.200000 -0.579600 -0.243900 0.568000 -0.648000 0.496000 +-0.233200 -0.602500 -0.243900 0.608000 -0.320000 0.720000 +-0.200000 -0.602500 -0.268600 0.488000 -0.432000 0.752000 +-0.241600 -0.652700 -0.243900 0.680000 -0.216000 0.688000 +-0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 +-0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 +-0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 +-0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 +-0.204300 -0.703000 -0.304800 0.856000 -0.496000 -0.088000 +-0.250000 -0.737300 -0.304800 0.568000 -0.808000 -0.112000 +-0.250000 -0.703000 -0.346500 0.432000 -0.280000 -0.848000 +-0.204300 -0.703000 -0.304800 0.856000 -0.496000 -0.088000 +-0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 +-0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 +-0.200000 -0.652700 -0.326500 0.488000 -0.272000 -0.824000 +-0.171500 -0.652700 -0.304800 0.576000 -0.304000 0.752000 +-0.200000 -0.693500 -0.304800 0.872000 -0.464000 -0.120000 +-0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 +-0.200000 -0.652700 -0.286600 0.488000 -0.272000 0.824000 +-0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 +-0.279200 -0.502100 -0.060900 -0.688000 -0.328000 0.640000 +-0.250000 -0.502100 -0.016400 -0.320000 -0.344000 0.872000 +-0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 +-0.250000 -0.533000 -0.060900 -0.336000 -0.760000 0.544000 +-0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 +-0.200000 0.351500 -0.009600 0.208000 -0.208000 0.952000 +-0.250000 0.351500 -0.004200 0.040000 0.000000 0.992000 +-0.200000 0.301200 -0.022600 0.056000 -0.176000 0.976000 +-0.250000 0.301200 -0.005700 0.112000 -0.104000 0.984000 +-0.200000 0.251000 -0.048300 -0.120000 -0.296000 0.944000 +-0.250000 0.251000 -0.029400 0.176000 -0.456000 0.864000 +-0.200000 0.206100 -0.060900 -0.448000 -0.184000 0.872000 +-0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 +-0.250000 0.219300 -0.060900 0.304000 -0.640000 0.696000 +-0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 +-0.200000 -0.351500 -0.031500 -0.320000 -0.128000 0.936000 +-0.250000 -0.351500 -0.038300 0.104000 -0.504000 0.848000 +-0.200000 -0.401700 -0.023400 -0.056000 -0.008000 0.992000 +-0.250000 -0.401700 -0.058800 -0.096000 -0.136000 0.984000 +-0.200000 -0.451900 -0.018000 0.376000 -0.112000 0.912000 +-0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 +-0.250000 -0.451900 -0.040500 -0.352000 -0.008000 0.928000 +-0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 +-0.200000 0.150600 -0.023100 -0.360000 0.472000 0.792000 +-0.200000 0.100400 -0.008800 0.176000 0.488000 0.848000 +-0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 +-0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 +-0.114400 0.150600 -0.060900 0.520000 -0.344000 0.776000 +-0.122500 0.100400 -0.060900 0.768000 -0.048000 0.624000 +-0.100000 0.150600 -0.075000 0.592000 -0.416000 0.688000 +-0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 +-0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 +-0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +-0.053800 0.100400 -0.182900 0.984000 -0.072000 0.112000 +-0.050000 0.116900 -0.182900 0.944000 -0.304000 0.048000 +-0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 +-0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 +-0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 +-0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 +-0.100000 0.150600 -0.251000 -0.024000 0.408000 -0.904000 +-0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 +-0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 +-0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 +-0.150000 0.141700 -0.243900 -0.352000 0.528000 -0.768000 +-0.198500 0.100400 -0.243900 -0.376000 0.480000 -0.784000 +-0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 +-0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 +-0.150000 0.050200 -0.299600 -0.080000 0.408000 -0.904000 +-0.200000 0.050200 -0.277000 -0.312000 0.416000 -0.848000 +-0.150000 0.040500 -0.304800 -0.136000 0.416000 -0.896000 +-0.200000 0.008900 -0.304800 -0.304000 0.456000 -0.832000 +-0.150000 0.000000 -0.322200 0.064000 0.240000 -0.968000 +-0.200000 0.000000 -0.310700 -0.288000 0.424000 -0.848000 +-0.150000 -0.050200 -0.328000 0.128000 0.064000 -0.984000 +-0.200000 -0.050200 -0.330400 -0.144000 0.264000 -0.944000 +-0.150000 -0.100400 -0.338700 0.056000 -0.088000 -0.992000 +-0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 +-0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 +-0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 +-0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 +-0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 +-0.250000 -0.100400 -0.327300 -0.384000 0.152000 -0.904000 +-0.200000 -0.100400 -0.330100 -0.024000 -0.008000 -0.992000 +-0.250000 -0.050200 -0.318700 -0.440000 0.320000 -0.832000 +-0.200000 -0.050200 -0.330400 -0.144000 0.264000 -0.944000 +-0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 +-0.200000 0.000000 -0.310700 -0.288000 0.424000 -0.848000 +-0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 +-0.200000 0.008900 -0.304800 -0.304000 0.456000 -0.832000 +-0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 +-0.200000 0.050200 -0.277000 -0.312000 0.416000 -0.848000 +-0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 +-0.200000 0.099300 -0.243900 -0.456000 0.488000 -0.736000 +-0.250000 0.055800 -0.243900 -0.560000 0.648000 -0.504000 +-0.250000 0.050200 -0.254100 -0.584000 0.656000 -0.464000 +-0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 +-0.256300 0.050200 -0.243900 -0.592000 0.624000 -0.488000 +-0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 +-0.200000 -0.502100 -0.039000 0.512000 -0.608000 0.592000 +-0.181900 -0.502100 -0.060900 0.504000 -0.680000 0.520000 +-0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 +-0.200000 -0.511900 -0.060900 0.416000 -0.800000 0.424000 +-0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 +-0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 +-0.150000 0.401700 -0.011900 0.240000 0.256000 0.928000 +-0.100000 0.351500 -0.035500 0.120000 0.000000 0.992000 +-0.150000 0.351500 -0.029900 0.096000 -0.168000 0.976000 +-0.100000 0.301200 -0.032000 0.168000 0.008000 0.984000 +-0.150000 0.301200 -0.033800 0.040000 -0.024000 0.992000 +-0.100000 0.251000 -0.029400 0.344000 -0.104000 0.928000 +-0.150000 0.251000 -0.027500 -0.136000 -0.104000 0.984000 +-0.100000 0.200800 -0.041900 0.456000 -0.304000 0.832000 +-0.150000 0.200800 -0.027500 -0.320000 -0.168000 0.928000 +-0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 +-0.150000 0.150600 -0.037800 0.256000 -0.016000 0.960000 +-0.114400 0.150600 -0.060900 0.520000 -0.344000 0.776000 +-0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 +-0.100000 0.150600 -0.075000 0.592000 -0.416000 0.688000 +-0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 +-0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 +-0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 +-0.050000 0.170300 -0.121900 0.584000 -0.576000 0.560000 +-0.067900 0.150600 -0.121900 0.736000 -0.432000 0.504000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +-0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 +-0.150000 0.100400 -0.027500 0.432000 0.296000 0.848000 +-0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 +-0.122500 0.100400 -0.060900 0.768000 -0.048000 0.624000 +-0.123500 0.050200 -0.060900 0.888000 -0.104000 0.440000 +-0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 +-0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 +-0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 +-0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 +-0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 +-0.051100 0.050200 -0.182900 0.712000 0.184000 0.664000 +-0.053800 0.100400 -0.182900 0.984000 -0.072000 0.112000 +-0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 +-0.051400 0.100400 -0.243900 0.776000 0.216000 -0.576000 +-0.050000 0.095100 -0.243900 0.808000 0.256000 -0.520000 +-0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 +-0.050000 0.050200 -0.257500 0.608000 0.208000 -0.760000 +-0.100000 0.050200 -0.292200 0.304000 0.312000 -0.896000 +-0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 +-0.100000 0.022400 -0.304800 0.184000 0.304000 -0.928000 +-0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 +-0.100000 0.000000 -0.309600 0.168000 0.152000 -0.968000 +-0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 +-0.100000 -0.050200 -0.318600 0.080000 0.144000 -0.984000 +-0.050000 -0.050200 -0.321000 0.120000 0.280000 -0.944000 +-0.100000 -0.100400 -0.323700 -0.040000 -0.152000 -0.984000 +-0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 +-0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 +-0.050000 -0.150600 -0.332400 0.016000 -0.080000 -0.992000 +-0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 +0.000000 -0.150600 -0.318000 0.160000 0.016000 -0.984000 +0.000000 -0.100400 -0.336000 0.328000 -0.184000 -0.920000 +0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 +0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 +0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 +0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 +0.100000 -0.150600 -0.303900 -0.176000 0.088000 -0.976000 +0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 +0.101900 -0.150600 -0.304800 -0.296000 0.368000 -0.872000 +0.100000 -0.150600 -0.303900 -0.176000 0.088000 -0.976000 +0.100000 -0.151600 -0.304800 -0.176000 0.536000 -0.816000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +-0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 +-0.150000 0.050200 -0.012600 0.624000 0.240000 0.728000 +-0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 +-0.123500 0.050200 -0.060900 0.888000 -0.104000 0.440000 +-0.120900 0.000000 -0.060900 0.800000 0.080000 0.592000 +-0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 +-0.100000 0.000000 -0.110200 0.808000 0.176000 0.552000 +-0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 +-0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 +-0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 +-0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 +-0.051100 0.050200 -0.182900 0.712000 0.184000 0.664000 +-0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 +-0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 +0.000000 0.039200 -0.182900 0.256000 0.544000 0.792000 +0.000000 0.050200 -0.198900 0.168000 0.840000 0.504000 +0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 +0.046000 0.050200 -0.243900 0.728000 0.480000 -0.472000 +0.050000 0.042300 -0.243900 0.688000 0.376000 -0.616000 +0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 +0.050000 0.000000 -0.258500 0.448000 0.256000 -0.848000 +0.000000 0.000000 -0.289100 0.520000 0.272000 -0.800000 +0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 +0.000000 -0.038700 -0.304800 0.368000 0.192000 -0.904000 +0.004800 -0.050200 -0.304800 0.368000 0.176000 -0.904000 +0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 +0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 +0.000000 -0.100400 -0.336000 0.328000 -0.184000 -0.920000 +0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 +-0.050000 -0.100400 -0.342800 0.056000 -0.032000 -0.992000 +-0.050000 -0.050200 -0.321000 0.120000 0.280000 -0.944000 +0.000000 -0.050200 -0.306900 0.320000 0.152000 -0.928000 +-0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 +0.000000 -0.038700 -0.304800 0.368000 0.192000 -0.904000 +-0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 +0.000000 0.000000 -0.289100 0.520000 0.272000 -0.800000 +-0.050000 0.050200 -0.257500 0.608000 0.208000 -0.760000 +0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 +-0.050000 0.095100 -0.243900 0.808000 0.256000 -0.520000 +0.000000 0.087200 -0.243900 0.456000 0.816000 -0.344000 +-0.050000 0.050200 -0.189300 0.800000 0.488000 0.336000 +0.000000 0.050200 -0.198900 0.168000 0.840000 0.504000 +0.000000 0.087200 -0.243900 0.456000 0.816000 -0.344000 +0.046000 0.050200 -0.243900 0.728000 0.480000 -0.472000 +0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 +0.000000 0.050200 -0.275900 0.288000 0.416000 -0.856000 +-0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 +-0.150000 0.000000 -0.001200 0.744000 0.064000 0.656000 +-0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 +-0.120900 0.000000 -0.060900 0.800000 0.080000 0.592000 +-0.114700 -0.050200 -0.060900 0.632000 0.112000 0.760000 +-0.100000 0.000000 -0.110200 0.808000 0.176000 0.552000 +-0.100000 -0.050200 -0.077100 0.584000 0.232000 0.768000 +-0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 +-0.050000 -0.050200 -0.098600 0.240000 0.488000 0.832000 +-0.050000 -0.024600 -0.121900 0.296000 0.656000 0.688000 +0.000000 -0.050200 -0.114000 0.064000 0.408000 0.904000 +0.000000 -0.035500 -0.121900 0.072000 0.496000 0.856000 +0.050000 -0.050200 -0.115700 0.016000 0.416000 0.904000 +0.050000 -0.038600 -0.121900 0.000000 0.528000 0.840000 +0.100000 -0.050200 -0.113200 -0.016000 0.464000 0.880000 +0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 +0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 +0.150000 -0.036300 -0.121900 0.008000 0.488000 0.864000 +0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 +0.150000 0.000000 -0.166100 -0.096000 0.688000 0.712000 +0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 +0.150000 0.016800 -0.182900 -0.152000 0.840000 0.520000 +0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 +0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 +0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 +0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 +0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 +0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 +0.100000 -0.050200 -0.272200 -0.136000 0.384000 -0.904000 +0.150000 -0.050200 -0.298400 -0.176000 0.328000 -0.920000 +0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 +0.150000 -0.064700 -0.304800 -0.200000 0.328000 -0.912000 +0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 +0.114400 -0.100400 -0.304800 -0.344000 0.128000 -0.928000 +-0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 +-0.150000 -0.050200 -0.005700 0.768000 -0.024000 0.632000 +-0.150000 -0.100400 -0.001300 0.848000 0.032000 0.520000 +-0.114700 -0.050200 -0.060900 0.632000 0.112000 0.760000 +-0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 +-0.100000 -0.050200 -0.077100 0.584000 0.232000 0.768000 +-0.100000 -0.100400 -0.064700 0.496000 0.416000 0.752000 +-0.050000 -0.050200 -0.098600 0.240000 0.488000 0.832000 +-0.050000 -0.100400 -0.073900 0.136000 0.480000 0.864000 +0.000000 -0.050200 -0.114000 0.064000 0.408000 0.904000 +0.000000 -0.100400 -0.085100 0.096000 0.456000 0.880000 +0.050000 -0.050200 -0.115700 0.016000 0.416000 0.904000 +0.050000 -0.100400 -0.083400 0.000000 0.440000 0.888000 +0.100000 -0.050200 -0.113200 -0.016000 0.464000 0.880000 +0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 +0.150000 -0.050200 -0.113700 0.032000 0.448000 0.888000 +0.150000 -0.100400 -0.080500 0.184000 0.336000 0.920000 +0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 +0.150000 -0.150600 -0.071000 0.136000 0.176000 0.968000 +0.100000 -0.150600 -0.068400 0.184000 0.416000 0.888000 +0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 +0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 +0.130700 -0.200800 -0.060900 0.504000 0.008000 0.856000 +0.150000 -0.200800 -0.071800 0.312000 -0.208000 0.920000 +0.110300 -0.251000 -0.060900 0.504000 -0.760000 0.392000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +-0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 +-0.100000 -0.188700 0.000000 0.176000 0.408000 0.888000 +-0.129500 -0.150600 0.000000 0.416000 0.264000 0.864000 +-0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 +-0.100000 -0.150600 -0.019000 0.512000 0.456000 0.720000 +-0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 +-0.150000 -0.346200 0.000000 -0.392000 -0.160000 0.904000 +-0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 +-0.100000 -0.344900 0.000000 0.072000 -0.528000 0.840000 +-0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 +-0.050000 -0.329200 0.000000 0.264000 -0.624000 0.720000 +-0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 +-0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 +-0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 +-0.100000 -0.401700 -0.044900 0.592000 -0.496000 0.624000 +-0.087700 -0.401700 -0.060900 0.608000 -0.600000 0.504000 +-0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 +-0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 +-0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 +-0.098000 -0.451900 -0.121900 0.712000 -0.680000 0.120000 +-0.100000 -0.453500 -0.121900 0.600000 -0.776000 0.168000 +-0.098100 -0.451900 -0.182900 0.736000 -0.672000 0.032000 +-0.100000 -0.453800 -0.182900 0.696000 -0.712000 0.024000 +-0.094700 -0.451900 -0.243900 0.784000 -0.568000 0.216000 +-0.100000 -0.458900 -0.243900 0.744000 -0.632000 0.192000 +-0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 +-0.100000 -0.502100 -0.283200 0.616000 -0.376000 0.680000 +-0.074100 -0.502100 -0.304800 0.864000 -0.480000 0.112000 +-0.100000 -0.549700 -0.304800 0.696000 -0.392000 0.592000 +-0.100000 -0.502100 -0.325200 0.520000 -0.368000 -0.760000 +-0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 +-0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 +-0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 +-0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 +-0.196100 -0.552300 -0.365800 0.320000 -0.272000 -0.904000 +-0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 +-0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 +-0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 +-0.200000 -0.502100 -0.370700 0.184000 -0.352000 -0.912000 +-0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 +-0.100000 -0.351500 -0.005700 0.248000 -0.576000 0.776000 +-0.150000 -0.351500 -0.001100 -0.192000 -0.352000 0.912000 +-0.100000 -0.401700 -0.044900 0.592000 -0.496000 0.624000 +-0.150000 -0.401700 -0.019000 0.408000 -0.232000 0.880000 +-0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 +-0.150000 -0.451900 -0.041900 0.560000 -0.440000 0.696000 +-0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 +-0.150000 -0.470000 -0.060900 0.568000 -0.552000 0.600000 +-0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 +-0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 +-0.100000 -0.453500 -0.121900 0.600000 -0.776000 0.168000 +-0.146100 -0.502100 -0.121900 0.616000 -0.744000 0.232000 +-0.100000 -0.453800 -0.182900 0.696000 -0.712000 0.024000 +-0.141200 -0.502100 -0.182900 0.696000 -0.688000 0.184000 +-0.100000 -0.458900 -0.243900 0.744000 -0.632000 0.192000 +-0.125700 -0.502100 -0.243900 0.664000 -0.408000 0.624000 +-0.100000 -0.502100 -0.283200 0.616000 -0.376000 0.680000 +-0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 +-0.100000 -0.549700 -0.304800 0.696000 -0.392000 0.592000 +-0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 +-0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 +-0.150000 -0.602500 -0.302600 0.392000 -0.240000 0.880000 +-0.145700 -0.602500 -0.304800 0.824000 -0.528000 0.192000 +-0.150000 -0.609400 -0.304800 0.840000 -0.512000 0.152000 +-0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 +-0.145700 -0.602500 -0.304800 0.824000 -0.528000 0.192000 +-0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 +-0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 +-0.101500 -0.552300 -0.304800 0.552000 -0.392000 0.720000 +-0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 +-0.050000 0.401700 -0.052300 0.176000 0.040000 0.976000 +-0.100000 0.401700 -0.042400 0.232000 -0.088000 0.960000 +-0.050000 0.351500 -0.043600 0.248000 0.032000 0.960000 +-0.100000 0.351500 -0.035500 0.120000 0.000000 0.992000 +-0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 +-0.100000 0.301200 -0.032000 0.168000 0.008000 0.984000 +-0.050000 0.251000 -0.047300 0.528000 -0.360000 0.760000 +-0.100000 0.251000 -0.029400 0.344000 -0.104000 0.928000 +-0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 +-0.100000 0.200800 -0.041900 0.456000 -0.304000 0.832000 +-0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 +-0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 +-0.100000 0.167200 -0.060900 0.520000 -0.424000 0.736000 +-0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 +-0.027600 0.301200 -0.060900 0.456000 -0.208000 0.856000 +-0.050000 0.301200 -0.044600 0.440000 -0.008000 0.896000 +-0.035000 0.251000 -0.060900 0.512000 -0.448000 0.728000 +-0.050000 0.251000 -0.047300 0.528000 -0.360000 0.760000 +-0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 +-0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 +-0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 +-0.002200 -0.301200 0.000000 0.384000 -0.648000 0.648000 +0.000000 -0.299000 0.000000 0.440000 -0.464000 0.760000 +0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 +0.050000 -0.253500 0.000000 0.448000 -0.608000 0.648000 +0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 +0.050000 -0.286400 -0.060900 0.528000 -0.720000 0.440000 +0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 +0.050000 -0.301200 -0.085900 0.528000 -0.704000 0.464000 +-0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 +-0.050000 -0.351500 -0.027000 0.488000 -0.688000 0.528000 +-0.029100 -0.351500 -0.060900 0.584000 -0.680000 0.424000 +-0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 +0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 +-0.050000 -0.398200 -0.121900 0.592000 -0.704000 0.368000 +0.000000 -0.356400 -0.121900 0.560000 -0.728000 0.384000 +-0.050000 -0.389600 -0.182900 0.656000 -0.736000 -0.128000 +0.000000 -0.353400 -0.182900 0.520000 -0.832000 -0.160000 +-0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 +0.000000 -0.351500 -0.193300 0.504000 -0.832000 -0.176000 +-0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 +0.000000 -0.343100 -0.243900 0.464000 -0.864000 -0.160000 +-0.026900 -0.351500 -0.304800 0.608000 -0.688000 -0.384000 +0.000000 -0.336000 -0.304800 0.392000 -0.872000 -0.264000 +-0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 +0.000000 -0.316900 -0.365800 0.224000 -0.832000 -0.496000 +-0.050000 -0.309800 -0.365800 -0.336000 -0.416000 -0.840000 +0.000000 -0.301200 -0.413400 -0.392000 -0.192000 -0.896000 +-0.050000 -0.301200 -0.370400 -0.392000 -0.264000 -0.872000 +0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 +-0.050000 -0.266900 -0.365800 -0.288000 0.088000 -0.944000 +-0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 +-0.050000 -0.251000 -0.364300 -0.216000 0.352000 -0.904000 +0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 +-0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 +0.000000 -0.200800 -0.332000 -0.296000 0.528000 -0.784000 +0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 +0.050000 -0.200800 -0.360800 -0.016000 0.576000 -0.808000 +0.050000 -0.206300 -0.365800 -0.112000 0.608000 -0.776000 +0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 +0.050000 -0.251000 -0.406500 0.232000 -0.312000 -0.912000 +0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 +0.050000 -0.301200 -0.369000 0.376000 -0.768000 -0.512000 +0.000000 -0.301200 -0.413400 -0.392000 -0.192000 -0.896000 +0.050000 -0.303000 -0.365800 0.400000 -0.792000 -0.448000 +0.000000 -0.316900 -0.365800 0.224000 -0.832000 -0.496000 +0.050000 -0.326800 -0.304800 0.424000 -0.880000 -0.184000 +0.000000 -0.336000 -0.304800 0.392000 -0.872000 -0.264000 +0.050000 -0.327900 -0.243900 0.480000 -0.872000 0.000000 +0.000000 -0.343100 -0.243900 0.464000 -0.864000 -0.160000 +0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 +0.000000 -0.351500 -0.193300 0.504000 -0.832000 -0.176000 +0.003100 -0.351500 -0.182900 0.504000 -0.840000 -0.160000 +0.000000 -0.353400 -0.182900 0.520000 -0.832000 -0.160000 +0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 +0.000000 -0.356400 -0.121900 0.560000 -0.728000 0.384000 +0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 +0.000000 -0.351500 -0.112600 0.544000 -0.704000 0.448000 +0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 +0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 +0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 +0.042100 0.351500 -0.060900 0.160000 -0.080000 0.976000 +0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 +0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 +0.050000 0.401700 -0.062500 -0.008000 0.136000 0.984000 +0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 +0.100000 0.401700 -0.066700 -0.048000 0.000000 0.992000 +0.100000 0.368600 -0.060900 0.104000 0.120000 0.984000 +0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 +0.111400 0.351500 -0.060900 0.184000 -0.224000 0.952000 +0.150000 0.351500 -0.070300 -0.056000 -0.480000 0.872000 +0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 +0.150000 0.301200 -0.094700 0.096000 -0.408000 0.904000 +0.100000 0.301200 -0.081200 0.144000 -0.392000 0.904000 +0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 +0.100000 0.251000 -0.119300 0.048000 -0.664000 0.736000 +0.134200 0.251000 -0.121900 0.072000 -0.752000 0.648000 +0.100000 0.248700 -0.121900 0.064000 -0.824000 0.552000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.100000 0.246100 -0.182900 0.136000 -0.488000 -0.856000 +0.150000 0.224100 -0.182900 0.056000 -0.672000 -0.728000 +0.100000 0.251000 -0.185300 0.160000 -0.296000 -0.936000 +0.150000 0.251000 -0.192500 0.112000 0.024000 -0.992000 +0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 +0.150000 0.284700 -0.182900 0.352000 0.368000 -0.856000 +0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 +0.134200 0.251000 -0.121900 0.072000 -0.752000 0.648000 +0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 +0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 +0.200000 0.269500 -0.121900 -0.008000 -0.896000 0.432000 +0.200000 0.301200 -0.179700 -0.152000 -0.352000 -0.920000 +0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 +0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 +0.250000 0.284000 -0.182900 -0.096000 -0.256000 -0.952000 +0.250000 0.301200 -0.184400 -0.080000 -0.056000 -0.992000 +0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 +0.250000 0.351500 -0.189100 -0.160000 0.168000 -0.968000 +0.226900 0.351500 -0.182900 -0.224000 0.192000 -0.952000 +0.250000 0.370000 -0.182900 -0.184000 0.304000 -0.928000 +0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 +0.250000 0.401700 -0.172700 -0.016000 0.288000 -0.952000 +0.200000 0.401700 -0.169400 -0.056000 0.168000 -0.976000 +0.250000 0.451900 -0.137900 0.128000 0.536000 -0.824000 +0.200000 0.451900 -0.151000 0.136000 0.400000 -0.896000 +0.250000 0.466900 -0.121900 0.232000 0.968000 0.016000 +0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 +0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 +0.200000 0.453000 -0.060900 0.112000 0.728000 0.672000 +0.203100 0.451900 -0.060900 0.264000 0.672000 0.680000 +0.200000 0.451900 -0.059700 0.136000 0.632000 0.760000 +0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 +0.200000 0.401700 -0.033800 -0.352000 0.000000 0.928000 +0.250000 0.401700 -0.026800 -0.216000 0.176000 0.952000 +0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 +0.250000 0.351500 -0.020200 -0.488000 -0.416000 0.760000 +0.201200 0.351500 -0.060900 -0.488000 -0.576000 0.648000 +0.250000 0.317900 -0.060900 -0.432000 -0.680000 0.584000 +0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 +0.250000 0.301200 -0.083600 -0.096000 -0.744000 0.648000 +0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 +0.250000 0.256500 -0.121900 -0.200000 -0.800000 0.552000 +0.200000 0.269500 -0.121900 -0.008000 -0.896000 0.432000 +0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 +0.150000 0.253300 -0.121900 0.144000 -0.672000 0.712000 +0.150000 0.301200 -0.094700 0.096000 -0.408000 0.904000 +0.200000 0.301200 -0.098800 -0.120000 -0.584000 0.800000 +0.150000 0.351500 -0.070300 -0.056000 -0.480000 0.872000 +0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 +0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 +0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 +0.151400 0.401700 -0.060900 -0.480000 -0.416000 0.760000 +0.200000 0.401700 -0.033800 -0.352000 0.000000 0.928000 +0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 +0.200000 0.451900 -0.059700 0.136000 0.632000 0.760000 +0.150000 0.451900 -0.057100 -0.080000 0.496000 0.856000 +0.200000 0.453000 -0.060900 0.112000 0.728000 0.672000 +0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 +0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 +0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 +0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 +0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 +0.150000 0.502100 -0.123200 0.032000 0.424000 -0.896000 +0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 +0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 +0.100000 0.494400 -0.121900 -0.184000 0.952000 -0.216000 +0.100000 0.451900 -0.146900 -0.088000 0.224000 -0.968000 +0.050000 0.485400 -0.121900 -0.032000 0.904000 -0.408000 +0.050000 0.451900 -0.139600 -0.080000 0.232000 -0.960000 +0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 +0.000000 0.451900 -0.135500 0.000000 0.160000 -0.984000 +-0.050000 0.500300 -0.121900 -0.104000 0.896000 -0.424000 +-0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 +-0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 +-0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 +-0.150000 0.453400 -0.121900 -0.320000 0.624000 -0.704000 +-0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 +-0.152100 0.451900 -0.121900 -0.424000 0.536000 -0.720000 +-0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 +-0.200000 0.409200 -0.121900 -0.400000 0.464000 -0.776000 +-0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 +-0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 +-0.200000 0.351500 -0.146000 -0.416000 0.224000 -0.872000 +-0.233300 0.351500 -0.121900 -0.616000 0.184000 -0.752000 +-0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 +-0.245300 0.301200 -0.121900 -0.680000 0.120000 -0.720000 +-0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 +-0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 +-0.250000 0.251000 -0.124000 -0.376000 0.088000 -0.920000 +-0.254200 0.251000 -0.121900 -0.384000 0.088000 -0.912000 +-0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 +-0.263400 0.200800 -0.121900 -0.480000 0.216000 -0.840000 +-0.250000 0.150600 -0.154100 -0.464000 0.344000 -0.808000 +-0.295300 0.150600 -0.121900 -0.728000 0.520000 -0.432000 +-0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 +-0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 +-0.300000 0.100400 -0.141500 -0.560000 0.512000 -0.640000 +-0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 +-0.300000 0.052000 -0.182900 -0.664000 0.464000 -0.568000 +-0.250000 0.099600 -0.182900 -0.488000 0.616000 -0.608000 +-0.250000 0.100400 -0.182000 -0.504000 0.488000 -0.704000 +-0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 +-0.250000 0.150600 -0.154100 -0.464000 0.344000 -0.808000 +-0.216700 0.150600 -0.182900 -0.560000 0.376000 -0.728000 +-0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 +-0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 +-0.200000 0.200800 -0.161600 -0.480000 0.384000 -0.776000 +-0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 +-0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 +-0.153800 0.251000 -0.182900 -0.312000 0.176000 -0.928000 +-0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 +-0.150000 0.257900 -0.182900 -0.288000 0.168000 -0.936000 +-0.150000 0.301200 -0.169700 -0.080000 0.248000 -0.960000 +-0.100000 0.273500 -0.182900 -0.112000 0.208000 -0.968000 +-0.100000 0.301200 -0.172200 -0.168000 0.416000 -0.888000 +-0.058500 0.301200 -0.182900 -0.128000 0.320000 -0.936000 +-0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 +-0.050000 0.304700 -0.182900 -0.120000 0.336000 -0.928000 +-0.050000 0.351500 -0.155800 -0.048000 0.328000 -0.936000 +0.000000 0.313300 -0.182900 -0.064000 0.304000 -0.944000 +0.000000 0.351500 -0.164900 -0.080000 0.368000 -0.920000 +0.050000 0.327400 -0.182900 -0.016000 0.344000 -0.936000 +0.050000 0.351500 -0.166400 0.000000 0.392000 -0.912000 +0.100000 0.320500 -0.182900 0.096000 0.312000 -0.936000 +0.100000 0.351500 -0.169000 0.056000 0.272000 -0.952000 +0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 +0.150000 0.351500 -0.160600 0.144000 0.128000 -0.976000 +0.150000 0.301200 -0.172900 0.456000 0.432000 -0.768000 +0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 +0.200000 0.301200 -0.179700 -0.152000 -0.352000 -0.920000 +0.226900 0.351500 -0.182900 -0.224000 0.192000 -0.952000 +0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 +0.215700 0.301200 -0.182900 -0.120000 -0.160000 -0.976000 +0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 +0.000000 0.351500 -0.051600 0.280000 -0.248000 0.920000 +0.042100 0.351500 -0.060900 0.160000 -0.080000 0.976000 +0.000000 0.334500 -0.060900 0.312000 -0.368000 0.864000 +0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 +0.000000 0.301200 -0.076500 0.296000 -0.272000 0.904000 +0.050000 0.301200 -0.074400 0.160000 -0.248000 0.952000 +0.000000 0.251000 -0.086600 0.344000 -0.360000 0.864000 +0.050000 0.251000 -0.100200 0.224000 -0.464000 0.848000 +0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 +0.050000 0.230600 -0.121900 0.312000 -0.824000 0.464000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +0.050000 0.219300 -0.182900 0.280000 -0.632000 -0.712000 +0.008500 0.200800 -0.182900 0.416000 -0.688000 -0.584000 +0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 +0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 +0.000000 0.251000 -0.201400 0.024000 -0.152000 -0.984000 +-0.050000 0.200800 -0.204500 0.304000 -0.328000 -0.888000 +-0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 +-0.100000 0.200800 -0.221500 0.056000 0.392000 -0.912000 +-0.100000 0.251000 -0.188700 -0.192000 0.256000 -0.944000 +-0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 +-0.150000 0.251000 -0.184400 -0.280000 0.168000 -0.936000 +-0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 +-0.153800 0.251000 -0.182900 -0.312000 0.176000 -0.928000 +-0.150000 0.251000 -0.184400 -0.280000 0.168000 -0.936000 +-0.150000 0.257900 -0.182900 -0.288000 0.168000 -0.936000 +-0.100000 0.251000 -0.188700 -0.192000 0.256000 -0.944000 +-0.100000 0.273500 -0.182900 -0.112000 0.208000 -0.968000 +-0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 +-0.058500 0.301200 -0.182900 -0.128000 0.320000 -0.936000 +-0.050000 0.301200 -0.184300 -0.112000 0.296000 -0.944000 +-0.050000 0.304700 -0.182900 -0.120000 0.336000 -0.928000 +0.000000 0.301200 -0.186500 -0.056000 0.232000 -0.968000 +0.000000 0.313300 -0.182900 -0.064000 0.304000 -0.944000 +0.050000 0.301200 -0.192400 0.024000 0.192000 -0.976000 +0.050000 0.327400 -0.182900 -0.016000 0.344000 -0.936000 +0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 +0.100000 0.320500 -0.182900 0.096000 0.312000 -0.936000 +0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 +0.133500 0.301200 -0.182900 0.272000 0.264000 -0.920000 +0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 +0.000000 -0.301200 -0.001900 0.408000 -0.704000 0.568000 +0.032200 -0.301200 -0.060900 0.552000 -0.696000 0.448000 +0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 +0.000000 -0.326800 -0.060900 0.344000 -0.824000 0.432000 +0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 +0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 +0.100000 0.368600 -0.060900 0.104000 0.120000 0.984000 +0.100000 0.351500 -0.058100 0.120000 -0.240000 0.960000 +0.111400 0.351500 -0.060900 0.184000 -0.224000 0.952000 +0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 +0.100000 0.351500 -0.058100 0.120000 -0.240000 0.960000 +0.065700 0.351500 -0.060900 -0.064000 -0.312000 0.944000 +0.100000 0.345700 -0.060900 0.056000 -0.392000 0.912000 +0.050000 0.351500 -0.062500 0.000000 -0.264000 0.960000 +0.100000 0.301200 -0.081200 0.144000 -0.392000 0.904000 +0.050000 0.301200 -0.074400 0.160000 -0.248000 0.952000 +0.100000 0.251000 -0.119300 0.048000 -0.664000 0.736000 +0.050000 0.251000 -0.100200 0.224000 -0.464000 0.848000 +0.100000 0.248700 -0.121900 0.064000 -0.824000 0.552000 +0.050000 0.230600 -0.121900 0.312000 -0.824000 0.464000 +0.100000 0.246100 -0.182900 0.136000 -0.488000 -0.856000 +0.050000 0.219300 -0.182900 0.280000 -0.632000 -0.712000 +0.100000 0.251000 -0.185300 0.160000 -0.296000 -0.936000 +0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 +0.100000 0.301200 -0.188500 0.112000 0.128000 -0.984000 +0.050000 0.301200 -0.192400 0.024000 0.192000 -0.976000 +0.050000 0.251000 -0.200200 0.040000 -0.232000 -0.968000 +0.000000 0.301200 -0.186500 -0.056000 0.232000 -0.968000 +0.000000 0.251000 -0.201400 0.024000 -0.152000 -0.984000 +-0.050000 0.301200 -0.184300 -0.112000 0.296000 -0.944000 +-0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 +-0.050000 0.251000 -0.205600 -0.136000 0.216000 -0.960000 +0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 +0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 +0.150000 0.451900 -0.057100 -0.080000 0.496000 0.856000 +0.121900 0.451900 -0.060900 -0.112000 0.472000 0.872000 +0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 +0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 +0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 +0.100000 0.401700 -0.066700 -0.048000 0.000000 0.992000 +0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 +0.050000 0.401700 -0.062500 -0.008000 0.136000 0.984000 +0.050000 0.451900 -0.077800 0.016000 0.408000 0.912000 +0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 +0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 +-0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 +-0.023600 0.451900 -0.060900 0.376000 0.152000 0.904000 +0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 +-0.033200 0.502100 -0.060900 0.616000 0.496000 0.600000 +0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 +-0.050000 0.502100 -0.117100 -0.040000 0.912000 -0.392000 +-0.050000 0.500300 -0.121900 -0.104000 0.896000 -0.424000 +-0.100000 0.502100 -0.081300 -0.184000 0.840000 -0.488000 +-0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 +-0.100000 0.479800 -0.121900 -0.288000 0.584000 -0.752000 +0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 +0.350000 0.302200 -0.060900 -0.144000 -0.624000 0.760000 +0.300000 0.310700 -0.060900 -0.072000 -0.760000 0.640000 +0.350000 0.351500 -0.021800 0.032000 -0.048000 0.992000 +0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 +0.300000 0.351500 -0.009100 -0.016000 -0.144000 0.984000 +0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 +0.395100 0.251000 -0.060900 -0.344000 -0.184000 0.912000 +0.400000 0.251000 -0.058700 -0.328000 -0.176000 0.920000 +0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 +0.400000 0.242400 -0.060900 -0.352000 -0.192000 0.904000 +0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 +0.450000 0.401700 -0.038900 -0.120000 0.592000 0.784000 +0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 +0.450000 0.414500 -0.060900 0.192000 0.928000 0.304000 +0.500000 0.403100 -0.060900 0.112000 0.944000 0.280000 +0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 +0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 +0.488600 0.401700 -0.121900 0.504000 0.776000 -0.368000 +0.450000 0.422200 -0.121900 0.368000 0.832000 -0.392000 +0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 +0.450000 0.401700 -0.160800 0.376000 0.656000 -0.640000 +0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 +0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 +0.500000 0.150600 -0.020200 -0.704000 -0.472000 0.520000 +0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 +0.500000 0.107000 -0.060900 -0.608000 -0.480000 0.616000 +0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 +0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 +0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 +0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 +0.495100 0.050200 -0.060900 -0.456000 0.136000 0.872000 +0.450000 0.000000 -0.073300 -0.344000 -0.088000 0.928000 +0.450000 0.050200 -0.077000 -0.360000 0.120000 0.920000 +0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 +0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 +0.351500 0.000000 -0.121900 -0.376000 0.528000 0.752000 +0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 +0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 +0.357200 0.050200 -0.182900 -0.736000 0.640000 0.184000 +0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 +0.351400 0.050200 -0.243900 -0.480000 0.768000 -0.416000 +0.350000 0.049300 -0.243900 -0.512000 0.784000 -0.320000 +0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 +0.300000 0.032100 -0.243900 -0.576000 0.680000 -0.432000 +0.300000 0.018000 -0.182900 -0.296000 0.768000 0.552000 +0.350000 0.043300 -0.182900 -0.488000 0.704000 0.504000 +0.300000 0.000000 -0.166100 -0.488000 0.464000 0.728000 +0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 +0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 +0.350000 -0.001200 -0.121900 -0.472000 0.472000 0.736000 +0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 +0.350000 -0.050200 -0.093300 -0.312000 0.392000 0.856000 +0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 +0.350000 -0.100400 -0.081200 -0.280000 0.032000 0.952000 +0.300000 -0.100400 -0.098900 -0.360000 0.344000 0.856000 +0.350000 -0.150600 -0.101500 0.088000 -0.352000 0.928000 +0.300000 -0.150600 -0.090800 0.240000 -0.024000 0.968000 +0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 +0.300000 -0.200800 -0.101500 0.424000 -0.216000 0.872000 +0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 +0.300000 -0.234400 -0.121900 0.104000 -0.472000 0.872000 +0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 +0.300000 -0.251000 -0.132800 -0.224000 -0.464000 0.856000 +0.350000 -0.234100 -0.121900 0.384000 0.224000 0.888000 +0.328900 -0.251000 -0.121900 -0.264000 -0.304000 0.912000 +0.350000 -0.251000 -0.114600 0.576000 -0.200000 0.784000 +0.350000 -0.260400 -0.121900 0.448000 -0.472000 0.752000 +0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 +0.350000 -0.251000 -0.114600 0.576000 -0.200000 0.784000 +0.350000 -0.234100 -0.121900 0.384000 0.224000 0.888000 +0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 +0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 +0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 +0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 +0.400000 -0.200800 -0.119100 -0.200000 -0.688000 0.688000 +0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 +0.400000 -0.150600 -0.068400 -0.344000 -0.312000 0.880000 +0.350000 -0.150600 -0.101500 0.088000 -0.352000 0.928000 +0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 +0.350000 -0.100400 -0.081200 -0.280000 0.032000 0.952000 +0.400000 -0.050200 -0.089900 -0.128000 0.176000 0.968000 +0.350000 -0.050200 -0.093300 -0.312000 0.392000 0.856000 +0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 +0.350000 -0.001200 -0.121900 -0.472000 0.472000 0.736000 +0.351500 0.000000 -0.121900 -0.376000 0.528000 0.752000 +0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 +0.350000 0.000000 -0.123200 -0.512000 0.592000 0.608000 +0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 +0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 +0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 +0.500000 -0.026100 -0.060900 -0.336000 -0.328000 0.872000 +0.550000 0.000000 -0.046900 0.008000 -0.120000 0.992000 +0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 +0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 +0.600000 -0.012300 -0.060900 0.104000 -0.576000 0.800000 +0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 +0.600000 -0.050200 -0.088500 0.448000 -0.400000 0.792000 +0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 +0.600000 -0.100400 -0.077400 0.584000 0.048000 0.800000 +0.550000 -0.100400 -0.076900 0.056000 0.056000 0.992000 +0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 +0.500000 -0.100400 -0.086800 -0.048000 0.256000 0.960000 +0.500000 -0.050200 -0.068900 -0.136000 -0.144000 0.976000 +0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 +0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 +0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 +0.400000 -0.050200 -0.089900 -0.128000 0.176000 0.968000 +0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 +0.400000 0.000000 -0.102200 -0.272000 0.176000 0.936000 +0.450000 0.000000 -0.073300 -0.344000 -0.088000 0.928000 +0.450000 -0.050200 -0.086300 -0.128000 -0.040000 0.984000 +0.478700 0.000000 -0.060900 -0.440000 -0.008000 0.888000 +0.500000 -0.050200 -0.068900 -0.136000 -0.144000 0.976000 +0.500000 -0.026100 -0.060900 -0.336000 -0.328000 0.872000 +0.550000 -0.050200 -0.061500 -0.064000 -0.152000 0.984000 +0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 +0.550000 -0.046200 -0.060900 -0.104000 -0.168000 0.976000 +0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 +0.500000 0.401700 -0.057700 0.096000 0.864000 0.480000 +0.500000 0.403100 -0.060900 0.112000 0.944000 0.280000 +0.517100 0.401700 -0.060900 0.080000 0.968000 0.224000 +0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 +0.500000 0.401700 -0.069300 0.168000 0.952000 -0.216000 +0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 +0.500000 0.266900 0.000000 -0.760000 -0.040000 0.640000 +0.500800 0.251000 0.000000 -0.792000 -0.016000 0.608000 +0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 +0.500000 0.251000 -0.000900 -0.496000 0.112000 0.856000 +0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 +0.500000 0.050200 -0.057700 -0.560000 0.128000 0.816000 +0.500000 0.000000 -0.045100 -0.376000 -0.208000 0.896000 +0.550000 0.050200 -0.037800 -0.320000 -0.688000 0.640000 +0.550000 0.000000 -0.046900 0.008000 -0.120000 0.992000 +0.600000 0.050200 -0.005300 -0.440000 -0.752000 0.480000 +0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 +0.600000 0.000000 -0.044900 -0.016000 -0.720000 0.688000 +0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 +0.550000 0.104000 0.000000 -0.664000 -0.568000 0.464000 +0.553100 0.100400 0.000000 -0.664000 -0.576000 0.464000 +0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 +0.550000 0.100400 -0.005700 -0.672000 -0.576000 0.448000 +0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 +0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 +0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 +0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 +0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 +0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 +0.600000 -0.150600 -0.093600 0.304000 0.568000 0.752000 +0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 +0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 +0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 +0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 +0.650000 -0.242600 -0.060900 0.392000 0.384000 0.824000 +0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 +0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 +0.700000 -0.217500 -0.121900 0.616000 0.552000 0.544000 +0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 +0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 +0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 +0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 +0.750000 -0.301200 -0.116500 0.704000 0.400000 0.568000 +0.752700 -0.301200 -0.121900 0.792000 0.344000 0.488000 +0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 +0.775700 -0.351500 -0.121900 0.600000 0.328000 0.720000 +0.750000 -0.401700 -0.115900 -0.264000 -0.344000 0.896000 +0.800000 -0.391100 -0.121900 0.384000 0.416000 0.816000 +0.800000 -0.401700 -0.115500 0.392000 0.184000 0.896000 +0.810500 -0.401700 -0.121900 0.456000 0.104000 0.872000 +0.800000 -0.418600 -0.121900 0.304000 -0.320000 0.888000 +0.850000 -0.401700 -0.151500 0.608000 0.552000 0.560000 +0.800000 -0.451900 -0.135400 0.168000 -0.384000 0.904000 +0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 +0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 +0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 +0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 +0.850000 -0.533300 -0.182900 -0.416000 -0.736000 0.528000 +0.800000 -0.519900 -0.243900 -0.400000 -0.904000 -0.112000 +0.850000 -0.540400 -0.243900 -0.360000 -0.768000 -0.512000 +0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 +0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 +0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 +0.850000 -0.502100 -0.307100 0.032000 -0.240000 -0.968000 +0.850000 -0.490600 -0.304800 0.216000 0.112000 -0.968000 +0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 +0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 +0.900000 -0.502100 -0.284600 -0.008000 -0.096000 -0.992000 +0.900000 -0.451900 -0.272400 0.368000 0.408000 -0.824000 +0.950000 -0.502100 -0.277800 0.272000 0.288000 -0.912000 +0.950000 -0.451900 -0.300000 0.488000 0.464000 -0.728000 +1.000000 -0.502100 -0.271100 0.392000 0.584000 -0.696000 +0.980700 -0.451900 -0.243900 0.752000 0.648000 0.032000 +1.000000 -0.475100 -0.243900 0.736000 0.608000 -0.280000 +0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 +1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 +0.950000 -0.463500 -0.182900 0.464000 0.672000 0.568000 +0.998000 -0.502100 -0.182900 0.528000 0.664000 0.520000 +0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 +1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 +0.950000 -0.531200 -0.121900 -0.376000 0.368000 0.840000 +1.000000 -0.544400 -0.121900 0.360000 0.712000 0.592000 +0.950000 -0.552300 -0.115100 -0.432000 -0.368000 0.816000 +1.000000 -0.552300 -0.111000 0.040000 -0.024000 0.992000 +0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 +1.000000 -0.602500 -0.115100 -0.504000 -0.464000 0.712000 +0.992300 -0.602500 -0.121900 -0.520000 -0.480000 0.696000 +1.000000 -0.611000 -0.121900 -0.528000 -0.480000 0.696000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 +0.950000 -0.619400 -0.182900 -0.632000 -0.592000 0.480000 +0.983200 -0.652700 -0.182900 -0.528000 -0.608000 0.584000 +0.950000 -0.619400 -0.243900 -0.600000 -0.584000 -0.536000 +0.979500 -0.652700 -0.243900 -0.672000 -0.664000 -0.304000 +0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 +1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 +0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 +1.000000 -0.614600 -0.304800 -0.488000 -0.376000 -0.776000 +1.000000 -0.602500 -0.311200 -0.448000 -0.336000 -0.816000 +0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 +1.000000 -0.552300 -0.319800 -0.248000 0.216000 -0.936000 +0.953900 -0.552300 -0.304800 -0.328000 0.312000 -0.888000 +1.000000 -0.525900 -0.304800 -0.248000 0.496000 -0.824000 +0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 +1.000000 -0.502100 -0.271100 0.392000 0.584000 -0.696000 +0.950000 -0.502100 -0.277800 0.272000 0.288000 -0.912000 +0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 +0.900000 -0.502100 -0.284600 -0.008000 -0.096000 -0.992000 +0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 +0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 +0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 +0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 +0.850000 -0.540400 -0.243900 -0.360000 -0.768000 -0.512000 +0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 +0.850000 -0.533300 -0.182900 -0.416000 -0.736000 0.528000 +0.876500 -0.552300 -0.182900 -0.528000 -0.672000 0.504000 +0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 +0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 +0.900000 -0.502100 -0.123800 -0.168000 -0.208000 0.960000 +0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 +0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 +0.950000 -0.531200 -0.121900 -0.376000 0.368000 0.840000 +0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 +0.950000 -0.552300 -0.115100 -0.432000 -0.368000 0.816000 +0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 +0.940600 -0.552300 -0.121900 -0.512000 -0.272000 0.808000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 +0.935000 -0.602500 -0.182900 -0.552000 -0.552000 0.608000 +0.900000 -0.573700 -0.182900 -0.608000 -0.704000 0.344000 +0.933200 -0.602500 -0.243900 -0.584000 -0.624000 -0.512000 +0.900000 -0.578300 -0.243900 -0.552000 -0.704000 -0.440000 +0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 +0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 +0.950000 -0.552300 -0.303200 -0.304000 0.392000 -0.864000 +0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 +0.953900 -0.552300 -0.304800 -0.328000 0.312000 -0.888000 +0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 +0.990600 -0.602500 -0.304800 -0.488000 -0.376000 -0.784000 +0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 +0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 +0.550000 -0.200800 -0.034900 0.016000 -0.040000 0.992000 +0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 +0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 +0.600000 -0.251000 -0.042400 -0.104000 -0.208000 0.968000 +0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 +0.650000 -0.251000 -0.056300 0.424000 -0.024000 0.896000 +0.650000 -0.242600 -0.060900 0.392000 0.384000 0.824000 +0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 +0.650000 -0.251000 -0.056300 0.424000 -0.024000 0.896000 +0.650000 -0.258100 -0.060900 0.392000 -0.456000 0.792000 +0.600000 -0.251000 -0.042400 -0.104000 -0.208000 0.968000 +0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 +0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 +0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 +0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 +0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 +0.550000 -0.300100 -0.121900 -0.624000 -0.616000 0.472000 +0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 +0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 +0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 +0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 +0.558500 -0.351500 -0.121900 0.208000 -0.648000 0.728000 +0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 +0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 +0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 +0.550000 -0.389500 -0.182900 -0.304000 -0.784000 0.528000 +0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 +0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 +0.600000 -0.414700 -0.243900 -0.184000 -0.936000 0.272000 +0.550000 -0.409700 -0.243900 -0.144000 -0.944000 0.272000 +0.600000 -0.422100 -0.304800 -0.120000 -0.768000 -0.616000 +0.550000 -0.415900 -0.304800 -0.192000 -0.848000 -0.480000 +0.600000 -0.401700 -0.327900 -0.024000 -0.544000 -0.832000 +0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 +0.600000 -0.351500 -0.337900 0.040000 -0.080000 -0.992000 +0.550000 -0.351500 -0.364500 0.120000 -0.104000 -0.984000 +0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 +0.550000 -0.316300 -0.304800 -0.472000 0.688000 -0.536000 +0.567500 -0.301200 -0.304800 -0.696000 0.400000 -0.584000 +0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 +0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 +0.550000 -0.272400 -0.304800 -0.680000 -0.440000 -0.576000 +0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 +0.616700 0.401700 0.000000 0.496000 0.864000 -0.032000 +0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 +0.600000 0.401700 -0.057700 0.168000 0.920000 -0.344000 +0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 +0.600000 0.400600 -0.060900 -0.072000 0.912000 -0.384000 +0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 +0.600000 0.351500 -0.101600 0.448000 0.496000 -0.736000 +0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 +0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 +0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 +0.608400 0.301200 -0.121900 0.448000 0.488000 -0.744000 +0.600000 0.310600 -0.121900 0.480000 0.424000 -0.760000 +0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 +0.600000 0.301200 -0.128700 0.472000 0.520000 -0.704000 +0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 +0.648900 0.351500 -0.060900 0.576000 0.600000 -0.544000 +0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 +0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 +0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 +0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 +0.685300 0.301200 0.000000 0.832000 0.536000 -0.104000 +0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 +0.700000 0.279600 0.000000 0.792000 0.600000 -0.048000 +0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 +0.700000 0.278700 -0.060900 0.648000 0.584000 -0.472000 +0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 +0.600000 -0.194800 -0.060900 0.352000 0.496000 0.784000 +0.608400 -0.200800 -0.060900 0.360000 0.488000 0.792000 +0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 +0.600000 -0.200800 -0.056500 0.336000 0.448000 0.816000 +0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 +0.650000 0.368200 0.000000 0.792000 0.584000 -0.144000 +0.650000 0.351500 -0.057700 0.800000 0.552000 -0.208000 +0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 +0.660900 0.351500 0.000000 0.832000 0.512000 -0.176000 +0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 +0.650000 0.000000 -0.040500 0.104000 -0.944000 0.296000 +0.686800 0.000000 -0.060900 0.208000 -0.960000 0.144000 +0.650000 -0.010200 -0.060900 0.168000 -0.784000 0.592000 +0.698200 0.000000 -0.121900 0.296000 -0.952000 0.032000 +0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 +0.687300 0.000000 -0.182900 0.648000 -0.600000 -0.456000 +0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 +0.653800 0.000000 -0.243900 0.576000 -0.112000 -0.808000 +0.650000 -0.016900 -0.243900 0.704000 -0.184000 -0.672000 +0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 +0.637200 -0.050200 -0.243900 0.840000 -0.080000 -0.528000 +0.649100 -0.050200 -0.182900 0.816000 -0.544000 0.144000 +0.650000 -0.048900 -0.182900 0.792000 -0.584000 0.152000 +0.638000 -0.050200 -0.121900 0.800000 -0.536000 0.256000 +0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 +0.650000 -0.033500 -0.121900 0.512000 -0.672000 0.520000 +0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 +0.800000 -0.015400 0.000000 -0.560000 -0.800000 0.184000 +0.772100 0.000000 0.000000 -0.504000 -0.832000 0.224000 +0.800000 -0.024700 -0.060900 -0.616000 -0.776000 0.088000 +0.753100 0.000000 -0.060900 -0.472000 -0.872000 0.000000 +0.800000 -0.027900 -0.121900 -0.664000 -0.736000 -0.072000 +0.756600 0.000000 -0.121900 -0.496000 -0.856000 -0.080000 +0.800000 -0.017800 -0.182900 -0.616000 -0.680000 -0.376000 +0.776700 0.000000 -0.182900 -0.576000 -0.728000 -0.360000 +0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 +0.800000 0.000000 -0.217200 -0.656000 -0.464000 -0.584000 +0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 +0.900000 0.131100 0.000000 0.480000 0.848000 0.192000 +0.950000 0.102000 0.000000 0.472000 0.864000 0.120000 +0.900000 0.143500 -0.060900 0.528000 0.808000 -0.240000 +0.950000 0.106300 -0.060900 0.576000 0.776000 -0.240000 +0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 +0.950000 0.100400 -0.078300 0.560000 0.768000 -0.304000 +0.931600 0.100400 -0.121900 0.600000 0.744000 -0.272000 +0.950000 0.086300 -0.121900 0.544000 0.784000 -0.280000 +0.912000 0.100400 -0.182900 0.600000 0.704000 -0.360000 +0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 +0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 +0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 +0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 +0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 +0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 +0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 +0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 +0.950000 0.000000 -0.291100 0.424000 0.536000 -0.720000 +0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 +0.950000 -0.016600 -0.304800 0.448000 0.520000 -0.720000 +0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 +0.950000 -0.050200 -0.338500 0.440000 0.400000 -0.800000 +0.900000 -0.050200 -0.348300 -0.256000 0.192000 -0.944000 +0.950000 -0.100400 -0.351000 0.336000 0.064000 -0.936000 +0.900000 -0.100400 -0.341700 -0.464000 -0.104000 -0.872000 +0.950000 -0.150600 -0.345500 -0.032000 0.064000 -0.992000 +0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 +0.900000 -0.150600 -0.332000 -0.672000 -0.328000 -0.656000 +0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 +0.995800 -0.200800 0.000000 -0.648000 -0.704000 0.264000 +0.950000 -0.168100 0.000000 -0.640000 -0.744000 0.184000 +0.973000 -0.200800 -0.060900 -0.584000 -0.760000 0.264000 +0.950000 -0.183700 -0.060900 -0.632000 -0.728000 0.232000 +0.950500 -0.200800 -0.121900 -0.632000 -0.744000 0.192000 +0.950000 -0.200400 -0.121900 -0.720000 -0.672000 0.136000 +0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 +0.950000 -0.200800 -0.124000 -0.680000 -0.712000 0.160000 +-0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 +-0.910500 0.251000 -0.121900 0.344000 0.880000 -0.304000 +-0.900000 0.246900 -0.121900 0.360000 0.872000 -0.304000 +-0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 +-0.900000 0.251000 -0.101700 0.376000 0.896000 -0.216000 +-0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 +-0.900000 -0.502100 -0.104000 -0.752000 0.000000 0.656000 +-0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 +-0.906100 -0.502100 -0.121900 -0.920000 0.072000 0.376000 +-0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 +-0.925200 -0.502100 -0.182900 -0.976000 -0.008000 0.208000 +-0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 +-0.929300 -0.502100 -0.243900 -0.992000 0.064000 -0.008000 +-0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 +-0.920600 -0.502100 -0.304800 -0.888000 -0.288000 -0.344000 +-0.900000 -0.502100 -0.352600 -0.672000 0.128000 -0.720000 +-0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 +-0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 +-0.891900 -0.552300 -0.304800 -0.800000 -0.568000 -0.136000 +-0.860100 -0.552300 -0.365800 -0.680000 -0.432000 -0.584000 +-0.850000 -0.602000 -0.304800 -0.640000 -0.736000 -0.184000 +-0.850000 -0.564700 -0.365800 -0.608000 -0.528000 -0.584000 +-0.849200 -0.602500 -0.304800 -0.536000 -0.720000 -0.432000 +-0.806700 -0.602500 -0.365800 -0.520000 -0.656000 -0.536000 +-0.800000 -0.636000 -0.304800 -0.536000 -0.792000 -0.272000 +-0.800000 -0.607700 -0.365800 -0.488000 -0.640000 -0.584000 +-0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 +-0.750000 -0.628000 -0.365800 -0.232000 -0.808000 -0.528000 +-0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 +-0.700000 -0.639000 -0.365800 -0.040000 -0.920000 -0.376000 +-0.700000 -0.652700 -0.309000 0.024000 -0.952000 -0.296000 +-0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 +-0.688500 -0.652700 -0.304800 0.080000 -0.992000 -0.064000 +-0.650000 -0.650400 -0.304800 0.048000 -0.992000 0.096000 +-0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 +-0.650000 -0.641500 -0.243900 0.040000 -0.976000 0.168000 +-0.700000 -0.645500 -0.243900 -0.008000 -0.984000 0.160000 +-0.650000 -0.630900 -0.182900 0.008000 -0.968000 0.232000 +-0.700000 -0.633400 -0.182900 -0.064000 -0.960000 0.248000 +-0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 +-0.700000 -0.614700 -0.121900 -0.136000 -0.888000 0.424000 +-0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 +-0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 +-0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 +-0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 +-0.685200 -0.552300 -0.060900 -0.696000 -0.384000 0.592000 +-0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 +-0.700000 -0.507800 -0.060900 -0.864000 -0.200000 0.448000 +-0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 +-0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 +-0.850000 -0.552300 -0.082300 -0.704000 -0.480000 0.504000 +-0.850000 -0.569100 -0.121900 -0.488000 -0.776000 0.384000 +-0.800000 -0.552300 -0.095900 0.424000 0.264000 0.864000 +-0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 +-0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 +-0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 +-0.750000 -0.602500 -0.116200 -0.176000 -0.808000 0.544000 +-0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 +-0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 +-0.700000 -0.614700 -0.121900 -0.136000 -0.888000 0.424000 +-0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 +-0.700000 -0.633400 -0.182900 -0.064000 -0.960000 0.248000 +-0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 +-0.700000 -0.645500 -0.243900 -0.008000 -0.984000 0.160000 +-0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 +-0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 +-0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 +-0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 +-0.700000 -0.652700 -0.298900 0.056000 -0.976000 0.184000 +-0.700000 -0.653800 -0.304800 0.056000 -0.992000 -0.080000 +-0.688500 -0.652700 -0.304800 0.080000 -0.992000 -0.064000 +-0.700000 -0.652700 -0.309000 0.024000 -0.952000 -0.296000 +-0.700000 -0.653800 -0.304800 0.056000 -0.992000 -0.080000 +-0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 +-0.734200 -0.652700 -0.304800 -0.024000 -0.976000 -0.192000 +-0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 +-0.804300 0.200800 -0.121900 0.384000 0.872000 -0.288000 +-0.800000 0.198900 -0.121900 0.384000 0.872000 -0.288000 +-0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 +-0.800000 0.200800 -0.113900 0.392000 0.880000 -0.256000 +-0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 +-0.762700 -0.401700 -0.060900 -0.840000 -0.496000 0.168000 +-0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 +-0.750000 -0.426100 -0.060900 -0.864000 -0.448000 0.200000 +-0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 +-0.735400 -0.451900 -0.060900 -0.768000 -0.512000 0.360000 +-0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 +-0.701200 -0.502100 -0.060900 -0.816000 -0.416000 0.392000 +-0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 +-0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 +-0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 +-0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 +-0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 +-0.757600 -0.451900 -0.182900 -0.952000 -0.232000 0.184000 +-0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 +-0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 +-0.800000 -0.502100 -0.227500 0.432000 0.824000 0.352000 +-0.800000 -0.496000 -0.243900 0.424000 0.840000 0.320000 +-0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 +-0.850000 -0.480800 -0.243900 0.376000 0.912000 0.152000 +-0.850000 -0.490700 -0.182900 0.328000 0.896000 0.288000 +-0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 +-0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 +-0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 +-0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 +-0.900000 -0.449600 -0.243900 0.496000 0.856000 0.136000 +-0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 +-0.900000 -0.446300 -0.304800 0.160000 0.912000 -0.360000 +-0.900000 -0.451900 -0.318500 0.104000 0.872000 -0.464000 +-0.912200 -0.451900 -0.304800 -0.496000 0.720000 -0.464000 +-0.900000 -0.446300 -0.304800 0.160000 0.912000 -0.360000 +-0.921000 -0.451900 -0.243900 -0.184000 0.968000 0.160000 +-0.900000 -0.449600 -0.243900 0.496000 0.856000 0.136000 +-0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 +-0.900000 -0.451900 -0.229200 0.512000 0.832000 0.168000 +-0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 +-0.700000 -0.602500 -0.083600 -0.192000 -0.680000 0.704000 +-0.750000 -0.602500 -0.116200 -0.176000 -0.808000 0.544000 +-0.700000 -0.552300 -0.082500 -0.736000 -0.280000 0.608000 +-0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 +-0.750000 -0.552300 -0.119400 0.072000 0.512000 0.848000 +-0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 +-0.650000 -0.594800 -0.060900 -0.368000 -0.640000 0.664000 +-0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 +-0.600000 -0.601900 -0.060900 -0.072000 -0.808000 0.568000 +-0.600000 -0.602500 -0.062100 -0.056000 -0.816000 0.560000 +-0.550000 -0.588500 -0.060900 0.224000 -0.888000 0.384000 +-0.550000 -0.602500 -0.100200 0.256000 -0.912000 0.288000 +-0.500000 -0.570000 -0.060900 0.480000 -0.800000 0.328000 +-0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 +-0.500000 -0.589900 -0.121900 0.408000 -0.832000 0.352000 +-0.500000 -0.602500 -0.155300 0.000000 -0.920000 0.376000 +-0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 +-0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 +-0.550000 -0.606400 -0.121900 0.192000 -0.952000 0.216000 +-0.550000 -0.618800 -0.182900 0.168000 -0.944000 0.272000 +-0.600000 -0.616000 -0.121900 0.080000 -0.960000 0.256000 +-0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 +-0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 +-0.650000 -0.630900 -0.182900 0.008000 -0.968000 0.232000 +-0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 +-0.650000 -0.641500 -0.243900 0.040000 -0.976000 0.168000 +-0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 +-0.650000 -0.650400 -0.304800 0.048000 -0.992000 0.096000 +-0.600000 -0.650800 -0.304800 0.064000 -0.992000 0.000000 +-0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 +-0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 +-0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 +-0.600000 -0.630300 -0.426800 -0.072000 -0.944000 -0.312000 +-0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 +-0.550000 -0.626200 -0.426800 0.144000 -0.960000 -0.232000 +-0.550000 -0.637200 -0.365800 0.152000 -0.968000 -0.168000 +-0.500000 -0.621400 -0.426800 0.072000 -0.968000 -0.232000 +-0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 +-0.450000 -0.629300 -0.426800 -0.048000 -0.904000 -0.416000 +-0.450000 -0.645700 -0.365800 -0.144000 -0.904000 -0.392000 +-0.400000 -0.621700 -0.426800 0.392000 -0.856000 -0.304000 +-0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 +-0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 +-0.400000 -0.652700 -0.368100 -0.128000 -0.872000 -0.456000 +-0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 +-0.650000 -0.602500 -0.069700 -0.072000 -0.800000 0.584000 +-0.650000 -0.615500 -0.121900 -0.008000 -0.952000 0.304000 +-0.600000 -0.602500 -0.062100 -0.056000 -0.816000 0.560000 +-0.600000 -0.616000 -0.121900 0.080000 -0.960000 0.256000 +-0.550000 -0.602500 -0.100200 0.256000 -0.912000 0.288000 +-0.550000 -0.606400 -0.121900 0.192000 -0.952000 0.216000 +-0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 +-0.531000 -0.602500 -0.121900 0.248000 -0.920000 0.272000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.554400 -0.050200 -0.060900 0.944000 0.280000 0.128000 +-0.586600 -0.050200 -0.121900 0.872000 0.224000 -0.424000 +-0.550000 -0.066800 -0.060900 0.944000 0.320000 -0.008000 +-0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 +-0.550000 -0.100400 -0.079500 0.552000 0.552000 -0.616000 +-0.550000 -0.145600 -0.121900 0.512000 0.792000 -0.312000 +-0.578300 -0.100400 -0.121900 0.848000 0.312000 -0.424000 +-0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 +-0.594100 -0.100400 -0.182900 0.816000 0.296000 -0.480000 +-0.561800 -0.150600 -0.182900 0.544000 0.784000 -0.280000 +-0.550000 -0.150600 -0.142400 0.376000 0.896000 -0.200000 +-0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 +-0.550000 -0.155500 -0.182900 0.296000 0.920000 -0.232000 +-0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 +-0.452400 -0.100400 -0.060900 -0.344000 0.936000 -0.016000 +-0.450000 -0.100400 -0.065100 -0.512000 0.824000 -0.200000 +-0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 +-0.450000 -0.099400 -0.060900 -0.760000 0.616000 0.160000 +-0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 +-0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 +-0.478800 -0.552300 -0.060900 0.704000 -0.592000 0.376000 +-0.450000 -0.549200 -0.121900 -0.080000 -0.800000 0.584000 +-0.452200 -0.552300 -0.121900 0.864000 0.184000 0.464000 +-0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 +-0.450000 -0.549200 -0.121900 -0.080000 -0.800000 0.584000 +-0.440600 -0.552300 -0.121900 -0.264000 -0.768000 0.568000 +-0.450000 -0.512800 -0.060900 0.208000 -0.760000 0.608000 +-0.400000 -0.552300 -0.100200 0.624000 -0.512000 0.584000 +-0.400000 -0.527700 -0.060900 0.080000 -0.768000 0.624000 +-0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 +-0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 +-0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 +-0.350000 -0.502100 -0.119400 0.240000 -0.864000 0.424000 +-0.380200 -0.502100 -0.060900 0.648000 -0.616000 0.432000 +-0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 +-0.350000 -0.453900 -0.060900 0.248000 -0.624000 0.728000 +-0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 +-0.450000 -0.602500 -0.084100 -0.232000 -0.736000 0.624000 +-0.450000 -0.558900 -0.121900 0.808000 0.320000 0.488000 +-0.410500 -0.602500 -0.121900 0.456000 -0.632000 0.616000 +-0.450000 -0.552300 -0.127200 0.616000 -0.144000 0.768000 +-0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 +-0.440600 -0.552300 -0.121900 -0.264000 -0.768000 0.568000 +-0.400000 -0.588000 -0.121900 0.672000 -0.144000 0.720000 +-0.400000 -0.552300 -0.100200 0.624000 -0.512000 0.584000 +-0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 +-0.400000 -0.588000 -0.121900 0.672000 -0.144000 0.720000 +-0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 +-0.400000 -0.602500 -0.131300 0.560000 -0.576000 0.584000 +-0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 +-0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 +-0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 +-0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 +-0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 +-0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 +-0.350000 -0.518400 -0.182900 -0.088000 -0.928000 0.360000 +-0.379200 -0.552300 -0.182900 0.864000 -0.416000 0.264000 +-0.350000 -0.503000 -0.121900 0.232000 -0.880000 0.400000 +-0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 +-0.393200 -0.552300 -0.121900 0.872000 -0.352000 0.320000 +-0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 +-0.350000 0.148000 -0.060900 -0.504000 0.552000 0.656000 +-0.361800 0.100400 -0.060900 -0.920000 0.112000 -0.352000 +-0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 +-0.358600 0.050200 -0.060900 -0.920000 0.168000 -0.328000 +-0.350000 0.050200 -0.078800 -0.832000 0.272000 -0.472000 +-0.350000 0.100400 -0.076700 -0.736000 0.256000 -0.616000 +-0.335400 0.050200 -0.121900 -0.752000 0.472000 -0.456000 +-0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 +-0.317300 0.100400 -0.121900 -0.712000 0.264000 -0.640000 +-0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 +-0.377800 0.000000 -0.060900 -0.864000 0.424000 -0.248000 +-0.400000 -0.037800 -0.060900 -0.728000 0.664000 0.152000 +-0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 +-0.400000 -0.050200 -0.118700 -0.832000 0.528000 -0.160000 +-0.399400 -0.050200 -0.121900 -0.760000 0.504000 -0.392000 +-0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 +-0.400000 -0.050900 -0.121900 -0.736000 0.536000 -0.408000 +-0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 +-0.350000 0.301200 -0.064600 -0.624000 0.064000 -0.768000 +-0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 +-0.350000 0.251000 -0.067500 -0.624000 0.048000 -0.768000 +-0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 +-0.350000 0.200800 -0.076700 -0.368000 -0.104000 -0.920000 +-0.300000 0.200800 -0.077300 -0.504000 0.240000 -0.824000 +-0.350000 0.153200 -0.060900 -0.608000 -0.784000 0.016000 +-0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 +-0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 +-0.346000 0.150600 -0.060900 -0.768000 -0.144000 0.616000 +-0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 +-0.300000 0.401700 -0.066400 -0.448000 0.440000 -0.768000 +-0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 +-0.300000 0.351500 -0.083400 -0.432000 0.176000 -0.880000 +-0.250000 0.351500 -0.107800 -0.464000 0.176000 -0.864000 +-0.300000 0.301200 -0.089300 -0.344000 0.056000 -0.936000 +-0.250000 0.301200 -0.116200 -0.672000 0.120000 -0.720000 +-0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 +-0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 +-0.254200 0.251000 -0.121900 -0.384000 0.088000 -0.912000 +-0.300000 0.251000 -0.090000 -0.368000 0.088000 -0.920000 +-0.263400 0.200800 -0.121900 -0.480000 0.216000 -0.840000 +-0.300000 0.200800 -0.077300 -0.504000 0.240000 -0.824000 +-0.295300 0.150600 -0.121900 -0.728000 0.520000 -0.432000 +-0.300000 0.150600 -0.105900 -0.768000 0.536000 -0.320000 +-0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 +-0.300000 0.144000 -0.121900 -0.728000 0.496000 -0.456000 +-0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 +-0.250000 0.401700 -0.091800 -0.416000 0.456000 -0.776000 +-0.208300 0.401700 -0.121900 -0.432000 0.432000 -0.784000 +-0.250000 0.351500 -0.107800 -0.464000 0.176000 -0.864000 +-0.233300 0.351500 -0.121900 -0.616000 0.184000 -0.752000 +-0.250000 0.301200 -0.116200 -0.672000 0.120000 -0.720000 +-0.245300 0.301200 -0.121900 -0.680000 0.120000 -0.720000 +-0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 +-0.250000 0.268200 -0.121900 -0.464000 0.088000 -0.872000 +-0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 +-0.104300 -0.100400 -0.060900 0.528000 0.416000 0.728000 +-0.100000 -0.100400 -0.064700 0.496000 0.416000 0.752000 +-0.100000 -0.105500 -0.060900 0.480000 0.464000 0.736000 +-0.050000 -0.100400 -0.073900 0.136000 0.480000 0.864000 +-0.050000 -0.119400 -0.060900 0.168000 0.528000 0.824000 +0.000000 -0.100400 -0.085100 0.096000 0.456000 0.880000 +0.000000 -0.136800 -0.060900 0.088000 0.520000 0.840000 +0.050000 -0.100400 -0.083400 0.000000 0.440000 0.888000 +0.050000 -0.140200 -0.060900 0.152000 0.504000 0.848000 +0.100000 -0.100400 -0.084200 0.032000 0.360000 0.928000 +0.076800 -0.150600 -0.060900 0.208000 0.432000 0.872000 +0.100000 -0.150600 -0.068400 0.184000 0.416000 0.888000 +0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 +0.100000 -0.170000 -0.060900 0.256000 0.296000 0.912000 +-0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 +-0.133200 -0.451900 -0.060900 0.584000 -0.656000 0.464000 +-0.100000 -0.415900 -0.060900 0.680000 -0.544000 0.480000 +-0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 +-0.100000 -0.451900 -0.117700 0.624000 -0.664000 0.392000 +-0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 +-0.150000 -0.502100 -0.111600 0.592000 -0.752000 0.280000 +-0.146100 -0.502100 -0.121900 0.616000 -0.744000 0.232000 +-0.150000 -0.505100 -0.121900 0.584000 -0.768000 0.240000 +-0.141200 -0.502100 -0.182900 0.696000 -0.688000 0.184000 +-0.150000 -0.510100 -0.182900 0.616000 -0.760000 0.168000 +-0.125700 -0.502100 -0.243900 0.664000 -0.408000 0.624000 +-0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 +-0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 +-0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 +-0.078700 0.200800 -0.060900 0.568000 -0.416000 0.704000 +-0.050000 0.236000 -0.060900 0.536000 -0.496000 0.672000 +-0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 +-0.050000 0.200800 -0.090500 0.520000 -0.520000 0.672000 +-0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 +-0.100000 0.100400 -0.099400 0.760000 -0.264000 0.584000 +-0.089100 0.100400 -0.121900 0.816000 -0.232000 0.520000 +-0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 +-0.100000 0.054100 -0.121900 0.816000 -0.176000 0.544000 +-0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 +-0.050000 -0.370100 -0.060900 0.592000 -0.672000 0.424000 +-0.087700 -0.401700 -0.060900 0.608000 -0.600000 0.504000 +-0.050000 -0.398200 -0.121900 0.592000 -0.704000 0.368000 +-0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 +-0.050000 -0.389600 -0.182900 0.656000 -0.736000 -0.128000 +-0.061900 -0.401700 -0.182900 0.744000 -0.648000 -0.120000 +-0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 +-0.071000 -0.401700 -0.243900 0.856000 -0.496000 -0.072000 +-0.050000 -0.374600 -0.304800 0.584000 -0.672000 -0.448000 +-0.073900 -0.401700 -0.304800 0.784000 -0.304000 -0.528000 +-0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 +-0.100000 -0.401700 -0.330800 0.576000 -0.152000 -0.792000 +-0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 +-0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 +-0.150000 -0.351500 -0.350300 0.512000 0.192000 -0.832000 +-0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 +-0.150000 -0.301200 -0.318500 -0.024000 0.504000 -0.856000 +-0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 +-0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 +-0.100000 -0.251000 -0.333700 -0.512000 0.248000 -0.816000 +-0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 +-0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 +-0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 +-0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 +-0.150000 -0.200800 -0.284500 0.024000 -0.216000 -0.968000 +-0.150000 -0.251000 -0.289400 -0.264000 0.272000 -0.920000 +-0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 +-0.195100 -0.251000 -0.304800 0.376000 0.112000 -0.912000 +-0.150000 -0.251000 -0.289400 -0.264000 0.272000 -0.920000 +-0.150000 -0.286300 -0.304800 -0.184000 0.480000 -0.848000 +-0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 +-0.123600 -0.251000 -0.304800 -0.536000 0.288000 -0.784000 +0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 +0.000000 0.393800 -0.060900 0.224000 0.176000 0.952000 +-0.005200 0.401700 -0.060900 0.264000 0.168000 0.944000 +0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 +0.000000 0.401700 -0.062800 0.256000 0.176000 0.944000 +0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 +0.000000 0.493800 -0.121900 0.128000 0.960000 -0.232000 +0.000000 0.451900 -0.081100 0.280000 0.456000 0.832000 +0.050000 0.485400 -0.121900 -0.032000 0.904000 -0.408000 +0.050000 0.451900 -0.077800 0.016000 0.408000 0.912000 +0.100000 0.494400 -0.121900 -0.184000 0.952000 -0.216000 +0.100000 0.451900 -0.066700 -0.192000 0.072000 0.976000 +0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 +0.121900 0.451900 -0.060900 -0.112000 0.472000 0.872000 +0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 +0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 +0.150000 0.456100 -0.060900 0.048000 0.664000 0.736000 +0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 +0.150000 0.503100 -0.121900 0.272000 0.456000 -0.840000 +0.150000 0.502100 -0.119700 0.016000 0.656000 0.752000 +0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 +0.138500 0.502100 -0.121900 -0.184000 0.952000 -0.216000 +0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 +0.150000 0.409600 -0.060900 -0.208000 -0.072000 0.968000 +0.151400 0.401700 -0.060900 -0.480000 -0.416000 0.760000 +0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 +0.150000 0.401700 -0.062100 -0.392000 -0.400000 0.816000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +0.150000 -0.251000 -0.118100 0.224000 -0.792000 0.560000 +0.161400 -0.251000 -0.121900 0.152000 -0.792000 0.576000 +0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 +0.150000 -0.253200 -0.121900 0.192000 -0.808000 0.552000 +0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 +0.250000 0.432000 -0.060900 0.224000 0.624000 0.736000 +0.203100 0.451900 -0.060900 0.264000 0.672000 0.680000 +0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 +0.250000 0.451900 -0.094000 0.248000 0.784000 0.552000 +0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 +0.200000 0.352900 -0.060900 -0.368000 -0.496000 0.776000 +0.201200 0.351500 -0.060900 -0.488000 -0.576000 0.648000 +0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 +0.200000 0.351500 -0.062100 -0.312000 -0.640000 0.696000 +0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 +0.200000 -0.041200 -0.121900 0.160000 0.488000 0.856000 +0.222300 -0.050200 -0.121900 0.200000 0.432000 0.872000 +0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 +0.200000 -0.050200 -0.116900 0.136000 0.368000 0.912000 +0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 +0.300000 0.451900 -0.106900 0.184000 0.864000 0.456000 +0.300000 0.458100 -0.121900 0.224000 0.952000 -0.176000 +0.323400 0.451900 -0.121900 0.248000 0.944000 -0.200000 +0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 +0.300000 0.451900 -0.131100 0.200000 0.712000 -0.664000 +0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 +0.366500 0.200800 -0.121900 -0.760000 -0.624000 0.168000 +0.400000 0.200800 -0.077800 -0.600000 -0.432000 0.664000 +0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 +0.400000 0.152400 -0.121900 -0.688000 -0.712000 -0.048000 +0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 +0.400000 0.072600 -0.121900 -0.632000 0.256000 0.720000 +0.400000 0.050200 -0.114800 -0.552000 0.256000 0.784000 +0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 +0.393200 0.050200 -0.121900 -0.648000 0.352000 0.664000 +0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 +0.450000 -0.100400 -0.078400 -0.088000 0.200000 0.968000 +0.400000 -0.100400 -0.080400 -0.024000 0.176000 0.976000 +0.450000 -0.150600 -0.064700 -0.192000 0.128000 0.968000 +0.400000 -0.150600 -0.068400 -0.344000 -0.312000 0.880000 +0.450000 -0.200800 -0.072200 -0.256000 -0.536000 0.800000 +0.400000 -0.200800 -0.119100 -0.200000 -0.688000 0.688000 +0.450000 -0.227100 -0.121900 -0.296000 -0.712000 0.624000 +0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 +0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 +0.400000 -0.249800 -0.182900 0.472000 -0.752000 0.448000 +0.415700 -0.251000 -0.182900 -0.088000 -0.872000 0.480000 +0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 +0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 +0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 +0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 +0.459300 -0.251000 -0.243900 -0.280000 -0.864000 -0.400000 +0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 +0.450000 0.163500 -0.060900 -0.600000 -0.504000 0.608000 +0.460500 0.150600 -0.060900 -0.624000 -0.512000 0.584000 +0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 +0.450000 0.150600 -0.075000 -0.616000 -0.488000 0.608000 +0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 +0.504600 0.100400 -0.060900 -0.704000 -0.248000 0.656000 +0.500000 0.067400 -0.060900 -0.592000 0.120000 0.792000 +0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 +0.500000 0.100400 -0.067100 -0.632000 -0.296000 0.704000 +0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 +0.550000 -0.159500 -0.060900 0.248000 0.472000 0.840000 +0.530700 -0.150600 -0.060900 0.208000 0.504000 0.832000 +0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 +0.550000 -0.150600 -0.067100 0.240000 0.480000 0.840000 +0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 +0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 +0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 +0.550000 -0.351500 -0.118900 -0.368000 0.056000 0.920000 +0.558500 -0.351500 -0.121900 0.208000 -0.648000 0.728000 +0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 +0.550000 -0.351500 -0.118900 -0.368000 0.056000 0.920000 +0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 +0.550000 -0.353000 -0.121900 -0.032000 -0.832000 0.536000 +0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 +0.550000 -0.389500 -0.182900 -0.304000 -0.784000 0.528000 +0.500000 -0.372900 -0.182900 -0.184000 -0.776000 0.592000 +0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 +0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 +0.503900 -0.401700 -0.243900 -0.232000 -0.936000 0.256000 +0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 +0.502600 -0.401700 -0.304800 -0.320000 -0.840000 -0.416000 +0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 +0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 +0.550000 -0.351500 -0.364500 0.120000 -0.104000 -0.984000 +0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 +0.550000 -0.316300 -0.304800 -0.472000 0.688000 -0.536000 +0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 +0.550000 -0.301200 -0.279200 -0.712000 0.120000 -0.680000 +0.500000 -0.310500 -0.243900 -0.600000 0.776000 -0.152000 +0.513800 -0.301200 -0.243900 -0.728000 0.592000 -0.328000 +0.500000 -0.316400 -0.182900 -0.704000 0.472000 0.520000 +0.511800 -0.301200 -0.182900 -0.912000 0.352000 0.176000 +0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 +0.550000 -0.301200 -0.123600 -0.624000 -0.440000 0.632000 +0.546800 -0.351500 -0.121900 -0.560000 -0.304000 0.760000 +0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 +0.550000 -0.317100 -0.121900 -0.368000 0.064000 0.920000 +0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 +0.550000 -0.242100 -0.060900 -0.400000 -0.536000 0.736000 +0.562800 -0.251000 -0.060900 -0.368000 -0.568000 0.720000 +0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 +0.550000 -0.251000 -0.069700 -0.416000 -0.584000 0.688000 +0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 +0.552600 -0.301200 -0.121900 -0.368000 -0.384000 0.840000 +0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 +0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 +0.650000 -0.301200 -0.100200 0.264000 -0.568000 0.768000 +0.650000 -0.327200 -0.121900 -0.280000 -0.536000 0.792000 +0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 +0.679500 -0.351500 -0.121900 -0.424000 -0.464000 0.768000 +0.700000 -0.351500 -0.108700 -0.352000 -0.464000 0.808000 +0.700000 -0.372000 -0.121900 -0.360000 -0.440000 0.816000 +0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 +0.737900 -0.401700 -0.121900 -0.352000 -0.448000 0.816000 +0.750000 -0.401700 -0.115900 -0.264000 -0.344000 0.896000 +0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 +0.800000 -0.401700 -0.115500 0.392000 0.184000 0.896000 +0.800000 -0.418600 -0.121900 0.304000 -0.320000 0.888000 +0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 +0.800000 -0.451900 -0.135400 0.168000 -0.384000 0.904000 +0.750000 -0.451900 -0.153800 -0.384000 -0.528000 0.752000 +0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 +0.750000 -0.479900 -0.182900 -0.456000 -0.632000 0.616000 +0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 +0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 +0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 +0.750000 -0.505200 -0.243900 -0.480000 -0.856000 0.152000 +0.800000 -0.519900 -0.243900 -0.400000 -0.904000 -0.112000 +0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 +0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 +0.750000 -0.487000 -0.304800 -0.104000 -0.744000 -0.656000 +0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 +0.750000 -0.451900 -0.330900 0.152000 -0.080000 -0.984000 +0.800000 -0.451900 -0.330300 0.328000 0.200000 -0.920000 +0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 +0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 +0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 +0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 +0.754800 -0.351500 -0.304800 0.424000 0.136000 -0.888000 +0.800000 -0.351500 -0.277300 0.568000 0.408000 -0.704000 +0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 +0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 +0.750000 -0.301200 -0.299800 0.512000 0.144000 -0.840000 +0.780500 -0.301200 -0.243900 0.848000 0.504000 -0.128000 +0.750000 -0.251000 -0.256700 0.824000 0.520000 -0.208000 +0.752500 -0.251000 -0.243900 0.840000 0.528000 -0.096000 +0.750000 -0.247000 -0.243900 0.832000 0.536000 -0.096000 +0.750000 -0.251000 -0.218200 0.840000 0.520000 0.096000 +0.717800 -0.200800 -0.243900 0.824000 0.560000 -0.064000 +0.746300 -0.251000 -0.182900 0.848000 0.496000 0.152000 +0.713600 -0.200800 -0.182900 0.824000 0.512000 0.224000 +0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 +0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 +0.700000 -0.217500 -0.121900 0.616000 0.552000 0.544000 +0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 +0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 +0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 +0.700000 -0.178500 -0.182900 0.792000 0.568000 0.200000 +0.675300 -0.150600 -0.182900 0.768000 0.552000 0.296000 +0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 +0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 +0.674200 -0.150600 -0.243900 0.696000 0.600000 -0.384000 +0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 +0.600000 -0.272000 -0.060900 -0.264000 -0.632000 0.720000 +0.600000 -0.301200 -0.098800 -0.176000 -0.576000 0.792000 +0.650000 -0.258100 -0.060900 0.392000 -0.456000 0.792000 +0.650000 -0.301200 -0.100200 0.264000 -0.568000 0.768000 +0.657600 -0.251000 -0.060900 0.456000 -0.072000 0.880000 +0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 +0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 +0.700000 -0.251000 -0.086700 0.608000 0.464000 0.632000 +0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 +0.650000 0.350500 -0.060900 0.712000 0.536000 -0.440000 +0.650000 0.301200 -0.100800 0.528000 0.504000 -0.672000 +0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 +0.680100 0.301200 -0.060900 0.752000 0.544000 -0.368000 +0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 +0.700000 0.251000 -0.093200 0.552000 0.600000 -0.568000 +0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 +0.700000 0.229200 -0.121900 0.528000 0.656000 -0.528000 +0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 +0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 +0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 +0.687200 0.200800 -0.182900 0.432000 0.544000 -0.712000 +0.700000 0.200800 -0.171600 0.480000 0.608000 -0.616000 +0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 +0.700000 0.190400 -0.182900 0.432000 0.560000 -0.696000 +0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 +0.650000 -0.200800 -0.092600 0.656000 0.384000 0.640000 +0.650000 -0.150600 -0.116200 0.720000 0.480000 0.488000 +0.677400 -0.200800 -0.121900 0.528000 0.512000 0.672000 +0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 +0.652900 -0.150600 -0.121900 0.752000 0.456000 0.464000 +0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 +0.734900 0.200800 -0.121900 0.552000 0.608000 -0.552000 +0.750000 0.186400 -0.121900 0.504000 0.648000 -0.560000 +0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 +0.750000 0.200800 -0.104400 0.480000 0.680000 -0.544000 +0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 +0.750000 -0.351500 -0.097900 0.640000 0.048000 0.760000 +0.700000 -0.351500 -0.108700 -0.352000 -0.464000 0.808000 +0.750000 -0.301200 -0.116500 0.704000 0.400000 0.568000 +0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 +0.700000 -0.301200 -0.068800 0.336000 0.392000 0.848000 +-0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 +-0.950000 -0.150600 -0.169000 -0.584000 -0.792000 0.136000 +-0.950000 -0.152700 -0.182900 -0.600000 -0.784000 0.144000 +-0.952800 -0.150600 -0.182900 -0.568000 -0.808000 0.136000 +-0.950000 -0.161800 -0.243900 -0.584000 -0.784000 0.176000 +-0.966700 -0.150600 -0.243900 -0.472000 -0.864000 0.152000 +-0.950000 -0.180000 -0.304800 -0.552000 -0.600000 -0.568000 +-0.989000 -0.150600 -0.304800 -0.440000 -0.624000 -0.640000 +-0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 +-0.950000 -0.150600 -0.330800 -0.416000 -0.432000 -0.792000 +-0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 +-0.900000 -0.492700 -0.121900 -0.520000 0.712000 0.448000 +-0.900000 -0.462200 -0.182900 0.320000 0.888000 0.304000 +-0.878700 -0.502100 -0.121900 0.408000 0.368000 0.832000 +-0.850000 -0.490700 -0.182900 0.328000 0.896000 0.288000 +-0.850000 -0.502100 -0.144600 0.400000 0.776000 0.480000 +-0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 +-0.850000 -0.519700 -0.121900 0.200000 0.624000 0.752000 +-0.800000 -0.513200 -0.182900 -0.080000 0.880000 0.456000 +-0.800000 -0.539500 -0.121900 0.176000 0.680000 0.704000 +-0.750000 -0.503000 -0.182900 -0.200000 0.848000 0.472000 +-0.750000 -0.549900 -0.121900 0.080000 0.648000 0.752000 +-0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 +-0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 +-0.723300 -0.502100 -0.121900 -0.896000 -0.224000 0.368000 +-0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 +-0.900000 -0.511500 -0.121900 -0.520000 -0.664000 0.528000 +-0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 +-0.868200 -0.552300 -0.121900 -0.520000 -0.224000 0.816000 +-0.892400 -0.552300 -0.182900 -0.760000 -0.624000 0.176000 +-0.850000 -0.569100 -0.121900 -0.488000 -0.776000 0.384000 +-0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 +-0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 +-0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 +-0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 +-0.800000 -0.620600 -0.182900 -0.312000 -0.880000 0.336000 +-0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 +-0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 +-0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 +-0.750000 -0.605000 -0.121900 -0.152000 -0.872000 0.456000 +-0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 +-0.802000 -0.351500 -0.121900 -0.840000 -0.520000 0.096000 +-0.832400 -0.301200 -0.121900 -0.840000 -0.528000 0.048000 +-0.802200 -0.351500 -0.182900 -0.872000 -0.480000 0.016000 +-0.831100 -0.301200 -0.182900 -0.848000 -0.520000 0.016000 +-0.807300 -0.351500 -0.243900 -0.864000 -0.472000 0.152000 +-0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 +-0.834700 -0.301200 -0.243900 -0.840000 -0.504000 0.184000 +-0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 +-0.779100 0.150600 -0.182900 0.400000 0.664000 -0.616000 +-0.750000 0.132600 -0.182900 0.408000 0.656000 -0.624000 +-0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 +-0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 +-0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 +-0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 +-0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 +-0.771000 -0.401700 -0.121900 -0.872000 -0.456000 0.128000 +-0.757600 -0.451900 -0.182900 -0.952000 -0.232000 0.184000 +-0.775200 -0.401700 -0.182900 -0.904000 -0.400000 0.120000 +-0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 +-0.781800 -0.401700 -0.243900 -0.912000 -0.336000 0.208000 +-0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 +-0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 +-0.797400 -0.401700 -0.304800 -0.928000 -0.344000 0.056000 +-0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 +-0.800000 -0.584500 -0.121900 -0.288000 -0.544000 0.776000 +-0.764000 -0.602500 -0.121900 -0.176000 -0.816000 0.544000 +-0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 +-0.800000 -0.602500 -0.136500 -0.416000 -0.648000 0.632000 +-0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 +-0.750000 0.174400 -0.121900 0.448000 0.824000 -0.336000 +-0.750000 0.150600 -0.159200 0.432000 0.664000 -0.600000 +-0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 +-0.715000 0.150600 -0.121900 0.512000 0.744000 -0.408000 +-0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 +-0.700900 0.100400 -0.182900 0.440000 0.608000 -0.648000 +-0.700000 0.099700 -0.182900 0.504000 0.560000 -0.640000 +-0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 +-0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 +-0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 +-0.750000 -0.448400 -0.121900 -0.880000 -0.432000 0.160000 +-0.748200 -0.451900 -0.121900 -0.880000 -0.440000 0.160000 +-0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 +-0.750000 -0.451900 -0.133400 -0.896000 -0.392000 0.184000 +-0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 +-0.700000 0.140000 -0.121900 0.536000 0.728000 -0.408000 +-0.700000 0.100400 -0.182100 0.536000 0.592000 -0.592000 +-0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 +-0.657700 0.100400 -0.121900 0.728000 0.576000 -0.360000 +-0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 +-0.652800 0.050200 -0.182900 0.592000 0.536000 -0.592000 +-0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 +-0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 +-0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 +-0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 +-0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 +-0.601900 0.000000 -0.121900 0.848000 0.208000 -0.472000 +-0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 +-0.650000 0.089500 -0.121900 0.728000 0.552000 -0.384000 +-0.650000 0.050200 -0.178200 0.664000 0.544000 -0.504000 +-0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 +-0.614300 0.050200 -0.121900 0.720000 0.480000 -0.480000 +-0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 +-0.491700 -0.150600 -0.182900 -0.448000 0.848000 -0.264000 +-0.500000 -0.150600 -0.154000 -0.424000 0.880000 -0.160000 +-0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 +-0.500000 -0.154300 -0.182900 -0.320000 0.920000 -0.176000 +-0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 +-0.372200 0.000000 -0.121900 -0.848000 0.480000 -0.200000 +-0.350000 0.000000 -0.171400 -0.688000 0.416000 -0.584000 +-0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 +-0.350000 0.031200 -0.121900 -0.744000 0.552000 -0.352000 +-0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 +-0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 +-0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 +-0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 +-0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 +-0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 +-0.300000 -0.607200 -0.243900 -0.248000 0.672000 0.688000 +-0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 +-0.286800 -0.602500 -0.243900 -0.320000 0.232000 0.912000 +-0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 +-0.250000 -0.602500 -0.226600 0.288000 -0.512000 0.800000 +-0.250000 -0.652700 -0.232900 0.624000 0.072000 0.768000 +-0.233200 -0.602500 -0.243900 0.608000 -0.320000 0.720000 +-0.241600 -0.652700 -0.243900 0.680000 -0.216000 0.688000 +-0.250000 -0.652700 -0.232900 0.624000 0.072000 0.768000 +-0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 +-0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 +-0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 +-0.293800 -0.703000 -0.182900 0.608000 -0.624000 0.488000 +-0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 +-0.300000 -0.703000 -0.173800 0.616000 -0.544000 0.552000 +-0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 +-0.350000 -0.703000 -0.180700 -0.616000 -0.504000 0.592000 +-0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 +-0.350000 -0.652700 -0.168800 -0.864000 0.056000 0.488000 +-0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 +-0.260200 -0.552300 -0.121900 -0.560000 -0.752000 0.336000 +-0.300000 -0.516400 -0.121900 -0.256000 -0.872000 0.400000 +-0.285200 -0.552300 -0.182900 -0.616000 -0.680000 0.384000 +-0.300000 -0.538300 -0.182900 -0.584000 -0.696000 0.408000 +-0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 +-0.300000 -0.552300 -0.209900 -0.624000 -0.616000 0.456000 +-0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 +-0.300000 -0.647500 -0.182900 0.464000 0.632000 0.616000 +-0.293900 -0.652700 -0.182900 0.576000 0.496000 0.640000 +-0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 +-0.300000 -0.652700 -0.176500 0.496000 0.568000 0.648000 +-0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 +-0.200000 0.251000 -0.156200 -0.432000 0.168000 -0.880000 +-0.250000 0.251000 -0.124000 -0.376000 0.088000 -0.920000 +-0.200000 0.200800 -0.161600 -0.480000 0.384000 -0.776000 +-0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 +-0.250000 0.200800 -0.129700 -0.392000 0.152000 -0.904000 +-0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 +-0.200000 -0.534300 -0.121900 0.456000 -0.832000 0.296000 +-0.235800 -0.552300 -0.121900 0.448000 -0.816000 0.336000 +-0.200000 -0.549300 -0.182900 0.504000 -0.784000 0.344000 +-0.204600 -0.552300 -0.182900 0.504000 -0.776000 0.360000 +-0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 +-0.200000 -0.552300 -0.190900 0.520000 -0.768000 0.360000 +-0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 +-0.200000 0.401700 -0.127400 -0.400000 0.440000 -0.800000 +-0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 +-0.200000 0.351500 -0.146000 -0.416000 0.224000 -0.872000 +-0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 +-0.200000 0.301200 -0.154100 -0.392000 0.112000 -0.904000 +-0.150000 0.301200 -0.169700 -0.080000 0.248000 -0.960000 +-0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 +-0.100000 0.301200 -0.172200 -0.168000 0.416000 -0.888000 +-0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 +-0.150000 0.351500 -0.156300 -0.024000 0.152000 -0.984000 +-0.100000 0.401700 -0.143600 0.056000 0.120000 -0.984000 +-0.150000 0.401700 -0.148200 -0.240000 0.400000 -0.872000 +-0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 +-0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 +-0.150000 0.451900 -0.123200 -0.344000 0.512000 -0.784000 +-0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 +-0.100000 0.044900 -0.121900 0.816000 0.112000 0.552000 +-0.100700 0.050200 -0.121900 0.856000 0.048000 0.504000 +-0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 +-0.100000 0.050200 -0.123300 0.696000 -0.176000 0.688000 +-0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 +-0.100000 0.451900 -0.142300 -0.128000 0.312000 -0.936000 +-0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 +-0.100000 0.401700 -0.143600 0.056000 0.120000 -0.984000 +-0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 +-0.100000 0.351500 -0.158200 0.008000 0.264000 -0.960000 +-0.050000 0.351500 -0.155800 -0.048000 0.328000 -0.936000 +-0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 +0.000000 0.351500 -0.164900 -0.080000 0.368000 -0.920000 +0.000000 0.401700 -0.144600 -0.056000 0.192000 -0.976000 +0.050000 0.351500 -0.166400 0.000000 0.392000 -0.912000 +0.050000 0.401700 -0.150400 -0.088000 0.216000 -0.968000 +0.100000 0.351500 -0.169000 0.056000 0.272000 -0.952000 +0.100000 0.401700 -0.152800 -0.048000 0.168000 -0.984000 +0.150000 0.351500 -0.160600 0.144000 0.128000 -0.976000 +0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 +0.200000 0.351500 -0.169700 -0.320000 0.304000 -0.888000 +0.200000 0.401700 -0.169400 -0.056000 0.168000 -0.976000 +0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 +0.200000 0.451900 -0.151000 0.136000 0.400000 -0.896000 +0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 +0.200000 0.484800 -0.121900 0.312000 0.872000 0.360000 +0.150000 0.502100 -0.123200 0.032000 0.424000 -0.896000 +0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 +0.153400 0.502100 -0.121900 0.448000 0.824000 -0.336000 +-0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 +-0.089600 0.000000 -0.121900 0.568000 0.512000 0.632000 +-0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 +-0.050000 -0.024600 -0.121900 0.296000 0.656000 0.688000 +0.000000 0.000000 -0.165000 0.096000 0.640000 0.752000 +0.000000 -0.035500 -0.121900 0.072000 0.496000 0.856000 +0.050000 0.000000 -0.179700 0.216000 0.504000 0.832000 +0.050000 -0.038600 -0.121900 0.000000 0.528000 0.840000 +0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 +0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 +0.100000 -0.037100 -0.121900 -0.016000 0.544000 0.832000 +-0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 +-0.054100 -0.401700 -0.121900 0.656000 -0.688000 0.280000 +-0.098000 -0.451900 -0.121900 0.712000 -0.680000 0.120000 +-0.061900 -0.401700 -0.182900 0.744000 -0.648000 -0.120000 +-0.098100 -0.451900 -0.182900 0.736000 -0.672000 0.032000 +-0.071000 -0.401700 -0.243900 0.856000 -0.496000 -0.072000 +-0.094700 -0.451900 -0.243900 0.784000 -0.568000 0.216000 +-0.073900 -0.401700 -0.304800 0.784000 -0.304000 -0.528000 +-0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 +-0.100000 -0.401700 -0.330800 0.576000 -0.152000 -0.792000 +-0.100000 -0.451900 -0.336100 0.496000 -0.048000 -0.856000 +-0.150000 -0.401700 -0.364300 0.552000 0.080000 -0.824000 +-0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 +-0.150000 -0.417500 -0.365800 0.544000 0.056000 -0.832000 +-0.150000 -0.451900 -0.368100 0.456000 -0.056000 -0.880000 +-0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 +-0.150000 -0.502100 -0.367300 0.088000 -0.320000 -0.936000 +-0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 +-0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 +-0.150000 -0.505900 -0.365800 0.272000 -0.320000 -0.904000 +-0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 +-0.050000 0.401700 -0.142300 0.000000 0.168000 -0.984000 +-0.050000 0.451900 -0.137500 0.040000 0.112000 -0.992000 +0.000000 0.401700 -0.144600 -0.056000 0.192000 -0.976000 +0.000000 0.451900 -0.135500 0.000000 0.160000 -0.984000 +0.050000 0.401700 -0.150400 -0.088000 0.216000 -0.968000 +0.050000 0.451900 -0.139600 -0.080000 0.232000 -0.960000 +0.100000 0.401700 -0.152800 -0.048000 0.168000 -0.984000 +0.100000 0.451900 -0.146900 -0.088000 0.224000 -0.968000 +0.150000 0.401700 -0.154900 -0.096000 0.088000 -0.984000 +0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 +0.150000 0.451900 -0.151900 0.184000 0.376000 -0.904000 +-0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 +-0.012800 0.200800 -0.121900 0.688000 -0.616000 0.376000 +0.000000 0.211400 -0.121900 0.496000 -0.712000 0.480000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +-0.050000 0.150600 -0.159500 0.712000 -0.480000 0.504000 +-0.033200 0.150600 -0.182900 0.832000 -0.552000 -0.016000 +-0.050000 0.116900 -0.182900 0.944000 -0.304000 0.048000 +-0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 +-0.050000 0.150600 -0.210200 0.840000 -0.208000 -0.496000 +-0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 +-0.050000 0.047900 -0.182900 0.488000 0.480000 0.720000 +-0.050000 0.000000 -0.158900 0.584000 0.336000 0.728000 +0.000000 0.039200 -0.182900 0.256000 0.544000 0.792000 +0.000000 0.000000 -0.165000 0.096000 0.640000 0.752000 +0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 +0.050000 0.000000 -0.179700 0.216000 0.504000 0.832000 +0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 +0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 +0.100000 0.000000 -0.179900 0.000000 0.528000 0.840000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +0.000000 0.200800 -0.169000 0.576000 -0.744000 0.320000 +0.008500 0.200800 -0.182900 0.416000 -0.688000 -0.584000 +0.000000 0.195100 -0.182900 0.504000 -0.656000 -0.544000 +0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 +0.000000 0.200800 -0.186400 0.272000 -0.456000 -0.840000 +0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 +0.050000 -0.327900 -0.182900 0.552000 -0.824000 0.048000 +0.003100 -0.351500 -0.182900 0.504000 -0.840000 -0.160000 +0.050000 -0.321600 -0.121900 0.584000 -0.712000 0.376000 +0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 +0.006400 -0.351500 -0.121900 0.552000 -0.776000 0.288000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.150000 0.284700 -0.182900 0.352000 0.368000 -0.856000 +0.194700 0.251000 -0.182900 0.496000 -0.104000 -0.856000 +0.150000 0.251000 -0.192500 0.112000 0.024000 -0.992000 +0.150000 0.224100 -0.182900 0.056000 -0.672000 -0.728000 +0.194700 0.251000 -0.182900 0.496000 -0.104000 -0.856000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.150000 0.251000 -0.128300 0.144000 -0.904000 0.392000 +0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 +0.211500 -0.301200 -0.182900 -0.568000 -0.672000 0.464000 +0.250000 -0.301200 -0.149400 -0.376000 -0.584000 0.712000 +0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 +0.300000 -0.301200 -0.149800 -0.024000 -0.480000 0.872000 +0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 +0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 +0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 +0.350000 -0.351500 -0.171100 -0.312000 -0.512000 0.792000 +0.350000 -0.366900 -0.182900 -0.368000 -0.552000 0.736000 +0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 +0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 +0.450000 -0.351500 -0.174300 0.040000 0.080000 0.992000 +0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 +0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 +0.500000 -0.372900 -0.182900 -0.184000 -0.776000 0.592000 +0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 +0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 +0.450000 -0.401700 -0.212100 0.240000 -0.816000 0.520000 +0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 +0.450000 -0.418500 -0.243900 -0.152000 -0.896000 0.400000 +0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 +0.450000 -0.411100 -0.304800 -0.144000 -0.808000 -0.560000 +0.450000 -0.401700 -0.316200 -0.184000 -0.360000 -0.904000 +0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 +0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 +0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 +0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 +0.400000 -0.388800 -0.304800 0.392000 -0.800000 -0.448000 +0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 +0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 +0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 +0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 +0.400000 -0.299100 -0.304800 0.736000 0.472000 -0.472000 +0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 +0.400000 -0.252300 -0.243900 0.744000 0.488000 -0.440000 +0.429200 -0.301200 -0.243900 0.816000 0.544000 -0.176000 +0.400000 -0.252800 -0.182900 0.760000 0.464000 0.440000 +0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 +0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 +0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 +0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 +0.450000 -0.351500 -0.174300 0.040000 0.080000 0.992000 +0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 +0.500000 -0.351500 -0.156800 -0.392000 -0.248000 0.880000 +0.500000 -0.316400 -0.182900 -0.704000 0.472000 0.520000 +0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 +0.500000 -0.310500 -0.243900 -0.600000 0.776000 -0.152000 +0.450000 -0.327300 -0.243900 -0.064000 0.864000 -0.488000 +0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 +0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 +0.458900 -0.351500 -0.304800 -0.472000 0.360000 -0.792000 +0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 +0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 +0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 +0.500000 -0.400600 -0.243900 0.024000 -0.920000 0.384000 +0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 +0.496800 -0.401700 -0.243900 0.256000 -0.880000 0.376000 +0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 +0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 +0.300000 0.218000 -0.182900 0.768000 0.424000 -0.464000 +0.300000 0.200800 -0.174500 0.536000 -0.360000 0.752000 +0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 +0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 +0.300000 0.200800 -0.185900 0.256000 -0.192000 -0.944000 +0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 +0.300000 0.218000 -0.182900 0.768000 0.424000 -0.464000 +0.300000 0.200800 -0.185900 0.256000 -0.192000 -0.944000 +0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 +0.306800 0.200800 -0.182900 0.752000 -0.400000 -0.512000 +0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 +0.265700 0.200800 -0.182900 -0.312000 -0.760000 -0.552000 +0.300000 0.200800 -0.174500 0.536000 -0.360000 0.752000 +0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 +0.300000 0.193900 -0.182900 0.520000 -0.696000 -0.480000 +0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 +0.300000 0.284000 -0.182900 -0.168000 -0.184000 -0.960000 +0.300000 0.251000 -0.156100 -0.368000 -0.808000 -0.448000 +0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 +0.321900 0.251000 -0.182900 -0.240000 -0.296000 -0.920000 +0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 +0.307700 -0.050200 -0.121900 -0.592000 0.464000 0.648000 +0.300000 -0.060700 -0.121900 -0.512000 0.456000 0.720000 +0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 +0.300000 -0.050200 -0.130700 -0.504000 0.472000 0.720000 +0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 +0.329200 -0.200800 -0.121900 0.376000 -0.264000 0.880000 +0.350000 -0.182300 -0.121900 -0.032000 -0.520000 0.848000 +0.350000 -0.200800 -0.137500 0.248000 -0.232000 0.936000 +0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 +0.391400 -0.200800 -0.121900 -0.176000 -0.648000 0.736000 +0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 +0.400000 0.100400 -0.150800 -0.768000 0.376000 0.512000 +0.381500 0.100400 -0.182900 -0.896000 0.440000 -0.008000 +0.400000 0.146600 -0.182900 -0.440000 0.464000 -0.760000 +0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 +0.400000 0.100400 -0.207800 -0.424000 0.688000 -0.576000 +0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 +0.400000 -0.203000 -0.121900 -0.184000 -0.672000 0.712000 +0.354900 -0.251000 -0.121900 0.704000 -0.304000 0.632000 +0.400000 -0.249800 -0.182900 0.472000 -0.752000 0.448000 +0.398900 -0.251000 -0.182900 0.896000 -0.160000 0.400000 +0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 +0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 +0.399000 -0.251000 -0.243900 0.912000 -0.008000 -0.392000 +0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 +0.400000 -0.351500 -0.165500 0.064000 -0.056000 0.992000 +0.350000 -0.351500 -0.171100 -0.312000 -0.512000 0.792000 +0.400000 -0.301200 -0.149800 0.528000 0.376000 0.752000 +0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 +0.350000 -0.301200 -0.148100 0.392000 -0.048000 0.912000 +0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 +0.450000 -0.251000 -0.179900 -0.288000 -0.680000 0.664000 +0.450000 -0.255300 -0.182900 -0.208000 -0.656000 0.712000 +0.415700 -0.251000 -0.182900 -0.088000 -0.872000 0.480000 +0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 +0.450000 -0.251000 -0.203800 -0.216000 -0.960000 -0.144000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 +0.500000 0.393600 -0.121900 0.504000 0.744000 -0.432000 +0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 +0.550000 0.362300 -0.121900 0.400000 0.656000 -0.632000 +0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 +0.566700 0.351500 -0.121900 0.448000 0.536000 -0.704000 +0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 +0.550000 0.351500 -0.135900 0.456000 0.632000 -0.616000 +0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 +0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 +0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 +0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 +0.500000 0.301200 -0.193500 0.168000 0.072000 -0.976000 +0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 +0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 +0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 +0.550000 0.251000 -0.199600 0.176000 0.288000 -0.936000 +0.500000 0.251000 -0.199400 0.072000 0.096000 -0.984000 +0.550000 0.200800 -0.211100 0.016000 0.048000 -0.992000 +0.500000 0.200800 -0.200200 -0.104000 -0.048000 -0.992000 +0.550000 0.150600 -0.215400 -0.144000 0.080000 -0.984000 +0.500000 0.150600 -0.194400 -0.208000 0.240000 -0.944000 +0.550000 0.100400 -0.212600 -0.200000 0.352000 -0.904000 +0.500000 0.100400 -0.210700 0.048000 0.704000 -0.704000 +0.550000 0.067800 -0.243900 0.024000 0.672000 -0.728000 +0.500000 0.082500 -0.243900 0.216000 0.832000 -0.504000 +0.550000 0.050200 -0.258400 0.160000 0.632000 -0.752000 +0.500000 0.050200 -0.303800 0.264000 0.816000 -0.504000 +0.550000 0.015600 -0.304800 0.472000 0.712000 -0.512000 +0.500000 0.049600 -0.304800 0.264000 0.736000 -0.616000 +0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 +0.500000 0.014000 -0.365800 0.216000 0.784000 -0.568000 +0.524100 0.000000 -0.365800 0.648000 0.312000 -0.688000 +0.500000 0.000000 -0.393700 0.528000 0.072000 -0.840000 +0.500000 -0.027200 -0.365800 0.264000 -0.576000 -0.768000 +0.524100 0.000000 -0.365800 0.648000 0.312000 -0.688000 +0.500000 -0.050200 -0.339600 -0.136000 -0.672000 -0.720000 +0.550000 0.000000 -0.335900 0.576000 0.464000 -0.664000 +0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 +0.550000 -0.050200 -0.345500 0.192000 -0.560000 -0.792000 +0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 +0.526000 0.301200 -0.182900 0.408000 0.312000 -0.848000 +0.550000 0.283200 -0.182900 0.320000 0.472000 -0.816000 +0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 +0.550000 0.301200 -0.167400 0.408000 0.504000 -0.752000 +0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 +0.500000 -0.250100 -0.121900 -0.432000 -0.712000 0.536000 +0.501100 -0.251000 -0.121900 -0.552000 -0.624000 0.544000 +0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 +0.500000 -0.251000 -0.123800 -0.544000 -0.688000 0.456000 +0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 +0.608400 0.251000 -0.182900 0.328000 0.488000 -0.800000 +0.650000 0.227800 -0.182900 0.368000 0.576000 -0.720000 +0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 +0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 +0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 +0.600000 -0.333000 -0.121900 0.024000 -0.312000 0.944000 +0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 +0.650000 -0.327200 -0.121900 -0.280000 -0.536000 0.792000 +0.650000 -0.351500 -0.143500 -0.280000 -0.536000 0.784000 +0.679500 -0.351500 -0.121900 -0.424000 -0.464000 0.768000 +0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 +0.700000 -0.372000 -0.121900 -0.360000 -0.440000 0.816000 +0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 +0.737900 -0.401700 -0.121900 -0.352000 -0.448000 0.816000 +0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 +0.750000 -0.411100 -0.121900 -0.304000 -0.456000 0.824000 +0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 +0.750000 -0.451900 -0.153800 -0.384000 -0.528000 0.752000 +0.750000 -0.479900 -0.182900 -0.456000 -0.632000 0.616000 +0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 +0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.744200 -0.502100 -0.243900 -0.480000 -0.864000 0.128000 +0.700000 -0.472400 -0.243900 -0.560000 -0.816000 -0.016000 +0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 +0.700000 -0.481300 -0.304800 -0.240000 -0.712000 -0.656000 +0.750000 -0.487000 -0.304800 -0.104000 -0.744000 -0.656000 +0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 +0.750000 -0.451900 -0.330900 0.152000 -0.080000 -0.984000 +0.700000 -0.401700 -0.334100 0.120000 -0.128000 -0.976000 +0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 +0.700000 -0.351500 -0.333900 0.344000 -0.040000 -0.936000 +0.750000 -0.351500 -0.307800 0.512000 0.128000 -0.840000 +0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 +0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 +0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 +0.750000 -0.301200 -0.299800 0.512000 0.144000 -0.840000 +0.728900 -0.251000 -0.304800 0.720000 0.440000 -0.528000 +0.750000 -0.251000 -0.256700 0.824000 0.520000 -0.208000 +0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 +0.750000 -0.247000 -0.243900 0.832000 0.536000 -0.096000 +0.700000 -0.200800 -0.294000 0.576000 0.608000 -0.536000 +0.717800 -0.200800 -0.243900 0.824000 0.560000 -0.064000 +0.700000 -0.175300 -0.243900 0.752000 0.600000 -0.240000 +0.713600 -0.200800 -0.182900 0.824000 0.512000 0.224000 +0.700000 -0.178500 -0.182900 0.792000 0.568000 0.200000 +0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 +0.700000 -0.200800 -0.144600 0.696000 0.528000 0.480000 +0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 +0.600000 -0.351500 -0.136300 0.144000 -0.792000 0.584000 +0.650000 -0.351500 -0.143500 -0.280000 -0.536000 0.784000 +0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 +0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 +0.628900 -0.401700 -0.182900 -0.216000 -0.760000 0.608000 +0.650000 -0.407700 -0.182900 -0.272000 -0.728000 0.624000 +0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 +0.650000 -0.436800 -0.243900 -0.416000 -0.848000 0.320000 +0.600000 -0.414700 -0.243900 -0.184000 -0.936000 0.272000 +0.650000 -0.449600 -0.304800 -0.280000 -0.432000 -0.848000 +0.600000 -0.422100 -0.304800 -0.120000 -0.768000 -0.616000 +0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 +0.600000 -0.401700 -0.327900 -0.024000 -0.544000 -0.832000 +0.650000 -0.351500 -0.332000 0.016000 -0.144000 -0.984000 +0.600000 -0.351500 -0.337900 0.040000 -0.080000 -0.992000 +0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 +0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 +0.600000 -0.301200 -0.352300 -0.528000 -0.312000 -0.776000 +0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 +0.650000 0.278000 -0.121900 0.448000 0.624000 -0.624000 +0.650000 0.251000 -0.154700 0.488000 0.640000 -0.584000 +0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 +0.673000 0.251000 -0.121900 0.568000 0.576000 -0.584000 +0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 +0.700000 -0.401700 -0.145100 -0.400000 -0.504000 0.752000 +0.650000 -0.401700 -0.175000 -0.240000 -0.688000 0.680000 +0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 +0.650000 -0.407700 -0.182900 -0.272000 -0.728000 0.624000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.650000 -0.436800 -0.243900 -0.416000 -0.848000 0.320000 +0.673600 -0.451900 -0.243900 -0.480000 -0.752000 0.448000 +0.650000 -0.449600 -0.304800 -0.280000 -0.432000 -0.848000 +0.653100 -0.451900 -0.304800 -0.336000 -0.480000 -0.800000 +0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 +0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 +0.700000 -0.401700 -0.334100 0.120000 -0.128000 -0.976000 +0.650000 -0.401700 -0.330300 -0.240000 -0.360000 -0.896000 +0.700000 -0.351500 -0.333900 0.344000 -0.040000 -0.936000 +0.650000 -0.351500 -0.332000 0.016000 -0.144000 -0.984000 +0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 +0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 +0.650000 -0.301200 -0.350300 0.016000 -0.440000 -0.888000 +0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 +0.719200 -0.251000 -0.121900 0.760000 0.456000 0.440000 +0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 +0.746300 -0.251000 -0.182900 0.848000 0.496000 0.152000 +0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 +0.750000 -0.251000 -0.218200 0.840000 0.520000 0.096000 +0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 +0.752500 -0.251000 -0.243900 0.840000 0.528000 -0.096000 +0.780500 -0.301200 -0.243900 0.848000 0.504000 -0.128000 +0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 +0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 +0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 +0.829500 -0.351500 -0.243900 0.648000 0.640000 -0.400000 +0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 +0.850000 -0.375700 -0.243900 0.544000 0.616000 -0.552000 +0.850000 -0.381900 -0.182900 0.632000 0.696000 0.328000 +0.890600 -0.401700 -0.243900 0.576000 0.616000 -0.528000 +0.872200 -0.401700 -0.182900 0.632000 0.640000 0.416000 +0.900000 -0.412700 -0.243900 0.520000 0.640000 -0.552000 +0.900000 -0.433800 -0.182900 0.512000 0.688000 0.504000 +0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 +0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 +0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 +0.950000 -0.463500 -0.182900 0.464000 0.672000 0.568000 +0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 +0.950000 -0.502100 -0.136000 -0.296000 0.400000 0.864000 +0.900000 -0.451900 -0.156900 0.400000 0.632000 0.656000 +0.900000 -0.502100 -0.123800 -0.168000 -0.208000 0.960000 +0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 +0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 +0.850000 -0.502100 -0.142100 -0.224000 -0.520000 0.816000 +0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 +0.750000 -0.257500 -0.182900 0.856000 0.488000 0.120000 +0.750000 -0.297400 -0.121900 0.656000 0.584000 0.464000 +0.777000 -0.301200 -0.182900 0.784000 0.536000 0.304000 +0.752700 -0.301200 -0.121900 0.792000 0.344000 0.488000 +0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 +0.775700 -0.351500 -0.121900 0.600000 0.328000 0.720000 +0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 +0.800000 -0.391100 -0.121900 0.384000 0.416000 0.816000 +0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 +0.810500 -0.401700 -0.121900 0.456000 0.104000 0.872000 +0.850000 -0.381900 -0.182900 0.632000 0.696000 0.328000 +0.850000 -0.401700 -0.151500 0.608000 0.552000 0.560000 +0.872200 -0.401700 -0.182900 0.632000 0.640000 0.416000 +0.850000 -0.451900 -0.123600 0.328000 0.296000 0.888000 +0.900000 -0.433800 -0.182900 0.512000 0.688000 0.504000 +0.900000 -0.451900 -0.156900 0.400000 0.632000 0.656000 +0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 +0.933400 -0.451900 -0.182900 0.464000 0.712000 0.512000 +0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 +0.783200 -0.502100 -0.182900 -0.448000 -0.720000 0.512000 +0.800000 -0.502100 -0.171200 -0.360000 -0.648000 0.664000 +0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 +0.800000 -0.511100 -0.182900 -0.376000 -0.744000 0.544000 +0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 +0.800000 -0.333100 -0.182900 0.680000 0.680000 0.256000 +0.821300 -0.351500 -0.182900 0.624000 0.648000 0.416000 +0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 +0.800000 -0.351500 -0.149400 0.664000 0.512000 0.528000 +0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 +0.900000 -0.552300 -0.159100 -0.496000 -0.592000 0.632000 +0.900000 -0.573700 -0.182900 -0.608000 -0.704000 0.344000 +0.876500 -0.552300 -0.182900 -0.528000 -0.672000 0.504000 +0.900000 -0.578300 -0.243900 -0.552000 -0.704000 -0.440000 +0.868400 -0.552300 -0.243900 -0.552000 -0.760000 -0.328000 +0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 +0.900000 -0.552300 -0.278500 -0.424000 -0.592000 -0.672000 +0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 +0.900000 0.127900 -0.121900 0.560000 0.776000 -0.264000 +0.931600 0.100400 -0.121900 0.600000 0.744000 -0.272000 +0.900000 0.111100 -0.182900 0.552000 0.712000 -0.416000 +0.912000 0.100400 -0.182900 0.600000 0.704000 -0.360000 +0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 +0.900000 0.100400 -0.203200 0.536000 0.688000 -0.472000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +0.950000 -0.619400 -0.182900 -0.632000 -0.592000 0.480000 +0.935000 -0.602500 -0.182900 -0.552000 -0.552000 0.608000 +0.950000 -0.619400 -0.243900 -0.600000 -0.584000 -0.536000 +0.933200 -0.602500 -0.243900 -0.584000 -0.624000 -0.512000 +0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 +0.950000 -0.602500 -0.260200 -0.544000 -0.504000 -0.664000 +1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 +1.000000 -0.251000 -0.154300 -0.728000 -0.648000 0.200000 +1.000000 -0.258900 -0.182900 -0.752000 -0.616000 0.208000 +0.993400 -0.251000 -0.182900 -0.736000 -0.640000 0.200000 +1.000000 -0.277900 -0.243900 -0.712000 -0.592000 0.360000 +0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 +0.978600 -0.251000 -0.243900 -0.696000 -0.616000 0.352000 +0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 +0.950000 -0.560000 -0.121900 -0.400000 -0.536000 0.728000 +0.992300 -0.602500 -0.121900 -0.520000 -0.480000 0.696000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +0.950000 -0.602500 -0.169200 -0.536000 -0.520000 0.656000 +1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 +1.000000 -0.652700 -0.168000 -0.488000 -0.568000 0.656000 +1.000000 -0.666200 -0.182900 -0.536000 -0.632000 0.544000 +0.983200 -0.652700 -0.182900 -0.528000 -0.608000 0.584000 +1.000000 -0.673300 -0.243900 -0.656000 -0.656000 -0.368000 +0.979500 -0.652700 -0.243900 -0.672000 -0.664000 -0.304000 +1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 +1.000000 -0.652700 -0.268800 -0.592000 -0.512000 -0.608000 +-1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 +-1.000000 0.256900 -0.182900 0.288000 0.752000 -0.584000 +-1.000000 0.251000 -0.191500 0.280000 0.728000 -0.616000 +-0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 +-0.985000 0.251000 -0.182900 0.288000 0.752000 -0.576000 +-0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 +-0.980800 0.200800 -0.243900 0.232000 0.632000 -0.736000 +-0.950000 0.189400 -0.243900 0.264000 0.616000 -0.728000 +-0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 +-0.950000 0.200800 -0.231900 0.272000 0.640000 -0.704000 +-0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 +-0.900000 0.214200 -0.182900 0.360000 0.720000 -0.576000 +-0.900000 0.200800 -0.201400 0.352000 0.680000 -0.640000 +-0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 +-0.874200 0.200800 -0.182900 0.360000 0.712000 -0.584000 +-0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 +-0.878700 0.150600 -0.243900 0.328000 0.616000 -0.704000 +-0.850000 0.135500 -0.243900 0.320000 0.608000 -0.712000 +-0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 +-0.850000 0.150600 -0.229000 0.320000 0.608000 -0.720000 +-0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 +-0.900000 -0.542100 -0.182900 -0.808000 -0.560000 0.136000 +-0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 +-0.892400 -0.552300 -0.182900 -0.760000 -0.624000 0.176000 +-0.899500 -0.552300 -0.243900 -0.800000 -0.592000 -0.072000 +-0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 +-0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 +-0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 +-0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 +-0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 +-0.800000 -0.632800 -0.243900 -0.432000 -0.896000 0.072000 +-0.800000 -0.620600 -0.182900 -0.312000 -0.880000 0.336000 +-0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 +-0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 +-0.750000 -0.630100 -0.182900 -0.144000 -0.912000 0.360000 +-0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 +-0.820300 -0.502100 -0.182900 0.496000 0.792000 0.344000 +-0.800000 -0.502100 -0.227500 0.432000 0.824000 0.352000 +-0.800000 -0.513200 -0.182900 -0.080000 0.880000 0.456000 +-0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 +-0.750000 -0.503000 -0.182900 -0.200000 0.848000 0.472000 +-0.749300 -0.502100 -0.182900 -0.920000 -0.232000 0.288000 +-0.750000 -0.502100 -0.184800 -0.496000 0.696000 0.496000 +-0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 +-0.750000 -0.499500 -0.182900 -0.936000 -0.200000 0.264000 +-0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 +-0.850000 -0.592600 -0.182900 -0.520000 -0.800000 0.264000 +-0.832500 -0.602500 -0.182900 -0.576000 -0.768000 0.272000 +-0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 +-0.850000 -0.602500 -0.238600 -0.616000 -0.752000 0.216000 +-0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 +-0.650000 0.045800 -0.182900 0.672000 0.432000 -0.592000 +-0.650000 0.000000 -0.224600 0.632000 0.368000 -0.672000 +-0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 +-0.621400 0.000000 -0.182900 0.848000 0.280000 -0.440000 +-0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 +-0.600000 -0.629300 -0.182900 0.072000 -0.968000 0.224000 +-0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 +-0.550000 -0.618800 -0.182900 0.168000 -0.944000 0.272000 +-0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 +-0.500000 -0.610400 -0.182900 -0.136000 -0.936000 0.304000 +-0.500000 -0.625200 -0.243900 -0.096000 -0.960000 0.240000 +-0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 +-0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 +-0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 +-0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 +-0.550000 -0.637200 -0.365800 0.152000 -0.968000 -0.168000 +-0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 +-0.600000 -0.645500 -0.365800 0.016000 -0.968000 -0.216000 +-0.600000 -0.650800 -0.304800 0.064000 -0.992000 0.000000 +-0.550000 -0.639800 -0.304800 0.152000 -0.984000 0.000000 +-0.600000 -0.640700 -0.243900 0.080000 -0.976000 0.192000 +-0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 +-0.550000 -0.629900 -0.243900 0.160000 -0.960000 0.200000 +-0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 +-0.403600 -0.100400 -0.182900 -0.616000 0.592000 -0.512000 +-0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 +-0.400000 -0.096400 -0.182900 -0.664000 0.552000 -0.496000 +-0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 +-0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 +-0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 +-0.350000 -0.050200 -0.209400 -0.696000 0.392000 -0.584000 +-0.321700 -0.050200 -0.243900 -0.656000 0.344000 -0.656000 +-0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 +-0.301700 0.000000 -0.243900 -0.744000 0.392000 -0.536000 +-0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 +-0.340600 0.000000 -0.182900 -0.696000 0.480000 -0.520000 +-0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 +-0.444500 -0.150600 -0.243900 -0.312000 0.784000 -0.528000 +-0.450000 -0.150600 -0.239400 -0.408000 0.792000 -0.448000 +-0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 +-0.450000 -0.152500 -0.243900 -0.384000 0.800000 -0.448000 +-0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 +-0.400000 -0.651500 -0.182900 -0.552000 -0.472000 0.672000 +-0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 +-0.450000 -0.629600 -0.182900 -0.344000 -0.872000 0.320000 +-0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 +-0.450000 -0.644000 -0.243900 -0.352000 -0.912000 0.200000 +-0.450000 -0.652700 -0.293400 -0.288000 -0.936000 0.160000 +-0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 +-0.450000 -0.654300 -0.304800 -0.272000 -0.952000 0.040000 +-0.400000 -0.663600 -0.243900 -0.504000 -0.840000 0.160000 +-0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 +-0.363900 -0.703000 -0.243900 -0.784000 -0.584000 0.176000 +-0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 +-0.350000 -0.730400 -0.243900 -0.544000 -0.776000 0.296000 +-0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 +-0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 +-0.330700 -0.753200 -0.304800 -0.192000 -0.968000 -0.112000 +-0.300000 -0.753200 -0.286100 0.088000 -0.928000 0.352000 +-0.300000 -0.758500 -0.304800 0.104000 -0.976000 -0.144000 +-0.281500 -0.753200 -0.304800 0.312000 -0.920000 -0.216000 +-0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 +-0.300000 -0.758500 -0.304800 0.104000 -0.976000 -0.144000 +-0.330700 -0.753200 -0.304800 -0.192000 -0.968000 -0.112000 +-0.300000 -0.753200 -0.317300 0.136000 -0.840000 -0.512000 +-0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 +-0.300000 -0.703000 -0.365100 0.056000 -0.232000 -0.968000 +-0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 +-0.300000 -0.687100 -0.365800 0.104000 -0.048000 -0.992000 +-0.350000 -0.679200 -0.365800 -0.072000 -0.176000 -0.976000 +-0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 +-0.400000 -0.653700 -0.365800 -0.176000 -0.888000 -0.416000 +-0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 +-0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 +-0.400000 -0.672200 -0.304800 -0.400000 -0.904000 -0.128000 +-0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 +-0.428400 -0.652700 -0.243900 -0.584000 -0.736000 0.336000 +-0.400000 -0.652700 -0.184800 -0.640000 -0.536000 0.536000 +-0.400000 -0.663600 -0.243900 -0.504000 -0.840000 0.160000 +-0.396000 -0.652700 -0.182900 -0.176000 0.000000 0.984000 +-0.363900 -0.703000 -0.243900 -0.784000 -0.584000 0.176000 +-0.350700 -0.703000 -0.182900 -0.792000 -0.176000 0.576000 +-0.350000 -0.730400 -0.243900 -0.544000 -0.776000 0.296000 +-0.350000 -0.704300 -0.182900 -0.112000 -0.808000 0.576000 +-0.300000 -0.736500 -0.243900 0.320000 -0.832000 0.440000 +-0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 +-0.300000 -0.708000 -0.182900 0.360000 -0.768000 0.520000 +-0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 +-0.365500 -0.050200 -0.182900 -0.728000 0.384000 -0.560000 +-0.350000 -0.050200 -0.209400 -0.696000 0.392000 -0.584000 +-0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 +-0.350000 -0.016600 -0.182900 -0.688000 0.360000 -0.616000 +-0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 +-0.400000 -0.100400 -0.188300 -0.616000 0.576000 -0.520000 +-0.400000 -0.131400 -0.243900 -0.384000 0.744000 -0.536000 +-0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 +-0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 +-0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 +-0.350000 -0.150600 -0.298700 -0.264000 0.464000 -0.840000 +-0.400000 -0.150600 -0.272200 -0.312000 0.624000 -0.704000 +-0.350000 -0.159400 -0.304800 -0.248000 0.528000 -0.808000 +-0.400000 -0.174400 -0.304800 -0.224000 0.736000 -0.632000 +-0.350000 -0.200800 -0.339000 0.200000 0.416000 -0.880000 +-0.400000 -0.200800 -0.333600 -0.064000 0.568000 -0.816000 +-0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 +-0.400000 -0.239300 -0.365800 0.048000 0.512000 -0.848000 +-0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 +-0.400000 -0.251000 -0.373300 0.080000 0.400000 -0.904000 +-0.350000 -0.301200 -0.377400 0.232000 0.208000 -0.944000 +-0.400000 -0.301200 -0.390900 0.144000 0.296000 -0.936000 +-0.350000 -0.351500 -0.416300 -0.176000 0.600000 -0.768000 +-0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 +-0.400000 -0.351500 -0.411400 0.000000 0.616000 -0.784000 +-0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 +-0.350000 -0.647900 -0.182900 0.008000 0.768000 0.624000 +-0.386500 -0.602500 -0.182900 0.376000 -0.032000 0.920000 +-0.350000 -0.630200 -0.243900 -0.144000 0.776000 0.600000 +-0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 +-0.371400 -0.602500 -0.243900 0.928000 0.016000 0.352000 +-0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 +-0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 +-0.216700 0.150600 -0.182900 -0.560000 0.376000 -0.728000 +-0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 +-0.249100 0.100400 -0.182900 -0.576000 0.496000 -0.640000 +-0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 +-0.200000 0.100400 -0.242800 -0.520000 0.512000 -0.672000 +-0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 +-0.200000 0.172600 -0.182900 -0.488000 0.416000 -0.760000 +-0.200000 0.150600 -0.197300 -0.488000 0.464000 -0.728000 +-0.173800 0.200800 -0.182900 -0.480000 0.344000 -0.800000 +-0.150000 0.150600 -0.235500 -0.296000 0.536000 -0.784000 +-0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 +-0.150000 0.200800 -0.199200 -0.328000 0.272000 -0.896000 +0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 +0.100000 0.004900 -0.182900 -0.288000 0.864000 0.400000 +0.050000 0.005700 -0.182900 0.312000 0.584000 0.744000 +0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 +0.050000 0.042300 -0.243900 0.688000 0.376000 -0.616000 +0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 +0.050000 0.000000 -0.258500 0.448000 0.256000 -0.848000 +0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 +0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 +0.100000 -0.050200 -0.272200 -0.136000 0.384000 -0.904000 +0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 +0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 +0.100000 -0.100400 -0.298900 0.040000 0.136000 -0.984000 +0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 +0.078000 0.000000 -0.243900 0.336000 0.616000 -0.696000 +0.100000 -0.005500 -0.243900 -0.184000 0.760000 -0.616000 +0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 +0.100000 0.000000 -0.203800 -0.256000 0.936000 -0.224000 +0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 +0.200000 -0.301200 -0.206400 -0.600000 -0.688000 0.384000 +0.200000 -0.319700 -0.243900 -0.624000 -0.696000 0.328000 +0.176900 -0.301200 -0.243900 -0.504000 -0.800000 0.304000 +0.200000 -0.340400 -0.304800 -0.480000 -0.448000 -0.744000 +0.170700 -0.301200 -0.304800 -0.520000 -0.608000 -0.592000 +0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 +0.200000 -0.301200 -0.321600 -0.488000 -0.368000 -0.784000 +0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 +0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 +0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 +0.250000 -0.319600 -0.182900 -0.280000 -0.832000 0.472000 +0.277600 -0.351500 -0.243900 -0.264000 -0.888000 0.352000 +0.250000 -0.343100 -0.243900 -0.320000 -0.920000 0.208000 +0.271900 -0.351500 -0.304800 -0.112000 -0.784000 -0.608000 +0.250000 -0.348300 -0.304800 -0.128000 -0.736000 -0.656000 +0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 +0.250000 -0.313600 -0.365800 -0.336000 -0.640000 -0.680000 +0.300000 -0.308000 -0.365800 0.080000 -0.656000 -0.744000 +0.250000 -0.301200 -0.379400 -0.536000 -0.264000 -0.792000 +0.300000 -0.301200 -0.372900 0.128000 -0.472000 -0.864000 +0.300000 -0.308000 -0.365800 0.080000 -0.656000 -0.744000 +0.333500 -0.301200 -0.365800 0.208000 -0.080000 -0.968000 +0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 +0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 +0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 +0.350000 -0.334300 -0.365800 -0.304000 0.096000 -0.944000 +0.350000 -0.351500 -0.368100 -0.440000 0.096000 -0.888000 +0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 +0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 +0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 +0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 +0.400000 -0.388800 -0.304800 0.392000 -0.800000 -0.448000 +0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 +0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 +0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 +0.400000 -0.404800 -0.243900 0.016000 -0.968000 0.240000 +0.350000 -0.409600 -0.243900 -0.632000 -0.696000 0.320000 +0.400000 -0.401700 -0.239700 -0.184000 -0.720000 0.656000 +0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 +0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 +0.350000 -0.366900 -0.182900 -0.368000 -0.552000 0.736000 +0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 +0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 +0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 +0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 +0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 +0.277600 -0.351500 -0.243900 -0.264000 -0.888000 0.352000 +0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 +0.271900 -0.351500 -0.304800 -0.112000 -0.784000 -0.608000 +0.300000 -0.351500 -0.310200 -0.192000 -0.728000 -0.648000 +0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 +0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 +0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 +0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 +0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 +0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 +0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 +0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 +0.350000 -0.409600 -0.243900 -0.632000 -0.696000 0.320000 +0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 +0.350000 -0.401700 -0.229000 -0.616000 -0.656000 0.416000 +0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 +0.300000 -0.330300 -0.182900 -0.312000 -0.696000 0.632000 +0.331500 -0.351500 -0.182900 -0.432000 -0.576000 0.688000 +0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 +0.300000 -0.351500 -0.225700 -0.416000 -0.800000 0.416000 +0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 +0.427100 -0.301200 -0.182900 0.776000 0.464000 0.416000 +0.450000 -0.338000 -0.182900 0.248000 0.592000 0.752000 +0.429200 -0.301200 -0.243900 0.816000 0.544000 -0.176000 +0.450000 -0.327300 -0.243900 -0.064000 0.864000 -0.488000 +0.401200 -0.301200 -0.304800 0.744000 0.488000 -0.440000 +0.450000 -0.351500 -0.290700 -0.176000 0.632000 -0.744000 +0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 +0.437100 -0.351500 -0.304800 0.688000 0.472000 -0.536000 +0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 +0.450000 -0.370700 -0.182900 -0.080000 -0.520000 0.848000 +0.400000 -0.370500 -0.182900 -0.008000 -0.616000 0.776000 +0.450000 -0.401700 -0.212100 0.240000 -0.816000 0.520000 +0.400000 -0.401700 -0.239700 -0.184000 -0.720000 0.656000 +0.450000 -0.418500 -0.243900 -0.152000 -0.896000 0.400000 +0.400000 -0.404800 -0.243900 0.016000 -0.968000 0.240000 +0.450000 -0.411100 -0.304800 -0.144000 -0.808000 -0.560000 +0.400000 -0.401700 -0.257800 0.112000 -0.952000 -0.280000 +0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 +0.428900 -0.401700 -0.304800 -0.392000 -0.464000 -0.784000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.500000 0.355500 -0.182900 0.400000 0.616000 -0.664000 +0.500000 0.351500 -0.187300 0.416000 0.568000 -0.696000 +0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 +0.506000 0.351500 -0.182900 0.424000 0.584000 -0.680000 +0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 +0.550000 -0.401700 -0.218900 -0.128000 -0.904000 0.392000 +0.550000 -0.409700 -0.243900 -0.144000 -0.944000 0.272000 +0.503900 -0.401700 -0.243900 -0.232000 -0.936000 0.256000 +0.550000 -0.415900 -0.304800 -0.192000 -0.848000 -0.480000 +0.502600 -0.401700 -0.304800 -0.320000 -0.840000 -0.416000 +0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 +0.550000 -0.401700 -0.333700 -0.144000 -0.688000 -0.704000 +0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 +0.600000 0.200800 -0.209200 0.248000 0.288000 -0.920000 +0.650000 0.200800 -0.204000 0.272000 0.408000 -0.864000 +0.600000 0.150600 -0.225200 0.008000 0.128000 -0.984000 +0.650000 0.150600 -0.219600 0.200000 0.280000 -0.928000 +0.600000 0.100400 -0.237100 -0.096000 0.168000 -0.976000 +0.650000 0.100400 -0.241400 0.232000 0.064000 -0.968000 +0.600000 0.076600 -0.243900 -0.096000 0.360000 -0.920000 +0.650000 0.067400 -0.243900 0.208000 0.056000 -0.968000 +0.600000 0.050200 -0.251100 0.248000 0.344000 -0.896000 +0.650000 0.050200 -0.244900 0.216000 0.040000 -0.968000 +0.600000 0.000000 -0.284600 0.512000 0.112000 -0.840000 +0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 +0.650000 0.000000 -0.248500 0.680000 -0.160000 -0.712000 +0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 +0.600000 -0.392700 -0.182900 -0.184000 -0.752000 0.624000 +0.628900 -0.401700 -0.182900 -0.216000 -0.760000 0.608000 +0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 +0.600000 -0.401700 -0.203000 -0.208000 -0.872000 0.432000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.700000 -0.472400 -0.243900 -0.560000 -0.816000 -0.016000 +0.673600 -0.451900 -0.243900 -0.480000 -0.752000 0.448000 +0.700000 -0.481300 -0.304800 -0.240000 -0.712000 -0.656000 +0.653100 -0.451900 -0.304800 -0.336000 -0.480000 -0.800000 +0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 +0.700000 -0.451900 -0.321600 -0.136000 -0.312000 -0.936000 +0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 +0.700000 -0.435200 -0.182900 -0.448000 -0.712000 0.536000 +0.719600 -0.451900 -0.182900 -0.568000 -0.640000 0.512000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.700000 -0.451900 -0.215800 -0.528000 -0.696000 0.472000 +0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 +0.750000 -0.502100 -0.236900 -0.448000 -0.776000 0.432000 +0.750000 -0.505200 -0.243900 -0.480000 -0.856000 0.152000 +0.744200 -0.502100 -0.243900 -0.480000 -0.864000 0.128000 +0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 +0.750000 -0.502100 -0.254300 -0.448000 -0.832000 -0.312000 +0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 +0.750000 0.157000 -0.182900 0.280000 0.720000 -0.624000 +0.750000 0.150600 -0.191500 0.256000 0.656000 -0.704000 +0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 +0.769100 0.150600 -0.182900 0.248000 0.704000 -0.648000 +0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 +0.929600 0.050200 -0.243900 0.432000 0.672000 -0.584000 +0.950000 0.037500 -0.243900 0.432000 0.688000 -0.576000 +0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 +0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 +0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 +0.950000 0.069900 -0.182900 0.544000 0.736000 -0.392000 +0.950000 0.050200 -0.224500 0.472000 0.712000 -0.504000 +0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 +0.978000 0.050200 -0.182900 0.512000 0.768000 -0.376000 +0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 +0.950000 -0.451900 -0.206400 0.504000 0.736000 0.440000 +0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 +0.980700 -0.451900 -0.243900 0.752000 0.648000 0.032000 +0.950000 -0.451900 -0.300000 0.488000 0.464000 -0.728000 +0.950000 -0.433400 -0.243900 0.528000 0.832000 0.152000 +0.900000 -0.451900 -0.272400 0.368000 0.408000 -0.824000 +0.900000 -0.412700 -0.243900 0.520000 0.640000 -0.552000 +0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 +0.890600 -0.401700 -0.243900 0.576000 0.616000 -0.528000 +0.850000 -0.401700 -0.268600 0.504000 0.432000 -0.744000 +0.850000 -0.375700 -0.243900 0.544000 0.616000 -0.552000 +0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 +0.829500 -0.351500 -0.243900 0.648000 0.640000 -0.400000 +0.800000 -0.351500 -0.277300 0.568000 0.408000 -0.704000 +0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 +0.800000 -0.328800 -0.243900 0.640000 0.656000 -0.384000 +1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 +1.000000 -0.503200 -0.182900 0.400000 0.704000 0.576000 +0.998000 -0.502100 -0.182900 0.528000 0.664000 0.520000 +1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 +1.000000 -0.502100 -0.189300 0.760000 0.568000 0.296000 +-0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 +-0.891000 -0.451900 -0.304800 0.528000 0.824000 -0.192000 +-0.896800 -0.451900 -0.243900 0.600000 0.776000 0.136000 +-0.850000 -0.473200 -0.304800 0.272000 0.896000 -0.336000 +-0.850000 -0.480800 -0.243900 0.376000 0.912000 0.152000 +-0.800000 -0.473000 -0.304800 -0.736000 0.648000 -0.168000 +-0.800000 -0.496000 -0.243900 0.424000 0.840000 0.320000 +-0.787800 -0.451900 -0.304800 -0.984000 0.136000 -0.040000 +-0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 +-0.769800 -0.451900 -0.243900 -0.952000 -0.080000 0.272000 +-0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 +-0.900000 -0.551700 -0.243900 -0.808000 -0.568000 -0.120000 +-0.900000 -0.539600 -0.304800 -0.720000 -0.488000 -0.480000 +-0.899500 -0.552300 -0.243900 -0.800000 -0.592000 -0.072000 +-0.891900 -0.552300 -0.304800 -0.800000 -0.568000 -0.136000 +-0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 +-0.850000 -0.602000 -0.304800 -0.640000 -0.736000 -0.184000 +-0.850000 -0.602500 -0.285600 -0.672000 -0.728000 -0.024000 +-0.849200 -0.602500 -0.304800 -0.536000 -0.720000 -0.432000 +-0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 +-0.800000 -0.636000 -0.304800 -0.536000 -0.792000 -0.272000 +-0.800000 -0.632800 -0.243900 -0.432000 -0.896000 0.072000 +-0.750000 -0.652200 -0.304800 -0.040000 -0.952000 -0.288000 +-0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 +-0.750000 -0.646000 -0.243900 -0.088000 -0.984000 0.144000 +-0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 +-0.850000 -0.603800 -0.243900 -0.656000 -0.744000 0.064000 +-0.850000 -0.602500 -0.285600 -0.672000 -0.728000 -0.024000 +-0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 +-0.851300 -0.602500 -0.243900 -0.680000 -0.720000 -0.008000 +-0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 +-0.800000 0.108800 -0.243900 0.352000 0.608000 -0.704000 +-0.800000 0.100400 -0.252800 0.360000 0.584000 -0.720000 +-0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 +-0.785800 0.100400 -0.243900 0.360000 0.584000 -0.720000 +-0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 +-0.750000 0.077000 -0.243900 0.368000 0.552000 -0.744000 +-0.750000 0.050200 -0.267100 0.368000 0.432000 -0.816000 +-0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 +-0.711800 0.050200 -0.243900 0.416000 0.432000 -0.792000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.700000 -0.175200 -0.304800 0.352000 0.528000 -0.768000 +-0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 +-0.700000 -0.150600 -0.284500 0.376000 0.392000 -0.832000 +-0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 +-0.650000 -0.200800 -0.303800 0.136000 0.680000 -0.712000 +-0.651700 -0.200800 -0.304800 0.320000 0.544000 -0.768000 +-0.650000 -0.201600 -0.304800 0.104000 0.688000 -0.704000 +-0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 +-0.650000 -0.251000 -0.354800 0.152000 0.632000 -0.752000 +-0.700000 -0.251000 -0.364900 0.104000 0.560000 -0.816000 +-0.650000 -0.261300 -0.365800 0.088000 0.568000 -0.808000 +-0.700000 -0.252100 -0.365800 0.096000 0.552000 -0.824000 +-0.700000 -0.251000 -0.364900 0.104000 0.560000 -0.816000 +-0.707800 -0.251000 -0.365800 0.064000 0.432000 -0.896000 +-0.700000 -0.200800 -0.326900 0.208000 0.528000 -0.816000 +-0.750000 -0.240500 -0.365800 0.056000 0.272000 -0.952000 +-0.750000 -0.200800 -0.348300 0.272000 0.384000 -0.872000 +-0.800000 -0.234100 -0.365800 -0.112000 0.264000 -0.952000 +-0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 +-0.800000 -0.200800 -0.355700 0.080000 0.256000 -0.960000 +-0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 +-0.650000 -0.035200 -0.243900 0.544000 0.264000 -0.792000 +-0.650000 -0.050200 -0.249300 0.496000 0.208000 -0.840000 +-0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 +-0.642900 -0.050200 -0.243900 0.560000 0.208000 -0.792000 +-0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 +-0.544700 -0.200800 -0.304800 -0.080000 0.824000 -0.552000 +-0.550000 -0.200800 -0.303600 -0.040000 0.880000 -0.464000 +-0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 +-0.550000 -0.201300 -0.304800 -0.032000 0.864000 -0.488000 +-0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 +-0.354400 -0.100400 -0.243900 -0.584000 0.448000 -0.664000 +-0.350000 -0.100400 -0.248500 -0.576000 0.440000 -0.680000 +-0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 +-0.350000 -0.093900 -0.243900 -0.600000 0.408000 -0.680000 +-0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 +-0.363900 -0.552300 -0.243900 0.816000 -0.480000 0.304000 +-0.350000 -0.535600 -0.243900 0.360000 -0.840000 0.384000 +-0.350000 -0.552300 -0.283400 -0.096000 -0.680000 0.720000 +-0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 +-0.317500 -0.552300 -0.243900 -0.600000 -0.648000 0.448000 +-0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 +-0.300000 -0.050200 -0.270300 -0.824000 0.232000 -0.512000 +-0.266700 -0.050200 -0.304800 -0.504000 0.288000 -0.808000 +-0.300000 -0.100400 -0.298100 -0.480000 0.288000 -0.824000 +-0.288100 -0.100400 -0.304800 -0.408000 0.240000 -0.872000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 +-0.256000 -0.703000 -0.243900 0.696000 -0.392000 0.584000 +-0.250000 -0.679700 -0.243900 0.728000 -0.208000 0.640000 +-0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 +-0.250000 -0.703000 -0.252700 0.704000 -0.368000 0.600000 +-0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 +-0.213400 0.000000 -0.304800 -0.304000 0.448000 -0.832000 +-0.250000 0.000000 -0.286200 -0.320000 0.712000 -0.616000 +-0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 +-0.250000 -0.028200 -0.304800 -0.400000 0.416000 -0.808000 +-0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 +-0.196100 -0.200800 -0.304800 0.360000 -0.200000 -0.904000 +-0.150000 -0.200800 -0.284500 0.024000 -0.216000 -0.968000 +-0.150000 -0.159100 -0.304800 0.152000 -0.400000 -0.896000 +-0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 +-0.108400 -0.200800 -0.304800 -0.496000 -0.048000 -0.856000 +-0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 +-0.172800 -0.552300 -0.243900 0.592000 -0.568000 0.560000 +-0.150000 -0.530700 -0.243900 0.632000 -0.664000 0.392000 +-0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 +-0.150000 -0.552300 -0.270100 0.544000 -0.504000 0.656000 +-0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 +-0.126800 0.150600 -0.243900 -0.208000 0.496000 -0.832000 +-0.100000 0.150600 -0.251000 -0.024000 0.408000 -0.904000 +-0.100000 0.164100 -0.243900 -0.032000 0.432000 -0.896000 +-0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 +-0.077600 0.150600 -0.243900 0.320000 0.328000 -0.880000 +-0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 +-0.150000 0.100400 -0.267100 -0.312000 0.440000 -0.832000 +-0.100000 0.100400 -0.276400 0.032000 0.376000 -0.920000 +-0.150000 0.050200 -0.299600 -0.080000 0.408000 -0.904000 +-0.100000 0.050200 -0.292200 0.304000 0.312000 -0.896000 +-0.150000 0.040500 -0.304800 -0.136000 0.416000 -0.896000 +-0.100000 0.022400 -0.304800 0.184000 0.304000 -0.928000 +-0.150000 0.000000 -0.322200 0.064000 0.240000 -0.968000 +-0.100000 0.000000 -0.309600 0.168000 0.152000 -0.968000 +-0.150000 -0.050200 -0.328000 0.128000 0.064000 -0.984000 +-0.100000 -0.050200 -0.318600 0.080000 0.144000 -0.984000 +-0.150000 -0.100400 -0.338700 0.056000 -0.088000 -0.992000 +-0.100000 -0.100400 -0.323700 -0.040000 -0.152000 -0.984000 +-0.150000 -0.150600 -0.309500 -0.032000 -0.400000 -0.912000 +-0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 +-0.100000 -0.150600 -0.315000 -0.456000 -0.064000 -0.880000 +-0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 +-0.077600 0.000000 -0.304800 0.248000 0.344000 -0.896000 +-0.050000 -0.015100 -0.304800 0.280000 0.536000 -0.784000 +-0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 +-0.050000 0.000000 -0.288000 0.256000 0.560000 -0.776000 +-0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 +-0.013800 -0.351500 -0.243900 0.552000 -0.808000 -0.168000 +-0.050000 -0.380500 -0.243900 0.664000 -0.736000 -0.104000 +-0.026900 -0.351500 -0.304800 0.608000 -0.688000 -0.384000 +-0.050000 -0.374600 -0.304800 0.584000 -0.672000 -0.448000 +-0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 +-0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 +0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 +0.050000 -0.050200 -0.279200 0.280000 0.320000 -0.896000 +0.004800 -0.050200 -0.304800 0.368000 0.176000 -0.904000 +0.050000 -0.100400 -0.298100 0.360000 0.248000 -0.896000 +0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 +0.039400 -0.100400 -0.304800 0.408000 0.224000 -0.880000 +0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 +0.113100 0.000000 -0.243900 -0.392000 0.768000 -0.496000 +0.150000 0.000000 -0.257100 -0.208000 0.552000 -0.800000 +0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 +0.150000 0.015400 -0.243900 -0.208000 0.728000 -0.640000 +0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 +0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 +0.185500 -0.100400 -0.304800 0.296000 0.104000 -0.944000 +0.200000 -0.139100 -0.304800 0.208000 0.104000 -0.968000 +0.150000 -0.100400 -0.322200 0.000000 0.224000 -0.968000 +0.200000 -0.150600 -0.306400 0.192000 0.112000 -0.968000 +0.150000 -0.150600 -0.323600 -0.232000 0.464000 -0.848000 +0.200000 -0.200800 -0.335700 -0.120000 0.200000 -0.968000 +0.150000 -0.200800 -0.325200 0.160000 0.176000 -0.968000 +0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 +0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 +0.150000 -0.251000 -0.336000 0.080000 -0.336000 -0.928000 +0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 +0.211400 -0.050200 -0.304800 0.152000 0.184000 -0.968000 +0.200000 -0.061600 -0.304800 0.000000 -0.144000 -0.984000 +0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 +0.200000 -0.100400 -0.298900 0.088000 0.040000 -0.992000 +0.250000 -0.100400 -0.298400 -0.088000 0.216000 -0.968000 +0.200000 -0.139100 -0.304800 0.208000 0.104000 -0.968000 +0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 +0.200000 -0.150600 -0.306400 0.192000 0.112000 -0.968000 +0.250000 -0.150600 -0.317700 0.024000 0.336000 -0.936000 +0.200000 -0.200800 -0.335700 -0.120000 0.200000 -0.968000 +0.250000 -0.200800 -0.343100 0.104000 0.232000 -0.960000 +0.200000 -0.251000 -0.346500 -0.184000 0.088000 -0.976000 +0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 +0.250000 -0.251000 -0.353900 0.064000 0.384000 -0.920000 +0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 +0.250000 -0.050200 -0.297000 0.000000 0.040000 -0.992000 +0.266500 -0.050200 -0.304800 -0.280000 0.064000 -0.952000 +0.250000 -0.100400 -0.298400 -0.088000 0.216000 -0.968000 +0.278900 -0.100400 -0.304800 -0.176000 0.256000 -0.944000 +0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 +0.250000 -0.114900 -0.304800 -0.104000 0.280000 -0.952000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.313400 -0.150600 -0.304800 0.400000 -0.360000 -0.840000 +0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 +0.320800 -0.200800 -0.304800 0.496000 0.328000 -0.800000 +0.350000 -0.200800 -0.271400 0.216000 0.224000 -0.944000 +0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 +0.350000 -0.228300 -0.304800 0.616000 0.528000 -0.576000 +0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 +0.300000 -0.357600 -0.243900 -0.288000 -0.920000 0.248000 +0.343800 -0.401700 -0.243900 -0.728000 -0.584000 0.344000 +0.300000 -0.355300 -0.304800 -0.272000 -0.752000 -0.592000 +0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 +0.344100 -0.401700 -0.304800 -0.784000 -0.512000 -0.336000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.350000 -0.127600 -0.304800 0.032000 -0.600000 -0.792000 +0.350000 -0.150600 -0.283600 -0.064000 -0.424000 -0.896000 +0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 +0.380400 -0.150600 -0.304800 -0.424000 -0.456000 -0.776000 +0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 +0.419200 0.050200 -0.304800 -0.224000 0.736000 -0.632000 +0.400000 0.050200 -0.294000 -0.352000 0.672000 -0.640000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 +0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 +0.400000 -0.200800 -0.276700 0.448000 -0.472000 -0.752000 +0.424400 -0.200800 -0.304800 -0.552000 -0.520000 -0.648000 +0.400000 -0.249400 -0.243900 0.760000 -0.472000 -0.424000 +0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 +0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 +0.450000 -0.248400 -0.243900 -0.224000 -0.888000 -0.384000 +0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 +0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 +0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 +0.550000 -0.162200 -0.304800 0.376000 0.720000 -0.576000 +0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 +0.550000 -0.194000 -0.365800 0.224000 0.896000 -0.368000 +0.500000 -0.200800 -0.334200 -0.376000 -0.448000 -0.800000 +0.535800 -0.200800 -0.365800 -0.736000 0.208000 -0.632000 +0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 +0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 +0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 +0.550000 -0.251000 -0.326800 -0.648000 -0.504000 -0.560000 +0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 +0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 +0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 +0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 +0.594200 -0.200800 -0.304800 0.544000 0.576000 -0.600000 +0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 +0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 +0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 +0.650000 -0.200800 -0.297000 0.088000 0.616000 -0.776000 +0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 +0.650000 -0.150600 -0.274900 0.544000 0.464000 -0.688000 +0.600000 -0.150600 -0.265200 0.248000 0.032000 -0.960000 +0.600000 -0.200800 -0.298700 0.448000 0.592000 -0.656000 +0.550000 -0.150600 -0.287800 0.352000 0.528000 -0.768000 +0.594200 -0.200800 -0.304800 0.544000 0.576000 -0.600000 +0.550000 -0.162200 -0.304800 0.376000 0.720000 -0.576000 +0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 +0.550000 -0.194000 -0.365800 0.224000 0.896000 -0.368000 +0.550000 -0.200800 -0.388300 0.280000 0.584000 -0.752000 +0.535800 -0.200800 -0.365800 -0.736000 0.208000 -0.632000 +0.550000 -0.216200 -0.365800 -0.080000 -0.576000 -0.808000 +0.550000 -0.200800 -0.388300 0.280000 0.584000 -0.752000 +0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 +0.559600 -0.200800 -0.365800 0.680000 0.504000 -0.520000 +0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 +0.500000 -0.222600 -0.304800 -0.320000 -0.704000 -0.624000 +0.500000 -0.251000 -0.264200 -0.272000 -0.744000 -0.600000 +0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 +0.535300 -0.251000 -0.304800 -0.648000 -0.480000 -0.576000 +0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 +0.800000 -0.401700 -0.291400 0.440000 0.456000 -0.760000 +0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 +0.850000 -0.401700 -0.268600 0.504000 0.432000 -0.744000 +0.837100 -0.451900 -0.304800 0.528000 0.264000 -0.800000 +0.850000 -0.451900 -0.293100 0.448000 0.248000 -0.848000 +0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 +0.850000 -0.490600 -0.304800 0.216000 0.112000 -0.968000 +0.800000 -0.502100 -0.293400 -0.120000 -0.840000 -0.520000 +0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 +0.832800 -0.502100 -0.304800 -0.104000 -0.544000 -0.824000 +0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 +0.858900 0.050200 -0.243900 -0.424000 0.568000 -0.696000 +0.900000 0.050200 -0.268900 0.208000 0.672000 -0.696000 +0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 +0.900000 0.070800 -0.243900 -0.096000 0.744000 -0.656000 +0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 +0.981700 -0.050200 -0.304800 0.528000 0.432000 -0.720000 +1.000000 -0.073100 -0.304800 0.536000 0.424000 -0.720000 +1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 +1.000000 -0.050200 -0.288900 0.520000 0.432000 -0.728000 +-0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 +-0.900000 0.104600 -0.304800 0.304000 0.568000 -0.760000 +-0.900000 0.100400 -0.308600 0.312000 0.536000 -0.776000 +-0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 +-0.892300 0.100400 -0.304800 0.320000 0.536000 -0.776000 +-0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 +-0.850000 -0.301200 -0.321900 -0.728000 -0.616000 -0.280000 +-0.850000 -0.251000 -0.359600 -0.320000 0.248000 -0.912000 +-0.826000 -0.301200 -0.365800 -0.648000 -0.448000 -0.600000 +-0.828000 -0.251000 -0.365800 -0.248000 0.216000 -0.936000 +-0.800000 -0.301200 -0.380800 -0.264000 0.104000 -0.952000 +-0.800000 -0.251000 -0.370300 -0.064000 0.200000 -0.976000 +-0.750000 -0.301200 -0.392900 -0.104000 0.352000 -0.928000 +-0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 +-0.750000 -0.251000 -0.369800 0.056000 0.280000 -0.952000 +-0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 +-0.800000 -0.066700 -0.304800 0.296000 0.144000 -0.936000 +-0.800000 -0.100400 -0.313000 0.368000 0.216000 -0.896000 +-0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 +-0.785000 -0.100400 -0.304800 0.328000 0.224000 -0.912000 +-0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 +-0.750000 -0.129200 -0.304800 0.392000 0.376000 -0.832000 +-0.750000 -0.150600 -0.317800 0.416000 0.384000 -0.816000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.731900 -0.150600 -0.304800 0.424000 0.400000 -0.808000 +-0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 +-0.576800 -0.251000 -0.365800 -0.136000 0.624000 -0.760000 +-0.600000 -0.251000 -0.360600 -0.120000 0.624000 -0.760000 +-0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 +-0.600000 -0.256300 -0.365800 -0.112000 0.608000 -0.776000 +-0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 +-0.500000 -0.637800 -0.304800 -0.208000 -0.976000 -0.032000 +-0.455200 -0.652700 -0.304800 -0.280000 -0.952000 0.040000 +-0.500000 -0.633000 -0.365800 -0.088000 -0.968000 -0.200000 +-0.450000 -0.652700 -0.319500 -0.256000 -0.952000 -0.136000 +-0.450000 -0.645700 -0.365800 -0.144000 -0.904000 -0.392000 +-0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 +-0.405700 -0.652700 -0.365800 -0.144000 -0.920000 -0.344000 +-0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 +-0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 +-0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 +-0.357100 -0.602500 -0.365800 0.904000 0.256000 -0.312000 +-0.351600 -0.602500 -0.304800 0.944000 0.304000 0.024000 +-0.350000 -0.629600 -0.365800 0.056000 0.640000 -0.760000 +-0.350000 -0.605300 -0.304800 0.248000 0.960000 -0.032000 +-0.328400 -0.602500 -0.365800 -0.832000 -0.248000 -0.488000 +-0.344900 -0.602500 -0.304800 -0.744000 0.664000 -0.032000 +-0.350000 -0.585900 -0.365800 0.168000 -0.792000 -0.576000 +-0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 +-0.350000 -0.594300 -0.304800 0.520000 -0.800000 0.280000 +-0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 +-0.350000 -0.747900 -0.304800 -0.512000 -0.832000 -0.184000 +-0.350000 -0.703000 -0.357000 -0.336000 -0.496000 -0.792000 +-0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 +-0.371300 -0.703000 -0.304800 -0.816000 -0.552000 -0.144000 +-0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 +-0.331500 -0.150600 -0.304800 -0.256000 0.464000 -0.840000 +-0.300000 -0.150600 -0.319300 -0.256000 0.480000 -0.832000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.300000 -0.118900 -0.304800 -0.376000 0.264000 -0.880000 +-0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 +-0.250000 -0.639500 -0.365800 0.216000 -0.224000 -0.944000 +-0.282800 -0.652700 -0.365800 0.080000 -0.160000 -0.976000 +-0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 +-0.250000 -0.652700 -0.361600 0.240000 -0.216000 -0.944000 +-0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 +-0.250000 -0.150600 -0.327500 -0.120000 0.152000 -0.976000 +-0.200000 -0.150600 -0.333300 0.216000 -0.272000 -0.936000 +-0.250000 -0.200800 -0.333200 0.168000 0.080000 -0.976000 +-0.200000 -0.200800 -0.306700 0.368000 -0.184000 -0.904000 +-0.250000 -0.251000 -0.337900 0.384000 0.112000 -0.912000 +-0.200000 -0.251000 -0.307600 0.408000 0.096000 -0.904000 +-0.250000 -0.301200 -0.349000 0.296000 0.272000 -0.912000 +-0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 +-0.200000 -0.301200 -0.313400 0.328000 0.152000 -0.928000 +-0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 +-0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 +-0.200000 -0.558000 -0.365800 0.448000 -0.240000 -0.856000 +-0.229500 -0.602500 -0.365800 0.408000 -0.240000 -0.872000 +-0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 +-0.250000 -0.602500 -0.376000 0.360000 -0.328000 -0.872000 +-0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 +-0.250000 -0.552300 -0.402600 0.504000 -0.312000 -0.792000 +-0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 +-0.150000 -0.602500 -0.307600 0.456000 -0.280000 -0.840000 +-0.150000 -0.552300 -0.337600 0.424000 -0.304000 -0.840000 +-0.200000 -0.602500 -0.345500 0.488000 -0.272000 -0.824000 +-0.196100 -0.552300 -0.365800 0.320000 -0.272000 -0.904000 +-0.200000 -0.558000 -0.365800 0.448000 -0.240000 -0.856000 +-0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 +-0.200000 -0.552300 -0.367100 0.360000 -0.232000 -0.896000 +-0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 +-0.147100 -0.502100 -0.365800 0.472000 -0.192000 -0.848000 +-0.145700 -0.451900 -0.365800 0.464000 0.040000 -0.880000 +-0.100000 -0.502100 -0.325200 0.520000 -0.368000 -0.760000 +-0.100000 -0.451900 -0.336100 0.496000 -0.048000 -0.856000 +-0.074100 -0.502100 -0.304800 0.864000 -0.480000 0.112000 +-0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 +-0.061500 -0.451900 -0.304800 0.928000 -0.352000 0.088000 +-0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 +-0.100000 -0.200800 -0.311700 -0.496000 0.128000 -0.856000 +-0.050000 -0.200800 -0.320900 -0.056000 0.280000 -0.952000 +-0.100000 -0.251000 -0.333700 -0.512000 0.248000 -0.816000 +-0.050000 -0.251000 -0.364300 -0.216000 0.352000 -0.904000 +-0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 +-0.050000 -0.266900 -0.365800 -0.288000 0.088000 -0.944000 +-0.058500 -0.301200 -0.365800 -0.384000 -0.288000 -0.872000 +-0.050000 -0.301200 -0.370400 -0.392000 -0.264000 -0.872000 +-0.050000 -0.309800 -0.365800 -0.336000 -0.416000 -0.840000 +-0.058500 -0.301200 -0.365800 -0.384000 -0.288000 -0.872000 +-0.050000 -0.351500 -0.336900 0.024000 -0.576000 -0.808000 +-0.100000 -0.301200 -0.349000 -0.368000 0.264000 -0.888000 +-0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 +-0.100000 -0.351500 -0.338800 0.024000 -0.312000 -0.944000 +0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 +0.050000 -0.119800 -0.304800 0.416000 0.264000 -0.864000 +0.050000 -0.150600 -0.318000 0.352000 0.312000 -0.872000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +0.096000 -0.150600 -0.304800 0.176000 0.336000 -0.920000 +0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 +0.301400 0.000000 -0.304800 -0.584000 0.656000 -0.464000 +0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 +0.350000 0.024300 -0.304800 -0.456000 0.784000 -0.408000 +0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.400000 0.041200 -0.304800 -0.352000 0.672000 -0.648000 +0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 +0.383500 -0.050200 -0.365800 0.200000 -0.288000 -0.928000 +0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 +0.350000 -0.037900 -0.365800 -0.440000 0.432000 -0.776000 +0.400000 0.000000 -0.343200 -0.216000 0.592000 -0.768000 +0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 +0.350000 0.000000 -0.339100 -0.264000 0.552000 -0.784000 +0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 +0.355700 -0.351500 -0.365800 0.360000 -0.072000 -0.928000 +0.400000 -0.351500 -0.338800 0.360000 -0.568000 -0.728000 +0.350000 -0.334300 -0.365800 -0.304000 0.096000 -0.944000 +0.400000 -0.301200 -0.307300 0.704000 0.496000 -0.496000 +0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 +0.350000 -0.301200 -0.360500 0.376000 0.184000 -0.904000 +0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 +0.376800 -0.401700 -0.304800 0.336000 -0.848000 -0.392000 +0.350000 -0.401700 -0.317400 -0.608000 -0.560000 -0.544000 +0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 +0.350000 -0.410700 -0.304800 -0.592000 -0.664000 -0.440000 +0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 +0.400000 -0.050200 -0.360800 0.184000 -0.432000 -0.872000 +0.450000 -0.050200 -0.325200 -0.120000 -0.568000 -0.808000 +0.400000 -0.100400 -0.340000 -0.040000 -0.360000 -0.928000 +0.450000 -0.100400 -0.322200 0.392000 -0.360000 -0.840000 +0.400000 -0.150600 -0.318400 -0.432000 -0.416000 -0.792000 +0.450000 -0.150600 -0.321300 -0.008000 0.120000 -0.992000 +0.400000 -0.168700 -0.304800 -0.504000 -0.464000 -0.720000 +0.450000 -0.200800 -0.331300 -0.472000 -0.400000 -0.776000 +0.424400 -0.200800 -0.304800 -0.552000 -0.520000 -0.648000 +0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 +0.450000 -0.217600 -0.304800 -0.352000 -0.736000 -0.560000 +0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 +0.450000 0.055500 -0.304800 0.064000 0.864000 -0.496000 +0.450000 0.050200 -0.314200 0.064000 0.744000 -0.656000 +0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 +0.496000 0.050200 -0.304800 0.104000 0.800000 -0.576000 +0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 +0.500000 -0.333600 -0.304800 -0.408000 0.824000 -0.376000 +0.458900 -0.351500 -0.304800 -0.472000 0.360000 -0.792000 +0.500000 -0.351500 -0.354900 -0.384000 -0.472000 -0.784000 +0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 +0.500000 -0.400200 -0.304800 -0.176000 -0.672000 -0.712000 +0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 +0.450000 -0.380500 -0.304800 -0.144000 0.256000 -0.952000 +0.450000 -0.401700 -0.316200 -0.184000 -0.360000 -0.904000 +0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 +0.492100 -0.401700 -0.304800 0.152000 -0.576000 -0.792000 +0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 +0.500000 -0.127100 -0.304800 0.480000 0.456000 -0.744000 +0.500000 -0.150600 -0.319100 0.336000 0.504000 -0.792000 +0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 +0.523400 -0.150600 -0.304800 0.376000 0.592000 -0.704000 +0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 +0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 +0.589400 -0.100400 -0.304800 -0.440000 -0.424000 -0.784000 +0.600000 -0.100400 -0.312700 0.376000 -0.472000 -0.792000 +0.600000 -0.105700 -0.304800 0.312000 -0.728000 -0.600000 +0.604900 -0.100400 -0.304800 0.744000 -0.360000 -0.552000 +0.600000 -0.100400 -0.312700 0.376000 -0.472000 -0.792000 +0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 +0.600000 -0.086300 -0.304800 0.440000 0.312000 -0.832000 +0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 +0.600000 -0.206100 -0.304800 0.488000 0.616000 -0.608000 +0.650000 -0.208600 -0.304800 0.024000 0.680000 -0.728000 +0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 +0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 +0.600000 -0.249700 -0.426800 -0.344000 0.872000 -0.328000 +0.650000 -0.251000 -0.378600 0.328000 0.752000 -0.560000 +0.604800 -0.251000 -0.426800 0.544000 0.248000 -0.792000 +0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 +0.600000 -0.252700 -0.426800 -0.416000 -0.736000 -0.520000 +0.600000 -0.288400 -0.365800 -0.376000 -0.712000 -0.584000 +0.598300 -0.251000 -0.426800 -0.848000 0.144000 -0.496000 +0.573000 -0.251000 -0.365800 -0.696000 0.544000 -0.464000 +0.600000 -0.249700 -0.426800 -0.344000 0.872000 -0.328000 +0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 +0.600000 -0.231600 -0.365800 0.072000 0.640000 -0.760000 +0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 +0.700000 -0.211400 -0.304800 0.288000 0.624000 -0.720000 +0.700000 -0.251000 -0.357800 0.296000 0.496000 -0.808000 +0.728900 -0.251000 -0.304800 0.720000 0.440000 -0.528000 +0.700000 -0.301200 -0.354900 0.160000 -0.240000 -0.952000 +0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 +0.744500 -0.301200 -0.304800 0.640000 0.104000 -0.760000 +0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 +0.750000 -0.334300 -0.304800 0.512000 0.112000 -0.840000 +0.750000 -0.351500 -0.307800 0.512000 0.128000 -0.840000 +0.754800 -0.351500 -0.304800 0.424000 0.136000 -0.888000 +0.750000 -0.401700 -0.321600 0.336000 0.000000 -0.936000 +0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 +0.779200 -0.401700 -0.304800 0.400000 0.336000 -0.848000 +0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 +0.800000 -0.418300 -0.304800 0.408000 0.496000 -0.760000 +0.800000 -0.451900 -0.330300 0.328000 0.200000 -0.920000 +0.837100 -0.451900 -0.304800 0.528000 0.264000 -0.800000 +0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 +0.800000 -0.493800 -0.304800 0.032000 -0.688000 -0.720000 +0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 +0.856800 -0.502100 -0.304800 0.288000 0.144000 -0.944000 +0.850000 -0.502100 -0.307100 0.032000 -0.240000 -0.968000 +0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 +0.850000 -0.504700 -0.304800 -0.096000 -0.664000 -0.736000 +0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 +0.900000 0.016700 -0.304800 -0.152000 0.720000 -0.664000 +0.900000 0.000000 -0.329500 -0.080000 0.648000 -0.744000 +0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 +0.927400 0.000000 -0.304800 0.400000 0.560000 -0.720000 +-0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 +-0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 +-0.864000 -0.502100 -0.365800 -0.304000 0.480000 -0.816000 +-0.850000 -0.502100 -0.370900 -0.184000 0.560000 -0.800000 +-0.860100 -0.552300 -0.365800 -0.680000 -0.432000 -0.584000 +-0.850000 -0.552300 -0.378600 -0.568000 -0.344000 -0.736000 +-0.850000 -0.564700 -0.365800 -0.608000 -0.528000 -0.584000 +-0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 +-0.806700 -0.602500 -0.365800 -0.520000 -0.656000 -0.536000 +-0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 +-0.800000 -0.607700 -0.365800 -0.488000 -0.640000 -0.584000 +-0.750000 -0.602500 -0.401000 -0.336000 -0.696000 -0.624000 +-0.750000 -0.628000 -0.365800 -0.232000 -0.808000 -0.528000 +-0.714100 -0.602500 -0.426800 -0.368000 -0.680000 -0.624000 +-0.700000 -0.639000 -0.365800 -0.040000 -0.920000 -0.376000 +-0.700000 -0.609100 -0.426800 -0.336000 -0.744000 -0.568000 +-0.650000 -0.641900 -0.365800 -0.024000 -0.952000 -0.280000 +-0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 +-0.650000 -0.621300 -0.426800 -0.080000 -0.904000 -0.400000 +-0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 +-0.850000 -0.496800 -0.365800 -0.176000 0.616000 -0.760000 +-0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 +-0.850000 -0.502100 -0.370900 -0.184000 0.560000 -0.800000 +-0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 +-0.850000 -0.552300 -0.378600 -0.568000 -0.344000 -0.736000 +-0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 +-0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 +-0.750000 -0.552300 -0.422100 -0.552000 -0.096000 -0.824000 +-0.750000 -0.502100 -0.424900 -0.848000 -0.112000 -0.512000 +-0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 +-0.748800 -0.502100 -0.426800 -0.584000 -0.048000 -0.800000 +-0.750000 -0.502100 -0.424900 -0.848000 -0.112000 -0.512000 +-0.750000 -0.498100 -0.426800 -0.864000 -0.184000 -0.448000 +-0.800000 -0.502100 -0.369300 -0.768000 0.256000 -0.576000 +-0.764100 -0.451900 -0.426800 -0.880000 -0.256000 -0.384000 +-0.800000 -0.496400 -0.365800 -0.664000 0.416000 -0.608000 +-0.786000 -0.451900 -0.365800 -0.872000 0.080000 -0.472000 +-0.764100 -0.451900 -0.426800 -0.880000 -0.256000 -0.384000 +-0.796500 -0.401700 -0.365800 -0.952000 -0.168000 -0.232000 +-0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 +-0.777800 -0.401700 -0.426800 -0.928000 0.040000 -0.360000 +-0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 +-0.800000 -0.602500 -0.372400 -0.488000 -0.592000 -0.624000 +-0.800000 -0.552300 -0.401000 -0.552000 -0.288000 -0.776000 +-0.750000 -0.602500 -0.401000 -0.336000 -0.696000 -0.624000 +-0.750000 -0.552300 -0.422100 -0.552000 -0.096000 -0.824000 +-0.714100 -0.602500 -0.426800 -0.368000 -0.680000 -0.624000 +-0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 +-0.744500 -0.552300 -0.426800 -0.560000 -0.080000 -0.816000 +-0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 +-0.350000 -0.248400 -0.365800 0.184000 0.424000 -0.880000 +-0.350000 -0.251000 -0.367200 0.240000 0.168000 -0.952000 +-0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 +-0.345700 -0.251000 -0.365800 0.320000 0.336000 -0.880000 +-0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 +-0.250000 -0.342900 -0.365800 0.504000 0.512000 -0.680000 +-0.250000 -0.351500 -0.379700 0.552000 0.712000 -0.416000 +-0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 +-0.241400 -0.351500 -0.365800 0.488000 0.640000 -0.576000 +-0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 +-0.200000 -0.365300 -0.365800 0.504000 0.768000 -0.376000 +-0.200000 -0.393200 -0.426800 0.696000 0.632000 -0.328000 +-0.151700 -0.401700 -0.365800 0.568000 0.104000 -0.808000 +-0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 +-0.194300 -0.401700 -0.426800 0.792000 0.416000 -0.432000 +-0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 +-0.044700 -0.251000 -0.365800 -0.216000 0.376000 -0.896000 +0.000000 -0.251000 -0.386300 -0.352000 0.496000 -0.792000 +0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 +0.000000 -0.238800 -0.365800 -0.192000 0.648000 -0.728000 +0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 +0.100000 -0.224900 -0.365800 0.352000 0.456000 -0.808000 +0.100000 -0.251000 -0.380100 0.472000 -0.384000 -0.784000 +0.118000 -0.251000 -0.365800 0.536000 -0.224000 -0.808000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +0.100000 -0.263400 -0.365800 0.480000 -0.672000 -0.544000 +0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 +0.350000 -0.354600 -0.365800 -0.264000 -0.632000 -0.720000 +0.350000 -0.351500 -0.368100 -0.440000 0.096000 -0.888000 +0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 +0.348000 -0.351500 -0.365800 -0.720000 -0.032000 -0.680000 +0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 +0.450000 0.007700 -0.365800 -0.264000 0.744000 -0.600000 +0.431500 0.000000 -0.365800 -0.424000 0.312000 -0.840000 +0.450000 0.000000 -0.377000 -0.360000 0.400000 -0.840000 +0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 +0.450000 -0.014200 -0.365800 -0.336000 -0.568000 -0.744000 +0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 +0.650000 -0.245700 -0.365800 0.168000 0.856000 -0.480000 +0.650000 -0.251000 -0.378600 0.328000 0.752000 -0.560000 +0.678000 -0.251000 -0.365800 0.264000 0.520000 -0.808000 +0.650000 -0.267900 -0.365800 0.280000 -0.440000 -0.848000 diff --git a/progs/demos/lodbias.c b/progs/demos/lodbias.c new file mode 100644 index 000000000..a4db22e26 --- /dev/null +++ b/progs/demos/lodbias.c @@ -0,0 +1,282 @@ +/* + * GL_EXT_texture_lod_bias demo + * + * Thanks to Michael Vance for implementing this extension in Mesa. + * + * Brian Paul + * 20 March 2000 + * + * Copyright (C) 2000 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include <assert.h> +#include <stdlib.h> +#include <stdio.h> +#include <math.h> +#include <GL/glut.h> +#include <GL/glext.h> + +#include "readtex.h" + +#define TEXTURE_FILE "../images/girl.rgb" + +static GLfloat Xrot = 0, Yrot = -30, Zrot = 0; +static GLboolean Anim = GL_TRUE; +static GLint Bias = 0, BiasStepSign = +1; /* ints avoid fp precision problem */ +static GLint BiasMin = -400, BiasMax = 400; + + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + +static void Idle( void ) +{ + static int lastTime = 0; + int time = glutGet(GLUT_ELAPSED_TIME); + int step; + + if (lastTime == 0) + lastTime = time; + else if (time - lastTime < 10) + return; + + step = (time - lastTime) / 10 * BiasStepSign; + lastTime = time; + + Bias += step; + if (Bias < BiasMin) { + Bias = BiasMin; + BiasStepSign = +1; + } + else if (Bias > BiasMax) { + Bias = BiasMax; + BiasStepSign = -1; + } + + glutPostRedisplay(); +} + + +static void Display( void ) +{ + char str[100]; + + glClear( GL_COLOR_BUFFER_BIT ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho(-1, 1, -1, 1, -1, 1); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + glDisable(GL_TEXTURE_2D); + glColor3f(1,1,1); + glRasterPos3f(-0.9, -0.9, 0.0); + sprintf(str, "Texture LOD Bias = %4.1f", Bias * 0.01); + PrintString(str); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -8.0 ); + + glPushMatrix(); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + glRotatef(Zrot, 0, 0, 1); + + glEnable(GL_TEXTURE_2D); + glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, 0.01 * Bias); + + glBegin(GL_POLYGON); + glTexCoord2f(0, 0); glVertex2f(-1, -1); + glTexCoord2f(2, 0); glVertex2f( 1, -1); + glTexCoord2f(2, 2); glVertex2f( 1, 1); + glTexCoord2f(0, 2); glVertex2f(-1, 1); + glEnd(); + + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case 'a': + Anim = !Anim; + if (Anim) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 'z': + Zrot -= step; + break; + case 'Z': + Zrot += step; + break; + case 'b': + Bias -= 10; + break; + case 'B': + Bias += 10; + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + Xrot -= step; + break; + case GLUT_KEY_DOWN: + Xrot += step; + break; + case GLUT_KEY_LEFT: + Yrot -= step; + break; + case GLUT_KEY_RIGHT: + Yrot += step; + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + GLfloat maxBias; + + if (!glutExtensionSupported("GL_EXT_texture_lod_bias")) { + printf("Sorry, GL_EXT_texture_lod_bias not supported by this renderer.\n"); + exit(1); + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + if (glutExtensionSupported("GL_SGIS_generate_mipmap")) { + /* test auto mipmap generation */ + GLint width, height, i; + GLenum format; + GLubyte *image = LoadRGBImage(TEXTURE_FILE, &width, &height, &format); + if (!image) { + printf("Error: could not load texture image %s\n", TEXTURE_FILE); + exit(1); + } + /* resize to 256 x 256 */ + if (width != 256 || height != 256) { + GLubyte *newImage = malloc(256 * 256 * 4); + gluScaleImage(format, width, height, GL_UNSIGNED_BYTE, image, + 256, 256, GL_UNSIGNED_BYTE, newImage); + free(image); + image = newImage; + } + printf("Using GL_SGIS_generate_mipmap\n"); + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); + glTexImage2D(GL_TEXTURE_2D, 0, format, 256, 256, 0, + format, GL_UNSIGNED_BYTE, image); + free(image); + + /* make sure mipmap was really generated correctly */ + width = height = 256; + for (i = 0; i < 9; i++) { + GLint w, h; + glGetTexLevelParameteriv(GL_TEXTURE_2D, i, GL_TEXTURE_WIDTH, &w); + glGetTexLevelParameteriv(GL_TEXTURE_2D, i, GL_TEXTURE_HEIGHT, &h); + printf("Level %d size: %d x %d\n", i, w, h); + assert(w == width); + assert(h == height); + width /= 2; + height /= 2; + } + + } + else if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) { + printf("Error: could not load texture image %s\n", TEXTURE_FILE); + exit(1); + } + + /* mipmapping required for this extension */ + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &maxBias); + printf("LOD bias range: [%g, %g]\n", -maxBias, maxBias); + BiasMin = -100 * maxBias; + BiasMax = 100 * maxBias; + + /* Since we have (about) 8 mipmap levels, no need to bias beyond + * the range [-1, +8]. + */ + if (BiasMin < -100) + BiasMin = -100; + if (BiasMax > 800) + BiasMax = 800; +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 350, 350 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + if (Anim) + glutIdleFunc(Idle); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/morph3d.c b/progs/demos/morph3d.c new file mode 100644 index 000000000..047d571c7 --- /dev/null +++ b/progs/demos/morph3d.c @@ -0,0 +1,886 @@ + +/*- + * morph3d.c - Shows 3D morphing objects + * + * Converted to GLUT by brianp on 1/1/98 + * + * This program was inspired on a WindowsNT(R)'s screen saver. It was written + * from scratch and it was not based on any other source code. + * + * Porting it to xlock (the final objective of this code since the moment I + * decided to create it) was possible by comparing the original Mesa's gear + * demo with it's ported version, so thanks for Danny Sung for his indirect + * help (look at gear.c in xlock source tree). NOTE: At the moment this code + * was sent to Brian Paul for package inclusion, the XLock Version was not + * available. In fact, I'll wait it to appear on the next Mesa release (If you + * are reading this, it means THIS release) to send it for xlock package + * inclusion). It will probably there be a GLUT version too. + * + * Thanks goes also to Brian Paul for making it possible and inexpensive + * to use OpenGL at home. + * + * Since I'm not a native english speaker, my apologies for any gramatical + * mistake. + * + * My e-mail addresses are + * + * vianna@cat.cbpf.br + * and + * marcelo@venus.rdc.puc-rio.br + * + * Marcelo F. Vianna (Feb-13-1997) + */ + +/* +This document is VERY incomplete, but tries to describe the mathematics used +in the program. At this moment it just describes how the polyhedra are +generated. On futhurer versions, this document will be probabbly improved. + +Since I'm not a native english speaker, my apologies for any gramatical +mistake. + +Marcelo Fernandes Vianna +- Undergraduate in Computer Engeneering at Catholic Pontifical University +- of Rio de Janeiro (PUC-Rio) Brasil. +- e-mail: vianna@cat.cbpf.br or marcelo@venus.rdc.puc-rio.br +- Feb-13-1997 + +POLYHEDRA GENERATION + +For the purpose of this program it's not sufficient to know the polyhedra +vertexes coordinates. Since the morphing algorithm applies a nonlinear +transformation over the surfaces (faces) of the polyhedron, each face has +to be divided into smaller ones. The morphing algorithm needs to transform +each vertex of these smaller faces individually. It's a very time consoming +task. + +In order to reduce calculation overload, and since all the macro faces of +the polyhedron are transformed by the same way, the generation is made by +creating only one face of the polyhedron, morphing it and then rotating it +around the polyhedron center. + +What we need to know is the face radius of the polyhedron (the radius of +the inscribed sphere) and the angle between the center of two adjacent +faces using the center of the sphere as the angle's vertex. + +The face radius of the regular polyhedra are known values which I decided +to not waste my time calculating. Following is a table of face radius for +the regular polyhedra with edge length = 1: + + TETRAHEDRON : 1/(2*sqrt(2))/sqrt(3) + CUBE : 1/2 + OCTAHEDRON : 1/sqrt(6) + DODECAHEDRON : T^2 * sqrt((T+2)/5) / 2 -> where T=(sqrt(5)+1)/2 + ICOSAHEDRON : (3*sqrt(3)+sqrt(15))/12 + +I've not found any reference about the mentioned angles, so I needed to +calculate them, not a trivial task until I figured out how :) +Curiously these angles are the same for the tetrahedron and octahedron. +A way to obtain this value is inscribing the tetrahedron inside the cube +by matching their vertexes. So you'll notice that the remaining unmatched +vertexes are in the same straight line starting in the cube/tetrahedron +center and crossing the center of each tetrahedron's face. At this point +it's easy to obtain the bigger angle of the isosceles triangle formed by +the center of the cube and two opposite vertexes on the same cube face. +The edges of this triangle have the following lenghts: sqrt(2) for the base +and sqrt(3)/2 for the other two other edges. So the angle we want is: + +-----------------------------------------------------------+ + | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees | + +-----------------------------------------------------------+ +For the cube this angle is obvious, but just for formality it can be +easily obtained because we also know it's isosceles edge lenghts: +sqrt(2)/2 for the base and 1/2 for the other two edges. So the angle we +want is: + +-----------------------------------------------------------+ + | 2*ARCSIN((sqrt(2)/2)/1) = 90.000000000000000000 degrees | + +-----------------------------------------------------------+ +For the octahedron we use the same idea used for the tetrahedron, but now +we inscribe the cube inside the octahedron so that all cubes's vertexes +matches excatly the center of each octahedron's face. It's now clear that +this angle is the same of the thetrahedron one: + +-----------------------------------------------------------+ + | 2*ARCSIN(sqrt(2)/sqrt(3)) = 109.47122063449069174 degrees | + +-----------------------------------------------------------+ +For the dodecahedron it's a little bit harder because it's only relationship +with the cube is useless to us. So we need to solve the problem by another +way. The concept of Face radius also exists on 2D polygons with the name +Edge radius: + Edge Radius For Pentagon (ERp) + ERp = (1/2)/TAN(36 degrees) * VRp = 0.6881909602355867905 + (VRp is the pentagon's vertex radio). + Face Radius For Dodecahedron + FRd = T^2 * sqrt((T+2)/5) / 2 = 1.1135163644116068404 +Why we need ERp? Well, ERp and FRd segments forms a 90 degrees angle, +completing this triangle, the lesser angle is a half of the angle we are +looking for, so this angle is: + +-----------------------------------------------------------+ + | 2*ARCTAN(ERp/FRd) = 63.434948822922009981 degrees | + +-----------------------------------------------------------+ +For the icosahedron we can use the same method used for dodecahedron (well +the method used for dodecahedron may be used for all regular polyhedra) + Edge Radius For Triangle (this one is well known: 1/3 of the triangle height) + ERt = sin(60)/3 = sqrt(3)/6 = 0.2886751345948128655 + Face Radius For Icosahedron + FRi= (3*sqrt(3)+sqrt(15))/12 = 0.7557613140761707538 +So the angle is: + +-----------------------------------------------------------+ + | 2*ARCTAN(ERt/FRi) = 41.810314895778596167 degrees | + +-----------------------------------------------------------+ + +*/ + + +#include <stdio.h> +#include <stdlib.h> +#ifndef _WIN32 +#include <unistd.h> +#endif +#include <GL/glut.h> +#include <math.h> +#include <string.h> + +#define Scale 0.3 + +#define VectMul(X1,Y1,Z1,X2,Y2,Z2) (Y1)*(Z2)-(Z1)*(Y2),(Z1)*(X2)-(X1)*(Z2),(X1)*(Y2)-(Y1)*(X2) +#define sqr(A) ((A)*(A)) + +/* Increasing this values produces better image quality, the price is speed. */ +/* Very low values produces erroneous/incorrect plotting */ +#define tetradivisions 23 +#define cubedivisions 20 +#define octadivisions 21 +#define dodecadivisions 10 +#define icodivisions 15 + +#define tetraangle 109.47122063449069174 +#define cubeangle 90.000000000000000000 +#define octaangle 109.47122063449069174 +#define dodecaangle 63.434948822922009981 +#define icoangle 41.810314895778596167 + +#ifndef Pi +#define Pi 3.1415926535897932385 +#endif +#define SQRT2 1.4142135623730951455 +#define SQRT3 1.7320508075688771932 +#define SQRT5 2.2360679774997898051 +#define SQRT6 2.4494897427831778813 +#define SQRT15 3.8729833462074170214 +#define cossec36_2 0.8506508083520399322 +#define cos72 0.3090169943749474241 +#define sin72 0.9510565162951535721 +#define cos36 0.8090169943749474241 +#define sin36 0.5877852522924731292 + +/*************************************************************************/ + +static int mono=0; +static int smooth=1; +static GLint WindH, WindW; +static GLfloat step=0; +static GLfloat seno; +static int object; +static int edgedivisions; +static void (*draw_object)( void ); +static float Magnitude; +static float *MaterialColor[20]; + +static float front_shininess[] = {60.0}; +static float front_specular[] = { 0.7, 0.7, 0.7, 1.0 }; +static float ambient[] = { 0.0, 0.0, 0.0, 1.0 }; +static float diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; +static float position0[] = { 1.0, 1.0, 1.0, 0.0 }; +static float position1[] = {-1.0,-1.0, 1.0, 0.0 }; +static float lmodel_ambient[] = { 0.5, 0.5, 0.5, 1.0 }; +static float lmodel_twoside[] = {GL_TRUE}; + +static float MaterialRed[] = { 0.7, 0.0, 0.0, 1.0 }; +static float MaterialGreen[] = { 0.1, 0.5, 0.2, 1.0 }; +static float MaterialBlue[] = { 0.0, 0.0, 0.7, 1.0 }; +static float MaterialCyan[] = { 0.2, 0.5, 0.7, 1.0 }; +static float MaterialYellow[] = { 0.7, 0.7, 0.0, 1.0 }; +static float MaterialMagenta[] = { 0.6, 0.2, 0.5, 1.0 }; +static float MaterialWhite[] = { 0.7, 0.7, 0.7, 1.0 }; +static float MaterialGray[] = { 0.2, 0.2, 0.2, 1.0 }; + +#define TRIANGLE(Edge, Amp, Divisions, Z) \ +{ \ + GLfloat Xf,Yf,Xa,Yb,Xf2,Yf2; \ + GLfloat Factor,Factor1,Factor2; \ + GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ + GLfloat Ax,Ay,Bx; \ + int Ri,Ti; \ + GLfloat Vr=(Edge)*SQRT3/3; \ + GLfloat AmpVr2=(Amp)/sqr(Vr); \ + GLfloat Zf=(Edge)*(Z); \ + \ + Ax=(Edge)*(+0.5/(Divisions)), Ay=(Edge)*(-SQRT3/(2*Divisions)); \ + Bx=(Edge)*(-0.5/(Divisions)); \ + \ + for (Ri=1; Ri<=(Divisions); Ri++) { \ + glBegin(GL_TRIANGLE_STRIP); \ + for (Ti=0; Ti<Ri; Ti++) { \ + Xf=(float)(Ri-Ti)*Ax + (float)Ti*Bx; \ + Yf=Vr+(float)(Ri-Ti)*Ay + (float)Ti*Ay; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + \ + Xf=(float)(Ri-Ti-1)*Ax + (float)Ti*Bx; \ + Yf=Vr+(float)(Ri-Ti-1)*Ay + (float)Ti*Ay; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + \ + } \ + Xf=(float)Ri*Bx; \ + Yf=Vr+(float)Ri*Ay; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + glEnd(); \ + } \ +} + +#define SQUARE(Edge, Amp, Divisions, Z) \ +{ \ + int Xi,Yi; \ + GLfloat Xf,Yf,Y,Xf2,Yf2,Y2,Xa,Yb; \ + GLfloat Factor,Factor1,Factor2; \ + GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ + GLfloat Zf=(Edge)*(Z); \ + GLfloat AmpVr2=(Amp)/sqr((Edge)*SQRT2/2); \ + \ + for (Yi=0; Yi<(Divisions); Yi++) { \ + Yf=-((Edge)/2.0) + ((float)Yi)/(Divisions)*(Edge); \ + Yf2=sqr(Yf); \ + Y=Yf+1.0/(Divisions)*(Edge); \ + Y2=sqr(Y); \ + glBegin(GL_QUAD_STRIP); \ + for (Xi=0; Xi<=(Divisions); Xi++) { \ + Xf=-((Edge)/2.0) + ((float)Xi)/(Divisions)*(Edge); \ + Xf2=sqr(Xf); \ + \ + Xa=Xf+0.001; Yb=Y+0.001; \ + Factor=1-((Xf2+Y2)*AmpVr2); \ + Factor1=1-((sqr(Xa)+Y2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Y; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Y-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-((Xf2+Yf2)*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + } \ + glEnd(); \ + } \ +} + +#define PENTAGON(Edge, Amp, Divisions, Z) \ +{ \ + int Ri,Ti,Fi; \ + GLfloat Xf,Yf,Xa,Yb,Xf2,Yf2; \ + GLfloat x[6],y[6]; \ + GLfloat Factor,Factor1,Factor2; \ + GLfloat VertX,VertY,VertZ,NeiAX,NeiAY,NeiAZ,NeiBX,NeiBY,NeiBZ; \ + GLfloat Zf=(Edge)*(Z); \ + GLfloat AmpVr2=(Amp)/sqr((Edge)*cossec36_2); \ + \ + for(Fi=0;Fi<6;Fi++) { \ + x[Fi]=-cos( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \ + y[Fi]=sin( Fi*2*Pi/5 + Pi/10 )/(Divisions)*cossec36_2*(Edge); \ + } \ + \ + for (Ri=1; Ri<=(Divisions); Ri++) { \ + for (Fi=0; Fi<5; Fi++) { \ + glBegin(GL_TRIANGLE_STRIP); \ + for (Ti=0; Ti<Ri; Ti++) { \ + Xf=(float)(Ri-Ti)*x[Fi] + (float)Ti*x[Fi+1]; \ + Yf=(float)(Ri-Ti)*y[Fi] + (float)Ti*y[Fi+1]; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + \ + Xf=(float)(Ri-Ti-1)*x[Fi] + (float)Ti*x[Fi+1]; \ + Yf=(float)(Ri-Ti-1)*y[Fi] + (float)Ti*y[Fi+1]; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + \ + } \ + Xf=(float)Ri*x[Fi+1]; \ + Yf=(float)Ri*y[Fi+1]; \ + Xa=Xf+0.001; Yb=Yf+0.001; \ + Factor=1-(((Xf2=sqr(Xf))+(Yf2=sqr(Yf)))*AmpVr2); \ + Factor1=1-((sqr(Xa)+Yf2)*AmpVr2); \ + Factor2=1-((Xf2+sqr(Yb))*AmpVr2); \ + VertX=Factor*Xf; VertY=Factor*Yf; VertZ=Factor*Zf; \ + NeiAX=Factor1*Xa-VertX; NeiAY=Factor1*Yf-VertY; NeiAZ=Factor1*Zf-VertZ; \ + NeiBX=Factor2*Xf-VertX; NeiBY=Factor2*Yb-VertY; NeiBZ=Factor2*Zf-VertZ; \ + glNormal3f(VectMul(NeiAX, NeiAY, NeiAZ, NeiBX, NeiBY, NeiBZ)); \ + glVertex3f(VertX, VertY, VertZ); \ + glEnd(); \ + } \ + } \ +} + +static void draw_tetra( void ) +{ + GLuint list; + + list = glGenLists( 1 ); + glNewList( list, GL_COMPILE ); + TRIANGLE(2,seno,edgedivisions,0.5/SQRT6); + glEndList(); + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,0,1); + glRotatef(-tetraangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+tetraangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+tetraangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]); + glCallList(list); + + glDeleteLists(list,1); +} + +static void draw_cube( void ) +{ + GLuint list; + + list = glGenLists( 1 ); + glNewList( list, GL_COMPILE ); + SQUARE(2, seno, edgedivisions, 0.5) + glEndList(); + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]); + glCallList(list); + glRotatef(cubeangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]); + glCallList(list); + glRotatef(cubeangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]); + glCallList(list); + glRotatef(cubeangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]); + glCallList(list); + glRotatef(cubeangle,0,1,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]); + glCallList(list); + glRotatef(2*cubeangle,0,1,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]); + glCallList(list); + + glDeleteLists(list,1); +} + +static void draw_octa( void ) +{ + GLuint list; + + list = glGenLists( 1 ); + glNewList( list, GL_COMPILE ); + TRIANGLE(2,seno,edgedivisions,1/SQRT6); + glEndList(); + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,0,1); + glRotatef(-180+octaangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-octaangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-octaangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]); + glCallList(list); + glPopMatrix(); + glRotatef(180,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,0,1); + glRotatef(-180+octaangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-octaangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-octaangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]); + glCallList(list); + + glDeleteLists(list,1); +} + +static void draw_dodeca( void ) +{ + GLuint list; + +#define TAU ((SQRT5+1)/2) + + list = glGenLists( 1 ); + glNewList( list, GL_COMPILE ); + PENTAGON(1,seno,edgedivisions,sqr(TAU) * sqrt((TAU+2)/5) / 2); + glEndList(); + + glPushMatrix(); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]); + glCallList(list); + glRotatef(180,0,0,1); + glPushMatrix(); + glRotatef(-dodecaangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(-dodecaangle,cos72,sin72,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(-dodecaangle,cos72,-sin72,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(dodecaangle,cos36,-sin36,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]); + glCallList(list); + glPopMatrix(); + glRotatef(dodecaangle,cos36,sin36,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]); + glCallList(list); + glPopMatrix(); + glRotatef(180,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]); + glCallList(list); + glRotatef(180,0,0,1); + glPushMatrix(); + glRotatef(-dodecaangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(-dodecaangle,cos72,sin72,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[8]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(-dodecaangle,cos72,-sin72,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[9]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(dodecaangle,cos36,-sin36,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[10]); + glCallList(list); + glPopMatrix(); + glRotatef(dodecaangle,cos36,sin36,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[11]); + glCallList(list); + + glDeleteLists(list,1); +} + +static void draw_ico( void ) +{ + GLuint list; + + list = glGenLists( 1 ); + glNewList( list, GL_COMPILE ); + TRIANGLE(1.5,seno,edgedivisions,(3*SQRT3+SQRT15)/12); + glEndList(); + + glPushMatrix(); + + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[0]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[1]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[2]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[3]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[4]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[5]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[6]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[7]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[8]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[9]); + glCallList(list); + glPopMatrix(); + glRotatef(180,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[10]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[11]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[12]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[13]); + glCallList(list); + glPopMatrix(); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[14]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[15]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[16]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[17]); + glCallList(list); + glPushMatrix(); + glRotatef(180,0,1,0); + glRotatef(-180+icoangle,0.5,-SQRT3/2,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[18]); + glCallList(list); + glPopMatrix(); + glRotatef(180,0,0,1); + glRotatef(-icoangle,1,0,0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, MaterialColor[19]); + glCallList(list); + + glDeleteLists(list,1); +} + +static void draw ( void ) { + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glPushMatrix(); + + glTranslatef( 0.0, 0.0, -10.0 ); + glScalef( Scale*WindH/WindW, Scale, Scale ); + glTranslatef(2.5*WindW/WindH*sin(step*1.11),2.5*cos(step*1.25*1.11),0); + glRotatef(step*100,1,0,0); + glRotatef(step*95,0,1,0); + glRotatef(step*90,0,0,1); + + seno=(sin(step)+1.0/3.0)*(4.0/5.0)*Magnitude; + + draw_object(); + + glPopMatrix(); + + glFlush(); + + glutSwapBuffers(); + + step += dt; +} + +static void idle_( void ) +{ + glutPostRedisplay(); +} + +static void reshape( int width, int height ) +{ + glViewport(0, 0, WindW=(GLint)width, WindH=(GLint)height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 ); + glMatrixMode(GL_MODELVIEW); +} + +static void pinit(void); + +static void key( unsigned char k, int x, int y ) +{ + (void) x; + (void) y; + switch (k) { + case '1': object=1; break; + case '2': object=2; break; + case '3': object=3; break; + case '4': object=4; break; + case '5': object=5; break; + case ' ': mono^=1; break; + case 13: smooth^=1; break; + case 27: + exit(0); + } + pinit(); +} + +static void pinit(void) +{ + switch(object) { + case 1: + draw_object=draw_tetra; + MaterialColor[0]=MaterialRed; + MaterialColor[1]=MaterialGreen; + MaterialColor[2]=MaterialBlue; + MaterialColor[3]=MaterialWhite; + edgedivisions=tetradivisions; + Magnitude=2.5; + break; + case 2: + draw_object=draw_cube; + MaterialColor[0]=MaterialRed; + MaterialColor[1]=MaterialGreen; + MaterialColor[2]=MaterialCyan; + MaterialColor[3]=MaterialMagenta; + MaterialColor[4]=MaterialYellow; + MaterialColor[5]=MaterialBlue; + edgedivisions=cubedivisions; + Magnitude=2.0; + break; + case 3: + draw_object=draw_octa; + MaterialColor[0]=MaterialRed; + MaterialColor[1]=MaterialGreen; + MaterialColor[2]=MaterialBlue; + MaterialColor[3]=MaterialWhite; + MaterialColor[4]=MaterialCyan; + MaterialColor[5]=MaterialMagenta; + MaterialColor[6]=MaterialGray; + MaterialColor[7]=MaterialYellow; + edgedivisions=octadivisions; + Magnitude=2.5; + break; + case 4: + draw_object=draw_dodeca; + MaterialColor[ 0]=MaterialRed; + MaterialColor[ 1]=MaterialGreen; + MaterialColor[ 2]=MaterialCyan; + MaterialColor[ 3]=MaterialBlue; + MaterialColor[ 4]=MaterialMagenta; + MaterialColor[ 5]=MaterialYellow; + MaterialColor[ 6]=MaterialGreen; + MaterialColor[ 7]=MaterialCyan; + MaterialColor[ 8]=MaterialRed; + MaterialColor[ 9]=MaterialMagenta; + MaterialColor[10]=MaterialBlue; + MaterialColor[11]=MaterialYellow; + edgedivisions=dodecadivisions; + Magnitude=2.0; + break; + case 5: + draw_object=draw_ico; + MaterialColor[ 0]=MaterialRed; + MaterialColor[ 1]=MaterialGreen; + MaterialColor[ 2]=MaterialBlue; + MaterialColor[ 3]=MaterialCyan; + MaterialColor[ 4]=MaterialYellow; + MaterialColor[ 5]=MaterialMagenta; + MaterialColor[ 6]=MaterialRed; + MaterialColor[ 7]=MaterialGreen; + MaterialColor[ 8]=MaterialBlue; + MaterialColor[ 9]=MaterialWhite; + MaterialColor[10]=MaterialCyan; + MaterialColor[11]=MaterialYellow; + MaterialColor[12]=MaterialMagenta; + MaterialColor[13]=MaterialRed; + MaterialColor[14]=MaterialGreen; + MaterialColor[15]=MaterialBlue; + MaterialColor[16]=MaterialCyan; + MaterialColor[17]=MaterialYellow; + MaterialColor[18]=MaterialMagenta; + MaterialColor[19]=MaterialGray; + edgedivisions=icodivisions; + Magnitude=2.5; + break; + } + if (mono) { + int loop; + for (loop=0; loop<20; loop++) MaterialColor[loop]=MaterialGray; + } + if (smooth) { + glShadeModel( GL_SMOOTH ); + } else { + glShadeModel( GL_FLAT ); + } + +} + +static void INIT(void) +{ + printf("Morph 3D - Shows morphing platonic polyhedra\n"); + printf("Author: Marcelo Fernandes Vianna (vianna@cat.cbpf.br)\n\n"); + printf(" [1] - Tetrahedron\n"); + printf(" [2] - Hexahedron (Cube)\n"); + printf(" [3] - Octahedron\n"); + printf(" [4] - Dodecahedron\n"); + printf(" [5] - Icosahedron\n"); + printf("[SPACE] - Toggle colored faces\n"); + printf("[RETURN] - Toggle smooth/flat shading\n"); + printf(" [ESC] - Quit\n"); + + object=1; + + glutInitWindowPosition(0,0); + glutInitWindowSize(640,480); + + glutInitDisplayMode( GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB ); + + if (glutCreateWindow("Morph 3D - Shows morphing platonic polyhedra") <= 0) { + exit(0); + } + + glClearDepth(1.0); + glClearColor( 0.0, 0.0, 0.0, 1.0 ); + glColor3f( 1.0, 1.0, 1.0 ); + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glFlush(); + glutSwapBuffers(); + + glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); + glLightfv(GL_LIGHT0, GL_POSITION, position0); + glLightfv(GL_LIGHT1, GL_AMBIENT, ambient); + glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse); + glLightfv(GL_LIGHT1, GL_POSITION, position1); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); + glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glEnable(GL_LIGHT1); + glEnable(GL_DEPTH_TEST); + glEnable(GL_NORMALIZE); + + glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, front_shininess); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, front_specular); + + glHint(GL_FOG_HINT, GL_FASTEST); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); + glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); + + pinit(); + + glutReshapeFunc( reshape ); + glutKeyboardFunc( key ); + glutIdleFunc( idle_ ); + glutDisplayFunc( draw ); + glutMainLoop(); + +} + +int main(int argc, char **argv) +{ + INIT(); + return(0); +} diff --git a/progs/demos/multiarb.c b/progs/demos/multiarb.c new file mode 100644 index 000000000..d963985c6 --- /dev/null +++ b/progs/demos/multiarb.c @@ -0,0 +1,345 @@ + +/* + * GL_ARB_multitexture demo + * + * Command line options: + * -info print GL implementation information + * + * + * Brian Paul November 1998 This program is in the public domain. + * Modified on 12 Feb 2002 for > 2 texture units. + */ + + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define TEXTURE_1_FILE "../images/girl.rgb" +#define TEXTURE_2_FILE "../images/reflect.rgb" + +#define TEX0 1 +#define TEX7 8 +#define ANIMATE 10 +#define QUIT 100 + +static GLboolean Animate = GL_TRUE; +static GLint NumUnits = 1; +static GLboolean TexEnabled[8]; + +static GLfloat Drift = 0.0; +static GLfloat drift_increment = 0.005; +static GLfloat Xrot = 20.0, Yrot = 30.0, Zrot = 0.0; + + +static void Idle( void ) +{ + if (Animate) { + GLint i; + + Drift += drift_increment; + if (Drift >= 1.0) + Drift = 0.0; + + for (i = 0; i < NumUnits; i++) { + glActiveTextureARB(GL_TEXTURE0_ARB + i); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + if (i == 0) { + glTranslatef(Drift, 0.0, 0.0); + glScalef(2, 2, 1); + } + else if (i == 1) { + glTranslatef(0.0, Drift, 0.0); + } + else { + glTranslatef(0.5, 0.5, 0.0); + glRotatef(180.0 * Drift, 0, 0, 1); + glScalef(1.0/i, 1.0/i, 1.0/i); + glTranslatef(-0.5, -0.5, 0.0); + } + } + glMatrixMode(GL_MODELVIEW); + + glutPostRedisplay(); + } +} + + +static void DrawObject(void) +{ + GLint i; + GLint j; + static const GLfloat tex_coords[] = { 0.0, 0.0, 1.0, 1.0, 0.0 }; + static const GLfloat vtx_coords[] = { -1.0, -1.0, 1.0, 1.0, -1.0 }; + + if (!TexEnabled[0] && !TexEnabled[1]) + glColor3f(0.1, 0.1, 0.1); /* add onto this */ + else + glColor3f(1, 1, 1); /* modulate this */ + + glBegin(GL_QUADS); + + /* Toggle between the vector and scalar entry points. This is done purely + * to hit multiple paths in the driver. + */ + if ( Drift > 0.49 ) { + for (j = 0; j < 4; j++ ) { + for (i = 0; i < NumUnits; i++) + glMultiTexCoord2fARB(GL_TEXTURE0_ARB + i, + tex_coords[j], tex_coords[j+1]); + glVertex2f( vtx_coords[j], vtx_coords[j+1] ); + } + } + else { + for (j = 0; j < 4; j++ ) { + for (i = 0; i < NumUnits; i++) + glMultiTexCoord2fvARB(GL_TEXTURE0_ARB + i, & tex_coords[j]); + glVertex2fv( & vtx_coords[j] ); + } + } + + glEnd(); +} + + + +static void Display( void ) +{ + static GLint T0 = 0; + static GLint Frames = 0; + GLint t; + + glClear( GL_COLOR_BUFFER_BIT ); + + glPushMatrix(); + glRotatef(Xrot, 1.0, 0.0, 0.0); + glRotatef(Yrot, 0.0, 1.0, 0.0); + glRotatef(Zrot, 0.0, 0.0, 1.0); + glScalef(5.0, 5.0, 5.0); + DrawObject(); + glPopMatrix(); + + glutSwapBuffers(); + + Frames++; + + t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 250) { + GLfloat seconds = (t - T0) / 1000.0; + drift_increment = 2.2 * seconds / Frames; + T0 = t; + Frames = 0; + } +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 10.0, 100.0 ); + /*glOrtho( -6.0, 6.0, -6.0, 6.0, 10.0, 100.0 );*/ + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -70.0 ); +} + + +static void ModeMenu(int entry) +{ + if (entry >= TEX0 && entry <= TEX7) { + /* toggle */ + GLint i = entry - TEX0; + TexEnabled[i] = !TexEnabled[i]; + glActiveTextureARB(GL_TEXTURE0_ARB + i); + if (TexEnabled[i]) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + printf("Enabled: "); + for (i = 0; i < NumUnits; i++) + printf("%d ", (int) TexEnabled[i]); + printf("\n"); + } + else if (entry==ANIMATE) { + Animate = !Animate; + } + else if (entry==QUIT) { + exit(0); + } + + glutPostRedisplay(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + float step = 3.0; + (void) x; + (void) y; + + switch (key) { + case GLUT_KEY_UP: + Xrot += step; + break; + case GLUT_KEY_DOWN: + Xrot -= step; + break; + case GLUT_KEY_LEFT: + Yrot += step; + break; + case GLUT_KEY_RIGHT: + Yrot -= step; + break; + } + glutPostRedisplay(); +} + + +static void Init( int argc, char *argv[] ) +{ + GLuint texObj[8]; + GLint size, i; + + const char *exten = (const char *) glGetString(GL_EXTENSIONS); + if (!strstr(exten, "GL_ARB_multitexture")) { + printf("Sorry, GL_ARB_multitexture not supported by this renderer.\n"); + exit(1); + } + + glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &NumUnits); + printf("%d texture units supported\n", NumUnits); + if (NumUnits > 8) + NumUnits = 8; + + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size); + printf("%d x %d max texture size\n", size, size); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + for (i = 0; i < NumUnits; i++) { + if (i < 2) + TexEnabled[i] = GL_TRUE; + else + TexEnabled[i] = GL_FALSE; + } + + /* allocate two texture objects */ + glGenTextures(NumUnits, texObj); + + /* setup the texture objects */ + for (i = 0; i < NumUnits; i++) { + + glActiveTextureARB(GL_TEXTURE0_ARB + i); + glBindTexture(GL_TEXTURE_2D, texObj[i]); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + if (i == 0) { + if (!LoadRGBMipmaps(TEXTURE_1_FILE, GL_RGB)) { + printf("Error: couldn't load texture image\n"); + exit(1); + } + } + else if (i == 1) { + if (!LoadRGBMipmaps(TEXTURE_2_FILE, GL_RGB)) { + printf("Error: couldn't load texture image\n"); + exit(1); + } + } + else { + /* checker */ + GLubyte image[8][8][3]; + GLint i, j; + for (i = 0; i < 8; i++) { + for (j = 0; j < 8; j++) { + if ((i + j) & 1) { + image[i][j][0] = 50; + image[i][j][1] = 50; + image[i][j][2] = 50; + } + else { + image[i][j][0] = 25; + image[i][j][1] = 25; + image[i][j][2] = 25; + } + } + } + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, + GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) image); + } + + /* Bind texObj[i] to ith texture unit */ + if (i < 2) + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + else + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); + + if (TexEnabled[i]) + glEnable(GL_TEXTURE_2D); + } + + glShadeModel(GL_FLAT); + glClearColor(0.3, 0.3, 0.4, 1.0); + + if (argc > 1 && strcmp(argv[1], "-info")==0) { + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); + printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); + } +} + + +int main( int argc, char *argv[] ) +{ + GLint i; + + glutInit( &argc, argv ); + glutInitWindowSize( 300, 300 ); + glutInitWindowPosition( 0, 0 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + glutCreateWindow(argv[0] ); + + Init( argc, argv ); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutCreateMenu(ModeMenu); + + for (i = 0; i < NumUnits; i++) { + char s[100]; + sprintf(s, "Toggle Texture %d", i); + glutAddMenuEntry(s, TEX0 + i); + } + glutAddMenuEntry("Toggle Animation", ANIMATE); + glutAddMenuEntry("Quit", QUIT); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/occlude.c b/progs/demos/occlude.c new file mode 100644 index 000000000..8f7b90984 --- /dev/null +++ b/progs/demos/occlude.c @@ -0,0 +1,234 @@ +/* + * GL_HP_occlustion_test demo + * + * Brian Paul + * 31 March 2000 + * + * Copyright (C) 2000 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <GL/glut.h> +#include <GL/glext.h> + + +static GLfloat Xpos = 0; +static GLboolean Anim = GL_TRUE; + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + + + +static void Idle(void) +{ + static int lastTime = 0; + static int sign = +1; + int time = glutGet(GLUT_ELAPSED_TIME); + float step; + + if (lastTime == 0) + lastTime = time; + else if (time - lastTime < 20) /* 50Hz update */ + return; + + step = (time - lastTime) / 1000.0 * sign; + lastTime = time; + + Xpos += step; + + if (Xpos > 2.5) { + Xpos = 2.5; + sign = -1; + } + else if (Xpos < -2.5) { + Xpos = -2.5; + sign = +1; + } + glutPostRedisplay(); +} + + +static void Display( void ) +{ + GLboolean result; + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -15.0 ); + + /* draw the occluding polygons */ + glColor3f(0, 0.6, 0.8); + glBegin(GL_QUADS); + glVertex2f(-1.6, -1.5); + glVertex2f(-0.4, -1.5); + glVertex2f(-0.4, 1.5); + glVertex2f(-1.6, 1.5); + + glVertex2f( 0.4, -1.5); + glVertex2f( 1.6, -1.5); + glVertex2f( 1.6, 1.5); + glVertex2f( 0.4, 1.5); + glEnd(); + + /* draw the test polygon with occlusion testing */ + glPushMatrix(); + glTranslatef(Xpos, 0, -0.5); + glScalef(0.3, 0.3, 1.0); + glRotatef(-90.0 * Xpos, 0, 0, 1); + + glEnable(GL_OCCLUSION_TEST_HP); /* NOTE: enabling the occlusion test */ + /* doesn't clear the result flag! */ + glColorMask(0, 0, 0, 0); + glDepthMask(GL_FALSE); + /* this call clear's the result flag. Not really needed for this demo. */ + glGetBooleanv(GL_OCCLUSION_TEST_RESULT_HP, &result); + + glBegin(GL_POLYGON); + glVertex3f(-1, -1, 0); + glVertex3f( 1, -1, 0); + glVertex3f( 1, 1, 0); + glVertex3f(-1, 1, 0); + glEnd(); + + glGetBooleanv(GL_OCCLUSION_TEST_RESULT_HP, &result); + /* turn off occlusion testing */ + glDisable(GL_OCCLUSION_TEST_HP); + glColorMask(1, 1, 1, 1); + glDepthMask(GL_TRUE); + + /* draw the green rect, so we can see what's going on */ + glColor3f(0.8, 0.5, 0); + glBegin(GL_POLYGON); + glVertex3f(-1, -1, 0); + glVertex3f( 1, -1, 0); + glVertex3f( 1, 1, 0); + glVertex3f(-1, 1, 0); + glEnd(); + + glPopMatrix(); + + + /* Print result message */ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + glColor3f(1, 1, 1); + glRasterPos3f(-0.25, -0.7, 0); + + if (result) + PrintString(" Visible"); + else + PrintString("Fully Occluded"); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 'a': + Anim = !Anim; + if (Anim) + glutIdleFunc( Idle ); + else + glutIdleFunc( NULL ); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + const GLfloat step = 0.1; + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_LEFT: + Xpos -= step; + break; + case GLUT_KEY_RIGHT: + Xpos += step; + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + const char *ext = (const char *) glGetString(GL_EXTENSIONS); + if (!strstr(ext, "GL_HP_occlusion_test")) { + printf("Sorry, this demo requires the GL_HP_occlusion_test extension\n"); + exit(-1); + } + + glEnable(GL_DEPTH_TEST); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 400, 400 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutIdleFunc( Idle ); + glutDisplayFunc( Display ); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/paltex.c b/progs/demos/paltex.c new file mode 100644 index 000000000..aa9c0da36 --- /dev/null +++ b/progs/demos/paltex.c @@ -0,0 +1,270 @@ + +/* + * Paletted texture demo. Written by Brian Paul. + * This program is in the public domain. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#ifdef _WIN32 +#include <windows.h> +#endif +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + +static float Rot = 0.0; +static GLboolean Anim = 1; + + +static void Idle( void ) +{ + float t = glutGet(GLUT_ELAPSED_TIME) * 0.001; /* in seconds */ + Rot = t * 360 / 4; /* 1 rotation per 4 seconds */ + glutPostRedisplay(); +} + + +static void Display( void ) +{ + /* draw background gradient */ + glDisable(GL_TEXTURE_2D); + glBegin(GL_POLYGON); + glColor3f(1.0, 0.0, 0.2); glVertex2f(-1.5, -1.0); + glColor3f(1.0, 0.0, 0.2); glVertex2f( 1.5, -1.0); + glColor3f(0.0, 0.0, 1.0); glVertex2f( 1.5, 1.0); + glColor3f(0.0, 0.0, 1.0); glVertex2f(-1.5, 1.0); + glEnd(); + + glPushMatrix(); + glRotatef(Rot, 0, 0, 1); + + glEnable(GL_TEXTURE_2D); + glBegin(GL_POLYGON); + glTexCoord2f(0, 1); glVertex2f(-1, -0.5); + glTexCoord2f(1, 1); glVertex2f( 1, -0.5); + glTexCoord2f(1, 0); glVertex2f( 1, 0.5); + glTexCoord2f(0, 0); glVertex2f(-1, 0.5); + glEnd(); + + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( -1.5, 1.5, -1.0, 1.0, -1.0, 1.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + case 's': + Rot += 0.5; + break; + case ' ': + Anim = !Anim; + if (Anim) + glutIdleFunc( Idle ); + else + glutIdleFunc( NULL ); + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ +#define HEIGHT 8 +#define WIDTH 32 + /* 257 = HEIGHT * WIDTH + 1 (for trailing '\0') */ + static char texture[257] = {"\ + \ + MMM EEEE SSS AAA \ + M M M E S S A A \ + M M M EEEE SS A A \ + M M M E SS AAAAA \ + M M E S S A A \ + M M EEEE SSS A A \ + " + }; + GLubyte table[256][4]; + + if (!glutExtensionSupported("GL_EXT_paletted_texture")) { + printf("Sorry, GL_EXT_paletted_texture not supported\n"); + exit(0); + } + + /* load the color table for each texel-index */ + memset(table, 0, 256*4); + table[' '][0] = 255; + table[' '][1] = 255; + table[' '][2] = 255; + table[' '][3] = 64; + table['M'][0] = 255; + table['M'][1] = 0; + table['M'][2] = 0; + table['M'][3] = 255; + table['E'][0] = 0; + table['E'][1] = 255; + table['E'][2] = 0; + table['E'][3] = 255; + table['S'][0] = 0; + table['S'][1] = 0; + table['S'][2] = 255; + table['S'][3] = 255; + table['A'][0] = 255; + table['A'][1] = 255; + table['A'][2] = 0; + table['A'][3] = 255; + +#ifdef GL_EXT_paletted_texture + +#if defined(GL_EXT_shared_texture_palette) && defined(USE_SHARED_PALETTE) + printf("Using shared palette\n"); + glColorTableEXT(GL_SHARED_TEXTURE_PALETTE_EXT, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ + glEnable(GL_SHARED_TEXTURE_PALETTE_EXT); +#else + glColorTableEXT(GL_TEXTURE_2D, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ +#endif + + glTexImage2D(GL_TEXTURE_2D, /* target */ + 0, /* level */ + GL_COLOR_INDEX8_EXT, /* internal format */ + WIDTH, HEIGHT, /* width, height */ + 0, /* border */ + GL_COLOR_INDEX, /* texture format */ + GL_UNSIGNED_BYTE, /* texture type */ + texture); /* the texture */ +#endif + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +#undef HEIGHT +#undef WIDTH +} + + + +/* + * Color ramp test + */ +static void Init2( void ) +{ +#define HEIGHT 32 +#define WIDTH 256 + static char texture[HEIGHT][WIDTH]; + GLubyte table[256][4]; + int i, j; + + if (!glutExtensionSupported("GL_EXT_paletted_texture")) { + printf("Sorry, GL_EXT_paletted_texture not supported\n"); + exit(0); + } + + for (j = 0; j < HEIGHT; j++) { + for (i = 0; i < WIDTH; i++) { + texture[j][i] = i; + } + } + + for (i = 0; i < 255; i++) { + table[i][0] = i; + table[i][1] = 0; + table[i][2] = 0; + table[i][3] = 255; + } + +#ifdef GL_EXT_paletted_texture + +#if defined(GL_EXT_shared_texture_palette) && defined(USE_SHARED_PALETTE) + printf("Using shared palette\n"); + glColorTableEXT(GL_SHARED_TEXTURE_PALETTE_EXT, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ + glEnable(GL_SHARED_TEXTURE_PALETTE_EXT); +#else + glColorTableEXT(GL_TEXTURE_2D, /* target */ + GL_RGBA, /* internal format */ + 256, /* table size */ + GL_RGBA, /* table format */ + GL_UNSIGNED_BYTE, /* table type */ + table); /* the color table */ +#endif + + glTexImage2D(GL_TEXTURE_2D, /* target */ + 0, /* level */ + GL_COLOR_INDEX8_EXT, /* internal format */ + WIDTH, HEIGHT, /* width, height */ + 0, /* border */ + GL_COLOR_INDEX, /* texture format */ + GL_UNSIGNED_BYTE, /* texture type */ + texture); /* teh texture */ +#endif + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 400, 300 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + + glutCreateWindow(argv[0]); + + Init(); + (void) Init2; /* silence warning */ + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutDisplayFunc( Display ); + if (Anim) + glutIdleFunc( Idle ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/particles.cxx b/progs/demos/particles.cxx new file mode 100644 index 000000000..b88c318e0 --- /dev/null +++ b/progs/demos/particles.cxx @@ -0,0 +1,219 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (humanware@plus.it) + * Humanware s.r.l. + */ + +#include <stdlib.h> + +#include "particles.h" + +#define vinit(a,i,j,k) {\ + (a)[0]=i;\ + (a)[1]=j;\ + (a)[2]=k;\ +} + +#define vadds(a,dt,b) {\ + (a)[0]+=(dt)*(b)[0];\ + (a)[1]+=(dt)*(b)[1];\ + (a)[2]+=(dt)*(b)[2];\ +} + +#define vequ(a,b) {\ + (a)[0]=(b)[0];\ + (a)[1]=(b)[1];\ + (a)[2]=(b)[2];\ +} + +#define vinter(a,dt,b,c) {\ + (a)[0]=(dt)*(b)[0]+(1.0-dt)*(c)[0];\ + (a)[1]=(dt)*(b)[1]+(1.0-dt)*(c)[1];\ + (a)[2]=(dt)*(b)[2]+(1.0-dt)*(c)[2];\ +} + +#define clamp(a) ((a) < 0.0 ? 0.0 : ((a) < 1.0 ? (a) : 1.0)) + +#define vclamp(v) {\ + (v)[0]=clamp((v)[0]);\ + (v)[1]=clamp((v)[1]);\ + (v)[2]=clamp((v)[2]);\ +} + + +float rainParticle::min[3]; +float rainParticle::max[3]; +float rainParticle::partLength=0.2f; + + +static float vrnd(void) +{ + return(((float)rand())/RAND_MAX); +} + + +particle::particle() +{ + age=0.0f; + + vinit(acc,0.0f,0.0f,0.0f); + vinit(vel,0.0f,0.0f,0.0f); + vinit(pos,0.0f,0.0f,0.0f); +} + +void particle::elapsedTime(float dt) +{ + age+=dt; + + vadds(vel,dt,acc); + + vadds(pos,dt,vel); +} + +///////////////////////////////////////// +// Particle System +///////////////////////////////////////// + +particleSystem::particleSystem() +{ + t=0.0f; + + part=NULL; + + particleNum=0; +} + +particleSystem::~particleSystem() +{ + if(part) + free(part); +} + +void particleSystem::addParticle(particle *p) +{ + if(!part) { + part=(particle **)calloc(1,sizeof(particle *)); + part[0]=p; + particleNum=1; + } else { + particleNum++; + part=(particle **)realloc(part,sizeof(particle *)*particleNum); + part[particleNum-1]=p; + } +} + +void particleSystem::reset(void) +{ + if(part) + free(part); + + t=0.0f; + + part=NULL; + + particleNum=0; +} + +void particleSystem::draw(void) +{ + if(!part) + return; + + part[0]->beginDraw(); + for(unsigned int i=0;i<particleNum;i++) + part[i]->draw(); + part[0]->endDraw(); +} + +void particleSystem::addTime(float dt) +{ + if(!part) + return; + + for(unsigned int i=0;i<particleNum;i++) { + part[i]->elapsedTime(dt); + part[i]->checkAge(); + } +} + +///////////////////////////////////////// +// Rain +///////////////////////////////////////// + +void rainParticle::init(void) +{ + age=0.0f; + + acc[0]=0.0f; + acc[1]=-0.98f; + acc[2]=0.0f; + + vel[0]=0.0f; + vel[1]=0.0f; + vel[2]=0.0f; + + oldpos[0]=pos[0]=min[0]+(max[0]-min[0])*vrnd(); + oldpos[1]=pos[1]=max[1]+0.2f*max[1]*vrnd(); + oldpos[2]=pos[2]=min[2]+(max[2]-min[2])*vrnd(); + + vadds(oldpos,-partLength,vel); +} + +rainParticle::rainParticle() +{ + init(); +} + +void rainParticle::setRainingArea(float minx, float miny, float minz, + float maxx, float maxy, float maxz) +{ + vinit(min,minx,miny,minz); + vinit(max,maxx,maxy,maxz); +} + +void rainParticle::setLength(float l) +{ + partLength=l; +} + +void rainParticle::draw(void) +{ + glColor4f(0.7f,0.95f,1.0f,0.0f); + glVertex3fv(oldpos); + + glColor4f(0.3f,0.7f,1.0f,1.0f); + glVertex3fv(pos); +} + +void rainParticle::checkAge(void) +{ + if(pos[1]<min[1]) + init(); +} + +void rainParticle::elapsedTime(float dt) +{ + particle::elapsedTime(dt); + + if(pos[0]<min[0]) + pos[0]=max[0]-(min[0]-pos[0]); + if(pos[2]<min[2]) + pos[2]=max[2]-(min[2]-pos[2]); + + if(pos[0]>max[0]) + pos[0]=min[0]+(pos[0]-max[0]); + if(pos[2]>max[2]) + pos[2]=min[2]+(pos[2]-max[2]); + + vequ(oldpos,pos); + vadds(oldpos,-partLength,vel); +} + +void rainParticle::randomHeight(void) +{ + pos[1]=(max[1]-min[1])*vrnd()+min[1]; + + oldpos[1]=pos[1]-partLength*vel[1]; +} diff --git a/progs/demos/particles.h b/progs/demos/particles.h new file mode 100644 index 000000000..a49dd691e --- /dev/null +++ b/progs/demos/particles.h @@ -0,0 +1,81 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (humanware@plus.it) + * Humanware s.r.l. + */ + +#ifndef PARTICLES_H +#define PARTICLES_H + +#include <GL/gl.h> + +class particle { + protected: + float age; // in seconds + float acc[3]; + float vel[3]; + float pos[3]; + + public: + particle(); + virtual ~particle() {}; + + virtual void beginDraw(void) {}; + virtual void draw(void)=0; + virtual void endDraw(void) {}; + + virtual void elapsedTime(float); + virtual void checkAge(void) {}; +}; + +class particleSystem { + protected: + particle **part; + + float t; + + unsigned long particleNum; + public: + particleSystem(); + ~particleSystem(); + + void addParticle(particle *); + + void reset(void); + + void draw(void); + + void addTime(float); +}; + +class rainParticle : public particle { + protected: + static float min[3]; + static float max[3]; + static float partLength; + + float oldpos[3]; + + void init(void); + public: + rainParticle(); + + static void setRainingArea(float, float, float, + float, float, float); + static void setLength(float); + static float getLength(void) { return partLength; }; + + void beginDraw(void) { glBegin(GL_LINES); }; + void draw(void); + void endDraw(void) { glEnd(); }; + + void elapsedTime(float); + + void checkAge(void); + + void randomHeight(void); +}; + +#endif diff --git a/progs/demos/pixeltex.c b/progs/demos/pixeltex.c new file mode 100644 index 000000000..03e653a45 --- /dev/null +++ b/progs/demos/pixeltex.c @@ -0,0 +1,210 @@ +/* + * GL_SGIS_pixel_texture demo + * + * Brian Paul + * 6 Apr 2000 + * + * Copyright (C) 2000 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * How this works: + * 1. We load the image into a 2D texture. + * 2. We generate a sequence of RGB images in which the R component + * is really the S texture coordinate and the G component is really + * the T texture coordinate. + * By warping the mapping from R to S and G to T we can get non-linear + * distortions. + * 3. Draw the warped image (a 2-D warping function) with pixel texgen + * enabled. + * 4. Loop over the warped images to animate. + * + * The pixel texgen extension can also be used to do color-space + * conversions. For example, we could convert YCR to RGB with a + * 3D texture map which takes YCR as the S,T,R texture coordinate and + * returns RGB texel values. + * + * You can use this extension in (at least) two ways: + * 1. glDrawPixels w/ color space conversion/warping + * 2. glDrawPixels to spatially warp another image in texture memory + * + * We're basically using glDrawPixels to draw a texture coordinate image. + */ + + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <GL/glut.h> +#include <GL/glext.h> +#include "readtex.h" + +#define TEXTURE_FILE "../images/girl.rgb" + +static int ImgWidth = 300, ImgHeight = 300; +#define FRAMES 20 +static GLubyte *ImgData[FRAMES]; +static GLint Frame = 0; + +static GLboolean TextureFlag = GL_TRUE; + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT ); + + if (TextureFlag) { + glEnable(GL_PIXEL_TEXTURE_SGIS); + glEnable(GL_TEXTURE_2D); + } + else { + glDisable(GL_PIXEL_TEXTURE_SGIS); + glDisable(GL_TEXTURE_2D); + } + + glColor3f(1, 1, 1); + glRasterPos2f(10, 10); + glDrawPixels(ImgWidth, ImgHeight, GL_RGB, GL_UNSIGNED_BYTE, ImgData[Frame]); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho(0, width, 0, height, -1, 1); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + TextureFlag = !TextureFlag; + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void Idle(void) +{ + Frame++; + if (Frame >= FRAMES) + Frame = 0; + glutPostRedisplay(); +} + + +static GLubyte warp(GLfloat s, int frame) +{ + static const GLfloat pi = 3.14159265; + static int halfFrame = FRAMES / 2; + GLfloat y, weight, v; + if (frame >= halfFrame) + frame = halfFrame - (frame - halfFrame); + y = sin(s * pi); + weight = (float) frame / (FRAMES-1); + v = y * (0.8 * weight + 0.2); + return (GLint) (v * 255.0F); +} + + +static void InitImage(void) +{ + int i, j, frame; + for (frame = 0; frame < FRAMES; frame++) { + ImgData[frame] = (GLubyte *) malloc(ImgWidth * ImgHeight * 3); + for (i = 0; i < ImgHeight; i++) { + for (j = 0; j < ImgWidth; j++) { + GLubyte *pixel = ImgData[frame] + (i * ImgWidth + j) * 3; + pixel[0] = warp((float) j / (ImgWidth - 0), frame); + pixel[1] = warp((float) i / (ImgHeight - 0), frame); + pixel[2] = 0.0; + } + } + } +} + + +static void Init( int argc, char *argv[] ) +{ + const char *exten = (const char *) glGetString(GL_EXTENSIONS); + if (!strstr(exten, "GL_SGIS_pixel_texture")) { + printf("Sorry, GL_SGIS_pixel_texture not supported by this renderer.\n"); + exit(1); + } + + /* linear filtering looks nicer, but it's slower, since it's in software */ +#if 1 + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); +#else + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +#endif + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) { + printf("Error: couldn't load texture image\n"); + exit(1); + } + + glClearColor(0.3, 0.3, 0.4, 1.0); + + InitImage(); + + printf("Hit SPACE to toggle pixel texgen\n"); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowSize( 330, 330 ); + glutInitWindowPosition( 0, 0 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + glutCreateWindow(argv[0] ); + + Init( argc, argv ); + + glutKeyboardFunc( Key ); + glutReshapeFunc( Reshape ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/pointblast.c b/progs/demos/pointblast.c new file mode 100644 index 000000000..715813f17 --- /dev/null +++ b/progs/demos/pointblast.c @@ -0,0 +1,498 @@ + +/* Copyright (c) Mark J. Kilgard, 1997. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +/* This example demonstrates how to render particle effects + with OpenGL. A cloud of pinkish/orange particles explodes with the + particles bouncing off the ground. When the EXT_point_parameters + is present , the particle size is attenuated based on eye distance. */ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> /* for cos(), sin(), and sqrt() */ +#ifdef _WIN32 +#include <windows.h> +#endif +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +/* Some <math.h> files do not define M_PI... */ +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +#if 0 /* For debugging. */ +#undef GL_EXT_point_parameters +#endif + +static GLfloat angle = -150; /* in degrees */ +static int spin = 0; +static int moving, begin; +static int newModel = 1; +static float theTime; +static int repeat = 1; +static int blend = 1; +int useMipmaps = 1; +int linearFiltering = 1; + +static GLfloat constant[3] = { 1/5.0, 0.0, 0.0 }; +static GLfloat linear[3] = { 0.0, 1/5.0, 0.0 }; +static GLfloat theQuad[3] = { 0.25, 0.0, 1/60.0 }; + +#define MAX_POINTS 2000 + +static int numPoints = 200; + +static GLfloat pointList[MAX_POINTS][3]; +static GLfloat pointTime[MAX_POINTS]; +static GLfloat pointVelocity[MAX_POINTS][2]; +static GLfloat pointDirection[MAX_POINTS][2]; +static int colorList[MAX_POINTS]; +static int animate = 1, motion = 0; + +static GLfloat colorSet[][4] = { + /* Shades of red. */ + { 0.7, 0.2, 0.4, 0.5 }, + { 0.8, 0.0, 0.7, 0.5 }, + { 1.0, 0.0, 0.0, 0.5 }, + { 0.9, 0.3, 0.6, 0.5 }, + { 1.0, 0.4, 0.0, 0.5 }, + { 1.0, 0.0, 0.5, 0.5 }, +}; + +#define NUM_COLORS (sizeof(colorSet)/sizeof(colorSet[0])) + +#define DEAD (NUM_COLORS+1) + + +#if 0 /* drand48 might be better on Unix machines */ +#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * drand48()) +#else +static float float_rand(void) { return rand() / (float) RAND_MAX; } +#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * float_rand()) +#endif + +#define MEAN_VELOCITY 3.0 +#define GRAVITY 2.0 + +/* Modeling units of ground extent in each X and Z direction. */ +#define EDGE 12 + +static void +makePointList(void) +{ + float angle, velocity, direction; + int i; + + motion = 1; + for (i=0; i<numPoints; i++) { + pointList[i][0] = 0.0; + pointList[i][1] = 0.0; + pointList[i][2] = 0.0; + pointTime[i] = 0.0; + angle = (RANDOM_RANGE(60.0, 70.0)) * M_PI/180.0; + direction = RANDOM_RANGE(0.0, 360.0) * M_PI/180.0; + pointDirection[i][0] = cos(direction); + pointDirection[i][1] = sin(direction); + velocity = MEAN_VELOCITY + RANDOM_RANGE(-0.8, 1.0); + pointVelocity[i][0] = velocity * cos(angle); + pointVelocity[i][1] = velocity * sin(angle); + colorList[i] = rand() % NUM_COLORS; + } + theTime = 0.0; +} + +static void +updatePointList(void) +{ + float distance; + int i; + + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + motion = 0; + for (i=0; i<numPoints; i++) { + distance = pointVelocity[i][0] * theTime; + + /* X and Z */ + pointList[i][0] = pointDirection[i][0] * distance; + pointList[i][2] = pointDirection[i][1] * distance; + + /* Z */ + pointList[i][1] = + (pointVelocity[i][1] - 0.5 * GRAVITY * pointTime[i])*pointTime[i]; + + /* If we hit the ground, bounce the point upward again. */ + if (pointList[i][1] <= 0.0) { + if (distance > EDGE) { + /* Particle has hit ground past the distance duration of + the particles. Mark particle as dead. */ + colorList[i] = NUM_COLORS; /* Not moving. */ + continue; + } + + pointVelocity[i][1] *= 0.8; /* 80% of previous up velocity. */ + pointTime[i] = 0.0; /* Reset the particles sense of up time. */ + } + motion = 1; + pointTime[i] += dt; + } + theTime += dt; + if (!motion && !spin) { + if (repeat) { + makePointList(); + } else { + glutIdleFunc(NULL); + } + } +} + +static void +idle(void) +{ + updatePointList(); + if (spin) { + angle += 0.3; + newModel = 1; + } + glutPostRedisplay(); +} + +static void +visible(int vis) +{ + if (vis == GLUT_VISIBLE) { + if (animate && (motion || spin)) { + glutIdleFunc(idle); + } + } else { + glutIdleFunc(NULL); + } +} + +static void +recalcModelView(void) +{ + glPopMatrix(); + glPushMatrix(); + glRotatef(angle, 0.0, 1.0, 0.0); + newModel = 0; +} + +static void +redraw(void) +{ + int i; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + if (newModel) + recalcModelView(); + + glDepthMask(GL_FALSE); + + /* Draw the floor. */ +/* glEnable(GL_TEXTURE_2D);*/ + glColor3f(0.5, 1.0, 0.5); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); + glVertex3f(-EDGE, -0.05, -EDGE); + glTexCoord2f(20.0, 0.0); + glVertex3f(EDGE, -0.05, -EDGE); + glTexCoord2f(20.0, 20.0); + glVertex3f(EDGE, -0.05, EDGE); + glTexCoord2f(0.0, 20.0); + glVertex3f(-EDGE, -0.05, EDGE); + glEnd(); + + /* Allow particles to blend with each other. */ + glDepthMask(GL_TRUE); + + if (blend) + glEnable(GL_BLEND); + + glDisable(GL_TEXTURE_2D); + glBegin(GL_POINTS); + for (i=0; i<numPoints; i++) { + /* Draw alive particles. */ + if (colorList[i] != DEAD) { + glColor4fv(colorSet[colorList[i]]); + glVertex3fv(pointList[i]); + } + } + glEnd(); + + glDisable(GL_BLEND); + + glutSwapBuffers(); +} + +/* ARGSUSED2 */ +static void +mouse(int button, int state, int x, int y) +{ + /* Scene can be spun around Y axis using left + mouse button movement. */ + if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { + moving = 1; + begin = x; + } + if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { + moving = 0; + } +} + +/* ARGSUSED1 */ +static void +mouseMotion(int x, int y) +{ + if (moving) { + angle = angle + (x - begin); + begin = x; + newModel = 1; + glutPostRedisplay(); + } +} + +static void +menu(int option) +{ + switch (option) { + case 0: + makePointList(); + break; +#ifdef GL_ARB_point_parameters + case 1: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, constant); + break; + case 2: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, linear); + break; + case 3: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); + break; +#endif + case 4: + blend = 1; + break; + case 5: + blend = 0; + break; +#ifdef GL_ARB_point_parameters + case 6: + glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0); + break; + case 7: + glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 10.0); + break; +#endif + case 8: + glEnable(GL_POINT_SMOOTH); + break; + case 9: + glDisable(GL_POINT_SMOOTH); + break; + case 10: + glPointSize(2.0); + break; + case 11: + glPointSize(4.0); + break; + case 12: + glPointSize(8.0); + break; + case 13: + spin = 1 - spin; + if (animate && (spin || motion)) { + glutIdleFunc(idle); + } else { + glutIdleFunc(NULL); + } + break; + case 14: + numPoints = 200; + break; + case 15: + numPoints = 500; + break; + case 16: + numPoints = 1000; + break; + case 17: + numPoints = 2000; + break; + case 666: + exit(0); + } + glutPostRedisplay(); +} + +/* ARGSUSED1 */ +static void +key(unsigned char c, int x, int y) +{ + switch (c) { + case 13: + animate = 1 - animate; /* toggle. */ + if (animate && (motion || spin)) { + glutIdleFunc(idle); + } else { + glutIdleFunc(NULL); + } + break; + case ' ': + animate = 1; + makePointList(); + glutIdleFunc(idle); + break; + case 27: + exit(0); + } +} + +/* Nice floor texture tiling pattern. */ +static char *circles[] = { + "....xxxx........", + "..xxxxxxxx......", + ".xxxxxxxxxx.....", + ".xxx....xxx.....", + "xxx......xxx....", + "xxx......xxx....", + "xxx......xxx....", + "xxx......xxx....", + ".xxx....xxx.....", + ".xxxxxxxxxx.....", + "..xxxxxxxx......", + "....xxxx........", + "................", + "................", + "................", + "................", +}; + +static void +makeFloorTexture(void) +{ + GLubyte floorTexture[16][16][3]; + GLubyte *loc; + int s, t; + + /* Setup RGB image for the texture. */ + loc = (GLubyte*) floorTexture; + for (t = 0; t < 16; t++) { + for (s = 0; s < 16; s++) { + if (circles[t][s] == 'x') { + /* Nice blue. */ + loc[0] = 0x1f; + loc[1] = 0x1f; + loc[2] = 0x8f; + } else { + /* Light gray. */ + loc[0] = 0xca; + loc[1] = 0xca; + loc[2] = 0xca; + } + loc += 3; + } + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + + if (useMipmaps) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16, + GL_RGB, GL_UNSIGNED_BYTE, floorTexture); + } else { + if (linearFiltering) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + } + glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0, + GL_RGB, GL_UNSIGNED_BYTE, floorTexture); + } +} + +int +main(int argc, char **argv) +{ + int i; + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); + glutInitWindowPosition(0, 0); + glutInitWindowSize(300, 300); + + for (i=1; i<argc; i++) { + if(!strcmp("-noms", argv[i])) { + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + printf("forcing no multisampling\n"); + } else if(!strcmp("-nomipmaps", argv[i])) { + useMipmaps = 0; + } else if(!strcmp("-nearest", argv[i])) { + linearFiltering = 0; + } + } + + glutCreateWindow("point burst"); + glutDisplayFunc(redraw); + glutMouseFunc(mouse); + glutMotionFunc(mouseMotion); + glutVisibilityFunc(visible); + glutKeyboardFunc(key); + glutCreateMenu(menu); + glutAddMenuEntry("Reset time", 0); + glutAddMenuEntry("Constant", 1); + glutAddMenuEntry("Linear", 2); + glutAddMenuEntry("Quadratic", 3); + glutAddMenuEntry("Blend on", 4); + glutAddMenuEntry("Blend off", 5); + glutAddMenuEntry("Threshold 1", 6); + glutAddMenuEntry("Threshold 10", 7); + glutAddMenuEntry("Point smooth on", 8); + glutAddMenuEntry("Point smooth off", 9); + glutAddMenuEntry("Point size 2", 10); + glutAddMenuEntry("Point size 4", 11); + glutAddMenuEntry("Point size 8", 12); + glutAddMenuEntry("Toggle spin", 13); + glutAddMenuEntry("200 points ", 14); + glutAddMenuEntry("500 points ", 15); + glutAddMenuEntry("1000 points ", 16); + glutAddMenuEntry("2000 points ", 17); + glutAddMenuEntry("Quit", 666); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + glEnable(GL_POINT_SMOOTH); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glPointSize(8.0); +#if GL_ARB_point_parameters + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +#endif + glMatrixMode(GL_PROJECTION); + gluPerspective( /* field of view in degree */ 40.0, + /* aspect ratio */ 1.0, + /* Z near */ 0.5, /* Z far */ 40.0); + glMatrixMode(GL_MODELVIEW); + gluLookAt(0.0, 1.0, 8.0, /* eye location */ + 0.0, 1.0, 0.0, /* center is at (0,0,0) */ + 0.0, 1.0, 0.); /* up is in postivie Y direction */ + glPushMatrix(); /* dummy push so we can pop on model + recalc */ + + makePointList(); + makeFloorTexture(); + + glutMainLoop(); + return 0; /* ANSI C requires main to return int. */ +} diff --git a/progs/demos/rain.cxx b/progs/demos/rain.cxx new file mode 100644 index 000000000..d19f049c5 --- /dev/null +++ b/progs/demos/rain.cxx @@ -0,0 +1,394 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (humanware@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> +#include <GL/glut.h> +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +#include "particles.h" +extern "C" { +#include "readtex.h" +} + +#ifdef _WIN32 +#include <windows.h> +#include <mmsystem.h> +#include "particles.cxx" +#include "readtex.c" +#endif + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen=1; +#endif + +static int WIDTH=640; +static int HEIGHT=480; +static int NUMPART=7500; + +#define FRAME 50 + +static float fogcolor[4]={1.0,1.0,1.0,1.0}; + +#define DIMP 40.0 +#define DIMTP 32.0 + +static float q[4][3]={ + {-DIMP,0.0,-DIMP}, + {DIMP,0.0,-DIMP}, + {DIMP,0.0,DIMP}, + {-DIMP,0.0,DIMP} +}; + +static float qt[4][2]={ + {-DIMTP,-DIMTP}, + {DIMTP,-DIMTP}, + {DIMTP,DIMTP}, + {-DIMTP,DIMTP} +}; + +static int win=0; + +static int fog=1; +static int help=1; + +static GLuint groundid; + +static float obs[3]={2.0,1.0,0.0}; +static float dir[3]; +static float v=0.0; +static float alpha=-90.0; +static float beta=90.0; + +static particleSystem *ps; + +static float gettime() +{ + static clock_t told=0; + clock_t tnew,ris; + + tnew=clock(); + + ris=tnew-told; + + told=tnew; + + return(ris/(float)CLOCKS_PER_SEC); +} + +static float gettimerain() +{ + static clock_t told=0; + clock_t tnew,ris; + + tnew=clock(); + + ris=tnew-told; + + told=tnew; + + return(ris/(float)CLOCKS_PER_SEC); +} + +static void calcposobs(void) +{ + dir[0]=sin(alpha*M_PI/180.0); + dir[2]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); + dir[1]=cos(beta*M_PI/180.0); + + obs[0]+=v*dir[0]; + obs[1]+=v*dir[1]; + obs[2]+=v*dir[2]; + + rainParticle::setRainingArea(obs[0]-7.0f,-0.2f,obs[2]-7.0f,obs[0]+7.0f,8.0f,obs[2]+7.0f); +} + +static void printstring(void *font, char *string) +{ + int len,i; + + len=(int)strlen(string); + for(i=0;i<len;i++) + glutBitmapCharacter(font,string[i]); +} + +static void reshape(int width, int height) +{ + WIDTH=width; + HEIGHT=height; + glViewport(0,0,(GLint)width,(GLint)height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(70.0,width/(float)height,0.1,30.0); + + glMatrixMode(GL_MODELVIEW); +} + +static void printhelp(void) +{ + glEnable(GL_BLEND); + glColor4f(0.0,0.0,0.0,0.5); + glRecti(40,40,600,440); + glDisable(GL_BLEND); + + glColor3f(1.0,0.0,0.0); + glRasterPos2i(300,420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Help"); + + glRasterPos2i(60,390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"h - Toggle Help"); + + glRasterPos2i(60,360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"f - Toggle Fog"); + glRasterPos2i(60,330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Arrow Keys - Rotate"); + glRasterPos2i(60,300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"a - Increase velocity"); + glRasterPos2i(60,270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"z - Decrease velocity"); + glRasterPos2i(60,240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"l - Increase rain length"); + glRasterPos2i(60,210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"k - Increase rain length"); +} + +static void drawrain(void) +{ + static int count=0; + static char frbuf[80]; + float fr; + + glEnable(GL_DEPTH_TEST); + + if(fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glDepthMask(GL_TRUE); + glClearColor(1.0,1.0,1.0,1.0); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + calcposobs(); + gluLookAt(obs[0],obs[1],obs[2], + obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], + 0.0,1.0,0.0); + + glColor4f(1.0,1.0,1.0,1.0); + + glEnable(GL_TEXTURE_2D); + + glBindTexture(GL_TEXTURE_2D,groundid); + glBegin(GL_QUADS); + glTexCoord2fv(qt[0]); + glVertex3fv(q[0]); + glTexCoord2fv(qt[1]); + glVertex3fv(q[1]); + glTexCoord2fv(qt[2]); + glVertex3fv(q[2]); + glTexCoord2fv(qt[3]); + glVertex3fv(q[3]); + glEnd(); + + // Particle System + + glDisable(GL_TEXTURE_2D); + glShadeModel(GL_SMOOTH); + glEnable(GL_BLEND); + + ps->draw(); + ps->addTime(gettimerain()); + + glShadeModel(GL_FLAT); + + + if((count % FRAME)==0) { + fr=gettime(); + sprintf(frbuf,"Frame rate: %f",FRAME/fr); + } + + glDisable(GL_TEXTURE_2D); + glDisable(GL_DEPTH_TEST); + glDisable(GL_FOG); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0,0.0,0.0); + glRasterPos2i(10,10); + printstring(GLUT_BITMAP_HELVETICA_18,frbuf); + glRasterPos2i(350,470); + printstring(GLUT_BITMAP_HELVETICA_10,"Rain V1.0 Written by David Bucciarelli (humanware@plus.it)"); + + if(help) + printhelp(); + + reshape(WIDTH,HEIGHT); + glPopMatrix(); + + glutSwapBuffers(); + + count++; +} + + +static void special(int key, int x, int y) +{ + switch (key) { + case GLUT_KEY_LEFT: + alpha+=2.0; + break; + case GLUT_KEY_RIGHT: + alpha-=2.0; + break; + case GLUT_KEY_DOWN: + beta-=2.0; + break; + case GLUT_KEY_UP: + beta+=2.0; + break; + } +} + +static void key(unsigned char key, int x, int y) +{ + switch (key) { + case 27: + exit(0); + break; + + case 'a': + v+=0.01; + break; + case 'z': + v-=0.01; + break; + + case 'l': + rainParticle::setLength(rainParticle::getLength()+0.025f); + break; + case 'k': + rainParticle::setLength(rainParticle::getLength()-0.025f); + break; + + case 'h': + help=(!help); + break; + case 'f': + fog=(!fog); + break; +#ifdef XMESA + case ' ': + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + fullscreen=(!fullscreen); + break; +#endif + } +} + +static void inittextures(void) +{ + GLubyte *img; + GLint width,height; + GLenum format; + GLenum gluerr; + + glGenTextures(1,&groundid); + glBindTexture(GL_TEXTURE_2D,groundid); + + if(!(img=LoadRGBImage("../images/s128.rgb",&width,&height,&format))){ + fprintf(stderr,"Error reading a texture.\n"); + exit(-1); + } + glPixelStorei(GL_UNPACK_ALIGNMENT,4); + if((gluerr=(GLenum)gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height,GL_RGB, + GL_UNSIGNED_BYTE, (GLvoid *)(img)))) { + fprintf(stderr,"GLULib%s\n",gluErrorString(gluerr)); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); +} + +static void initparticle(void) +{ + ps=new particleSystem; + + rainParticle::setRainingArea(-7.0f,-0.2f,-7.0f,7.0f,8.0f,7.0f); + + for(int i=0;i<NUMPART;i++) { + rainParticle *p=new rainParticle; + p->randomHeight(); + + ps->addParticle((particle *)p); + } +} + +int main(int ac,char **av) +{ + fprintf(stderr,"Rain V1.0\nWritten by David Bucciarelli (humanware@plus.it)\n"); + + /* Default settings */ + + WIDTH=640; + HEIGHT=480; + + glutInitWindowPosition(0,0); + glutInitWindowSize(WIDTH,HEIGHT); + glutInit(&ac,av); + + glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); + + if(!(win=glutCreateWindow("Rain"))) { + fprintf(stderr,"Error opening a window.\n"); + exit(-1); + } + + reshape(WIDTH,HEIGHT); + + inittextures(); + + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE,GL_EXP); + glFogfv(GL_FOG_COLOR,fogcolor); + glFogf(GL_FOG_DENSITY,0.1); +#ifdef FX + glHint(GL_FOG_HINT,GL_NICEST); +#endif + + initparticle(); + + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutDisplayFunc(drawrain); + glutIdleFunc(drawrain); + glutReshapeFunc(reshape); + glutMainLoop(); + + return(0); +} diff --git a/progs/demos/ray.c b/progs/demos/ray.c new file mode 100644 index 000000000..eb1d19f86 --- /dev/null +++ b/progs/demos/ray.c @@ -0,0 +1,902 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> + +#ifdef WIN32 +#include <windows.h> +#endif + +#include <GL/glut.h> + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +static int WIDTH = 640; +static int HEIGHT = 480; + +static GLint T0 = 0; +static GLint Frames = 0; + +#define BASESIZE 7.5f +#define SPHERE_RADIUS 0.75f + +#define TEX_CHECK_WIDTH 256 +#define TEX_CHECK_HEIGHT 256 +#define TEX_CHECK_SLOT_SIZE (TEX_CHECK_HEIGHT/16) +#define TEX_CHECK_NUMSLOT (TEX_CHECK_HEIGHT/TEX_CHECK_SLOT_SIZE) + +#define TEX_REFLECT_WIDTH 256 +#define TEX_REFLECT_HEIGHT 256 +#define TEX_REFLECT_SLOT_SIZE (TEX_REFLECT_HEIGHT/16) +#define TEX_REFLECT_NUMSLOT (TEX_REFLECT_HEIGHT/TEX_REFLECT_SLOT_SIZE) + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +#define EPSILON 0.0001 + +#define clamp255(a) ( (a)<(0.0f) ? (0.0f) : ((a)>(255.0f) ? (255.0f) : (a)) ) + +#define fabs(x) ((x)<0.0f?-(x):(x)) + +#define vequ(a,b) { (a)[0]=(b)[0]; (a)[1]=(b)[1]; (a)[2]=(b)[2]; } +#define vsub(a,b,c) { (a)[0]=(b)[0]-(c)[0]; (a)[1]=(b)[1]-(c)[1]; (a)[2]=(b)[2]-(c)[2]; } +#define dprod(a,b) ((a)[0]*(b)[0]+(a)[1]*(b)[1]+(a)[2]*(b)[2]) +#define vnormalize(a,b) { \ + register float m_norm; \ + m_norm=sqrt((double)dprod((a),(a))); \ + (a)[0] /=m_norm; \ + (a)[1] /=m_norm; \ + (a)[2] /=m_norm; } + +static GLubyte checkmap[TEX_CHECK_HEIGHT][TEX_CHECK_WIDTH][3]; +static GLuint checkid; +static int checkmap_currentslot = 0; + +static GLubyte reflectmap[TEX_REFLECT_HEIGHT][TEX_REFLECT_WIDTH][3]; +static GLuint reflectid; +static int reflectmap_currentslot = 0; + +static GLuint lightdlist; +static GLuint objdlist; + +static float lightpos[3] = { 2.1, 2.1, 2.8 }; +static float objpos[3] = { 0.0, 0.0, 1.0 }; + +static float sphere_pos[TEX_CHECK_HEIGHT][TEX_REFLECT_WIDTH][3]; + +static int win = 0; + +static float fogcolor[4] = { 0.05, 0.05, 0.05, 1.0 }; + +static float obs[3] = { 7.0, 0.0, 2.0 }; +static float dir[3]; +static float v = 0.0; +static float alpha = -90.0; +static float beta = 90.0; + +static int fog = 1; +static int bfcull = 1; +static int poutline = 0; +static int help = 1; +static int showcheckmap = 1; +static int showreflectmap = 1; +static int joyavailable = 0; +static int joyactive = 0; + +static void +calcposobs(void) +{ + dir[0] = sin(alpha * M_PI / 180.0); + dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[2] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + obs[0] += v * dir[0]; + obs[1] += v * dir[1]; + obs[2] += v * dir[2]; +} + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_LEFT: + alpha -= 2.0; + break; + case GLUT_KEY_RIGHT: + alpha += 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } +} + +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: + exit(0); + break; + + case 's': + lightpos[1] -= 0.1; + break; + case 'd': + lightpos[1] += 0.1; + break; + case 'e': + lightpos[0] -= 0.1; + break; + case 'x': + lightpos[0] += 0.1; + break; + case 'w': + lightpos[2] -= 0.1; + break; + case 'r': + lightpos[2] += 0.1; + break; + + case 'j': + objpos[1] -= 0.1; + break; + case 'k': + objpos[1] += 0.1; + break; + case 'i': + objpos[0] -= 0.1; + break; + case 'm': + objpos[0] += 0.1; + break; + case 'u': + objpos[2] -= 0.1; + break; + case 'o': + objpos[2] += 0.1; + break; + + case 'a': + v += 0.005; + break; + case 'z': + v -= 0.005; + break; + + case 'g': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + + case '1': + showcheckmap = (!showcheckmap); + break; + case '2': + showreflectmap = (!showreflectmap); + break; + + case 'b': + if (bfcull) { + glDisable(GL_CULL_FACE); + bfcull = 0; + } + else { + glEnable(GL_CULL_FACE); + bfcull = 1; + } + break; + case 'p': + if (poutline) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + poutline = 0; + } + else { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + poutline = 1; + } + break; +#ifdef XMESA + case ' ': + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + fullscreen = (!fullscreen); + break; +#endif + } +} + +static void +reshape(int w, int h) +{ + WIDTH = w; + HEIGHT = h; + glViewport(0, 0, w, h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0, w / (float) h, 0.8, 40.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +printhelp(void) +{ + glEnable(GL_BLEND); + glColor4f(0.5, 0.5, 0.5, 0.5); + glRecti(40, 40, 600, 440); + glDisable(GL_BLEND); + + glColor3f(0.0, 0.0, 1.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_HELVETICA_18, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_HELVETICA_12, "h - Toggle Help"); + glRasterPos2i(60, 370); + printstring(GLUT_BITMAP_HELVETICA_12, "f - Toggle Fog"); + glRasterPos2i(60, 350); + printstring(GLUT_BITMAP_HELVETICA_12, "b - Toggle Back face culling"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_HELVETICA_12, "p - Toggle Wire frame"); + glRasterPos2i(60, 310); + printstring(GLUT_BITMAP_HELVETICA_12, "Arrow Keys - Rotate"); + glRasterPos2i(60, 290); + printstring(GLUT_BITMAP_HELVETICA_12, "a - Increase velocity"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_HELVETICA_12, "z - Decrease velocity"); + + glRasterPos2i(60, 250); + if (joyavailable) + printstring(GLUT_BITMAP_HELVETICA_12, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_HELVETICA_12, + "(No Joystick control available)"); + + glRasterPos2i(60, 230); + printstring(GLUT_BITMAP_HELVETICA_12, + "To move the light source: s - left, d - right, e - far, x - near, w - down r - up"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_HELVETICA_12, + "To move the mirror sphere: j - left, k - right, i - far, m - near, u - down o - up"); + + glRasterPos2i(60, 190); + printstring(GLUT_BITMAP_HELVETICA_12, + "1 - Toggle the plane texture map window"); + + glRasterPos2i(60, 170); + printstring(GLUT_BITMAP_HELVETICA_12, + "2 - Toggle the sphere texture map window"); +} + +static GLboolean +seelight(float p[3], float dir[3]) +{ + float c[3], b, a, d, t, dist[3]; + + vsub(c, p, objpos); + b = -dprod(c, dir); + a = dprod(c, c) - SPHERE_RADIUS * SPHERE_RADIUS; + + if ((d = b * b - a) < 0.0 || (b < 0.0 && a > 0.0)) + return GL_FALSE; + + d = sqrt(d); + + t = b - d; + + if (t < EPSILON) { + t = b + d; + if (t < EPSILON) + return GL_FALSE; + } + + vsub(dist, lightpos, p); + if (dprod(dist, dist) < t * t) + return GL_FALSE; + + return GL_TRUE; +} + +static int +colorcheckmap(float ppos[3], float c[3]) +{ + static float norm[3] = { 0.0f, 0.0f, 1.0f }; + float ldir[3], vdir[3], h[3], dfact, kfact, r, g, b; + int x, y; + + x = (int) ((ppos[0] + BASESIZE / 2) * (10.0f / BASESIZE)); + if ((x < 0) || (x > 10)) + return GL_FALSE; + + y = (int) ((ppos[1] + BASESIZE / 2) * (10.0f / BASESIZE)); + if ((y < 0) || (y > 10)) + return GL_FALSE; + + r = 255.0f; + if (y & 1) { + if (x & 1) + g = 255.0f; + else + g = 0.0f; + } + else { + if (x & 1) + g = 0.0f; + else + g = 255.0f; + } + b = 0.0f; + + vsub(ldir, lightpos, ppos); + vnormalize(ldir, ldir); + + if (seelight(ppos, ldir)) { + c[0] = r * 0.05f; + c[1] = g * 0.05f; + c[2] = b * 0.05f; + + return GL_TRUE; + } + + dfact = dprod(ldir, norm); + if (dfact < 0.0f) + dfact = 0.0f; + + vsub(vdir, obs, ppos); + vnormalize(vdir, vdir); + h[0] = 0.5f * (vdir[0] + ldir[0]); + h[1] = 0.5f * (vdir[1] + ldir[1]); + h[2] = 0.5f * (vdir[2] + ldir[2]); + kfact = dprod(h, norm); + kfact = pow(kfact, 6.0) * 7.0 * 255.0; + + r = r * dfact + kfact; + g = g * dfact + kfact; + b = b * dfact + kfact; + + c[0] = clamp255(r); + c[1] = clamp255(g); + c[2] = clamp255(b); + + return GL_TRUE; +} + +static void +updatecheckmap(int slot) +{ + float c[3], ppos[3]; + int x, y; + + glBindTexture(GL_TEXTURE_2D, checkid); + + ppos[2] = 0.0f; + for (y = slot * TEX_CHECK_SLOT_SIZE; y < (slot + 1) * TEX_CHECK_SLOT_SIZE; + y++) { + ppos[1] = (y / (float) TEX_CHECK_HEIGHT) * BASESIZE - BASESIZE / 2; + + for (x = 0; x < TEX_CHECK_WIDTH; x++) { + ppos[0] = (x / (float) TEX_CHECK_WIDTH) * BASESIZE - BASESIZE / 2; + + colorcheckmap(ppos, c); + checkmap[y][x][0] = (GLubyte) c[0]; + checkmap[y][x][1] = (GLubyte) c[1]; + checkmap[y][x][2] = (GLubyte) c[2]; + } + } + + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, slot * TEX_CHECK_SLOT_SIZE, + TEX_CHECK_WIDTH, TEX_CHECK_SLOT_SIZE, GL_RGB, + GL_UNSIGNED_BYTE, + &checkmap[slot * TEX_CHECK_SLOT_SIZE][0][0]); + +} + +static void +updatereflectmap(int slot) +{ + float rf, r, g, b, t, dfact, kfact, rdir[3]; + float rcol[3], ppos[3], norm[3], ldir[3], h[3], vdir[3], planepos[3]; + int x, y; + + glBindTexture(GL_TEXTURE_2D, reflectid); + + for (y = slot * TEX_REFLECT_SLOT_SIZE; + y < (slot + 1) * TEX_REFLECT_SLOT_SIZE; y++) + for (x = 0; x < TEX_REFLECT_WIDTH; x++) { + ppos[0] = sphere_pos[y][x][0] + objpos[0]; + ppos[1] = sphere_pos[y][x][1] + objpos[1]; + ppos[2] = sphere_pos[y][x][2] + objpos[2]; + + vsub(norm, ppos, objpos); + vnormalize(norm, norm); + + vsub(ldir, lightpos, ppos); + vnormalize(ldir, ldir); + vsub(vdir, obs, ppos); + vnormalize(vdir, vdir); + + rf = 2.0f * dprod(norm, vdir); + if (rf > EPSILON) { + rdir[0] = rf * norm[0] - vdir[0]; + rdir[1] = rf * norm[1] - vdir[1]; + rdir[2] = rf * norm[2] - vdir[2]; + + t = -objpos[2] / rdir[2]; + + if (t > EPSILON) { + planepos[0] = objpos[0] + t * rdir[0]; + planepos[1] = objpos[1] + t * rdir[1]; + planepos[2] = 0.0f; + + if (!colorcheckmap(planepos, rcol)) + rcol[0] = rcol[1] = rcol[2] = 0.0f; + } + else + rcol[0] = rcol[1] = rcol[2] = 0.0f; + } + else + rcol[0] = rcol[1] = rcol[2] = 0.0f; + + dfact = 0.1f * dprod(ldir, norm); + + if (dfact < 0.0f) { + dfact = 0.0f; + kfact = 0.0f; + } + else { + h[0] = 0.5f * (vdir[0] + ldir[0]); + h[1] = 0.5f * (vdir[1] + ldir[1]); + h[2] = 0.5f * (vdir[2] + ldir[2]); + kfact = dprod(h, norm); + kfact = pow(kfact, 4.0); + if (kfact < 1.0e-10) + kfact = 0.0; + } + + r = dfact + kfact; + g = dfact + kfact; + b = dfact + kfact; + + r *= 255.0f; + g *= 255.0f; + b *= 255.0f; + + r += rcol[0]; + g += rcol[1]; + b += rcol[2]; + + r = clamp255(r); + g = clamp255(g); + b = clamp255(b); + + reflectmap[y][x][0] = (GLubyte) r; + reflectmap[y][x][1] = (GLubyte) g; + reflectmap[y][x][2] = (GLubyte) b; + } + + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, slot * TEX_REFLECT_SLOT_SIZE, + TEX_REFLECT_WIDTH, TEX_REFLECT_SLOT_SIZE, GL_RGB, + GL_UNSIGNED_BYTE, + &reflectmap[slot * TEX_REFLECT_SLOT_SIZE][0][0]); +} + +static void +drawbase(void) +{ + glColor3f(0.0, 0.0, 0.0); + glBindTexture(GL_TEXTURE_2D, checkid); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glBegin(GL_QUADS); + glTexCoord2f(0.0f, 0.0f); + glVertex3f(-BASESIZE / 2.0f, -BASESIZE / 2.0f, 0.0f); + + glTexCoord2f(1.0f, 0.0f); + glVertex3f(BASESIZE / 2.0f, -BASESIZE / 2.0f, 0.0f); + + glTexCoord2f(1.0f, 1.0f); + glVertex3f(BASESIZE / 2.0f, BASESIZE / 2.0f, 0.0f); + + glTexCoord2f(0.0f, 1.0f); + glVertex3f(-BASESIZE / 2.0f, BASESIZE / 2.0f, 0.0f); + + glEnd(); +} + +static void +drawobj(void) +{ + glColor3f(0.0, 0.0, 0.0); + glBindTexture(GL_TEXTURE_2D, reflectid); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glPushMatrix(); + glTranslatef(objpos[0], objpos[1], objpos[2]); + glCallList(objdlist); + glPopMatrix(); +} + +static void +dojoy(void) +{ +#ifdef WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha -= + 2.5 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.5 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.005; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.005; + } + } + else + joyavailable = 0; +#endif +} + +static void +updatemaps(void) +{ + updatecheckmap(checkmap_currentslot); + checkmap_currentslot = (checkmap_currentslot + 1) % TEX_CHECK_NUMSLOT; + + updatereflectmap(reflectmap_currentslot); + reflectmap_currentslot = + (reflectmap_currentslot + 1) % TEX_REFLECT_NUMSLOT; +} + +static void +draw(void) +{ + static char frbuf[80] = ""; + + dojoy(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glPushMatrix(); + calcposobs(); + + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 0.0, 1.0); + + drawbase(); + drawobj(); + + glColor3f(1.0, 1.0, 1.0); + glDisable(GL_TEXTURE_2D); + + glPushMatrix(); + glTranslatef(lightpos[0], lightpos[1], lightpos[2]); + glCallList(lightdlist); + glPopMatrix(); + + glPopMatrix(); + + glDisable(GL_DEPTH_TEST); + glDisable(GL_FOG); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + + glColor3f(0.0f, 0.3f, 1.0f); + + if (showcheckmap) { + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, checkid); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glBegin(GL_QUADS); + glTexCoord2f(1.0f, 0.0f); + glVertex2i(10, 30); + glTexCoord2f(1.0f, 1.0f); + glVertex2i(10 + 90, 30); + glTexCoord2f(0.0f, 1.0f); + glVertex2i(10 + 90, 30 + 90); + glTexCoord2f(0.0f, 0.0f); + glVertex2i(10, 30 + 90); + glEnd(); + + glDisable(GL_TEXTURE_2D); + glBegin(GL_LINE_LOOP); + glVertex2i(10, 30); + glVertex2i(10 + 90, 30); + glVertex2i(10 + 90, 30 + 90); + glVertex2i(10, 30 + 90); + glEnd(); + glRasterPos2i(105, 65); + printstring(GLUT_BITMAP_HELVETICA_18, "Plane Texture Map"); + } + + if (showreflectmap) { + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, reflectid); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + + glBegin(GL_QUADS); + glTexCoord2f(1.0f, 0.0f); + glVertex2i(540, 30); + glTexCoord2f(1.0f, 1.0f); + glVertex2i(540 + 90, 30); + glTexCoord2f(0.0f, 1.0f); + glVertex2i(540 + 90, 30 + 90); + glTexCoord2f(0.0f, 0.0f); + glVertex2i(540, 30 + 90); + glEnd(); + + glDisable(GL_TEXTURE_2D); + glBegin(GL_LINE_LOOP); + glVertex2i(540, 30); + glVertex2i(540 + 90, 30); + glVertex2i(540 + 90, 30 + 90); + glVertex2i(540, 30 + 90); + glEnd(); + glRasterPos2i(360, 65); + printstring(GLUT_BITMAP_HELVETICA_18, "Sphere Texture Map"); + } + + glDisable(GL_TEXTURE_2D); + + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(360, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "Ray V1.0 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if (help) + printhelp(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + updatemaps(); + + glutSwapBuffers(); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + +static void +inittextures(void) +{ + int y; + + glGenTextures(1, &checkid); + glBindTexture(GL_TEXTURE_2D, checkid); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage2D(GL_TEXTURE_2D, 0, 3, TEX_CHECK_WIDTH, TEX_CHECK_HEIGHT, + 0, GL_RGB, GL_UNSIGNED_BYTE, checkmap); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + for (y = 0; y < TEX_CHECK_NUMSLOT; y++) + updatecheckmap(y); + + + + glGenTextures(1, &reflectid); + glBindTexture(GL_TEXTURE_2D, reflectid); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage2D(GL_TEXTURE_2D, 0, 3, TEX_REFLECT_WIDTH, TEX_REFLECT_HEIGHT, + 0, GL_RGB, GL_UNSIGNED_BYTE, reflectmap); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + for (y = 0; y < TEX_REFLECT_NUMSLOT; y++) + updatereflectmap(y); + + +} + +static void +initspherepos(void) +{ + float alpha, beta, sa, ca, sb, cb; + int x, y; + + for (y = 0; y < TEX_REFLECT_HEIGHT; y++) { + beta = M_PI - y * (M_PI / TEX_REFLECT_HEIGHT); + + for (x = 0; x < TEX_REFLECT_WIDTH; x++) { + alpha = -x * (2.0f * M_PI / TEX_REFLECT_WIDTH); + + sa = sin(alpha); + ca = cos(alpha); + + sb = sin(beta); + cb = cos(beta); + + sphere_pos[y][x][0] = SPHERE_RADIUS * sa * sb; + sphere_pos[y][x][1] = SPHERE_RADIUS * ca * sb; + sphere_pos[y][x][2] = SPHERE_RADIUS * cb; + } + } +} + +static void +initdlists(void) +{ + GLUquadricObj *obj; + + obj = gluNewQuadric(); + + lightdlist = glGenLists(1); + glNewList(lightdlist, GL_COMPILE); + gluQuadricDrawStyle(obj, GLU_FILL); + gluQuadricNormals(obj, GLU_NONE); + gluQuadricTexture(obj, GL_TRUE); + gluSphere(obj, 0.25f, 6, 6); + glEndList(); + + objdlist = glGenLists(1); + glNewList(objdlist, GL_COMPILE); + gluQuadricDrawStyle(obj, GLU_FILL); + gluQuadricNormals(obj, GLU_NONE); + gluQuadricTexture(obj, GL_TRUE); + gluSphere(obj, SPHERE_RADIUS, 16, 16); + glEndList(); +} + +int +main(int ac, char **av) +{ + fprintf(stderr, + "Ray V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + /* + if(!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) { + fprintf(stderr,"Error setting the process class.\n"); + return 0; + } + + if(!SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)) { + fprintf(stderr,"Error setting the process priority.\n"); + return 0; + } + */ + + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); + + if (!(win = glutCreateWindow("Ray"))) { + fprintf(stderr, "Error, couldn't open window\n"); + return -1; + } + + reshape(WIDTH, HEIGHT); + + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LEQUAL); + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogfv(GL_FOG_COLOR, fogcolor); + + glFogf(GL_FOG_DENSITY, 0.01); +#ifdef FX + glHint(GL_FOG_HINT, GL_NICEST); +#endif + + calcposobs(); + + initspherepos(); + + inittextures(); + initdlists(); + + glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], fogcolor[3]); + + glutReshapeFunc(reshape); + glutDisplayFunc(draw); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutIdleFunc(draw); + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/readpix.c b/progs/demos/readpix.c new file mode 100644 index 000000000..75ba45c1e --- /dev/null +++ b/progs/demos/readpix.c @@ -0,0 +1,344 @@ + +/* + * glReadPixels and glCopyPixels test + * + * Brian Paul March 1, 2000 This file is in the public domain. + */ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define IMAGE_FILE "../images/girl.rgb" + +static int ImgWidth, ImgHeight; +static GLenum ImgFormat; +static GLubyte *Image = NULL; + +static int APosX, APosY; /* simple drawpixels */ +static int BPosX, BPosY; /* read/draw pixels */ +static int CPosX, CPosY; /* copypixels */ + +static GLboolean DrawFront = GL_FALSE; +static GLboolean ScaleAndBias = GL_FALSE; +static GLboolean Benchmark = GL_FALSE; +static GLubyte *TempImage = NULL; + +#if 0 +#define ReadFormat ImgFormat +#define ReadType GL_UNSIGNED_BYTE +#endif +#if 1 +static GLenum ReadFormat = GL_RGBA; +static GLenum ReadType = GL_UNSIGNED_BYTE; +#endif +#if 0 +static GLenum ReadFormat = GL_RGB; +static GLenum ReadType = GL_UNSIGNED_BYTE; +#endif +#if 0 +static GLenum ReadFormat = GL_RGB; +static GLenum ReadType = GL_UNSIGNED_SHORT_5_6_5; +#endif +#if 0 +static GLenum ReadFormat = GL_RGBA; +static GLenum ReadType = GL_UNSIGNED_SHORT_1_5_5_5_REV; +#endif +#if 0 +static GLenum ReadFormat = GL_BGRA; +static GLenum ReadType = GL_UNSIGNED_SHORT_5_5_5_1; +#endif +#if 0 +static GLenum ReadFormat = GL_BGRA; +static GLenum ReadType = GL_UNSIGNED_SHORT_4_4_4_4_REV; +#endif + + +static void +Reset( void ) +{ + APosX = 5; APosY = 20; + BPosX = APosX + ImgWidth + 5; BPosY = 20; + CPosX = BPosX + ImgWidth + 5; CPosY = 20; +} + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + + +static void +SetupPixelTransfer(GLboolean invert) +{ + if (invert) { + glPixelTransferf(GL_RED_SCALE, -1.0); + glPixelTransferf(GL_RED_BIAS, 1.0); + glPixelTransferf(GL_GREEN_SCALE, -1.0); + glPixelTransferf(GL_GREEN_BIAS, 1.0); + glPixelTransferf(GL_BLUE_SCALE, -1.0); + glPixelTransferf(GL_BLUE_BIAS, 1.0); + } + else { + glPixelTransferf(GL_RED_SCALE, 1.0); + glPixelTransferf(GL_RED_BIAS, 0.0); + glPixelTransferf(GL_GREEN_SCALE, 1.0); + glPixelTransferf(GL_GREEN_BIAS, 0.0); + glPixelTransferf(GL_BLUE_SCALE, 1.0); + glPixelTransferf(GL_BLUE_BIAS, 0.0); + } +} + + +/** + * Exercise Pixel Pack parameters by reading the image in four pieces. + */ +static void +ComplexReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid *pixels) +{ + const GLsizei width0 = width / 2; + const GLsizei width1 = width - width0; + const GLsizei height0 = height / 2; + const GLsizei height1 = height - height0; + + glPixelStorei(GL_PACK_ROW_LENGTH, width); + + /* lower-left quadrant */ + glReadPixels(x, y, width0, height0, format, type, pixels); + + /* lower-right quadrant */ + glPixelStorei(GL_PACK_SKIP_PIXELS, width0); + glReadPixels(x + width0, y, width1, height0, format, type, pixels); + + /* upper-left quadrant */ + glPixelStorei(GL_PACK_SKIP_PIXELS, 0); + glPixelStorei(GL_PACK_SKIP_ROWS, height0); + glReadPixels(x, y + height0, width0, height1, format, type, pixels); + + /* upper-right quadrant */ + glPixelStorei(GL_PACK_SKIP_PIXELS, width0); + glPixelStorei(GL_PACK_SKIP_ROWS, height0); + glReadPixels(x + width0, y + height0, width1, height1, format, type, pixels); + + /* restore defaults */ + glPixelStorei(GL_PACK_SKIP_PIXELS, 0); + glPixelStorei(GL_PACK_SKIP_ROWS, 0); + glPixelStorei(GL_PACK_ROW_LENGTH, ImgWidth); +} + + + +static void +Display( void ) +{ + glClearColor(.3, .3, .3, 1); + glClear( GL_COLOR_BUFFER_BIT ); + + glRasterPos2i(5, ImgHeight+25); + PrintString("f = toggle front/back s = toggle scale/bias b = benchmark"); + + /* draw original image */ + glRasterPos2i(APosX, 5); + PrintString("Original"); + glRasterPos2i(APosX, APosY); + glEnable(GL_DITHER); + SetupPixelTransfer(GL_FALSE); + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glDrawPixels(ImgWidth, ImgHeight, ImgFormat, GL_UNSIGNED_BYTE, Image); + + /* might try alignment=4 here for testing */ + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + + /* do readpixels, drawpixels */ + glRasterPos2i(BPosX, 5); + PrintString("Read/DrawPixels"); + SetupPixelTransfer(ScaleAndBias); + if (Benchmark) { + GLint reads = 0; + GLint endTime; + GLint startTime = glutGet(GLUT_ELAPSED_TIME); + GLdouble seconds, pixelsPerSecond; + printf("Benchmarking...\n"); + do { + glReadPixels(APosX, APosY, ImgWidth, ImgHeight, + ReadFormat, ReadType, TempImage); + reads++; + endTime = glutGet(GLUT_ELAPSED_TIME); + } while (endTime - startTime < 4000); /* 4 seconds */ + seconds = (double) (endTime - startTime) / 1000.0; + pixelsPerSecond = reads * ImgWidth * ImgHeight / seconds; + printf("Result: %d reads in %f seconds = %f pixels/sec\n", + reads, seconds, pixelsPerSecond); + Benchmark = GL_FALSE; + } + else { + /* clear the temporary image to white (helpful for debugging */ + memset(TempImage, 255, ImgWidth * ImgHeight * 4); +#if 1 + glReadPixels(APosX, APosY, ImgWidth, ImgHeight, + ReadFormat, ReadType, TempImage); + (void) ComplexReadPixels; +#else + /* you might use this when debugging */ + ComplexReadPixels(APosX, APosY, ImgWidth, ImgHeight, + ReadFormat, ReadType, TempImage); +#endif + } + glRasterPos2i(BPosX, BPosY); + glDisable(GL_DITHER); + SetupPixelTransfer(GL_FALSE); + glDrawPixels(ImgWidth, ImgHeight, ReadFormat, ReadType, TempImage); + + /* do copypixels */ + glRasterPos2i(CPosX, 5); + PrintString("CopyPixels"); + glRasterPos2i(CPosX, CPosY); + glDisable(GL_DITHER); + SetupPixelTransfer(ScaleAndBias); + glCopyPixels(APosX, APosY, ImgWidth, ImgHeight, GL_COLOR); + + if (!DrawFront) + glutSwapBuffers(); + else + glFinish(); +} + + +static void +Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0.0, width, 0.0, height, -1.0, 1.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + +static void +Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 'b': + Benchmark = GL_TRUE; + break; + case 's': + ScaleAndBias = !ScaleAndBias; + break; + case 'f': + DrawFront = !DrawFront; + if (DrawFront) { + glDrawBuffer(GL_FRONT); + glReadBuffer(GL_FRONT); + } + else { + glDrawBuffer(GL_BACK); + glReadBuffer(GL_BACK); + } + printf("glDrawBuffer(%s)\n", DrawFront ? "GL_FRONT" : "GL_BACK"); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void +Init( GLboolean ciMode ) +{ + GLboolean have_read_format = GL_FALSE; + + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + + Image = LoadRGBImage( IMAGE_FILE, &ImgWidth, &ImgHeight, &ImgFormat ); + if (!Image) { + printf("Couldn't read %s\n", IMAGE_FILE); + exit(0); + } + + if (ciMode) { + /* Convert RGB image to grayscale */ + GLubyte *indexImage = (GLubyte *) malloc( ImgWidth * ImgHeight ); + GLint i; + for (i=0; i<ImgWidth*ImgHeight; i++) { + int gray = Image[i*3] + Image[i*3+1] + Image[i*3+2]; + indexImage[i] = gray / 3; + } + free(Image); + Image = indexImage; + ImgFormat = GL_COLOR_INDEX; + + for (i=0;i<255;i++) { + float g = i / 255.0; + glutSetColor(i, g, g, g); + } + } + +#ifdef GL_OES_read_format + if ( glutExtensionSupported( "GL_OES_read_format" ) ) { + glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES, (GLint *) &ReadType); + glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES, (GLint *) &ReadFormat); + + have_read_format = GL_TRUE; + } +#endif + + printf( "GL_OES_read_format %ssupported. " + "Using type / format = 0x%04x / 0x%04x\n", + (have_read_format) ? "" : "not ", + ReadType, ReadFormat ); + + printf("Loaded %d by %d image\n", ImgWidth, ImgHeight ); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, ImgWidth); + glPixelStorei(GL_PACK_ROW_LENGTH, ImgWidth); + + Reset(); + + /* allocate an extra 1KB in case we're tinkering with pack alignment */ + TempImage = (GLubyte *) malloc(ImgWidth * ImgHeight * 4 * sizeof(GLubyte) + + 1000); + assert(TempImage); +} + + +int +main( int argc, char *argv[] ) +{ + GLboolean ciMode = GL_FALSE; + if (argc > 1 && strcmp(argv[1], "-ci")==0) { + ciMode = GL_TRUE; + } + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 750, 250 ); + if (ciMode) + glutInitDisplayMode( GLUT_INDEX | GLUT_DOUBLE ); + else + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + glutCreateWindow(argv[0]); + Init(ciMode); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutDisplayFunc( Display ); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/reflect.c b/progs/demos/reflect.c new file mode 100644 index 000000000..bf6d91aaa --- /dev/null +++ b/progs/demos/reflect.c @@ -0,0 +1,404 @@ + +/* + * Demo of a reflective, texture-mapped surface with OpenGL. + * Brian Paul August 14, 1995 This file is in the public domain. + * + * Hardware texture mapping is highly recommended! + * + * The basic steps are: + * 1. Render the reflective object (a polygon) from the normal viewpoint, + * setting the stencil planes = 1. + * 2. Render the scene from a special viewpoint: the viewpoint which + * is on the opposite side of the reflective plane. Only draw where + * stencil = 1. This draws the objects in the reflective surface. + * 3. Render the scene from the original viewpoint. This draws the + * objects in the normal fashion. Use blending when drawing + * the reflective, textured surface. + * + * This is a very crude demo. It could be much better. + */ + +/* + * Authors: + * Brian Paul + * Dirk Reiners (reiners@igd.fhg.de) made some modifications to this code. + * Mark Kilgard (April 1997) + * Brian Paul (April 2000 - added keyboard d/s options) + */ + + +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include "GL/glut.h" +#include "showbuffer.h" +#include "readtex.h" + + +#define DEG2RAD (3.14159/180.0) + +#define TABLE_TEXTURE "../images/tile.rgb" + +static GLint ImgWidth, ImgHeight; +static GLenum ImgFormat; +static GLubyte *Image = NULL; + +#define MAX_OBJECTS 2 +static GLint table_list; +static GLint objects_list[MAX_OBJECTS]; + +static GLfloat xrot, yrot; +static GLfloat spin; + +static GLint Width = 400, Height = 300; +static GLenum ShowBuffer = GL_NONE; +static GLboolean Anim = GL_TRUE; + +/* performance info */ +static GLint T0 = 0; +static GLint Frames = 0; + + +static void make_table( void ) +{ + static GLfloat table_mat[] = { 1.0, 1.0, 1.0, 0.6 }; + static GLfloat gray[] = { 0.4, 0.4, 0.4, 1.0 }; + + table_list = glGenLists(1); + glNewList( table_list, GL_COMPILE ); + + /* load table's texture */ + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, table_mat ); +/* glMaterialfv( GL_FRONT, GL_EMISSION, gray );*/ + glMaterialfv( GL_FRONT, GL_DIFFUSE, table_mat ); + glMaterialfv( GL_FRONT, GL_AMBIENT, gray ); + + /* draw textured square for the table */ + glPushMatrix(); + glScalef( 4.0, 4.0, 4.0 ); + glBegin( GL_POLYGON ); + glNormal3f( 0.0, 1.0, 0.0 ); + glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex3f( 1.0, 0.0, 1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex3f( 1.0, 0.0, -1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0, 0.0, -1.0 ); + glEnd(); + glPopMatrix(); + + glDisable( GL_TEXTURE_2D ); + + glEndList(); +} + + +static void make_objects( void ) +{ + GLUquadricObj *q; + + static GLfloat cyan[] = { 0.0, 1.0, 1.0, 1.0 }; + static GLfloat green[] = { 0.2, 1.0, 0.2, 1.0 }; + static GLfloat black[] = { 0.0, 0.0, 0.0, 0.0 }; + + q = gluNewQuadric(); + gluQuadricDrawStyle( q, GLU_FILL ); + gluQuadricNormals( q, GLU_SMOOTH ); + + objects_list[0] = glGenLists(1); + glNewList( objects_list[0], GL_COMPILE ); + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, cyan ); + glMaterialfv( GL_FRONT, GL_EMISSION, black ); + gluCylinder( q, 0.5, 0.5, 1.0, 15, 1 ); + glEndList(); + + objects_list[1] = glGenLists(1); + glNewList( objects_list[1], GL_COMPILE ); + glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green ); + glMaterialfv( GL_FRONT, GL_EMISSION, black ); + gluCylinder( q, 1.5, 0.0, 2.5, 15, 1 ); + glEndList(); +} + + +static void init( void ) +{ + make_table(); + make_objects(); + + Image = LoadRGBImage( TABLE_TEXTURE, &ImgWidth, &ImgHeight, &ImgFormat ); + if (!Image) { + printf("Couldn't read %s\n", TABLE_TEXTURE); + exit(0); + } + + gluBuild2DMipmaps(GL_TEXTURE_2D, 3, ImgWidth, ImgHeight, + ImgFormat, GL_UNSIGNED_BYTE, Image); + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + + xrot = 30.0; + yrot = 50.0; + spin = 0.0; + + glShadeModel( GL_FLAT ); + + glEnable( GL_LIGHT0 ); + glEnable( GL_LIGHTING ); + + glClearColor( 0.5, 0.5, 0.9, 0.0 ); + + glEnable( GL_NORMALIZE ); +} + + + +static void reshape(int w, int h) +{ + GLfloat yAspect = 2.5; + GLfloat xAspect = yAspect * (float) w / (float) h; + Width = w; + Height = h; + glViewport(0, 0, w, h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum( -xAspect, xAspect, -yAspect, yAspect, 10.0, 30.0 ); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + + +static void draw_objects( GLfloat eyex, GLfloat eyey, GLfloat eyez ) +{ + (void) eyex; + (void) eyey; + (void) eyez; +#ifndef USE_ZBUFFER + if (eyex<0.5) { +#endif + glPushMatrix(); + glTranslatef( 1.0, 1.5, 0.0 ); + glRotatef( spin, 1.0, 0.5, 0.0 ); + glRotatef( 0.5*spin, 0.0, 0.5, 1.0 ); + glCallList( objects_list[0] ); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( -1.0, 0.85+3.0*fabs( cos(0.01*spin) ), 0.0 ); + glRotatef( 0.5*spin, 0.0, 0.5, 1.0 ); + glRotatef( spin, 1.0, 0.5, 0.0 ); + glScalef( 0.5, 0.5, 0.5 ); + glCallList( objects_list[1] ); + glPopMatrix(); +#ifndef USE_ZBUFFER + } + else { + glPushMatrix(); + glTranslatef( -1.0, 0.85+3.0*fabs( cos(0.01*spin) ), 0.0 ); + glRotatef( 0.5*spin, 0.0, 0.5, 1.0 ); + glRotatef( spin, 1.0, 0.5, 0.0 ); + glScalef( 0.5, 0.5, 0.5 ); + glCallList( objects_list[1] ); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( 1.0, 1.5, 0.0 ); + glRotatef( spin, 1.0, 0.5, 0.0 ); + glRotatef( 0.5*spin, 0.0, 0.5, 1.0 ); + glCallList( objects_list[0] ); + glPopMatrix(); + } +#endif +} + + + +static void draw_table( void ) +{ + glCallList( table_list ); +} + + + +static void draw_scene( void ) +{ + static GLfloat light_pos[] = { 0.0, 20.0, 0.0, 1.0 }; + GLfloat dist = 20.0; + GLfloat eyex, eyey, eyez; + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + + + eyex = dist * cos(yrot*DEG2RAD) * cos(xrot*DEG2RAD); + eyez = dist * sin(yrot*DEG2RAD) * cos(xrot*DEG2RAD); + eyey = dist * sin(xrot*DEG2RAD); + + /* view from top */ + glPushMatrix(); + gluLookAt( eyex, eyey, eyez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); + + glLightfv( GL_LIGHT0, GL_POSITION, light_pos ); + + /* draw table into stencil planes */ + glDisable( GL_DEPTH_TEST ); + glEnable( GL_STENCIL_TEST ); + glStencilFunc( GL_ALWAYS, 1, 0xffffffff ); + glStencilOp( GL_REPLACE, GL_REPLACE, GL_REPLACE ); + glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); + draw_table(); + glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); + + glEnable( GL_DEPTH_TEST ); + + /* render view from below (reflected viewport) */ + /* only draw where stencil==1 */ + if (eyey>0.0) { + glPushMatrix(); + + glStencilFunc( GL_EQUAL, 1, 0xffffffff ); /* draw if ==1 */ + glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP ); + glScalef( 1.0, -1.0, 1.0 ); + + /* Reposition light in reflected space. */ + glLightfv(GL_LIGHT0, GL_POSITION, light_pos); + + draw_objects(eyex, eyey, eyez); + glPopMatrix(); + + /* Restore light's original unreflected position. */ + glLightfv(GL_LIGHT0, GL_POSITION, light_pos); + } + + glDisable( GL_STENCIL_TEST ); + + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + + glEnable( GL_TEXTURE_2D ); + draw_table(); + glDisable( GL_TEXTURE_2D ); + glDisable( GL_BLEND ); + + /* view from top */ + glPushMatrix(); + + draw_objects(eyex, eyey, eyez); + + glPopMatrix(); + + glPopMatrix(); + + if (ShowBuffer == GL_DEPTH) { + ShowDepthBuffer(Width, Height, 1.0, 0.0); + } + else if (ShowBuffer == GL_STENCIL) { + ShowStencilBuffer(Width, Height, 255.0, 0.0); + } + else if (ShowBuffer == GL_ALPHA) { + ShowAlphaBuffer(Width, Height); + } + + glutSwapBuffers(); + + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + Frames++; + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + } + } +} + + +static void idle( void ) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + spin += 60.0 * dt; + yrot += 90.0 * dt; + glutPostRedisplay(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + if (key == 'd') { + ShowBuffer = GL_DEPTH; + } + else if (key == 's') { + ShowBuffer = GL_STENCIL; + } + else if (key == 'a') { + ShowBuffer = GL_ALPHA; + } + else if (key == ' ') { + Anim = !Anim; + if (Anim) + glutIdleFunc(idle); + else + glutIdleFunc(NULL); + } + else if (key==27) { + exit(0); + } + else { + ShowBuffer = GL_NONE; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + xrot += 3.0; + if ( xrot > 85 ) + xrot = 85; + break; + case GLUT_KEY_DOWN: + xrot -= 3.0; + if ( xrot < 5 ) + xrot = 5; + break; + case GLUT_KEY_LEFT: + yrot += 3.0; + break; + case GLUT_KEY_RIGHT: + yrot -= 3.0; + break; + } + glutPostRedisplay(); +} + + +int main( int argc, char *argv[] ) +{ + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL | GLUT_ALPHA); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( Width, Height ); + glutCreateWindow(argv[0]); + glutReshapeFunc(reshape); + glutDisplayFunc(draw_scene); + glutKeyboardFunc(Key); + glutSpecialFunc(SpecialKey); + glutIdleFunc(idle); + init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/renormal.c b/progs/demos/renormal.c new file mode 100644 index 000000000..9e5da9548 --- /dev/null +++ b/progs/demos/renormal.c @@ -0,0 +1,139 @@ + +/* + * Test GL_EXT_rescale_normal extension + * Brian Paul January 1998 This program is in the public domain. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + + +static GLfloat Phi = 0.0; + + +static void Idle( void ) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + Phi += 3.0 * dt; + glutPostRedisplay(); +} + + +static void Display( void ) +{ + GLfloat scale = 0.6 + 0.5 * sin(Phi); + glClear( GL_COLOR_BUFFER_BIT ); + glPushMatrix(); + glScalef(scale, scale, scale); + glutSolidSphere(2.0, 20, 20); + glPopMatrix(); + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -15.0 ); +} + + + +static void Init( void ) +{ + static GLfloat mat[4] = { 0.8, 0.8, 0.0, 1.0 }; + static GLfloat pos[4] = { -1.0, 1.0, 1.0, 0.0 }; + + /* setup lighting, etc */ + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat); + glLightfv(GL_LIGHT0, GL_POSITION, pos); + + glEnable(GL_CULL_FACE); + + glDisable(GL_RESCALE_NORMAL_EXT); + glDisable(GL_NORMALIZE); +} + + +#define UNSCALED 1 +#define NORMALIZE 2 +#define RESCALE 3 +#define QUIT 4 + + +static void ModeMenu(int entry) +{ + if (entry==UNSCALED) { + glDisable(GL_RESCALE_NORMAL_EXT); + glDisable(GL_NORMALIZE); + } + else if (entry==NORMALIZE) { + glEnable(GL_NORMALIZE); + glDisable(GL_RESCALE_NORMAL_EXT); + } + else if (entry==RESCALE) { + glDisable(GL_NORMALIZE); + glEnable(GL_RESCALE_NORMAL_EXT); + } + else if (entry==QUIT) { + exit(0); + } + glutPostRedisplay(); +} + +static void +key(unsigned char k, int x, int y) +{ + (void) x; + (void) y; + switch (k) { + case 27: /* Escape */ + exit(0); + break; + default: + return; + } + glutPostRedisplay(); +} + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition(0, 0); + glutInitWindowSize( 400, 400 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + + glutCreateWindow(argv[0]); + + Init(); + + glutIdleFunc( Idle ); + glutReshapeFunc( Reshape ); + glutDisplayFunc( Display ); + glutKeyboardFunc(key); + + glutCreateMenu(ModeMenu); + glutAddMenuEntry("Unscaled", UNSCALED); + glutAddMenuEntry("Normalize", NORMALIZE); + glutAddMenuEntry("Rescale EXT", RESCALE); + glutAddMenuEntry("Quit", QUIT); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/shadowtex.c b/progs/demos/shadowtex.c new file mode 100644 index 000000000..e918751a7 --- /dev/null +++ b/progs/demos/shadowtex.c @@ -0,0 +1,600 @@ +/* + * Shadow demo using the GL_ARB_depth_texture, GL_ARB_shadow and + * GL_ARB_shadow_ambient extensions (or the old SGIX extensions). + * + * Brian Paul + * 19 Feb 2001 + * + * Added GL_EXT_shadow_funcs support on 23 March 2002 + * + * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> +#include "showbuffer.h" + +#if 0 /* change to 1 if you want to use the old SGIX extensions */ +#undef GL_ARB_depth_texture +#undef GL_ARB_shadow +#undef GL_ARB_shadow_ambient +#endif + + +#define DEG_TO_RAD (3.14159 / 180.0) + +static GLint WindowWidth = 450, WindowHeight = 300; +static GLfloat Xrot = 15, Yrot = 0, Zrot = 0; + +static GLfloat Red[4] = {1, 0, 0, 1}; +static GLfloat Green[4] = {0, 1, 0, 1}; +static GLfloat Blue[4] = {0, 0, 1, 1}; +static GLfloat Yellow[4] = {1, 1, 0, 1}; + +static GLfloat LightDist = 10; +static GLfloat LightLatitude = 45.0; +static GLfloat LightLongitude = 45.0; +static GLfloat LightPos[4]; +static GLfloat SpotDir[3]; +static GLfloat SpotAngle = 40.0 * DEG_TO_RAD; +static GLfloat ShadowNear = 4.0, ShadowFar = 24.0; +static GLint ShadowTexWidth = 256, ShadowTexHeight = 256; + +static GLboolean LinearFilter = GL_FALSE; + +static GLfloat Bias = -0.06; + +static GLboolean Anim = GL_TRUE; + +static GLboolean HaveEXTshadowFuncs = GL_FALSE; +static GLint Operator = 0; +static const GLenum OperatorFunc[8] = { + GL_LEQUAL, GL_LESS, GL_GEQUAL, GL_GREATER, + GL_EQUAL, GL_NOTEQUAL, GL_ALWAYS, GL_NEVER }; +static const char *OperatorName[8] = { + "GL_LEQUAL", "GL_LESS", "GL_GEQUAL", "GL_GREATER", + "GL_EQUAL", "GL_NOTEQUAL", "GL_ALWAYS", "GL_NEVER" }; + + +static GLuint DisplayMode; +#define SHOW_NORMAL 0 +#define SHOW_DEPTH_IMAGE 1 +#define SHOW_DEPTH_MAPPING 2 +#define SHOW_DISTANCE 3 + + + +static void +DrawScene(void) +{ + GLfloat k = 6; + /* sphere */ + glPushMatrix(); + glTranslatef(1.6, 2.2, 2.7); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Green); + glColor4fv(Green); + glutSolidSphere(1.5, 15, 15); + glPopMatrix(); + /* dodecahedron */ + glPushMatrix(); + glTranslatef(-2.0, 1.2, 2.1); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Red); + glColor4fv(Red); + glutSolidDodecahedron(); + glPopMatrix(); + /* icosahedron */ + glPushMatrix(); + glTranslatef(-0.6, 1.3, -0.5); + glScalef(1.5, 1.5, 1.5); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Yellow); + glColor4fv(Red); + glutSolidIcosahedron(); + glPopMatrix(); + /* a plane */ + glPushMatrix(); + glTranslatef(0, -1.1, 0); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Blue); + glColor4fv(Blue); + glNormal3f(0, 1, 0); + glBegin(GL_POLYGON); + glVertex3f(-k, 0, -k); + glVertex3f( k, 0, -k); + glVertex3f( k, 0, k); + glVertex3f(-k, 0, k); + glEnd(); + glPopMatrix(); +} + + +/* + * Load the GL_TEXTURE matrix with the projection from the light + * source's point of view. + */ +static void +MakeShadowMatrix(const GLfloat lightPos[4], const GLfloat spotDir[3], + GLfloat spotAngle, GLfloat shadowNear, GLfloat shadowFar) +{ + GLfloat d; + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glTranslatef(0.5, 0.5, 0.5 + Bias); + glScalef(0.5, 0.5, 0.5); + d = shadowNear * tan(spotAngle); + glFrustum(-d, d, -d, d, shadowNear, shadowFar); + gluLookAt(lightPos[0], lightPos[1], lightPos[2], + lightPos[0] + spotDir[0], + lightPos[1] + spotDir[1], + lightPos[2] + spotDir[2], + 0, 1, 0); + glMatrixMode(GL_MODELVIEW); +} + + +static void +EnableIdentityTexgen(void) +{ + /* texgen so that texcoord = vertex coord */ + static GLfloat sPlane[4] = { 1, 0, 0, 0 }; + static GLfloat tPlane[4] = { 0, 1, 0, 0 }; + static GLfloat rPlane[4] = { 0, 0, 1, 0 }; + static GLfloat qPlane[4] = { 0, 0, 0, 1 }; + + glTexGenfv(GL_S, GL_EYE_PLANE, sPlane); + glTexGenfv(GL_T, GL_EYE_PLANE, tPlane); + glTexGenfv(GL_R, GL_EYE_PLANE, rPlane); + glTexGenfv(GL_Q, GL_EYE_PLANE, qPlane); + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + glEnable(GL_TEXTURE_GEN_R); + glEnable(GL_TEXTURE_GEN_Q); +} + + +/* + * Setup 1-D texgen so that the distance from the light source, between + * the near and far planes maps to s=0 and s=1. When we draw the scene, + * the grayness will indicate the fragment's distance from the light + * source. + */ +static void +EnableDistanceTexgen(const GLfloat lightPos[4], const GLfloat lightDir[3], + GLfloat lightNear, GLfloat lightFar) +{ + GLfloat m, d; + GLfloat sPlane[4]; + GLfloat nearPoint[3]; + + m = sqrt(lightDir[0] * lightDir[0] + + lightDir[1] * lightDir[1] + + lightDir[2] * lightDir[2]); + + d = lightFar - lightNear; + + /* nearPoint = point on light direction vector which intersects the + * near plane of the light frustum. + */ + nearPoint[0] = LightPos[0] + lightDir[0] / m * lightNear; + nearPoint[1] = LightPos[1] + lightDir[1] / m * lightNear; + nearPoint[2] = LightPos[2] + lightDir[2] / m * lightNear; + + sPlane[0] = lightDir[0] / d / m; + sPlane[1] = lightDir[1] / d / m; + sPlane[2] = lightDir[2] / d / m; + sPlane[3] = -(sPlane[0] * nearPoint[0] + + sPlane[1] * nearPoint[1] + + sPlane[2] * nearPoint[2]); + + glTexGenfv(GL_S, GL_EYE_PLANE, sPlane); + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); + glEnable(GL_TEXTURE_GEN_S); +} + + +static void +DisableTexgen(void) +{ + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_GEN_R); + glDisable(GL_TEXTURE_GEN_Q); +} + + +static void +ComputeLightPos(GLfloat dist, GLfloat latitude, GLfloat longitude, + GLfloat pos[4], GLfloat dir[3]) +{ + + pos[0] = dist * sin(longitude * DEG_TO_RAD); + pos[1] = dist * sin(latitude * DEG_TO_RAD); + pos[2] = dist * cos(latitude * DEG_TO_RAD) * cos(longitude * DEG_TO_RAD); + pos[3] = 1; + dir[0] = -pos[0]; + dir[1] = -pos[1]; + dir[2] = -pos[2]; +} + + +static void +Display(void) +{ + GLfloat ar = (GLfloat) WindowWidth / (GLfloat) WindowHeight; + GLfloat d; + GLenum error; + + ComputeLightPos(LightDist, LightLatitude, LightLongitude, + LightPos, SpotDir); + /* + * Step 1: render scene from point of view of the light source + */ + /* compute frustum to enclose spot light cone */ + d = ShadowNear * tan(SpotAngle); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-d, d, -d, d, ShadowNear, ShadowFar); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(LightPos[0], LightPos[1], LightPos[2], /* from */ + 0, 0, 0, /* target */ + 0, 1, 0); /* up */ + + glViewport(0, 0, ShadowTexWidth, ShadowTexHeight); + glClear(GL_DEPTH_BUFFER_BIT); + DrawScene(); + + /* + * Step 2: copy depth buffer into texture map + */ + if (DisplayMode == SHOW_DEPTH_MAPPING) { + /* load depth image as gray-scale luminance texture */ + GLfloat *depth = (GLfloat *) malloc(ShadowTexWidth * ShadowTexHeight + * sizeof(GLfloat)); + if (depth) { + glReadPixels(0, 0, ShadowTexWidth, ShadowTexHeight, + GL_DEPTH_COMPONENT, GL_FLOAT, depth); + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, + ShadowTexWidth, ShadowTexHeight, 0, + GL_LUMINANCE, GL_FLOAT, depth); + free(depth); + } + } + else { + /* The normal shadow case */ + glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, + 0, 0, ShadowTexWidth, ShadowTexHeight, 0); + } + + /* + * Step 3: render scene from point of view of the camera + */ + glViewport(0, 0, WindowWidth, WindowHeight); + if (DisplayMode == SHOW_DEPTH_IMAGE) { + ShowDepthBuffer(WindowWidth, WindowHeight, 0, 1); + } + else { + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-ar, ar, -1.0, 1.0, 4.0, 50.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -22.0); + glRotatef(Xrot, 1, 0, 0); + glRotatef(Yrot, 0, 1, 0); + glRotatef(Zrot, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glLightfv(GL_LIGHT0, GL_POSITION, LightPos); + if (LinearFilter) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + } + if (DisplayMode == SHOW_DEPTH_MAPPING) { +#if defined(GL_ARB_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE); +#elif defined(GL_SGIX_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_FALSE); +#endif + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glEnable(GL_TEXTURE_2D); + MakeShadowMatrix(LightPos, SpotDir, SpotAngle, ShadowNear, ShadowFar); + EnableIdentityTexgen(); + } + else if (DisplayMode == SHOW_DISTANCE) { + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + EnableDistanceTexgen(LightPos, SpotDir, ShadowNear+Bias, ShadowFar); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glEnable(GL_TEXTURE_1D); + } + else { + assert(DisplayMode == SHOW_NORMAL); +#if defined(GL_ARB_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, + GL_COMPARE_R_TO_TEXTURE_ARB); +#elif defined(GL_SGIX_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_TRUE); +#endif + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_TEXTURE_2D); + MakeShadowMatrix(LightPos, SpotDir, SpotAngle, ShadowNear, ShadowFar); + EnableIdentityTexgen(); + } + DrawScene(); + DisableTexgen(); + glDisable(GL_TEXTURE_1D); + glDisable(GL_TEXTURE_2D); + } + + glutSwapBuffers(); + + error = glGetError(); + if (error) { + printf("GL Error: %s\n", (char *) gluErrorString(error)); + } +} + + +static void +Reshape(int width, int height) +{ + WindowWidth = width; + WindowHeight = height; + if (width >= 512 && height >= 512) { + ShadowTexWidth = ShadowTexHeight = 512; + } + else if (width >= 256 && height >= 256) { + ShadowTexWidth = ShadowTexHeight = 256; + } + else { + ShadowTexWidth = ShadowTexHeight = 128; + } + printf("Using %d x %d depth texture\n", ShadowTexWidth, ShadowTexHeight); +} + + +static void +Idle(void) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + Yrot += 75.0 * dt; + /*LightLongitude -= 5.0;*/ + glutPostRedisplay(); +} + + +static void +Key(unsigned char key, int x, int y) +{ + const GLfloat step = 3.0; + (void) x; + (void) y; + switch (key) { + case 'a': + Anim = !Anim; + if (Anim) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 'b': + Bias -= 0.01; + printf("Bias %g\n", Bias); + break; + case 'B': + Bias += 0.01; + printf("Bias %g\n", Bias); + break; + case 'd': + DisplayMode = SHOW_DISTANCE; + break; + case 'f': + LinearFilter = !LinearFilter; + printf("%s filtering\n", LinearFilter ? "Bilinear" : "Nearest"); + break; + case 'i': + DisplayMode = SHOW_DEPTH_IMAGE; + break; + case 'm': + DisplayMode = SHOW_DEPTH_MAPPING; + break; + case 'n': + case ' ': + DisplayMode = SHOW_NORMAL; + break; + case 'o': + if (HaveEXTshadowFuncs) { + Operator++; + if (Operator >= 8) + Operator = 0; + printf("Operator: %s\n", OperatorName[Operator]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, + OperatorFunc[Operator]); + } + break; + case 'z': + Zrot -= step; + break; + case 'Z': + Zrot += step; + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void +SpecialKey(int key, int x, int y) +{ + const GLfloat step = 3.0; + const int mod = glutGetModifiers(); + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + if (mod) + LightLatitude += step; + else + Xrot += step; + break; + case GLUT_KEY_DOWN: + if (mod) + LightLatitude -= step; + else + Xrot -= step; + break; + case GLUT_KEY_LEFT: + if (mod) + LightLongitude += step; + else + Yrot += step; + break; + case GLUT_KEY_RIGHT: + if (mod) + LightLongitude -= step; + else + Yrot -= step; + break; + } + glutPostRedisplay(); +} + + +static void +Init(void) +{ +#if defined(GL_ARB_depth_texture) && defined(GL_ARB_shadow) + if (!glutExtensionSupported("GL_ARB_depth_texture") || + !glutExtensionSupported("GL_ARB_shadow")) { + printf("Sorry, this demo requires the GL_ARB_depth_texture and GL_ARB_shadow extensions\n"); + exit(1); + } + printf("Using GL_ARB_depth_texture and GL_ARB_shadow\n"); +#elif defined(GL_SGIX_depth_texture) && defined(GL_SGIX_shadow) + if (!glutExtensionSupported("GL_SGIX_depth_texture") || + !glutExtensionSupported("GL_SGIX_shadow")) { + printf("Sorry, this demo requires the GL_SGIX_depth_texture and GL_SGIX_shadow extensions\n"); + exit(1); + } + printf("Using GL_SGIX_depth_texture and GL_SGIX_shadow\n"); +#endif + HaveEXTshadowFuncs = glutExtensionSupported("GL_EXT_shadow_funcs"); + + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); +#if defined(GL_ARB_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, + GL_COMPARE_R_TO_TEXTURE_ARB); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL); +#elif defined(GL_SGIX_shadow) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_OPERATOR_SGIX, + GL_TEXTURE_LEQUAL_R_SGIX); +#endif + +#if defined(GL_ARB_shadow_ambient) + if (glutExtensionSupported("GL_ARB_shadow_ambient")) { + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 0.3); + printf("and GL_ARB_shadow_ambient\n"); + } +#elif defined(GL_SGIX_shadow_ambient) + if (glutExtensionSupported("GL_SGIX_shadow_ambient")) { + glTexParameterf(GL_TEXTURE_2D, GL_SHADOW_AMBIENT_SGIX, 0.3); + printf("and GL_SGIX_shadow_ambient\n"); + } +#endif + + /* setup 1-D grayscale texture image for SHOW_DISTANCE mode */ + { + GLuint i; + GLubyte image[256]; + for (i = 0; i < 256; i++) + image[i] = i; + glTexImage1D(GL_TEXTURE_1D, 0, GL_LUMINANCE, + 256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image); + } + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); +} + + +static void +PrintHelp(void) +{ + printf("Keys:\n"); + printf(" a = toggle animation\n"); + printf(" i = show depth texture image\n"); + printf(" m = show depth texture mapping\n"); + printf(" d = show fragment distance from light source\n"); + printf(" n = show normal, shadowed image\n"); + printf(" f = toggle nearest/bilinear texture filtering\n"); + printf(" b/B = decrease/increase shadow map Z bias\n"); + printf(" cursor keys = rotate scene\n"); + printf(" <shift> + cursor keys = rotate light source\n"); + if (HaveEXTshadowFuncs) + printf(" o = cycle through comparison modes\n"); +} + + +int +main(int argc, char *argv[]) +{ + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(WindowWidth, WindowHeight); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + glutCreateWindow(argv[0]); + glutReshapeFunc(Reshape); + glutKeyboardFunc(Key); + glutSpecialFunc(SpecialKey); + glutDisplayFunc(Display); + if (Anim) + glutIdleFunc(Idle); + Init(); + PrintHelp(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/spectex.c b/progs/demos/spectex.c new file mode 100644 index 000000000..6ab119157 --- /dev/null +++ b/progs/demos/spectex.c @@ -0,0 +1,272 @@ + +/* + * GLUT demonstration of texturing with specular highlights. + * + * When drawing a lit, textured surface one usually wants the specular + * highlight to override the texture colors. However, OpenGL applies + * texturing after lighting so the specular highlight is modulated by + * the texture. + * + * The solution here shown here is a two-pass algorithm: + * 1. Draw the textured surface without specular lighting. + * 2. Enable blending to add the next pass: + * 3. Redraw the surface with a matte white material and only the + * specular components of light sources enabled. + * + * Brian Paul February 1997 + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + + +static GLUquadricObj *Quadric; +static GLuint Sphere; +static GLfloat LightPos[4] = {10.0, 10.0, 10.0, 1.0}; +static GLfloat Delta = 20.0; +static GLint Mode = 4; + +/*static GLfloat Blue[4] = {0.0, 0.0, 1.0, 1.0};*/ +/*static GLfloat Gray[4] = {0.5, 0.5, 0.5, 1.0};*/ +static GLfloat Black[4] = {0.0, 0.0, 0.0, 1.0}; +static GLfloat White[4] = {1.0, 1.0, 1.0, 1.0}; + +static GLboolean smooth = 1; + +static void +Idle(void) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + LightPos[0] += Delta * dt; + if (LightPos[0]>15.0 || LightPos[0]<-15.0) + Delta = -Delta; + + glutPostRedisplay(); +} + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + glLightfv(GL_LIGHT0, GL_POSITION, LightPos); + + glPushMatrix(); + glRotatef(90.0, 1.0, 0.0, 0.0); + + if (Mode==0) { + /* Typical method: diffuse + specular + texture */ + glEnable(GL_TEXTURE_2D); + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); /* enable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, White); /* enable specular */ +#ifdef GL_VERSION_1_2 + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); +#endif + glCallList(Sphere); + } + else if (Mode==1) { + /* just specular highlight */ + glDisable(GL_TEXTURE_2D); + glLightfv(GL_LIGHT0, GL_DIFFUSE, Black); /* disable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, White); /* enable specular */ +#ifdef GL_VERSION_1_2 + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); +#endif + glCallList(Sphere); + } + else if (Mode==2) { + /* diffuse textured */ + glEnable(GL_TEXTURE_2D); + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); /* enable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, Black); /* disable specular */ +#ifdef GL_VERSION_1_2 + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); +#endif + glCallList(Sphere); + } + else if (Mode==3) { + /* 2-pass: diffuse textured then add specular highlight*/ + glEnable(GL_TEXTURE_2D); + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); /* enable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, Black); /* disable specular */ +#ifdef GL_VERSION_1_2 + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); +#endif + glCallList(Sphere); + /* specular highlight */ + glDepthFunc(GL_EQUAL); /* redraw same pixels */ + glDisable(GL_TEXTURE_2D); + glEnable(GL_BLEND); /* add */ + glLightfv(GL_LIGHT0, GL_DIFFUSE, Black); /* disable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, White); /* enable specular */ + glCallList(Sphere); + glDepthFunc(GL_LESS); + glDisable(GL_BLEND); + } + else if (Mode==4) { + /* OpenGL 1.2's separate diffuse and specular color */ + glEnable(GL_TEXTURE_2D); + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); /* enable diffuse */ + glLightfv(GL_LIGHT0, GL_SPECULAR, White); /* enable specular */ +#ifdef GL_VERSION_1_2 + glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); +#endif + glCallList(Sphere); + } + + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -12.0 ); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + case 's': + smooth = !smooth; + if (smooth) + glShadeModel(GL_SMOOTH); + else + glShadeModel(GL_FLAT); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + break; + case GLUT_KEY_DOWN: + break; + } + glutPostRedisplay(); +} + + +static void Init( void ) +{ + int i, j; + GLubyte texImage[64][64][3]; + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Black); + + glShadeModel(GL_SMOOTH); + + glMaterialfv(GL_FRONT, GL_DIFFUSE, White); + glMaterialfv(GL_FRONT, GL_SPECULAR, White); + glMaterialf(GL_FRONT, GL_SHININESS, 20.0); + + /* Actually, these are set again later */ + glLightfv(GL_LIGHT0, GL_DIFFUSE, White); + glLightfv(GL_LIGHT0, GL_SPECULAR, White); + + Quadric = gluNewQuadric(); + gluQuadricTexture( Quadric, GL_TRUE ); + + Sphere= glGenLists(1); + glNewList( Sphere, GL_COMPILE ); + gluSphere( Quadric, 1.0, 24, 24 ); + glEndList(); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + + for (i=0;i<64;i++) { + for (j=0;j<64;j++) { + int k = ((i>>3)&1) ^ ((j>>3)&1); + texImage[i][j][0] = 255*k; + texImage[i][j][1] = 255*(1-k); + texImage[i][j][2] = 0; + } + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage2D( GL_TEXTURE_2D, + 0, + 3, + 64, 64, + 0, + GL_RGB, GL_UNSIGNED_BYTE, + texImage ); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glEnable(GL_TEXTURE_2D); + + glBlendFunc(GL_ONE, GL_ONE); +} + + +static void ModeMenu(int entry) +{ + if (entry==99) + exit(0); + Mode = entry; +} + + +int main( int argc, char *argv[] ) +{ + + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 300, 300 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + + glutCreateWindow( "spectex" ); + + Init(); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutCreateMenu( ModeMenu ); + glutAddMenuEntry("1-pass lighting + texturing", 0); + glutAddMenuEntry("specular lighting", 1); + glutAddMenuEntry("diffuse lighting + texturing", 2); + glutAddMenuEntry("2-pass lighting + texturing", 3); +#ifdef GL_VERSION_1_2 + glutAddMenuEntry("OpenGL 1.2 separate specular", 4); +#endif + glutAddMenuEntry("Quit", 99); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/spriteblast.c b/progs/demos/spriteblast.c new file mode 100644 index 000000000..d6e9a4de2 --- /dev/null +++ b/progs/demos/spriteblast.c @@ -0,0 +1,554 @@ + +/* Copyright (c) Mark J. Kilgard, 1997. */ + +/* This program is freely distributable without licensing fees + and is provided without guarantee or warrantee expressed or + implied. This program is -not- in the public domain. */ + +/* This example demonstrates how to render particle effects + with OpenGL. A cloud of pinkish/orange particles explodes with the + particles bouncing off the ground. When the EXT_point_parameters + is present , the particle size is attenuated based on eye distance. */ + + +/* Modified by Brian Paul to test GL_ARB_point_sprite */ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> /* for cos(), sin(), and sqrt() */ +#ifdef _WIN32 +#include <windows.h> +#endif +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + +/* Some <math.h> files do not define M_PI... */ +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +#if 0 /* For debugging. */ +#undef GL_EXT_point_parameters +#endif + +static GLfloat angle = -150; /* in degrees */ +static int spin = 0; +static int moving, begin; +static float theTime; +static int repeat = 1; +static int blend = 1; +int useMipmaps = 1; +int linearFiltering = 1; + +static GLfloat constant[3] = { .2, 0.0, 0.0 }; +static GLfloat linear[3] = { .0, .1, 0.0 }; +static GLfloat theQuad[3] = { .005, 0.1, 1/600.0 }; + +#define MAX_POINTS 2000 + +static int numPoints = 200; + +static GLfloat pointList[MAX_POINTS][3]; +static GLfloat pointTime[MAX_POINTS]; +static GLfloat pointVelocity[MAX_POINTS][2]; +static GLfloat pointDirection[MAX_POINTS][2]; +static int colorList[MAX_POINTS]; +static int animate = 1, motion = 0, org = 0, sprite = 1, smooth = 1; + +static GLfloat colorSet[][4] = { + /* Shades of red. */ + { 0.7, 0.2, 0.4, 0.5 }, + { 0.8, 0.0, 0.7, 0.5 }, + { 1.0, 0.0, 0.0, 0.5 }, + { 0.9, 0.3, 0.6, 0.5 }, + { 1.0, 0.4, 0.0, 0.5 }, + { 1.0, 0.0, 0.5, 0.5 }, +}; + +#define NUM_COLORS (sizeof(colorSet)/sizeof(colorSet[0])) + +#define DEAD (NUM_COLORS+1) + + +/* GL */ +static GLint spritePattern[16][16] = { + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0 }, + { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, + { 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } +}; + + + + +#if 0 /* drand48 might be better on Unix machines */ +#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * drand48()) +#else +static float float_rand(void) { return rand() / (float) RAND_MAX; } +#define RANDOM_RANGE(lo, hi) ((lo) + (hi - lo) * float_rand()) +#endif + +#define MEAN_VELOCITY 3.0 +#define GRAVITY 2.0 + +/* Modeling units of ground extent in each X and Z direction. */ +#define EDGE 12 + +static void +makePointList(void) +{ + float angle, velocity, direction; + int i; + + motion = 1; + for (i=0; i<numPoints; i++) { + pointList[i][0] = 0.0; + pointList[i][1] = 0.0; + pointList[i][2] = 0.0; + pointTime[i] = 0.0; + angle = (RANDOM_RANGE(60.0, 70.0)) * M_PI/180.0; + direction = RANDOM_RANGE(0.0, 360.0) * M_PI/180.0; + pointDirection[i][0] = cos(direction); + pointDirection[i][1] = sin(direction); + velocity = MEAN_VELOCITY + RANDOM_RANGE(-0.8, 1.0); + pointVelocity[i][0] = velocity * cos(angle); + pointVelocity[i][1] = velocity * sin(angle); + colorList[i] = rand() % NUM_COLORS; + } + theTime = 0.0; +} + +static void +updatePointList(void) +{ + float distance; + int i; + + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + motion = 0; + for (i=0; i<numPoints; i++) { + distance = pointVelocity[i][0] * theTime; + + /* X and Z */ + pointList[i][0] = pointDirection[i][0] * distance; + pointList[i][2] = pointDirection[i][1] * distance; + + /* Z */ + pointList[i][1] = + (pointVelocity[i][1] - 0.5 * GRAVITY * pointTime[i])*pointTime[i]; + + /* If we hit the ground, bounce the point upward again. */ + if (pointList[i][1] <= 0.0) { + if (distance > EDGE) { + /* Particle has hit ground past the distance duration of + the particles. Mark particle as dead. */ + colorList[i] = NUM_COLORS; /* Not moving. */ + continue; + } + + pointVelocity[i][1] *= 0.8; /* 80% of previous up velocity. */ + pointTime[i] = 0.0; /* Reset the particles sense of up time. */ + } + motion = 1; + pointTime[i] += dt; + } + theTime += dt; + if (!motion && !spin) { + if (repeat) { + makePointList(); + } else { + glutIdleFunc(NULL); + } + } +} + +static void +idle(void) +{ + updatePointList(); + if (spin) { + angle += 0.3; + } + glutPostRedisplay(); +} + +static void +visible(int vis) +{ + if (vis == GLUT_VISIBLE) { + if (animate && (motion || spin)) { + glutIdleFunc(idle); + } + } else { + glutIdleFunc(NULL); + } +} + +static void +redraw(void) +{ + int i; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + glRotatef(15.0, 1.0, 0.0, 0.0); + glRotatef(angle, 0.0, 1.0, 0.0); + + glDepthMask(GL_FALSE); + + /* Draw the floor. */ +/* glEnable(GL_TEXTURE_2D);*/ + glColor3f(0.1, 0.5, 1.0); + glBegin(GL_QUADS); + glTexCoord2f(0.0, 0.0); + glVertex3f(-EDGE, -0.05, -EDGE); + glTexCoord2f(20.0, 0.0); + glVertex3f(EDGE, -0.05, -EDGE); + glTexCoord2f(20.0, 20.0); + glVertex3f(EDGE, -0.05, EDGE); + glTexCoord2f(0.0, 20.0); + glVertex3f(-EDGE, -0.05, EDGE); + glEnd(); + + /* Allow particles to blend with each other. */ + glDepthMask(GL_TRUE); + + if (blend) + glEnable(GL_BLEND); + + if (sprite) { + glEnable(GL_TEXTURE_2D); +#ifdef GL_ARB_point_sprite + glEnable(GL_POINT_SPRITE_ARB); +#endif + } + + glColor3f(1,1,1); + glBegin(GL_POINTS); + for (i=0; i<numPoints; i++) { + /* Draw alive particles. */ + if (colorList[i] != DEAD) { + if (!sprite) glColor4fv(colorSet[colorList[i]]); + glVertex3fv(pointList[i]); + } + } + glEnd(); + + glDisable(GL_TEXTURE_2D); +#ifdef GL_ARB_point_sprite + glDisable(GL_POINT_SPRITE_ARB); +#endif + glDisable(GL_BLEND); + + glPopMatrix(); + + glutSwapBuffers(); +} + +/* ARGSUSED2 */ +static void +mouse(int button, int state, int x, int y) +{ + /* Scene can be spun around Y axis using left + mouse button movement. */ + if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { + moving = 1; + begin = x; + } + if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) { + moving = 0; + } +} + +/* ARGSUSED1 */ +static void +mouseMotion(int x, int y) +{ + if (moving) { + angle = angle + (x - begin); + begin = x; + glutPostRedisplay(); + } +} + +static void +menu(int option) +{ + switch (option) { + case 0: + makePointList(); + break; +#ifdef GL_ARB_point_parameters + case 1: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, constant); + break; + case 2: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, linear); + break; + case 3: + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); + break; +#endif + case 4: + blend = 1; + break; + case 5: + blend = 0; + break; +#ifdef GL_ARB_point_parameters + case 6: + glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 1.0); + break; + case 7: + glPointParameterfARB(GL_POINT_FADE_THRESHOLD_SIZE_ARB, 10.0); + break; +#endif + case 8: + glEnable(GL_POINT_SMOOTH); + smooth = 1; + break; + case 9: + glDisable(GL_POINT_SMOOTH); + smooth = 0; + break; + case 10: + glPointSize(4.0); + break; + case 11: + glPointSize(8.0); + break; + case 12: + glPointSize(16.0); + break; + case 13: + spin = 1 - spin; + if (animate && (spin || motion)) { + glutIdleFunc(idle); + } else { + glutIdleFunc(NULL); + } + break; + case 14: + numPoints = 200; + break; + case 15: + numPoints = 500; + break; + case 16: + numPoints = 1000; + break; + case 17: + numPoints = 2000; + break; + case 666: + exit(0); + } + glutPostRedisplay(); +} + +/* ARGSUSED1 */ +static void +key(unsigned char c, int x, int y) +{ + switch (c) { + case 13: + animate = 1 - animate; /* toggle. */ + if (animate && (motion || spin)) { + glutIdleFunc(idle); + } else { + glutIdleFunc(NULL); + } + break; + case ' ': + animate = 1; + makePointList(); + glutIdleFunc(idle); + break; + case 'o': + case 'O': + org ^= 1; +#ifdef GL_VERSION_2_0 +#ifdef GL_ARB_point_parameters + glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, + org ? GL_LOWER_LEFT : GL_UPPER_LEFT); +#endif +#endif + glutPostRedisplay(); + break; + case 't': + case 'T': + sprite ^= 1; + glutPostRedisplay(); + break; + case 's': + case 'S': + (smooth ^= 1) ? glEnable(GL_POINT_SMOOTH) : glDisable(GL_POINT_SMOOTH); + glutPostRedisplay(); + break; + case '0': + glPointSize(1.0); + glutPostRedisplay(); + break; + case '1': + glPointSize(2.0); + glutPostRedisplay(); + break; + case '2': + glPointSize(4.0); + glutPostRedisplay(); + break; + case '3': + glPointSize(8.0); + glutPostRedisplay(); + break; + case '4': + glPointSize(16.0); + glutPostRedisplay(); + break; + case 27: + exit(0); + } +} + + + +static void +makeSprite(void) +{ + GLubyte texture[16][16][4]; + int i, j; + + if (!glutExtensionSupported("GL_ARB_point_sprite")) { + printf("Sorry, this demo requires GL_ARB_point_sprite.\n"); + exit(0); + } + if (!glutExtensionSupported("GL_ARB_point_parameters")) { + printf("Sorry, this demo requires GL_ARB_point_parameters.\n"); + exit(0); + } + + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + if (spritePattern[i][j]) { + texture[i][j][0] = 255; + texture[i][j][1] = 255; + texture[i][j][2] = 255; + texture[i][j][3] = 255; + } + else { + texture[i][j][0] = 255; + texture[i][j][1] = 0; + texture[i][j][2] = 0; + texture[i][j][3] = 0; + } + } + } + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, + texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); +#ifdef GL_ARB_point_sprite + glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE); +#endif +} + + +static void +reshape(int width, int height) +{ + GLfloat h = (GLfloat) height / (GLfloat) width; + + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-1.0, 1.0, -h, h, 2.0, 30.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0.0, 0.0, -10.0); +} + +int +main(int argc, char **argv) +{ + int i; + glutInit(&argc, argv); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE); + + for (i=1; i<argc; i++) { + if(!strcmp("-noms", argv[i])) { + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + printf("forcing no multisampling\n"); + } else if(!strcmp("-nomipmaps", argv[i])) { + useMipmaps = 0; + } else if(!strcmp("-nearest", argv[i])) { + linearFiltering = 0; + } + } + glutInitWindowPosition(0, 0); + glutInitWindowSize(600,300); + glutCreateWindow("sprite blast"); + glutReshapeFunc(reshape); + glutDisplayFunc(redraw); + glutMouseFunc(mouse); + glutMotionFunc(mouseMotion); + glutVisibilityFunc(visible); + glutKeyboardFunc(key); + glutCreateMenu(menu); + glutAddMenuEntry("Reset time", 0); + glutAddMenuEntry("Constant", 1); + glutAddMenuEntry("Linear", 2); + glutAddMenuEntry("Quadratic", 3); + glutAddMenuEntry("Blend on", 4); + glutAddMenuEntry("Blend off", 5); + glutAddMenuEntry("Threshold 1", 6); + glutAddMenuEntry("Threshold 10", 7); + glutAddMenuEntry("Point smooth on", 8); + glutAddMenuEntry("Point smooth off", 9); + glutAddMenuEntry("Point size 4", 10); + glutAddMenuEntry("Point size 8", 11); + glutAddMenuEntry("Point size 16", 12); + glutAddMenuEntry("Toggle spin", 13); + glutAddMenuEntry("200 points ", 14); + glutAddMenuEntry("500 points ", 15); + glutAddMenuEntry("1000 points ", 16); + glutAddMenuEntry("2000 points ", 17); + glutAddMenuEntry("Quit", 666); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + glEnable(GL_POINT_SMOOTH); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glPointSize(16.0); +#ifdef GL_ARB_point_parameters + glPointParameterfvARB(GL_POINT_DISTANCE_ATTENUATION_ARB, theQuad); +#endif + + makePointList(); + makeSprite(); + + glutMainLoop(); + return 0; /* ANSI C requires main to return int. */ +} diff --git a/progs/demos/stex3d.c b/progs/demos/stex3d.c new file mode 100644 index 000000000..e4554d071 --- /dev/null +++ b/progs/demos/stex3d.c @@ -0,0 +1,678 @@ +/*----------------------------- + * stex3d.c GL example of the mesa 3d-texture extention to simulate procedural + * texturing, it uses a perlin noise and turbulence functions. + * + * Author: Daniel Barrero + * barrero@irit.fr + * dbarrero@pegasus.uniandes.edu.co + * + * Converted to GLUT by brianp on 1/1/98 + * Massive clean-up on 2002/10/23 by brianp + * + * + * cc stex3d.c -o stex3d -lglut -lMesaGLU -lMesaGL -lX11 -lXext -lm + * + *---------------------------- */ + +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/gl.h> +#include <GL/glut.h> + + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#define NOISE_TEXTURE 1 +#define GRADIENT_TEXTURE 2 + +#define TORUS 1 +#define SPHERE 2 + +static int tex_width=64, tex_height=64, tex_depth=64; +static float angx=0, angy=0, angz=0; +static int texgen = 2, animate = 1, smooth = 1, wireframe = 0; +static int CurTexture = NOISE_TEXTURE, CurObject = TORUS; + + +static void +BuildTorus(void) +{ + GLint i, j; + float theta1, phi1, theta2, phi2, rings, sides; + float v0[03], v1[3], v2[3], v3[3]; + float t0[03], t1[3], t2[3], t3[3]; + float n0[3], n1[3], n2[3], n3[3]; + float innerRadius = 0.25; + float outerRadius = 0.5; + float scalFac; + + rings = 16; + sides = 12; + scalFac = 1 / (outerRadius * 2); + + glNewList(TORUS, GL_COMPILE); + for (i = 0; i < rings; i++) { + theta1 = (float) i *2.0 * M_PI / rings; + theta2 = (float) (i + 1) * 2.0 * M_PI / rings; + for (j = 0; j < sides; j++) { + phi1 = (float) j *2.0 * M_PI / sides; + phi2 = (float) (j + 1) * 2.0 * M_PI / sides; + + v0[0] = cos(theta1) * (outerRadius + innerRadius * cos(phi1)); + v0[1] = -sin(theta1) * (outerRadius + innerRadius * cos(phi1)); + v0[2] = innerRadius * sin(phi1); + + v1[0] = cos(theta2) * (outerRadius + innerRadius * cos(phi1)); + v1[1] = -sin(theta2) * (outerRadius + innerRadius * cos(phi1)); + v1[2] = innerRadius * sin(phi1); + v2[0] = cos(theta2) * (outerRadius + innerRadius * cos(phi2)); + v2[1] = -sin(theta2) * (outerRadius + innerRadius * cos(phi2)); + v2[2] = innerRadius * sin(phi2); + + v3[0] = cos(theta1) * (outerRadius + innerRadius * cos(phi2)); + v3[1] = -sin(theta1) * (outerRadius + innerRadius * cos(phi2)); + v3[2] = innerRadius * sin(phi2); + + n0[0] = cos(theta1) * (cos(phi1)); + n0[1] = -sin(theta1) * (cos(phi1)); + n0[2] = sin(phi1); + + n1[0] = cos(theta2) * (cos(phi1)); + n1[1] = -sin(theta2) * (cos(phi1)); + n1[2] = sin(phi1); + + n2[0] = cos(theta2) * (cos(phi2)); + n2[1] = -sin(theta2) * (cos(phi2)); + n2[2] = sin(phi2); + + n3[0] = cos(theta1) * (cos(phi2)); + n3[1] = -sin(theta1) * (cos(phi2)); + n3[2] = sin(phi2); + + t0[0] = v0[0] * scalFac + 0.5; + t0[1] = v0[1] * scalFac + 0.5; + t0[2] = v0[2] * scalFac + 0.5; + + t1[0] = v1[0] * scalFac + 0.5; + t1[1] = v1[1] * scalFac + 0.5; + t1[2] = v1[2] * scalFac + 0.5; + + t2[0] = v2[0] * scalFac + 0.5; + t2[1] = v2[1] * scalFac + 0.5; + t2[2] = v2[2] * scalFac + 0.5; + + t3[0] = v3[0] * scalFac + 0.5; + t3[1] = v3[1] * scalFac + 0.5; + t3[2] = v3[2] * scalFac + 0.5; + + glBegin(GL_POLYGON); + glNormal3fv(n3); + glTexCoord3fv(t3); + glVertex3fv(v3); + glNormal3fv(n2); + glTexCoord3fv(t2); + glVertex3fv(v2); + glNormal3fv(n1); + glTexCoord3fv(t1); + glVertex3fv(v1); + glNormal3fv(n0); + glTexCoord3fv(t0); + glVertex3fv(v0); + glEnd(); + } + } + glEndList(); +} + + +/*-------------------------------------------------------------------- + noise function over R3 - implemented by a pseudorandom tricubic spline + EXCERPTED FROM SIGGRAPH 92, COURSE 23 + PROCEDURAL MODELING + Ken Perlin + New York University +----------------------------------------------------------------------*/ + + +#define DOT(a,b) (a[0] * b[0] + a[1] * b[1] + a[2] * b[2]) +#define B 128 +static int p[B + B + 2]; +static float g[B + B + 2][3]; +#define setup(i,b0,b1,r0,r1) \ + t = vec[i] + 10000.; \ + b0 = ((int)t) & (B-1); \ + b1 = (b0+1) & (B-1); \ + r0 = t - (int)t; \ + r1 = r0 - 1.; + +static float +noise3(float vec[3]) +{ + int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11; + float rx0, rx1, ry0, ry1, rz0, rz1, *q, sx, sy, sz, a, b, c, d, t, u, v; + register int i, j; + + setup(0, bx0, bx1, rx0, rx1); + setup(1, by0, by1, ry0, ry1); + setup(2, bz0, bz1, rz0, rz1); + + i = p[bx0]; + j = p[bx1]; + + b00 = p[i + by0]; + b10 = p[j + by0]; + b01 = p[i + by1]; + b11 = p[j + by1]; + +#define at(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] ) +#define surve(t) ( t * t * (3. - 2. * t) ) +#define lerp(t, a, b) ( a + t * (b - a) ) + + sx = surve(rx0); + sy = surve(ry0); + sz = surve(rz0); + + q = g[b00 + bz0]; + u = at(rx0, ry0, rz0); + q = g[b10 + bz0]; + v = at(rx1, ry0, rz0); + a = lerp(sx, u, v); + + q = g[b01 + bz0]; + u = at(rx0, ry1, rz0); + q = g[b11 + bz0]; + v = at(rx1, ry1, rz0); + b = lerp(sx, u, v); + + c = lerp(sy, a, b); /* interpolate in y at lo x */ + + q = g[b00 + bz1]; + u = at(rx0, ry0, rz1); + q = g[b10 + bz1]; + v = at(rx1, ry0, rz1); + a = lerp(sx, u, v); + + q = g[b01 + bz1]; + u = at(rx0, ry1, rz1); + q = g[b11 + bz1]; + v = at(rx1, ry1, rz1); + b = lerp(sx, u, v); + + d = lerp(sy, a, b); /* interpolate in y at hi x */ + + return 1.5 * lerp(sz, c, d); /* interpolate in z */ +} + +static void +initNoise(void) +{ + /*long random(); */ + int i, j, k; + float v[3], s; + + /* Create an array of random gradient vectors uniformly on the unit sphere */ + /*srandom(1); */ + srand(1); + for (i = 0; i < B; i++) { + do { /* Choose uniformly in a cube */ + for (j = 0; j < 3; j++) + v[j] = (float) ((rand() % (B + B)) - B) / B; + s = DOT(v, v); + } while (s > 1.0); /* If not in sphere try again */ + s = sqrt(s); + for (j = 0; j < 3; j++) /* Else normalize */ + g[i][j] = v[j] / s; + } + + /* Create a pseudorandom permutation of [1..B] */ + for (i = 0; i < B; i++) + p[i] = i; + for (i = B; i > 0; i -= 2) { + k = p[i]; + p[i] = p[j = rand() % B]; + p[j] = k; + } + + /* Extend g and p arrays to allow for faster indexing */ + for (i = 0; i < B + 2; i++) { + p[B + i] = p[i]; + for (j = 0; j < 3; j++) + g[B + i][j] = g[i][j]; + } +} + + +static float +turbulence(float point[3], float lofreq, float hifreq) +{ + float freq, t, p[3]; + + p[0] = point[0] + 123.456; + p[1] = point[1]; + p[2] = point[2]; + + t = 0; + for (freq = lofreq; freq < hifreq; freq *= 2.) { + t += fabs(noise3(p)) / freq; + p[0] *= 2.; + p[1] *= 2.; + p[2] *= 2.; + } + return t - 0.3; /* readjust to make mean value = 0.0 */ +} + + +static void +create3Dtexture(void) +{ + unsigned char *voxels = NULL; + int i, j, k; + unsigned char *vp; + float vec[3]; + int tmp; + + printf("creating 3d textures...\n"); + voxels = + (unsigned char *) + malloc((size_t) (4 * tex_width * tex_height * tex_depth)); + vp = voxels; + for (i = 0; i < tex_width; i++) { + vec[0] = i; + for (j = 0; j < tex_height; j++) { + vec[1] = j; + for (k = 0; k < tex_depth; k++) { + vec[2] = k; + tmp = (sin(k * i * j + turbulence(vec, 0.01, 1)) + 1) * 127.5; + *vp++ = 0; + *vp++ = 0; + *vp++ = tmp; + *vp++ = tmp + 128; + } + } + } + + printf("setting up 3d texture...\n"); + + glBindTexture(GL_TEXTURE_3D, NOISE_TEXTURE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, + tex_width, tex_height, tex_depth, + 0, GL_RGBA, GL_UNSIGNED_BYTE, voxels); + + free(voxels); + + printf("finished setting up 3d texture image.\n"); +} + + +static void +printHelp(void) +{ + printf("\nUsage: stex3d <cmd line options>\n"); + printf(" cmd line options:\n"); + printf(" -wxxx Width of the texture (Default=64)\n"); + printf(" -hxxx Height of the texture (Default=64)\n"); + printf(" -dxxx Depth of the texture (Default=64)\n"); + printf(" Keyboard Options:\n"); + printf(" up/down rotate around X\n"); + printf(" left/right rotate around Y\n"); + printf(" z/Z rotate around Z\n"); + printf(" a toggle animation\n"); + printf(" s toggle smooth shading\n"); + printf(" t toggle texgen mode\n"); + printf(" o toggle object: torus/sphere\n"); + printf(" i toggle texture image: noise/gradient\n"); +} + + +static GLenum +parseCmdLine(int argc, char **argv) +{ + GLint i; + + for (i = 1; i < argc; i++) { + if (strstr(argv[i], "-w") == 0) { + tex_width = atoi((argv[i]) + 2); + } + else if (strstr(argv[i], "-h") == 0) { + tex_height = atoi((argv[i]) + 2); + } + else if (strstr(argv[i], "-d") == 0) { + tex_depth = atoi((argv[i]) + 2); + } + else if (strcmp(argv[i], "-help") == 0) { + printHelp(); + return GL_FALSE; + } + else { + printf("%s (Bad option).\n", argv[i]); + printHelp(); + return GL_FALSE; + } + } + if (tex_width == 0 || tex_height == 0 || tex_depth == 0) { + printf("%s (Bad option).\n", "size parameters can't be 0"); + printHelp(); + return GL_FALSE; + } + return GL_TRUE; +} + + +static void +drawScene(void) +{ + static const GLfloat sPlane[4] = { 0.5, 0, 0, -.5 }; + static const GLfloat tPlane[4] = { 0, 0.5, 0, -.5 }; + static const GLfloat rPlane[4] = { 0, 0, 0.5, -.5 }; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glPushMatrix(); + if (texgen == 2) { + glTexGenfv(GL_S, GL_EYE_PLANE, sPlane); + glTexGenfv(GL_T, GL_EYE_PLANE, tPlane); + glTexGenfv(GL_R, GL_EYE_PLANE, rPlane); + } + + glRotatef(angx, 1.0, 0.0, 0.0); + glRotatef(angy, 0.0, 1.0, 0.0); + glRotatef(angz, 0.0, 0.0, 1.0); + + if (texgen == 1) { + glTexGenfv(GL_S, GL_EYE_PLANE, sPlane); + glTexGenfv(GL_T, GL_EYE_PLANE, tPlane); + glTexGenfv(GL_R, GL_EYE_PLANE, rPlane); + } + + if (texgen) { + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + glEnable(GL_TEXTURE_GEN_R); + } + else { + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_GEN_R); + } + + glCallList(CurObject); + glPopMatrix(); + + glutSwapBuffers(); +} + + +static void +resize(int w, int h) +{ + float ar = (float) w / (float) h; + float ax = 0.6 * ar; + float ay = 0.6; + glViewport(0, 0, (GLint) w, (GLint) h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glFrustum(-ax, ax, -ay, ay, 2, 20); + /*glOrtho(-2, 2, -2, 2, -10, 10);*/ + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef(0, 0, -4); +} + + +static void +Idle(void) +{ + float t = glutGet(GLUT_ELAPSED_TIME); + angx = 0.01 * t; + angy = 0.03 * t; + angz += 0; + glutPostRedisplay(); +} + + +static void +SpecialKey(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_UP: + angx += 5.0; + break; + case GLUT_KEY_DOWN: + angx -= 5.0; + break; + case GLUT_KEY_LEFT: + angy += 5.0; + break; + case GLUT_KEY_RIGHT: + angy -= 5.0; + break; + default: + return; + } + glutPostRedisplay(); +} + + +static void +KeyHandler(unsigned char key, int x, int y) +{ + static const char *mode[] = { + "glTexCoord3f (no texgen)", + "texgen fixed to object coords", + "texgen fixed to eye coords" + }; + (void) x; + (void) y; + switch (key) { + case 27: + case 'q': + case 'Q': /* quit game. */ + exit(0); + break; + case 'z': + angz += 10; + break; + case 'Z': + angz -= 10; + break; + case 's': + smooth = !smooth; + if (smooth) + glShadeModel(GL_SMOOTH); + else + glShadeModel(GL_FLAT); + break; + case 't': + texgen++; + if (texgen > 2) + texgen = 0; + printf("Texgen: %s\n", mode[texgen]); + break; + case 'o': + if (CurObject == TORUS) + CurObject = SPHERE; + else + CurObject = TORUS; + break; + case 'i': + if (CurTexture == NOISE_TEXTURE) + CurTexture = GRADIENT_TEXTURE; + else + CurTexture = NOISE_TEXTURE; + glBindTexture(GL_TEXTURE_3D, CurTexture); + break; + case 'a': + animate = !animate; + if (animate) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 'w': + wireframe = !wireframe; + if (wireframe) + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + else + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + break; + default: + break; + } + glutPostRedisplay(); +} + + +static void +create3Dgradient(void) +{ + unsigned char *v; + int i, j, k; + unsigned char *voxels = NULL; + + voxels = (unsigned char *) malloc(4 * tex_width * tex_height * tex_depth); + v = voxels; + + for (i = 0; i < tex_depth; i++) { + for (j = 0; j < tex_height; j++) { + for (k = 0; k < tex_width; k++) { + GLint r = (255 * i) / (tex_depth - 1); + GLint g = (255 * j) / (tex_height - 1); + GLint b = (255 * k) / (tex_width - 1); + *v++ = r; + *v++ = g; + *v++ = b; + *v++ = 255; + } + } + } + + + glBindTexture(GL_TEXTURE_3D, GRADIENT_TEXTURE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT); + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, + tex_width, tex_height, tex_depth, + 0, GL_RGBA, GL_UNSIGNED_BYTE, voxels); + + free(voxels); +} + + + +static void +init(void) +{ + static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat mat_shininess[] = { 25.0 }; + static const GLfloat gray[] = { 0.6, 0.6, 0.6, 0.0 }; + static const GLfloat white[] = { 1.0, 1.0, 1.0, 0.0 }; + static const GLfloat light_position[] = { 0.0, 1.0, 1.0, 0.0 }; + + int max; + + /* see if we have OpenGL 1.2 or later, for 3D texturing */ + { + const char *version = (const char *) glGetString(GL_VERSION); + if (strncmp(version, "1.0", 3) == 0 || strncmp(version, "1.1", 3) == 0) { + printf("Sorry, OpenGL 1.2 or later is required\n"); + exit(1); + } + } + printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER)); + glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &max); + printf("GL_MAX_3D_TEXTURE_SIZE: %d\n", max); + printf("Current 3D texture size: %d x %d x %d\n", + tex_width, tex_height, tex_depth); + + /* init light */ + glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); + glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); + glLightfv(GL_LIGHT1, GL_POSITION, light_position); + glLightfv(GL_LIGHT1, GL_AMBIENT, gray); + glLightfv(GL_LIGHT1, GL_DIFFUSE, white); + glLightfv(GL_LIGHT1, GL_SPECULAR, white); + glColorMaterial(GL_FRONT, GL_DIFFUSE); + glEnable(GL_COLOR_MATERIAL); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT1); + + glClearColor(.5, .5, .5, 0); + + { + GLUquadricObj *q; + q = gluNewQuadric(); + gluQuadricTexture( q, GL_TRUE ); + glNewList(SPHERE, GL_COMPILE); + gluSphere( q, 0.95, 30, 15 ); + glEndList(); + gluDeleteQuadric(q); + } + + BuildTorus(); + + + create3Dgradient(); + + initNoise(); + create3Dtexture(); + + glEnable(GL_TEXTURE_3D); + + /* + glBlendFunc(GL_SRC_COLOR, GL_SRC_ALPHA); + glEnable(GL_BLEND); + */ + glEnable(GL_DEPTH_TEST); + + glColor3f(0.6, 0.7, 0.8); +} + + +int +main(int argc, char **argv) +{ + glutInit(&argc, argv); + + if (parseCmdLine(argc, argv) == GL_FALSE) { + exit(0); + } + + glutInitWindowPosition(0, 0); + glutInitWindowSize(400, 400); + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + + if (glutCreateWindow("stex3d") <= 0) { + exit(0); + } + + init(); + + printHelp(); + + glutReshapeFunc(resize); + glutKeyboardFunc(KeyHandler); + glutSpecialFunc(SpecialKey); + glutDisplayFunc(drawScene); + if (animate) + glutIdleFunc(Idle); + glutMainLoop(); + return 0; +} + diff --git a/progs/demos/teapot.c b/progs/demos/teapot.c new file mode 100644 index 000000000..38ede7ac3 --- /dev/null +++ b/progs/demos/teapot.c @@ -0,0 +1,675 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <time.h> +#include <string.h> + +#ifdef WIN32 +#include <windows.h> +#endif + +#include <GL/glut.h> +#include "readtex.h" + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen=1; +#endif + +static int WIDTH=640; +static int HEIGHT=480; + +static GLint T0 = 0; +static GLint Frames = 0; + +#define BASESIZE 10.0 + +#define BASERES 12 +#define TEAPOTRES 3 + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +extern void shadowmatrix(GLfloat [4][4], GLfloat [4], GLfloat [4]); +extern void findplane(GLfloat [4], GLfloat [3], GLfloat [3], GLfloat [3]); + + +static int win=0; + +static float obs[3]={5.0,0.0,1.0}; +static float dir[3]; +static float v=0.0; +static float alpha=-90.0; +static float beta=90.0; + +static GLfloat baseshadow[4][4]; +static GLfloat lightpos[4]={2.3,0.0,3.0,1.0}; +static GLfloat lightdir[3]={-2.3,0.0,-3.0}; +static GLfloat lightalpha=0.0; + +static int fog=1; +static int bfcull=1; +static int usetex=1; +static int help=1; +static int joyavailable=0; +static int joyactive=0; + +static GLuint t1id,t2id; +static GLuint teapotdlist,basedlist,lightdlist; + + + +/******************** begin shadow code ********************/ + +/* Taken from the projshadow.c - by Tom McReynolds, SGI */ + +/* Modified by David Bucciarelli */ + +enum { + X, Y, Z, W +}; +enum { + A, B, C, D +}; + +/* create a matrix that will project the desired shadow */ +void +shadowmatrix(GLfloat shadowMat[4][4], + GLfloat groundplane[4], + GLfloat lightpos[4]) +{ + GLfloat dot; + + /* find dot product between light position vector and ground plane normal */ + dot = groundplane[X] * lightpos[X] + + groundplane[Y] * lightpos[Y] + + groundplane[Z] * lightpos[Z] + + groundplane[W] * lightpos[W]; + + shadowMat[0][0] = dot - lightpos[X] * groundplane[X]; + shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y]; + shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z]; + shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W]; + + shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X]; + shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y]; + shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z]; + shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W]; + + shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X]; + shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y]; + shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z]; + shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W]; + + shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X]; + shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y]; + shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z]; + shadowMat[3][3] = dot - lightpos[W] * groundplane[W]; + +} + +/* find the plane equation given 3 points */ +void +findplane(GLfloat plane[4], + GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]) +{ + GLfloat vec0[3], vec1[3]; + + /* need 2 vectors to find cross product */ + vec0[X] = v1[X] - v0[X]; + vec0[Y] = v1[Y] - v0[Y]; + vec0[Z] = v1[Z] - v0[Z]; + + vec1[X] = v2[X] - v0[X]; + vec1[Y] = v2[Y] - v0[Y]; + vec1[Z] = v2[Z] - v0[Z]; + + /* find cross product to get A, B, and C of plane equation */ + plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y]; + plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]); + plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X]; + + plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]); +} + +/******************** end shadow code ********************/ + + +static void calcposobs(void) +{ + dir[0]=sin(alpha*M_PI/180.0); + dir[1]=cos(alpha*M_PI/180.0)*sin(beta*M_PI/180.0); + dir[2]=cos(beta*M_PI/180.0); + + obs[0]+=v*dir[0]; + obs[1]+=v*dir[1]; + obs[2]+=v*dir[2]; +} + +static void special(int k, int x, int y) +{ + switch(k) { + case GLUT_KEY_LEFT: + alpha-=2.0; + break; + case GLUT_KEY_RIGHT: + alpha+=2.0; + break; + case GLUT_KEY_DOWN: + beta-=2.0; + break; + case GLUT_KEY_UP: + beta+=2.0; + break; + } +} + +static void key(unsigned char k, int x, int y) +{ + switch(k) { + case 27: + exit(0); + break; + + case 'a': + v+=0.005; + break; + case 'z': + v-=0.005; + break; + + case 'j': + joyactive=(!joyactive); + break; + case 'h': + help=(!help); + break; + case 'f': + fog=(!fog); + break; + case 't': + usetex=(!usetex); + break; + case 'b': + if(bfcull) { + glDisable(GL_CULL_FACE); + bfcull=0; + } else { + glEnable(GL_CULL_FACE); + bfcull=1; + } + break; +#ifdef XMESA + case ' ': + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + fullscreen=(!fullscreen); + break; +#endif + } +} + +static void reshape(int w, int h) +{ + WIDTH=w; + HEIGHT=h; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0,w/(float)h,0.2,40.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glViewport(0,0,w,h); +} + +static void printstring(void *font, char *string) +{ + int len,i; + + len=(int)strlen(string); + for(i=0;i<len;i++) + glutBitmapCharacter(font,string[i]); +} + +static void printhelp(void) +{ + glEnable(GL_BLEND); + glColor4f(0.5,0.5,0.5,0.5); + glRecti(40,40,600,440); + glDisable(GL_BLEND); + + glColor3f(1.0,0.0,0.0); + glRasterPos2i(300,420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Help"); + + glRasterPos2i(60,390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"h - Toggle Help"); + glRasterPos2i(60,360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"t - Toggle Textures"); + glRasterPos2i(60,330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"f - Toggle Fog"); + glRasterPos2i(60,300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"b - Toggle Back face culling"); + glRasterPos2i(60,270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"Arrow Keys - Rotate"); + glRasterPos2i(60,240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"a - Increase velocity"); + glRasterPos2i(60,210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"z - Decrease velocity"); + + glRasterPos2i(60,180); + if(joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24,"(No Joystick control available)"); +} + +static void drawbase(void) +{ + static const GLfloat amb[4] = { 1, .5, 0.2, 1 }; + static const GLfloat diff[4] = { 1, .4, 0.2, 1 }; + int i,j; + float x,y,dx,dy; + + glBindTexture(GL_TEXTURE_2D,t1id); + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff); + dx=BASESIZE/BASERES; + dy=-BASESIZE/BASERES; + for(y=BASESIZE/2.0,j=0;j<BASERES;y+=dy,j++) { + glBegin(GL_QUAD_STRIP); + glColor3f(1.0,1.0,1.0); + glNormal3f(0.0,0.0,1.0); + for(x=-BASESIZE/2.0,i=0;i<BASERES;x+=dx,i++) { + glTexCoord2f(x,y); + glVertex3f(x,y,0.0); + + glTexCoord2f(x,y+dy); + glVertex3f(x,y+dy,0.0); + } + glEnd(); + } +} + +static void drawteapot(void) +{ + static const GLfloat amb[4] = { 0.2, 0.2, 0.2, 1 }; + static const GLfloat diff[4] = { 0.8, 0.3, 0.5, 1 }; + static float xrot=0.0; + static float zrot=0.0; + + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff); + + glPushMatrix(); + glRotatef(lightalpha,0.0,0.0,1.0); + glMultMatrixf((GLfloat *)baseshadow); + glRotatef(-lightalpha,0.0,0.0,1.0); + + glTranslatef(0.0,0.0,1.0); + glRotatef(xrot,1.0,0.0,0.0); + glRotatef(zrot,0.0,0.0,1.0); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_DEPTH_TEST); + glDisable(GL_LIGHTING); + + glColor3f(0.0,0.0,0.0); + glCallList(teapotdlist); + + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + if(usetex) + glEnable(GL_TEXTURE_2D); + + glPopMatrix(); + + glPushMatrix(); + glTranslatef(0.0,0.0,1.0); + glRotatef(xrot,1.0,0.0,0.0); + glRotatef(zrot,0.0,0.0,1.0); + + glCallList(teapotdlist); + glPopMatrix(); + + xrot+=2.0; + zrot+=1.0; +} + +static void drawlight1(void) +{ + glPushMatrix(); + glRotatef(lightalpha,0.0,0.0,1.0); + glLightfv(GL_LIGHT0,GL_POSITION,lightpos); + glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,lightdir); + + glPopMatrix(); +} + +static void drawlight2(void) +{ + glPushMatrix(); + glRotatef(lightalpha,0.0,0.0,1.0); + glTranslatef(lightpos[0],lightpos[1],lightpos[2]); + + glDisable(GL_TEXTURE_2D); + glCallList(lightdlist); + if(usetex) + glEnable(GL_TEXTURE_2D); + + glPopMatrix(); + + lightalpha+=1.0; +} + +static void dojoy(void) +{ +#ifdef WIN32 + static UINT max[2]={0,0}; + static UINT min[2]={0xffffffff,0xffffffff},center[2]; + MMRESULT res; + JOYINFO joy; + + res=joyGetPos(JOYSTICKID1,&joy); + + if(res==JOYERR_NOERROR) { + joyavailable=1; + + if(max[0]<joy.wXpos) + max[0]=joy.wXpos; + if(min[0]>joy.wXpos) + min[0]=joy.wXpos; + center[0]=(max[0]+min[0])/2; + + if(max[1]<joy.wYpos) + max[1]=joy.wYpos; + if(min[1]>joy.wYpos) + min[1]=joy.wYpos; + center[1]=(max[1]+min[1])/2; + + if(joyactive) { + if(fabs(center[0]-(float)joy.wXpos)>0.1*(max[0]-min[0])) + alpha-=2.5*(center[0]-(float)joy.wXpos)/(max[0]-min[0]); + if(fabs(center[1]-(float)joy.wYpos)>0.1*(max[1]-min[1])) + beta+=2.5*(center[1]-(float)joy.wYpos)/(max[1]-min[1]); + + if(joy.wButtons & JOY_BUTTON1) + v+=0.005; + if(joy.wButtons & JOY_BUTTON2) + v-=0.005; + } + } else + joyavailable=0; +#endif +} + +static void draw(void) +{ + static char frbuf[80] = ""; + + dojoy(); + + glEnable(GL_DEPTH_TEST); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + if(usetex) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + + if(fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glEnable(GL_LIGHTING); + + glShadeModel(GL_SMOOTH); + + glPushMatrix(); + calcposobs(); + + gluLookAt(obs[0],obs[1],obs[2], + obs[0]+dir[0],obs[1]+dir[1],obs[2]+dir[2], + 0.0,0.0,1.0); + + drawlight1(); + glCallList(basedlist); + drawteapot(); + drawlight2(); + glPopMatrix(); + + glDisable(GL_LIGHTING); + glDisable(GL_TEXTURE_2D); + glDisable(GL_DEPTH_TEST); + glDisable(GL_FOG); + glShadeModel(GL_FLAT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5,639.5,-0.5,479.5,-1.0,1.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0,0.0,0.0); + glRasterPos2i(10,10); + printstring(GLUT_BITMAP_HELVETICA_18,frbuf); + glRasterPos2i(350,470); + printstring(GLUT_BITMAP_HELVETICA_10,"Teapot V1.2 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if(help) + printhelp(); + + reshape(WIDTH,HEIGHT); + + glutSwapBuffers(); + + Frames++; + + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + +static void inittextures(void) +{ + glGenTextures(1,&t1id); + glBindTexture(GL_TEXTURE_2D,t1id); + + glPixelStorei(GL_UNPACK_ALIGNMENT,4); + if (!LoadRGBMipmaps("../images/tile.rgb", GL_RGB)) { + fprintf(stderr,"Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); + + glGenTextures(1,&t2id); + glBindTexture(GL_TEXTURE_2D,t2id); + + glPixelTransferf(GL_RED_SCALE, 0.75); + glPixelTransferf(GL_RED_BIAS, 0.25); + glPixelTransferf(GL_GREEN_SCALE, 0.75); + glPixelTransferf(GL_GREEN_BIAS, 0.25); + glPixelTransferf(GL_BLUE_SCALE, 0.75); + glPixelTransferf(GL_BLUE_BIAS, 0.25); + + if (!LoadRGBMipmaps("../images/bw.rgb", GL_RGB)) { + fprintf(stderr,"Error reading a texture.\n"); + exit(-1); + } + + glPixelTransferf(GL_RED_SCALE, 1.0); + glPixelTransferf(GL_RED_BIAS, 0.0); + glPixelTransferf(GL_GREEN_SCALE, 1.0); + glPixelTransferf(GL_GREEN_BIAS, 0.0); + glPixelTransferf(GL_BLUE_SCALE, 1.0); + glPixelTransferf(GL_BLUE_BIAS, 0.0); + + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); +} + +static void initlight(void) +{ + float matamb[4] ={0.5, 0.5, 0.5, 1.0}; + float matdiff[4]={0.9, 0.2, 0.2, 1.0}; + float matspec[4]={1.0,1.0,1.0,1.0}; + + float lamb[4] ={1.5, 1.5, 1.5, 1.0}; + float ldiff[4]={1.0, 1.0, 1.0, 1.0}; + float lspec[4]={1.0, 1.0, 1.0, 1.0}; + + glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,70.0); + glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0); + glLightfv(GL_LIGHT0,GL_AMBIENT,lamb); + glLightfv(GL_LIGHT0,GL_DIFFUSE,ldiff); + glLightfv(GL_LIGHT0,GL_SPECULAR,lspec); + + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 15.0); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matdiff); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matspec); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matamb); + + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lamb); + glEnable(GL_LIGHT0); +} + +static void initdlists(void) +{ + GLUquadricObj *lcone,*lbase; + GLfloat plane[4]; + GLfloat v0[3]={0.0,0.0,0.0}; + GLfloat v1[3]={1.0,0.0,0.0}; + GLfloat v2[3]={0.0,1.0,0.0}; + + findplane(plane,v0,v1,v2); + shadowmatrix(baseshadow,plane,lightpos); + + teapotdlist=glGenLists(1); + glNewList(teapotdlist,GL_COMPILE); + glRotatef(90.0,1.0,0.0,0.0); + glCullFace(GL_FRONT); + glBindTexture(GL_TEXTURE_2D,t2id); + glutSolidTeapot(0.75); + glCullFace(GL_BACK); + glEndList(); + + basedlist=glGenLists(1); + glNewList(basedlist,GL_COMPILE); + drawbase(); + glEndList(); + + lightdlist=glGenLists(1); + glNewList(lightdlist,GL_COMPILE); + glDisable(GL_LIGHTING); + + lcone=gluNewQuadric(); + lbase=gluNewQuadric(); + glRotatef(45.0,0.0,1.0,0.0); + + glColor3f(1.0,1.0,1.0); + glCullFace(GL_FRONT); + gluDisk(lbase,0.0,0.2,12.0,1.0); + glCullFace(GL_BACK); + + glColor3f(0.5,0.0,0.0); + gluCylinder(lcone,0.2,0.0,0.5,12,1); + + gluDeleteQuadric(lcone); + gluDeleteQuadric(lbase); + + glEnable(GL_LIGHTING); + glEndList(); +} + +int main(int ac, char **av) +{ + float fogcolor[4]={0.025,0.025,0.025,1.0}; + + fprintf(stderr,"Teapot V1.2\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + /* + if(!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) { + fprintf(stderr,"Error setting the process class.\n"); + return 0; + } + + if(!SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)) { + fprintf(stderr,"Error setting the process priority.\n"); + return 0; + } + */ + + glutInitWindowPosition(0,0); + glutInitWindowSize(WIDTH,HEIGHT); + glutInit(&ac,av); + + glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE); + + if(!(win=glutCreateWindow("Teapot"))) { + fprintf(stderr,"Error, couldn't open window\n"); + return -1; + } + + reshape(WIDTH,HEIGHT); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE,GL_EXP2); + glFogfv(GL_FOG_COLOR,fogcolor); + + glFogf(GL_FOG_DENSITY,0.04); + glHint(GL_FOG_HINT,GL_NICEST); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + + calcposobs(); + + inittextures(); + initlight(); + + initdlists(); + + glClearColor(fogcolor[0],fogcolor[1],fogcolor[2],fogcolor[3]); + + glutReshapeFunc(reshape); + glutDisplayFunc(draw); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutIdleFunc(draw); + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/terrain.c b/progs/demos/terrain.c new file mode 100644 index 000000000..be78ea495 --- /dev/null +++ b/progs/demos/terrain.c @@ -0,0 +1,656 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + * + * based on a Mikael SkiZoWalker's (MoDEL) / France (Skizo@Hol.Fr) demo + */ + +#include <stdio.h> +#include <math.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#ifdef WIN32 +#include <windows.h> +#endif + +#include <GL/glut.h> + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +#ifndef M_PI +#define M_PI 3.14159265 +#endif + +#define heightMnt 450 +#define lenghtXmnt 62 +#define lenghtYmnt 62 + +#define stepXmnt 96.0 +#define stepYmnt 96.0 + +#define WIDTH 640 +#define HEIGHT 480 + +static GLint T0 = 0; +static GLint Frames = 0; + +#define TSCALE 4 + +#define FOV 85 + +static GLfloat terrain[256 * 256]; +static GLfloat terraincolor[256 * 256][3]; + +static int win = 0; + +static int fog = 1; +static int bfcull = 1; +static int usetex = 1; +static int poutline = 0; +static int help = 1; +static int joyavailable = 0; +static int joyactive = 0; +static float ModZMnt; +static long GlobalMnt = 0; + +static int scrwidth = WIDTH; +static int scrheight = HEIGHT; + +#define OBSSTARTX 992.0 +#define OBSSTARTY 103.0 + +static float obs[3] = { OBSSTARTX, heightMnt * 1.3, OBSSTARTY }; +static float dir[3], v1[2], v2[2]; +static float v = 900.0; +static float alpha = 75.0; +static float beta = 90.0; + +static void +calcposobs(void) +{ + float alpha1, alpha2; + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + dir[0] = sin(alpha * M_PI / 180.0); + dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[1] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + alpha1 = alpha + FOV / 2.0; + v1[0] = sin(alpha1 * M_PI / 180.0); + v1[1] = cos(alpha1 * M_PI / 180.0); + + alpha2 = alpha - FOV / 2.0; + v2[0] = sin(alpha2 * M_PI / 180.0); + v2[1] = cos(alpha2 * M_PI / 180.0); + + obs[0] += v * dir[0] * dt; + obs[1] += v * dir[1] * dt; + obs[2] += v * dir[2] * dt; + + if (obs[1] < 0.0) + obs[1] = 0.0; +} + +static void +reshape(int width, int height) +{ + scrwidth = width; + scrheight = height; + glViewport(0, 0, (GLint) width, (GLint) height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(50.0, ((GLfloat) width / (GLfloat) height), + lenghtXmnt * stepYmnt * 0.01, lenghtXmnt * stepYmnt * 0.7); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + +static int +clipstrip(float y, float *start, float *end) +{ + float x1, x2, t1, t2, tmp; + + if (v1[1] == 0.0) { + t1 = 0.0; + x1 = -HUGE_VAL; + } + else { + t1 = y / v1[1]; + x1 = t1 * v1[0]; + } + + if (v2[1] == 0.0) { + t2 = 0.0; + x2 = HUGE_VAL; + } + else { + t2 = y / v2[1]; + x2 = t2 * v2[0]; + } + + if (((x1 < -(lenghtXmnt * stepXmnt) / 2) && (t2 <= 0.0)) || + ((t1 <= 0.0) && (x2 > (lenghtXmnt * stepXmnt) / 2)) || + ((t1 < 0.0) && (t2 < 0.0))) + return 0; + + if ((t1 == 0.0) && (t2 == 0.0)) { + if ((v1[0] < 0.0) && (v1[1] > 0.0) && (v2[0] < 0.0) && (v2[1] < 0.0)) { + *start = -(lenghtXmnt * stepXmnt) / 2; + *end = stepXmnt; + return 1; + } + else { + if ((v1[0] > 0.0) && (v1[1] < 0.0) && (v2[0] > 0.0) && (v2[1] > 0.0)) { + *start = -stepXmnt; + *end = (lenghtXmnt * stepXmnt) / 2; + return 1; + } + else + return 0; + } + } + else { + if (t2 < 0.0) { + if (x1 < 0.0) + x2 = -(lenghtXmnt * stepXmnt) / 2; + else + x2 = (lenghtXmnt * stepXmnt) / 2; + } + + if (t1 < 0.0) { + if (x2 < 0.0) + x1 = -(lenghtXmnt * stepXmnt) / 2; + else + x1 = (lenghtXmnt * stepXmnt) / 2; + } + } + + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + x1 -= stepXmnt; + if (x1 < -(lenghtXmnt * stepXmnt) / 2) + x1 = -(lenghtXmnt * stepXmnt) / 2; + + x2 += stepXmnt; + if (x2 > (lenghtXmnt * stepXmnt) / 2) + x2 = (lenghtXmnt * stepXmnt) / 2; + + *start = ((int) (x1 / stepXmnt)) * stepXmnt; + *end = ((int) (x2 / stepXmnt)) * stepXmnt; + + return 1; +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +printhelp(void) +{ + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(0.0, 0.0, 0.0, 0.5); + glRecti(40, 40, 600, 440); + glDisable(GL_BLEND); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help"); + glRasterPos2i(60, 360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog"); + glRasterPos2i(60, 300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "p - Wire frame"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling"); + glRasterPos2i(60, 240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "a - Increase velocity"); + glRasterPos2i(60, 180); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "z - Decrease velocity"); + + glRasterPos2i(60, 150); + if (joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "(No Joystick control available)"); +} + +static void +drawterrain(void) +{ + int h, i, idx, ox, oy; + float j, k, start, end; + + ox = (int) (obs[0] / stepXmnt); + oy = (int) (obs[2] / stepYmnt); + GlobalMnt = ((ox * TSCALE) & 255) + ((oy * TSCALE) & 255) * 256; + + glPushMatrix(); + glTranslatef((float) ox * stepXmnt, 0, (float) oy * stepYmnt); + + for (h = 0, k = -(lenghtYmnt * stepYmnt) / 2; h < lenghtYmnt; + k += stepYmnt, h++) { + if (!clipstrip(k, &start, &end)) + continue; + + glBegin(GL_TRIANGLE_STRIP); /* I hope that the optimizer will be able to improve this code */ + for (i = (int) (lenghtXmnt / 2 + start / stepXmnt), j = start; j <= end; + j += stepXmnt, i++) { + idx = (i * TSCALE + h * 256 * TSCALE + GlobalMnt) & 65535; + glColor3fv(terraincolor[idx]); + glTexCoord2f((ox + i) / 8.0, (oy + h) / 8.0); + glVertex3f(j, terrain[idx], k); + + idx = + (i * TSCALE + h * 256 * TSCALE + 256 * TSCALE + + GlobalMnt) & 65535; + glColor3fv(terraincolor[idx]); + glTexCoord2f((ox + i) / 8.0, (oy + h + 1) / 8.0); + glVertex3f(j, terrain[idx], k + stepYmnt); + } + glEnd(); + } + + glDisable(GL_CULL_FACE); + glDisable(GL_TEXTURE_2D); + glEnable(GL_BLEND); + glBegin(GL_QUADS); + glColor4f(0.1, 0.7, 1.0, 0.4); + glVertex3f(-(lenghtXmnt * stepXmnt) / 2.0, heightMnt * 0.6, + -(lenghtYmnt * stepYmnt) / 2.0); + glVertex3f(-(lenghtXmnt * stepXmnt) / 2.0, heightMnt * 0.6, + (lenghtYmnt * stepYmnt) / 2.0); + glVertex3f((lenghtXmnt * stepXmnt) / 2.0, heightMnt * 0.6, + (lenghtYmnt * stepYmnt) / 2.0); + glVertex3f((lenghtXmnt * stepXmnt) / 2.0, heightMnt * 0.6, + -(lenghtYmnt * stepYmnt) / 2.0); + glEnd(); + glDisable(GL_BLEND); + if (bfcull) + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + + glPopMatrix(); + +} + +static void +dojoy(void) +{ +#ifdef WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha += + 2.5 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.5 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.5; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.5; + } + } + else + joyavailable = 0; +#endif +} + +static void +drawscene(void) +{ + static char frbuf[80] = ""; + + dojoy(); + + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + + if (usetex) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glPushMatrix(); + + calcposobs(); + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 1.0, 0.0); + + drawterrain(); + glPopMatrix(); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_DEPTH_TEST); + glDisable(GL_FOG); + glShadeModel(GL_FLAT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(350, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "Terrain V1.2 Written by David Bucciarelli (tech.hmw@plus.it)"); + glRasterPos2i(434, 457); + printstring(GLUT_BITMAP_HELVETICA_10, + "Based on a Mickael's demo (Skizo@Hol.Fr)"); + + if (help) + printhelp(); + + reshape(scrwidth, scrheight); + + glutSwapBuffers(); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: + exit(0); + break; + case 'a': + v += 50.; + break; + case 'z': + v -= 50.; + break; + case 'p': + if (poutline) { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + poutline = 0; + } + else { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + poutline = 1; + } + break; + case 'j': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + case 't': + usetex = (!usetex); + break; + case 'b': + if (bfcull) { + glDisable(GL_CULL_FACE); + bfcull = 0; + } + else { + glEnable(GL_CULL_FACE); + bfcull = 1; + } + break; +#ifdef XMESA + case ' ': + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + fullscreen = (!fullscreen); + break; +#endif + } +} + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_LEFT: + alpha += 2.0; + break; + case GLUT_KEY_RIGHT: + alpha -= 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } +} + +static void +calccolor(GLfloat height, GLfloat c[3]) +{ + GLfloat color[4][3] = { + {1.0, 1.0, 1.0}, + {0.0, 0.8, 0.0}, + {1.0, 1.0, 0.3}, + {0.0, 0.0, 0.8} + }; + GLfloat fact; + + height = height * (1.0 / 255.0); + + if (height >= 0.9) { + c[0] = color[0][0]; + c[1] = color[0][1]; + c[2] = color[0][2]; + return; + } + + if ((height < 0.9) && (height >= 0.7)) { + fact = (height - 0.7) * 5.0; + c[0] = fact * color[0][0] + (1.0 - fact) * color[1][0]; + c[1] = fact * color[0][1] + (1.0 - fact) * color[1][1]; + c[2] = fact * color[0][2] + (1.0 - fact) * color[1][2]; + return; + } + + if ((height < 0.7) && (height >= 0.6)) { + fact = (height - 0.6) * 10.0; + c[0] = fact * color[1][0] + (1.0 - fact) * color[2][0]; + c[1] = fact * color[1][1] + (1.0 - fact) * color[2][1]; + c[2] = fact * color[1][2] + (1.0 - fact) * color[2][2]; + return; + } + + if ((height < 0.6) && (height >= 0.5)) { + fact = (height - 0.5) * 10.0; + c[0] = fact * color[2][0] + (1.0 - fact) * color[3][0]; + c[1] = fact * color[2][1] + (1.0 - fact) * color[3][1]; + c[2] = fact * color[2][2] + (1.0 - fact) * color[3][2]; + return; + } + + c[0] = color[3][0]; + c[1] = color[3][1]; + c[2] = color[3][2]; +} + +static void +loadpic(void) +{ + GLubyte bufferter[256 * 256], terrainpic[256 * 256]; + FILE *FilePic; + int i, tmp; + GLenum gluerr; + + if ((FilePic = fopen("terrain.dat", "r")) == NULL) { + fprintf(stderr, "Error loading terrain.dat\n"); + exit(-1); + } + fread(bufferter, 256 * 256, 1, FilePic); + fclose(FilePic); + + for (i = 0; i < (256 * 256); i++) { + terrain[i] = (bufferter[i] * (heightMnt / 255.0f)); + calccolor((GLfloat) bufferter[i], terraincolor[i]); + tmp = (((int) bufferter[i]) + 96); + terrainpic[i] = (tmp > 255) ? 255 : tmp; + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + if ((gluerr = gluBuild2DMipmaps(GL_TEXTURE_2D, 1, 256, 256, GL_LUMINANCE, + GL_UNSIGNED_BYTE, + (GLvoid *) (&terrainpic[0])))) { + fprintf(stderr, "GLULib%s\n", (char *) gluErrorString(gluerr)); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_TEXTURE_2D); +} + +static void +init(void) +{ + float fogcolor[4] = { 0.6, 0.7, 0.7, 1.0 }; + + glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], fogcolor[3]); + glClearDepth(1.0); + glDepthFunc(GL_LEQUAL); + glShadeModel(GL_SMOOTH); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + + glDisable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogfv(GL_FOG_COLOR, fogcolor); + glFogf(GL_FOG_DENSITY, 0.0007); +#ifdef FX + glHint(GL_FOG_HINT, GL_NICEST); +#endif + + reshape(scrwidth, scrheight); +} + + +int +main(int ac, char **av) +{ + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); + + if (!(win = glutCreateWindow("Terrain"))) { + fprintf(stderr, "Error, couldn't open window\n"); + return -1; + } + + ModZMnt = 0.0f; + loadpic(); + + init(); + +#ifndef FX + glDisable(GL_TEXTURE_2D); + usetex = 0; +#endif + + glutReshapeFunc(reshape); + glutDisplayFunc(drawscene); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutIdleFunc(drawscene); + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/terrain.dat b/progs/demos/terrain.dat new file mode 100644 index 000000000..2af385e9c --- /dev/null +++ b/progs/demos/terrain.dat @@ -0,0 +1 @@ +‚ƒƒ…†„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡‰‹“•––•––––—˜š›œœš–“‘ŽŒ‹‹‹‹‹Œ‹‹ŽŒŒŒ‹‰†……„ƒ‚ƒ‚‚ƒ…ˆŠ‹‹ˆ…ƒ‚ƒ„…†‡‡†…ƒƒ„„…‡ˆ‰ŠŽ“““’’•˜š›™–•””•˜™—“ŽŽŽŽ‹‰†ƒ‚‚‚‚ƒ…‡…„ƒƒƒƒ‚ƒ‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„…†‰ŒŽ“•––••–—˜˜˜™œ™•“‘Œ‰ˆˆˆˆˆˆˆ‡‡‰‹‹ŠŠŠ‰ˆ‡†††„ƒ„…ƒƒƒ„†ˆŠ‹ˆ…‚‚ƒ…†‡‡††††ˆ‰ˆˆˆˆˆŠŽŽŽŽ‘”—›š˜———˜š›—”‘‹ˆ†ƒ‚‚‚‚‚„†„„ƒ‚ƒ„†‡…„„…ƒ‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†ˆŒ‘’”•––•••—˜™™›œœœ˜–•’Ž‰‡†…„„††…„„…††ˆˆ‡††……†…„„‡ˆ‡††…†ˆ‹Œ‰†ƒ‚ƒ†ˆ‰‰ˆˆˆŒŒŠ‰ˆŠ‹Š‰ˆŠŒ’–›œ›š›››œœ˜•’‘’’’‘Ž‹ˆ…‚‚‚‚‚‚„…ƒ‚‚‚ƒ…ˆŠˆˆˆ‡…„…‡…‚‚‚‚‚‚‚ƒƒƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰ŠŽ‘”••–—•”‘‘“•™œœœœš˜•’‰†„ƒ‚ƒƒƒƒ‚‚‚‚ƒ„ƒƒƒ„„„…†‡ˆŠŒ‹Šˆ††ˆŠŒ‹‰…ƒ„…ˆŒ‹‹ŒŽ‘’“Ž‹Š‰ˆ‡††ˆ‹”˜›žœœ›—•’‘‘““Œˆ„‚‚‚‚‚‚„…‚‚‚‚ƒ†ŠŒ‹‹Šˆ‡†ˆˆ…‚‚‚‚‚‚ƒ…†‡ˆ‡…ƒƒ‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‰‹Ž‘•————–”’‘“—›œœœœ›˜•‘Œ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ………‡‰ŠŽŽŽŒŠ‰ˆ‰‹Ž‰…„„†ŠŒŒ’“”•–”‹ˆ††……ˆŒ”˜›žžžœ›š—•’‘“”Œˆ„‚‚‚‚‚„……ƒ‚ƒƒ„†‰ŒŒŠˆ‰‰ˆ…ƒ‚‚‚‚‚„‡ˆˆˆ‡‡‡‡……†‡‡†…„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚ƒ‚‚ƒ†ˆŠŠ‹Ž’•——–••’ŽŽ‘”—˜š›š˜–“‘Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‡ˆ‰ŠŒŽŒ‹‹ŠŠ‹‹‡„‚„‡ŠŒ’”“”—™–“ŒŠˆ‡†‡‰Œ“–™œ››››™˜™™—•‘‘“”’Ž‰…ƒ‚‚‚ƒ„…………††‡ˆŠŒŽŽ‹Š‰ˆ…ƒ‚‚‚‚„†ˆˆˆˆ‰‹Œ‹‰‹Œ‹‰ˆ†„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„„ƒƒ…†„„…ˆ‰‹‹Œ“–—–•”“‘ŽŽ‘’”—š›š˜–”’‹‡„ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ…†‡ˆ‰‹ŒŽ‘‘Œ‹‹Š‹ŒŠ‡…„…‡‰‹Ž‘”•”–š›˜•‘ŽŒŠˆ‡‰‹“–™›š™˜˜––—˜–“Ž“”‘‰†„ƒ‚‚‚ƒ„†‡ˆ‡ˆŠ‹‘ŽŠˆ…ƒƒ„„…‡ˆˆˆ‰ŠŒ‘’‘ŽŒŠ‡††…ƒ‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„…†‡‰‡‡ˆˆ‡†‡ˆ‰Š‹‘”–—–•’‘’’’”—™š™—”’Ž‹‰‡…ƒ‚‚‚‚‚‚‚‚‚„…†‡ˆˆ‰‹Œ’••’ŽŒŒŒŒŒŠ‰ˆˆ‡‡ˆ‰‹’•––˜šœš—’ŒŠ‡†ˆ‹Ž‘”˜šœ›š—•••–•“‘Ž’“‹‰‡…„‚‚‚‚„†‡‡‡‰‹Œ‘‘‘““‘Œ‰ˆ‡†‡ˆˆŠŠŠŠ‹Ž‘“”““““‘Ž‹‰‰‰ˆ…ƒ‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†……†Š‹Š‰‰‰ˆ‡ˆˆˆ‰Œ’”–—–“Ž‘’’‘“•˜›š—”’Ž‹‰‡†„‚‚‚‚‚‚‚‚„†‡‡ˆ‰Š‰Š‘”˜™•‘ŽŽ‹Š‹Œ‹‹Š‰ŠŒ’•–—™›œš–’Œ‰†ˆŒ’•˜šœ›™–””““”’Ž’’Ž‹‰‡…„‚‚‚‚‚‚ƒ„†Š‹Œ‘‘’’‘‘Ž‹ˆˆˆŠ‹ŒŒŽ‘“““’Ž‹Š‹Œ‹‰‡……†„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ…‡Š‹Š‰‡‡†‡‡‡ˆ‹Ž‘’”“’ŽŽŽ‘’”•—•“’‹‰‡‡…ƒ‚‚‚‚‚‚‚ƒ…‡‡‡‡ŠŠ‰ŠŒ•™š—”’Ž‹‹ŒŠŠŒ’”–—˜—•“Ž‰‡ŠŽ‘”–˜™˜–”“‘’“ŽŒŒŽ‹‰†…ƒ‚‚‚‚‚‚‚‚ƒ†Š‹‹Ž‘’’‘’’’ŠŠ‹ŽŽŽ’‘‘‘ŒŒŽŒŒ‹Š‹‹‡„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‰Š‰ˆ†††‡‡‡ŠŽ‘‘‘’’‘‘Œ‘“””•“‘Œ‰‡†ƒ‚‚‚‚‚‚‚ƒ„‡‰‡†‰‹‹ŠŠ‹–›š˜–“‘ŽŽŽŽŒŒŽ’“”–•“‘ŒŠ‹Ž“•———–”’‘““ŽŽŒŠ‡…„‚‚‚‚‚‚‚‚‚ƒˆ‹‹‘‘‘‘’’“‘ŽŽŽŽ‘‘‘‘ŽŽŽŽŽŽŠ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡‡‡‡‡ˆ‰‰‰Œ‘’‘‘‘’’’‘ŽŽ‘”•–•”“’‘‹ˆ…ƒ‚‚‚‚ƒƒ„…‡‰‰‡ˆŠŠŠŠŠ’˜ž žš˜–•””’Ž’’’‘‘’“’‘’“’ŽŽŽŽŽ’”–––•”’’““ŽŒŒŒŠ‰‡…ƒ‚‚‚‚‚‚‚‚ƒ†ŠŽŽŽ’“”’‘‘‘’“‘‘‘‘“’‘Œ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…†‡‡ˆˆ‰‹‹ŒŽ’‘Ž‘’’‘ŽŽŽ“•–——–•”’‘ŽŒˆ„‚‚‚‚‚ƒ„†‡ˆˆˆˆˆŠ‹ŠŠŒŽ’˜ž¢¡ ššš™˜•’‘“•””’‘‘‘Ž‘’’’‘‘”–—–––•“’‘ŽŒŒŒŒ‹‰‡†…„‚‚‚‚‚‚‚‚‚„ˆ‹ŽŽŽŽŽ‘’‘‘ŽŽŽŽ‘”’‘‘““‘Ž‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‡…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„††††‡ˆŠ‹‹‹ŒŽŒŒŽ‘‘“–˜˜˜˜™—•“Š‡„ƒ‚ƒ„ƒ„………‡ˆ‰ˆˆŠŒ‹ŒŽ“˜ Ÿœššœœ›˜––•““•––•““‘ŽŒŒŽŽŽ‘’”––—™™–”“’ŽŒŠˆ„ƒƒ„ƒ‚‚‚‚‚‚‚‚ƒ…‰ŒŽŽŽŽ’’ŽŽ’•“‘‘ŽŽ‘“”“Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ…‡‰‹Œ‹‰‡…ƒ‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ………„…†ˆŠ‹‹‹‹ŠŠ‹ŒŒ‹‹Œ‘“•–™›››œ›—•“‘‰†…„ƒ………„„„…†‡‰‰ˆ‹ŽŽ”˜œŸŸŸœšœžŸ ››š™˜™š™—–”’ŒŒŒ‹‰‰Œ“””•——™››˜—–•“Œ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ŠŒŽŽŒ‹Œ‘‘ŽŽŽŒŒŒ‘”‘ŽŽŽŒ‹‹‘“–”’Š†„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„…‡‰ŠŽŽŽŒŠ‡†‡ˆ††…„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚„…‡Š‹ŒŒ‹Š‰‰‰‰‰‰‹Ž‘“—™šœŸŸŸŸœ˜•”’‰†………†‡‡…ƒ„†ˆ‰ŠŠŒŽŽ’•™žŸ¡£¡ ŸŸœ›™˜—“ŒŠŠŠˆˆŠŒ‘“––—˜šš›œ›™˜˜•“‘‰„‚‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŒŽŽŽŒ‹‹’““‘ŽŽŽŒ‹ŒŽ’”“Ž‹Š‹‘”––“Šˆ†„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‰‹’‘ŽŠ‰Š‰ŠŠ‰ˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†ˆ‹‹‹Š‰‡†‡‰‰Š‹’–šœŸ ¡¡Ÿœ˜–•’Š‡…†ˆ‰Š‰‡††‡‰‹Ž‘‘“•™œœžžŸ £¤¤¥¤£¡ Ÿ››™”ŒŠ‰‰ˆ‰Œ‘’’“–™™š››œœœ›˜•“Š†ƒ‚‚‚‚‚‚‚‚‚‚‚„†‰ŒŽ‘’””•’Ž‹Œ”—–“ŽŽ’“”•”“Ž‹Šˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡Š‹Ž‘’““‹‹‰‰‡†††††„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‰ˆ‡††‡‰ŠŒ’•˜š›žœš˜–•“Œ‡…†‰ŠŠ‰‰‰‰ŠŒŽŽŽ’“““““”—š›œžžŸ¢¢£¥¤£¢¢¢¢¡¡ž›•‘Ž‹ŒŽŽ’•––•–™››œœ›œžžžžžœ—”‘Ž‹‡ƒ‚‚‚‚‚‚‚‚‚‚ƒ†‰‹ŽŽŽ‘“••—˜•’ŽŽŒ”˜—•’‘‘‘’““••••”““’ŒŒ‹‰‡…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…‡‰ŠŽŽ’“”••‹Š‰‡…„ƒ‚„…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‡†…†‡‰ŠŒŽ‘”˜šœœœš˜—•“ŽŒ‰‡ˆŠŠ‰Š‹ŒŒŽ‘‘“•—––—˜˜šœœžŸŸ ¡¢£¤¤¤¤¤¤¥¤¢ž›–’’”–˜š›š˜™œžŸŸžŸŸ žœ˜”‘Œ‰„‚‚‚‚‚‚‚‚‚‚ƒ†Š‹ŒŽ‘•˜™››š—•‘Œ‹ŒŽ‘”—˜—”’“””””“•—•••”““’Ž‹ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„…†ˆŠ‹ŽŽ‘““•––“‹ˆ…ƒ‚‚‚ƒ„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„„…†ˆŠ’”—š›››œœžœ™—–”‘ŽŽŽŒŠŠ‹ŠŠ‹ŒŒŒ“————˜™šœžžŸŸŸŸžžŸ¡¢£¢¢¢£¤¥§©¦¢Ÿœ˜”‘‘“•˜šœžžœž ¡¢¡ ¡¡¢ žžž™•“‘Ž‹‡„‚‚‚‚‚‚‚‚‚ƒ‡ŒŒ‘‘’“•˜šœ›—“‹Š‹’’“–˜˜—•••–––•–˜˜—––•“’‘‘‘’’’‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‡†ˆŠ‹ŒŽ’“•–——•Š†„‚‚‚ƒ„„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„‡‰Œ’•™œœ›œœ›š™–”’‘ŽŒŒ‹Ž”˜šššššœ £¢¢¡¡ ŸŸŸ¡¤¤¤£¡¡£¥¨¬©¥¢™•““–™œŸ ¡ ¡£¤¥¤£¤¥¥£ ŸŸš˜–”‘Ž‰…‚‚‚‚‚‚‚‚‚ƒ‡ŒŽ’“”–˜˜šžžš–’‰ˆ‰‹Ž“•–”””•••–——™™˜˜—–”’‘“““Š…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‰‹ŒŽ’”•••–——˜–•“‹‡„ƒ‚‚ƒ…††ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†ˆŠ‘“—›Ÿžœœ›šš›™—–•”“’’‘‘‘’”–™šœœœŸ¡£¥¦¥£¢¡ ¢¤¦¦¦¤¢¢¤¨¯°«§£Ÿ›˜––˜šž¡¡ ¡£¤¥¥¦¦¦¥¥¦§¥¢¡¡žœœœš—’ˆ…ƒ‚‚‚‚‚‚‚‚ƒ‡‘“•—šœœœŸ Ÿ™•‘Œ‰‡ˆ‹‹Œ’“””•–——˜™ššš™™™™—•”‘’”•”‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‰‰ŠŒŽ“•–™››ššš˜—–•“‹†…ƒ‚‚ƒ„†‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰Œ”•˜¡ŸžŸž›™››š™™™˜—–•””‘“•—šœžžžž ¢¤¦¨©«©§¦¤¤££¥¦§§¦¥££¥«¯²±¯«¦¡žœ™˜™¡¤££¤§©ª©©©©¨§¨§¥££¢žž›˜”Œ‰†…‚‚‚‚‚‚‚„ˆŒŽ’–˜›ž¡¡¡¡¡Ÿœ˜•‘‹‰‰ŠŠ‹Ž‘“–—˜—˜š››œš˜——™š˜—”’’’“–—•’Š†ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ„„„ƒ‚‚‚‚„‡ŠŠŠŒŽ‘•˜™šŸžœœ›˜–••‘ˆ…ƒ‚‚‚‚„‡‡…„„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‰“–—™¡Ÿž ¡Ÿš™™™™œžžœ™—–•’’“–˜šœŸ¢£¢¢¤¦§¨©ª¬¬««ª¨¨©©©©©§¦¦¦§©¬±µ·µ±«¥£¡ŸžŸ¢¤¦¥¦§ª¬®®®¬ª©¨¦¥¥¤¡Ÿœ™–‘Š‡ƒ‚‚‚‚‚ƒ†‰‹Ž”˜›ž £¤¤¢¡š—”’Œ‹‹‹‹‹Œ“—————™š››š—–—™›š—••”“•——–”‘Œ‡ƒ‚‚‚‚‚ƒƒƒƒ„…‡‡‡†„ƒ‚‚ƒ†ŠŒŒŽ’”–šœžŸ¢£¢Ÿœ˜••”‘ˆ…‚‚‚‚ƒ…†………††ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŽ’”•—™ž¡¡¡¢¡Ÿœš˜—˜›ž ¢¡Ÿœš˜–••˜›œŸ¢¥§§§¨ª«¬ª«®®¯°¯®¬¬¬ª¨©©ª¬¬¯²·º·³©§¥£¢¢¤¦¨¨©«®±±±±°®«ª©§§§¤¢žœœš–’‹‡ƒ‚‚‚‚ƒ…ˆˆ‰‘•šŸ¡¢¢¡¢¢™–•’ŽŒ‹Š‰‹“““’‘’”–˜–””–˜š˜˜˜˜–•–—––•“Š‡„‚‚‚ƒ„…††‡ˆ†„„„ƒ‚‚‚‚…‰Œ‘’•—™šœŸ£¥¦¢Ÿ›—––•“Œˆ„‚‚‚‚‚‚‚ƒ…††ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆ‹Ž’”—œ ¡¢¡¡Ÿœš˜—™œ ¢¢ œ™˜˜š ¢¤¦¨©©©©©ªªª°°°±²±°¯°°¯¬¬®¯²µ¸¹¶²¯¬©§¥£¥§¨ª«¬®°±±°°¯¯«ª©§¦¤¢žš™˜˜˜•’Œˆ„‚‚‚‚‚…ˆ‰ˆŠŽ“˜› ¢¢ ¢¢˜—–“‘‘‘ŠŠŠ‹ŽŽ’””““”–˜˜™™™˜————˜˜—”Œ‡„‚ƒ„‡ˆ‰ŠŠ‰†ƒ‚‚‚‚‚‚ƒ…‰Œ”•˜š››¡¥¨¨¥¢Ÿ›˜—˜˜•‘Ž‹‡„‚‚‚‚‚‚ƒ„…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŒ’–šž ¢¢¡Ÿœ›šš›¡¢¢ ŸŸœ›œ¡¥§©«¬«¬««¬°²±²´¶¶´³´´²°°²²²²³³´¶¸¹·µ²¯«©§¦¨©ª¬®°²µ´²²±°¯«ª©§¦¢Ÿš–••””’Œˆ„‚‚‚ƒ„ˆˆˆˆŠŽ”™ ¢£¢¡¡¡¡žš™—”’’’ŽŒ‹‰‰Š‹‹Š‹‹‹’“’‘‘“—™š™˜˜˜™™›œ›™–“ŽŠ‡……‡‰ŠŒŒŒ‹‡„ƒƒ‚‚‚‚ƒ‡‹Ž’–˜ššš›Ÿ£¨«¬©¥¡žš˜—–“Œˆ…‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰Œ’–šžŸ Ÿœœœœž Ÿ Ÿžžž¡¥©¬¯±³²±°°°±°°±±³µ·º¹¸¶¶´´´µ¶¸¹ºº¹¸¸º»º¸¶´±¯«ªªªª±´¸º·µ´²°¯«ª¨§¥ ›–“’‘ŽŽŒ‹‡„‚‚ƒ„†Š‰‡‰Œ•š¡£¤¤¢ ¡¡ š™—–––”‘ŽŒŠ‰ˆˆˆ‰‰‰Š‹’‘’—š›™˜™™šœž ›™—’Ž‹ˆ‰ŠŒŽŽŽŠ†„ƒƒƒ‚‚„ˆ”—šœœœ¡¤¨®¬©¤ ›˜–•’‘‹‡„‚‚‚‚‚‚‚‚„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‹“—šœž Ÿœœžžžž ¢¢¡ ¡¢¥©±´·º¸¶µµµµ´³³´·¹»¼½¼º¸¶¶·¹»½¿¿¾¾½¼¼½»¹¹·´±®«ª¬®³¸¼¾»¸µ³²±®¬ª¨§¤˜“ŽŒ‹ŒŒŠ‡…………†ŠŽŒŠ‹‘—›žŸ¡£¤¢¢£¤¢Ÿ›ššš™˜•’‹‰‡††…†‡ˆ‹ŽŽ“˜œžœ›š›œž ¡žœš™•’ŠŒŽ‘‰‡………„‚ƒˆŽ“–˜œžžž £¥¨¬®©¤ž›™˜–“‘Ž‰…‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆŒ”—™œŸ ŸŸœœž ¢¤£¢£¥§«¯³µ·¼¿½»º»º¸¶·¸¹º»¼¾¾½½½»»»¼½¾¿¿¿¿¾¾¾½º¹·µ³±¯®¬¯°´¹½¿½»¹·¶´±¯¬¨¤¡œ—‘Œ‹Š‹Ž‹‰‰‰‰‰‹Ž‘’—›Ÿ¡¢££¤¥¦¤¢šœœ›˜•’‹‰‡„ƒ„……†ŠŒŒŒ“™ž Ÿžž¡¤£Ÿœš™•Ž‘’’“’’Ž‹‰ˆˆ‡…„…Š‘–™šž¡¡¡£¦§©°®ª£žœ™—•“Žˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰Ž“–—™œŸ ¡ ŸžœžŸ¢£¥¥§¨©±¶º»¼ÁÄÃÁÂÁ¾¼»¼½½¾¾¿¿¿¿ÁÂÁÀÀÀÀÁÁÀÀÀÀÀ¿¾¼¹¶³²²±¯°±²´·º¾ÀÀ¾¼º¸¶¶³®¨£Ÿœ—’Œ‹‹ŽŽŒ‹Š‹‘“’’’’“—›Ÿ¢¥§¨§¨¨¨¥¢žž ¡¡š•‘Œˆ…„‚‚‚‚‚ƒ†‰ŠŒ”™ž ŸŸŸŸ ¢¤¤ ››™—”’’’’’’“”“ŽŒŒŠ‰‡†‰•™›¢¦¥¦§¨©ª°¨£ žœ›š—“‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰Ž”–˜›žŸŸ ¢¡ŸœœœŸ¢¤¦¨ªª²·»ÀÀÂÆÉÇÆÇÆÃÂÁÂÁÁÁÂÃÄÄÄÅÅÅÅÄÄÄÄÄÃÁÀÀÀ¿¿¼¹¶´³³²²³µµ·¹¼ÀÃÀ¾½¼º¸·µ°ª£™–‘ŽŽŽŒ‹Š‹Ž‘‘’“’”•”“”˜œ £§©©¨¨§¦¤¡Ÿž ¢¢¡Ÿœ—‘Œˆ…„ƒƒƒ‚‚ƒ†ˆŠ‘–›ž ¢¤¤¡›š™˜–”“’‘‘’”–•“ŽŒŠ‰‰’—› ¥¨©©¨¨©«®¯¬¨¥¡œœ—“‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†ˆ‹”–˜›žž £ Ÿœœ››œž¢¤¨ª«°¶¼ÀÃÄÆÊÍËÊËËÈÆÆÅÄÄÅÆÈÈÈÈÉÉÉÉÈÇÈÈÆÃÁÁÁÁÀ¾¼¹¶µµµ´µ¶¸¸º¼¾ÂÃÁ¿¾¼»º¹·²¬¥ž™•ŽŽ‘Œ‹‹‹‘’”’‘’“–˜›ž¢¤¥¤£¢¡Ÿž››œžŸžœ–’Šˆˆˆ†…†‡‰Š‘“–šŸ ŸžžŸ ¡Ÿœš›˜•“’‘‘Ž’”–“ŒŠŠŒ“˜œ¡¤§¨§¦¥§ª¬ª§£ ž›˜“Š…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ‹‘“”–™œœœž žœššš›™™œ¡¥ªª«®²¸½¿ÂÄÇËÎÌÌÍÍÌÊÈÈÈÉÉÊÊÊÉÉÊËËËËËËËÉÇÄÃÂÂÀ¿¼º¸¸·¶¶·¹ºº»¼¿ÁÁ¿¾¼¹¹º¹·±¬¥ž™“Ž‹ŠŠŒŒ‹‹ŒŽ‘ŽŽ‘“•—›ž¡¢¡Ÿžœ›˜˜™šœœš–““‘ŽŽŒ‹Š‹‘•˜›Ÿ ¢¢¡Ÿœœžœ››™•’‘‘‘Ž”–’ŽŒŒ’–› £§§§¥¤¦¨ªª¨¦¢ Ÿ™•ˆƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰‘‘’”•™œœœž›šš›œ›™˜œ¢§«¬®°´º½¿ÁÃÆËÏÎÎÎÏÎÍËËËÍÍÍÌÌËËÌËÌÍÎÍÎÏÎÊÇÄÃÂÁ¿½¼¼»º¹º¼½½¼½½¿¿¾¾½º¹¹¹¹¸³®§ ™’‰ˆˆ‰ŠŒŒŠŒŽŽŒŒŽ’“•˜œŸ¡Ÿœœœ›™˜—˜š›œ›˜—–•““’’“’“–™› ¢¢£¢¢ ››œœš—’Ž“”‘ŽŽ’”–šŸ¡¤£¢¢£¥¦§§¦¤¢¡ž›–‘‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†Œ“’‘’“”•˜š››œœšš›œ›š™šž£§¬°³µ¹¼¾¿ÀÃÇÌÐÏÎÍÎÍÍÌÍÎÐÏÎÍÌËËÊÊÊÌÌÍÏÒÑÏËÇÅÄÃÁÀÀ¿¾¾¿ÀÂÀ½½½½½¼¼»¹¹¹¹º»»·²«£š’‹‡‡ˆ‰Š‹Œ‹ŒŒŒŒŽŽ‘”—šžœšš›œœš™—˜™š›š™™˜——–•””•–˜™šœœž ¢¢££££Ÿœš™šœœš˜”‘ŒŽ‘’‘‘“”••—š ¡ ¡££¤¤¥¤££¡˜“Ž‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‰Ž“––”•••–—˜™šš™˜™›œ›™™›Ÿ£§¬±¶¹¼¾¿¿ÀÄÉÎÑÑÐÎÍÍÎÎÏÐÐÏÎÍÍÌÊÊÌÍÎÏÐÓÕÔÑÍÊÇÅÄÂÂÂÁÁÂÃÅÇÿ½¼¼¼»¹·¸¹¹º¼¼»·³¥›“‹†‡ˆŠ‹ŒŽŒŒŽŒŒŽ“•—™›š™š›››š™˜˜˜™™˜™š˜˜˜˜˜—––—šœžŸ¡¡ ¡¡¡ œš—–•–––”’‘‘ŽŽ‘“””””•••–˜š›žŸ ¡¢¢¡£¥£¡ Ÿš•‹ˆ†ƒ‚‚‚‚‚‚‚ƒ„„„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡‹”˜™™™™˜˜—–––•”–˜š›™˜™›ž¢¦ª°µº¾ÀÂÃÅÉÍÑÕÕÒÎÌÍÏÏÎÏÐÏÏÏÏÎÍÏÒÓÔÕÕÖÖÓÏÌÊÆÄÂÁÁÂÁÂÃÆÉÊÆÁ¾¼¼¼º¶¶¸¸¸º»»º¶±ª¢š“‹†‡‰ŒŽŽ‘ŒŒ‹ŒŒ‘’“–˜˜™››š™˜——˜˜˜˜—˜™™š›››š˜—š ¡ ¡¢¡ ¡¡ ž›˜–•’‘’’‘‘’‘“–——˜˜˜––—˜™™›œŸŸŸ ŸŸ£¤¢Ÿ›–‘Œˆ…ƒ‚‚‚‚‚ƒ‚ƒ†‡‡‡†…‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‰Œ‘–šœš™—”“‘‘”–˜™˜—™› ¤©®³º¿ÂÄÇÊÍÐÕÙ×ÓÐÎÏÐÏÎÐÑÑÒÒÒÑÑÓÖ×ÙÚÚÙ×ÓÏÌÊÇÄÁ¿¿ÁÁÂÅÉËÍÉÄÀ½¼¼¸µ¶¶·¸¹»»¹´®©¢›”Œ‡ˆ‹Ž‘‘’’“’’ŽŠŠ‹‘‘’“””–˜™˜–•–—™˜˜˜˜˜™šŸ ŸŸ¡£¤£££¤£¢£¢ ž›˜•’ŒŒ‘’’‘‘•—™š››š™™™™˜˜™›œŸ¡£¡ž›˜“Ž‰…ƒ‚‚‚‚‚„……†ˆŠŠŠ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚ƒˆŒ‘“˜œœš–’Ž’•˜––™›ž¡¥ª®³¹¾ÂÆÊÎÐÔÙÛØÖÒÏÎÎÍÏÑÓÕÖÔÔÕÕÖØÚÛÛÛÙØÔÐÍËÈÄÀ¾¾ÀÁÃÆÉÍÏËǾ¼º¶µµ¶·¹º»¹¶²®©£œ•‰‹“””–—––”’‘‘Œ‹‹ŒŽ‘“””•—™—””–˜™˜™™˜—™¡£¤¤£¡ ¢¤¦¦¥¤¤¤¤¤¥¥¢žœ™–‘‰‰‰Š‹‘“““’“–˜šœœœ›››››š˜™™šš™™œŸ¢¤¢ž™–‘ˆ…ƒ‚‚‚‚ƒ…†‡‰Š‹ŠŠ‰‡„‚‚‚‚‚‚‚‚‚‚‚…‹”•—›žž›˜”‘Ž‘”•–˜›ž¡£¦ª®³¹¾ÃÇËÐÒÖÚÜÚØÔÑÏÏÐÑÓÖØÙØ×ØØÚÜÝÝÜÜÛÙÕÒÏËÉÆÁ¾ÀÂÃÄÇËÎÎÌÉÄÀ½»¹¶µ¶¸¹¹¹·´±®ª¤–Œ“––—™›š˜•’‘‘’“ŽŽŽ’•–—–—™š—••—™šš››š› ¢¤¦¦¥¢¡¢£¤¤£¢£¤¤¥§§£ š•‹ˆ‰‰ˆŠŒ‘‘‘ŽŒ““”–™™™™ššššœ›š˜––——™œ ¤¦£Ÿ›—“Š‡„‚‚‚‚‚‚ƒ„‡ˆˆ‡ˆ‰ˆ†„ƒ‚‚‚‚‚‚‚‚ƒˆŽ’––—šœœ›™–“‘‘‘‘‘“–™›¡£§©¬¯³¸¼ÀÄÊÐÓÖÙÛÚ×ÕÒÑÑÓÔÖØÚÛÚÚÚÚÛÜÜÝÝÝÛÚ×ÕÏËÉÆÁ¿ÂÅÆÇÉËÌÍÊÈÄÁ¾½»¹¸¸··¶·´²°®©¤ž˜‘Œ•˜š™˜™›˜•“’‘““ŽŽ‘‘’•—š›šš››™˜˜™šœžŸ ¢¤§©©¨¦££¢£¤£¡£¥¥¦©©¦¡ž›•‹‰‰‰ˆˆŠŒŽŽ‹ŠŒ’“’“•—˜™š›››ž›–““”•—šŸ£¦£ œ™–’‰†ƒ‚‚‚‚‚‚ƒ…†‡‡‡ˆ‰‡…ƒ‚‚‚‚‚‚‚„†‹•—–—™›››š™—•“’““”“’“•—›¡¥§ª¯±´¸º¾ÃÊÐÔ×ÛÜÚÖÔÒÑÒÔ×ØÚÚÜÜÜÛÛÛÜÜÞÞÝÜÚØÔÏËÈÆÃÂÆÉÊËËÌËËÉÆÄÂÁ¿½¼º¹·¶µµ³±¯©¤Ÿ˜’“˜œœšš™–””“‘‘’““’’“”–””–™œœ›œœ››œœ ¢¢£££¥©«¬«¨¦¥¤¥¥¢¡¢££¥¨©¥¢Ÿ›•Œ‹‰ˆ‡ˆ‰‹ŒŠˆŠŽ’””••—šœžŸŸŸŸžœ˜•””•–˜›Ÿ£¦¤¡ž›˜•‘Š‡„‚‚‚‚‚‚ƒ„‡††ˆˆ…ƒ‚ƒ‚‚‚‚‚…‡Š‘”••–—˜™˜˜˜–”“““““”•–—˜šž£§©«¯²µ¶¸½ÃÉÏÒÖÚÜÙÕÒÑÑÓÖØÙÙÚÜÜÜÜÝÜÝßàÞÝÜÛ×ÓÐÍÊÈÆÇÉËÍÎÍËÊÈÅÃÃÃÃÁ¿½»¸¶µµµ´²¯«§£ž™•’–šŸœš™˜——•“’“““”••–——––™›ž ŸžžžŸŸžŸ¡¤¦§§§¦¨«¯®ª¨§¥¥¥¢¡ ¡£¥¨©§¤Ÿ›–’ŒŠˆˆ‰‰‰‹ŽŒŠ‰‡‰’••••˜›ž ¡¢¡ žœ˜•””–˜™›¢¦¥£ š˜•‘Ž‹†ƒ‚‚‚‚‚‚„†……‡†…„……ƒ‚‚‚…‰‹’”–––––––——•““••••––—˜˜›Ÿ¤¨«¬®°²³´¶¼ÂÈÍÑÔÙÛØÕÓÑÒÕØÚÚÙÛÝÝÞßßÞßáâàßÞÜØÕÒÏÌËÊÉËÌÏÐÍËÊÈÅÄÅÅÄÂÁ¿»·µ´´´´²¨¥¡ž›—–šœŸ ž›™˜˜˜•“““’‘‘’“••••—›ž ¡¡¡ Ÿ¡£££¥¨©©ª«ª©«¬¯±°ª©¦¥¦¦¤£¡¡¢£§ª§¥¡žš˜•‘ŒŒ‰‡‰Šˆˆˆ‰Œ’“•–˜šž¡¢£¢ žœš—••–˜™š¢¦¥¢ Ÿœ›—“‹†ƒ‚‚‚‚‚ƒƒƒƒ„…†‡ˆˆˆ†„ƒ„†ˆŠŒŽ’•˜–”““““””“’“••–———˜˜™›ž£§«®±±³¹¿ÄÊÍÑÕ×ÖÖÔÓÔÖÙÛÜÜÞßàâââááãäääãáÝÙÕÒÑÏËÉÈÊÌÌËÊÊÉÈÇÆÆÃÂÂÀ½º¶³²±°®«§£žœ™—˜šœŸ¡Ÿœš™—–“‘‘‘ŽŽŽ‘“”•–™œŸ ¢£££¢¤¦§©«¬¬®®®°³±«ª¨§§§¦¤¢¢¢¤¨ª¨¦£ žœ™–”“‘‹‰ˆ‡……ˆ‹Ž‘’”•—šž¢¤¥¦£Ÿš—–—˜˜˜š¢¦¤¢¢¢ œ™•‘‹‡„‚‚‚‚ƒƒ‚‚ƒ„†ˆ‰‰Š‹‰ˆˆˆˆ‰‹Œ“—™—•“’““’’’’”••–˜™™™™™œ¡¥¨¬¬ª«¯°²¸½ÃÈÌÏÒÕÖÖÖÕÖØÛÝÞßàâåçæäããæçççæäàÛØÕÓÏËÈÈÈÉËËËËËÊÈÇÅÃÂÂÁ¾»·´±®¬¬©¦¡š››œœ ¡ žœš—•’Ž‘”–˜šœŸ¡¢££¤¥¦§©«¯¯°²´´²±±±²³±¯¬«ª¨§¤¢¢£¥¨ªª©¨¦¥¢Ÿžœš˜•‘‰†…„…ˆ‹Ž’”–—œ¡¤§¨©¥¡Ÿš˜——˜™™šœž¡¤¤¥¥¥¡›™•‹†„ƒ‚‚‚‚‚ƒ„†‰ŠŠŠ‹ŒŒŒŒŒŽŽŽ‘•˜š™—”’‘‘‘“••–—˜˜™š›Ÿ£§ª«ªª««¬®²·½ÂÆÊÎÑÔÕÖÖÖ×ÙÛÝÞâäçéêèèçèèèçççæáÜÙÖÒÏÍËÊÊÉÈÊÌÌÌÊÈÈÇÅÄþ»¸¶²ª¨¥£ŸŸŸŸžžŸ Ÿœ˜“‘Ž‹ŒŽ•˜›ž ¡¢¢£¥¦¨©«®±²²µ·¸·µ´³²³³²°¯®®¬ª§¤¢£¥¨ªªªªª¨§¥¢¡ š–’Ž‰„‚ƒ†ˆŒŽ‘“•˜¡¥¨©©¥¢Ÿ›˜—˜˜™ššš›Ÿ¡£¤£¢Ÿœš–‘Œ‡„‚‚‚‚‚‚ƒ„†‰‰ŠŠŒŽŽ‘“•˜š™—”Œ“–––—˜ššœŸ¢¥ª¬¬««¬®±¶½ÁÅÈÌÏÒÓÔÕÖ×ÙÛÝáäçéêëëëëëëêèæçæáÝÚ×ÔÒÏÍÌÊÈÈËÍÎÎËÉÉÈÆÅÃÁ¾º¹·³®«¨¦¤ ž ¢££¢¡¡ ¡¡¡ ™”‘ŽŒ‹Š‹’–™š›œŸ¡¢¤¤¦¨ª¬¯²µ¶¸¹¸µ´³´µ¶³¯¬¬«ª¨§¨ª©¨¨ª«©§¦£ Ÿ™–“‘‰„ƒ„‡ˆŠ‹ŒŽ•› ¢¢£¤¢¡˜––––—˜˜™™™™›ž›š˜—–•‘‡ƒ‚‚‚‚‚‚‚‚‚ƒ„†††‡ˆ‰Š‰‰‹Œ’“”—™™˜”‹Š‘“–——™›œ £¥§¬°°°®®°±³¸¾ÂÅÈÊÍÏÐÑÓÕØÜÝàáãåèëììììììëéèèæáÞÜÚÖÓÑÏÎÎÌÌÎÏÐÏÌÊÊÉÇÅÃÁ¾¼º¸¶³°ª¨£ ¡£¤¥¥¤¢¡ ŸŸžœ˜•’‹ŠˆŠŒŽ“–˜™™›Ÿ¡¢¢¤§©«¯³µ·¹¹·¶¶¶·¸¸´°®¬®¬««®«¨¨ªª¨¦¤ ›–“‘Œ‰…ƒ…††‡ˆ‰‰Š“™žžŸ Ÿžš—–••••–˜˜—–•–—–””’‘‘‘ˆ„‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒƒƒ„†‡††‡‹”••–˜™™•‘ŽŒŠŠ’”—˜™›Ÿ £¥§ª¯³´´±°²´µ¶º¾ÂÆÈÉËÌÎÑÔ×ÚÝàáââåçëíííìììëêêéæãáàÞÚ×ÕÓÑÐÏÐÒÓÒÐÍËÊÊÈÅÃÀ½¼ºº·´³±®ª¦¤¤¥§¨¨§¤¡ Ÿž›™–’‹‰ˆ‰‹‘”–™š››Ÿ ¡£¥§«°²´·º¹¸¸¹¹º»¹µ²°¯¯®¯¯±³²¯«©¨¦¥¤¡›œš–’Ž‹ˆ……………………„†‹‘—›œœœœš˜–””••”•––”’’’ŽŽ‹Š‹‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒ†Š•—˜˜™™˜–”‹‰‰‘•˜š›œŸŸ £¦©²···µ´µ¶¸»½ÀÃÈÉÊËËÎÑÔÙÜßâååååçéëíïîííìëêèæäâââÞÙÖÔÔÕÕÖÖÕÓÐÍËÊÉÆÄ¿¼»º¸¶µµ´±ª¨¦§©ªª¨¥£ žœš—•’‹ˆ…ˆ‹Ž‘•˜™šš›žŸ £¦«¯±´¸»º¹¹º¼½½»·´²°°¯°±³µ¶µ±®«§¥¤¢Ÿ››š—“Šˆ††††……„ƒ‚„Š”˜ššš›™—–•““““““””‘Ž‹‰ˆˆ‡……†…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…Š•—™š››š˜•‹‹Ž“—šœž ¡¡¢¦©±µ¹¹¹¹¸¸¹¼¿ÁÂÆÉÊËËÌÎÑÕÙÜßåééçæçêëíïïîíììêèçæçææáÜÙØØÙÙÙØÖÔÑÎÌËÈÇÆÃÁ½»¹·¶µ¶¶³°®¬ªª«¬¬ª§¤¡š—”’Ž‹‰†„‡Š‹‹’”••–—˜˜™›ž¢§±¶¹»º¹¹ºººº¹¶´²±²´µ¶¶¶¶´±¯«¨¦¤¡žœšš˜”’Ž‹‰‡††††‡…ƒ‚ƒ†ŠŽ’•˜™›™—–•“’‘Ž‹‰‡…„…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆ‘”˜š››˜–”’ŽŽ‘•˜›ž¡¤¥¥§ª°³·ºº»¼¼½¿ÂÅÆÇÈÈÉÉÉÊÌÑÔØÛàæêêèçèéêìîîîíìììêéêêêéäàÞÝÜÛÚØ×ÖÓÐÍÌËÊÉÇÅÄ¿¼¹¹¸·¶¶´³±¯®®®¯ª¦£Ÿ›˜”’‹‰‡……ˆŠ‰ˆ‹Ž‘’”””–—˜›¡¥«°µ¹¼¼»ºº¹¹º¹¶´²²µ·¹¹¸·¶´²¯¬ª¨¥¡œœ™–“‘ŽŒ‹‰‡†††‡…ƒ‚‚ƒ†‰Œ‘•™›™˜——•’‘Ž‹‰‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒ†Š‘–™›š™˜—”“’’”–™¡¥¨©«¬¯±³¶¹¼½¾¿ÁÂÄÇÈÉÉÉÉÊÊÉÉÌÐÔ×ÜáçëêéèéêëíïððïîððííîîíëèæäáàßÛØ×ÖÔÒÏÌÌÊÈÇÇÅÁ½¼»»¹¸¸¸·µ´³±±±®©¥¢˜”‘ŒŠ‰‡†…‡ˆˆ‡†‰ŒŒŒŽ‘“”•––—› £¨¯µ¹¼½¼»º»¼»º·µ´µ·¹»»º¸µ³°®ª¦¢žœ›˜—•’ŽŒŠ‡…„ƒ„…„„ƒƒƒ…†‰’—š™˜˜˜–”‘‹ˆ†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚‚…‡Š”—™š››š˜—”’•˜œŸ¢¦ª®±³´¶¸º¼¿ÀÁÃÄÅÇÉÉÉÉÊËËÊÉÊÍÐÒ×ÛßåééèèêëîðòóóññòñïïïïïîëêèæãáÜÙØ×ÖÕÒÎËÈÇÆÆÆÂÀ¿¿¾½½¼»º¹·´²²±¬§¥¢›•‹‹‰ˆ‡††‡‡‡††ˆ‰‰‹Ž‘“””•–šŸ¢§²·»¼¼»¼½½¼»¸·¸º»»½½¼¹¶³±°¯¯¬¨£žœš˜—•”‹Š‡„‚‚ƒ……„ƒ‚‚ƒ„†ŠŽ“—––––”’ŽŠ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„ƒ‚‚‚‚‚ƒ„‡Œ‘–™›œœ›š˜••—š¢¤©®³µ·¸¹»½¿ÂÃÆÇÈÈÉËËÊËÍÍÍÌËÌÏÑÓ×ÛàæêèçèéíðòôõõôôòððïïðïîíìêèåáÝÚÙ×××ÓÎËÉÇÆÆÇÅÃÃÃÂÁÀ¿¾½¼º·´²±¨¦¢›”ŒŠŠ‰ˆˆ‡‡†††……†‰‰ŠŠ‹Ž‘’“•™ž ¤©®³¸¹¹º»½¾½½¼¼¼¼¼¼¼¼¼º¹¹¶´³±®ª¦¡Ÿžš–“’ŒŠ‰‡„ƒƒ…†…„ƒ‚‚ƒƒ„†Š’‘Ž‹Š‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‹“•–˜˜˜—•••—šŸ¤¨°³µ·¹»¼¿ÂÅÆÇÈÉÉÊÊÊÊÍÏÏÎÎÎÎÐÓÕØÞäéëêêêëîïñóóòòòðîíììëììêéçåâàÝÜÛÙØ×ÔÑÎÌÉÇÈÊÇÅÅÆÅÅÃÂÁÀ½»¹¶µ³®ª¦¡™”‘ŽŒŠ‰ˆ‡…„………†‡‡‡‡ˆŠ‹Ž”—›Ÿ¡£§«°´·¹º»½¾¿À¿¿¿¿¿¾½½¼»½¼»¹¸µ²¯ª¦£Ÿ™–”’‹‰‡††‡‰‰ˆ…ƒ‚‚ƒ‚ƒ„‡‹Œ‰†…„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆ‹Ž‘“””•–••––™ž¢§«®±´¶·»½ÀÃÆÈÈÇÈÉÊËÊÊÍÐÐÐÑÒÑÏÒÕØÜâèëíîîîîîïðññðñóðîììêéêéçååäáßßßßÜÙ×ÕÔÑÎÌËËËÉÈÈÉÉÉÆÄÄÃÀ¾¼¸·´°«¥¡Ÿœ—”‘ŽŒ‹ˆ…ƒƒƒ…‡‰‡………†‡‰ŠŒ•™¡¢¤§«®±µ¹»¼¾¿ÁÁÀÁÂÂÀ¿ÀÀ¿ÁÁÀ¿¿¾ºµ°«§£ž›™™—”’‹ŠŠ‹‹Šˆ…ƒƒ„………„…††„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…†ˆ‹Ž“‘‘’“”—™›Ÿ£¥©¬°³·¸»¾ÂÄÇÊËÉÈÈÉËÌÍÎÐÒÒÓÓÔÒÑÔ×ÚßäèëîîîðñðñññððòóñîìëéèçææååäããââáßÛÙ×ÖÒÐÐÏÎÍÌÌÌÍÌÊÈÇÆÄÁÀ½º·µ°ª¥¡Ÿ›™•‘Ž‹ˆ†ƒ‚ƒ†‰‰†…„ƒ„†‡ˆ‹—œž¡£¤§©¬°µ¸¼¾¾¿ÁÁÂÃÅÄÂÁÂÃÄÅÄÃÃÂÁ¾¹³®©¤ žœ›˜•“ŽŒ‹‰†„„„†…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‰’’“–™œž¢¥§©¬¯µ¸»½ÀÄÆÊÌÍËËÊÉËÎÎÏÐÒÔÕÕÔÒÒÕÚÞâæéíðððñóòññðïðòóðîìêèçæææççææååäãáÞÛÚØÕÓÓÒÐÎÎÏÏÏÎÌËÊÇÄÃÁ¾»¸´¯ª¦¢ ŸŸ™•‘ŽŠ†ƒ‚ƒ†‡‡†„ƒ‚‚„…†Š•š ¢£¦¨¬¯±³¶¹»¾ÀÃÄÅÅÅÅÅÄÄÅÆÆÆÅÃÁÀ¼·²®ª¨¤¡Ÿ›š˜–”“‘ŽŽ‰†„„…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡‹Ž‘””’‘“–˜š›Ÿ¢¥©¬°´·»¾ÁÄÇËÌÍÍÍËÊËÌÍÏÑÒÕÖÔÒÑÒÖÛßäèëïòñïðñðîíííïñòðíëéèèææçééèèèçäãâàßÝÛØÕÔÒÐÎÏÑÐÐÏÎÍÊÇÆÄÁ¾¼¸´¯«©¦¤£¡žš–’Žˆ„‚‚ƒ„…‡†…„‚‚‚ƒ…Š•™œŸ¡¢¤§ª¬®°±´·¼ÁÄÅÅÅÆÇÇÆÆÇÈÈÈÇÅÄÿ»·³°©¦¢žžžœš™•“““‘ˆ„…†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†Š’”–•”–˜™š›Ÿ¡¤§«¯³·»¾ÁÄÉÌÍÏÐÑÎËÌÌÐÓÓÔ×ØÕÓÑÒØÜáåéíðñïîïïîìììíïðïîìéççççéëëììëëèåäãããáÞÛØÕÒÏÎÐÑÑÑÑÐÎËÊÉÅÁ¾¼¸´²°«ª§£ œ–’Œ‡ƒ‚‚‚‚ƒ………ƒ‚‚ƒ„…‰Ž“—šœž ¢¤¦©«¯²µ¹¿ÃÃÄÅÆÇÈÇÇÇÈÈÉÈÉÉǾ»¸´°¬©¥¢¡¡ Ÿžš———“‰††…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‹‘”——˜š››œœŸ¡£¥§«¯³·º½ÀÄÈÌÏÒÓÒÏÎÏÐÓÕÖØÚÚ×ÕÔÕØÝãçêîïïîííììëìíííìëêêçææçêííîîîîíéæäåæèåáÞÚÕÑÏÏÐÑÑÑÒÑÐÏÍÊÅÁ¿½¹·µ´²±¯«¦¢—‘‹‡„ƒ‚‚‚„…„„„ƒ„…†ˆ‹”˜š›Ÿ¡¤¦¨«®¯¯²·¾ÂÂÂÃÅÇÈÇÇÇÉÈÉÊËËÈÃÁ¾º¶²¯¬§¤¢¡¡¢¢¡ž›š™”‹ˆ‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ‹’–šš›œœœœž £¥¦¨¬¯³·¹¼ÀÄÈÍÒÕÕÔÒÑÑÓÔÖØÙÛÜÚØÖ×ÚÞäèêìîïîííìëëíííìêèççååæèëîîííííëèåääçèåáßÛÖÒÐÎÏÐÑÒÑÐÐÏÌÊÅÁ¿½»··µ´³±¬§¤Ÿ™’Œˆ…„„ƒ„†‡‡ˆ†…‡Š‹‘”–™›Ÿ¡¤§§¨«®¯²¶»¿ÁÁÂÃÆÈÆÅÆÇÆÇÇÈÇÄÁ¿»·³°ª§¤¡ ¡£¢ œ˜”ŽŠˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‰‹“˜œœž›œžŸ¢¤¥©°´¹»½ÀÃÇÌÒ×ØÖÕÓÓÔÔÔÕØÚÛÚØ×ÙÛàäèëíïïîîîíììíííìêçæåäääåçéééççæåãáßàãäáÝÛ×ÔÓÐÎÎÐÐÏÍËËËÊÈÃÀ¾¼¹·¶´²°®«¨¥ ›•‘Œˆ‡†††‡ˆ‰‰ˆˆ‹’•—˜™›ž ¡£¦¨©ª¬®±´¹½ÀÀÁÂÄÆÆÅÆÅÄÅÅÄÄÂÀ½¹¶²®¬ª¨¥¢¡£¥£¡ ŸŸš•‘Ž‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‡‰‹Ž’•šŸ Ÿ››œœž £§¬°³·º¼¿ÁÄÈÎÔÙØ×ÖÕÔÔÓÓÖØÚÚÙØØÚÝàäèëîðñðïïðïîîîííêèæäãâããäåååäââàÞÜÛÛÝßÜÙÖÓÒÒÏÍÎÎÎÎËÈÈÈÇÅÂÀ¾¼¸µ´²°¯®ª§¤ œ™–‘Š‹Š‰‹ŒŒ‹Š‹Ž“–šžŸ¡£¦§ª¬¬««®±¶º¼½¿ÁÂÄÄÅÅÄÃÄÄÃþº·´±®¬¬«©¥£¤¥¥¤¡Ÿžœ˜•’‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‰‹‘”—ž£¢¡žœœ›šœ ¦«°´·»¾¿¿ÁÄÊÑÖÚÙØØ×ÕÔÔÕ×ÙÚÚÚÙÙÛÞáãæéíðñðïððïïîíìëéèæäâááââáàáßßßÞÜÚØ×ÙÚØÖÓÐÐÐÎÍÌÌÌÌÈÆÄÃÃÃÂÁ¾ºµ±°¯®®¬¨¦¤¡Ÿœ™•‘ŽŒŽŽŽ’•™ž ¡¡¡¡£¥§©¬¯¯®¬«¬°´·¹»¿ÁÁÂÃÄÃÁÀÁÂÂÁ¿»·µ²¯®®«¨¥¦§§¥¢Ÿžœ™•’Œ‰„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‹‹”˜£¦¥£¡Ÿžœ›œ¡¨®³·º¿ÁÁÁÄÈÍÓ×ÛÚÙÙÙ×ÖÖÖØÚÛÜÜÛÜÞàâäæéíïñððññðïîíëëêéæãáßßßÞÜÜÜÛÜÜÛÙÖÔÕÖÖÕÓÐÎÎÏÎÌËÊÊÉÆÃÁ¿ÀÁ¾¸²°¯®®ª§¦¥£ ›˜–“‘ŽŽ‘‘“–šžŸ¡¢¤¦¨¨©¬®®®¬««°±³¶º½¿¿¾¿Á¿½½½¾¿½¼¹·µ²°¯®®©§¨¨§¥¢ žœ˜“ŒŠ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ŠŽ’•™£¦¨§¦¤¢¡Ÿœ¡¨®³µº¾ÁÂÅÉÌÐÔ×ÚÙÙÚÛÛÚÚÛÜÝßàßÞÞàâäåçêîðòòòóôóðîîìêéçâßÞÞÞÝÜÛÛÚØ××ÖÕÔÒÒÒÒÑÏÍÌÍÍÊÈÆÆÆÇÄÁ½»¼¾¿À»¶³±°°¯®ª§¨¨¤ žœš˜•”‘Ž’“““•™ ¢¤¦©«ª«¯¯¯®®«ª¬¯¯±´·º½¼¼¾À¾¼ºº¼¼¼º¹·µ´±¯¯®¯¯¬«ªª©¦£ š—“Ž‹ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ’•—›Ÿ£§©«ª©¦¥£ žœ¡¦²¶»ÀÄÇÊÍÐÒÔ×ÚÙÙÛÝÜÝÞßàáäåâáàáãäæçëïñóôõö÷ôòðîìêçäàÞÞÞÝÝÜÛÙ×ÕÔÓÑÑÒÐÐÐÏÎÍÌÌËÉÇÅÄÃÄÄÁ½»¹¹º»¼¹µ³²²²°®ª©©¨¤¡ žœ™—•“‘‘“”•˜œ ¢¢¤¦¨«®¯°±°¯¬¬¬¯±´¶¹»¼¾¾¼º¸¸¸¸¹¹¸·µµ³³²±°¯¯°¯ª§¢œ™—“ŒŠ…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Š“˜šž¢¥§©«¬©§¤¡œ›Ÿ¥¬³¸½ÂÈÌÏÑÓÔÕ×ÚÙØÙÛÜÞàâãæçèæåããâãåçêîòõö÷÷÷õõóñíèäáßÞÝÜÚÚÙØÖÓÒÑÐÐÐÏÍÌÌËËËÊÊÈÆÅÄÁÀÀÀ¾¼º¹¸¹ºº¸µ³³³³±¯¬ª©©§¥£ ›˜•““‘‘“•—™ ¢¥§©«®¯®®®®°±°¯¬¬¬®¯±µ¸¹º»¼º¹·¶´µ¶¶¶µ´³´³³²°°±³±¯«§¡œ˜”‘ŽŒ‰„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Œ”˜›Ÿ£¨«««¯®¬©¦¢›ž¥³¸½ÃÉÍÑÓÕÔÕ×ÙÙØÙÛÝÞâäæèêêéçæåããäåèìñôö÷öõö÷õóîèäâáßÝÚØÖÕÕÓÐÎÍÍÎÍÌÉÈÇÈÈÈÇÇÅ¿¾¾½½»ºº¸·¸¹¹·¶´´´³±¯«ª©§¦£ ž›—“’‘‘‘’”•˜›ž¡¥§©¬«««¬®®¯«¬®®®¯±³´µ¶¸ºº¹·µ´³±±²²°¯®®¯¯¯°±²°®«§£ š”ŽŒŠ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†Š“˜œ £¦«®¬«¬®®®¬ª¨¤žœŸ¤ª±¶»ÁÆÊÎÒÔÔÕ×ÙØÙÛÜÜÞâåçéêëéçççåääåæéîòôôóôöööõïêçåâßÜÚ×ÓÒÑÎËÉÈÈÉÈÇÆÆÅÆÅÃÁÁ¿½¼º»¼¼¼º¸¶µµ¶¶·¶µ³³³²°®«©¨§¤¡Ÿž›™•’‘‘““““•˜›Ÿ¢¥¨ª¬¬«ª©©ª««¬¬¬¬¯®®¯°±²³´·¹¹¹¶µ´²®¬®®¬«««¬®¯±±¯¬ª§¢›”‘Žˆƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡‹Ž’—œ¡¦§ª®¯®®¯®«©¥ ž¡¥«±¶º¾ÂÇÌÐÒÓÔÖØ×ÙÛÜÜßâåçèêëéèèèæããåæèìðñòòóõõ÷öðìêçãßÛØÔÐÏÎËÈÆÄÄÄÂÂÃÃÄÄÁ¿½¼º¹¶¶¸¹º»¹¶´´´³´µµ´³³²°®¬¨¦¦¥¢žž›—“‘•˜—••—šž £¥§©««ª©¨§¨¨©ªª«¬®¯®®®®¯±´¶¶µµµ´°¬©©ª«««ªªªª«¯¯®®®ª£›–”“‘Š…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‰Œ‘“—œ ¦ª«®¯¯°°°¬¬«¨¦¢ £¨¬±µ·º¾ÄÉÎÑÓÔÕÖÖ×ÙÛÞàãåæçéêéèèéæääæææéìîñññòóööòíëéäÞÙÕÏÌËÊÈÆÄÂÁÀ¾¾¾¿ÁÂÀ¾º·µ´²²´¶¸º¸¶´³²²±²´µµ´²¯«§¤¤£ Ÿžœ™–‘‘”—š˜–—™œŸ¢¥¦¨ª«ª©©¨§¨©©©©ª®®¬¬««°³µ´³´´±©¥¥¦¨ªªª©ª©ª¬®±²¬¥˜–”’‘Œ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆŒ’•˜™œ ¥«°°°°±²³²¯¬««©¨§¤¢¥©®²µ¶¸»ÁÇÍÐÒÒÔÕÖ×ÚÞáâäåæçéëêéêêèææçæçéêíïïñòóööóïìéäÝ×ÑÌÊÈÇÆÅÄÁ¿½»»º»¾¿¾¼¸´²±°°²µ¸¹¸·¶³²±°±³µ¶µ±®¬©¥£¢¡Ÿž›™—”‘‘“”—™™™š› ¤§¨ª««««««ªªªªªª¬«ª©©©«¬®±²²±°°¯«§£ Ÿ¡¥§§¨©ª©ª®®°°«¥˜–•“‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„„…ˆ‹’–™œ ¤©¯µµµ³²³´²¯¬«©§¦¦£¤§¬¯³³´·º¾ÄÉÌÎÐÓÕÖÙÝààáâåçêëìëëêêééèèèêêëìíîðòóõõñíêçãÞÖÐÍÊÈÇÆÆÄÀ½»º¸¶·¸ºº¸´±¯®¯°±³µ¶·¸·¶µµ³²²²³³°®«§¥¤¢ œš—–”““““”–™šœœž ¢¥§©«¬¬®¯¯¬¬¬¬¬«©§§¦¨ª«¬¯¯¯¯®¬¬§¢Ÿœ £¥¥§©ª©ª¯®®°¯«¥ž™—•’Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‡†ˆ‹Ž’•™ ¢¥©¯¶ºº¸¶µµµ³°ª¨§¦¦¦¦ª±³³³µ·¼ÂÆÊÌÏÓÖÙÛßáááâäçêíííìëëëìêêêëììììîðòôõõòíèåáÜÕÐÍÊÈÇÇÆÄ¿»¹¸¶µ´´µµ´³°®®®¯°±²´µ¶¸¸¸¶´²±°²²°®ª¨¦¤¢ž›˜—•“‘’“”–˜š ¡¤¤¤¥§¨ª¬®°±±°¯¯¯®¬«ª©¨¨§¦¨©«®®¬¬«©§¢ž›› ¢£¥©«®¯¯¯°±±¨¢œ˜”‘Ž‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰Œ‹‹‘”—œ ¤§ª¯´º¾¼¹¹¸¶µ³²°ª©©©©©¬¯±´´´µ·¼ÀÃÇËÐÔØÛÞàâãäååæèëííîîííîííìììíìëìïñóõ÷òìçâÞÚÕÐÍËÊÊÉƾ¹·µ´´³²²²²°®®¯¯¯¯°²µ·¹¹·µ³±°²²±¯¬©¦£¡ž›˜•“‘’•–—šœ £¦§¦¦¦§¨©¬¯°±°±±¯®¬ª©§¦§¦¦¦¨ª¬¬«««©¨¥£ŸœššœžŸ¡¥©«®¯®®°²³²®ª¥Ÿ™”Œ‰…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‹ŽŽŽ‘”–—šž£§«¯³¶¼Á¿¼¼»¸µµ´²¯¬ª«¬¬¬¯°²µ´µ¶¸¼ÀÃÇÌÑÕÙÜßáäåæææåæêìîïïïïïððîíííëêìïñô÷÷ñëæáÝÙÔÐÍËÊÉÇÅÁ½º·´³³³±±°¯®¬¬¬¬®°²µ¸·µ³±¯¯±³±®ª¦¢ žœ™–“’“•——˜™œ £¥§¦¦¥¦¦§©ªª¬®¬ª©¨§§¥¤¤¤¢¢¢¤¥§§¦§§¦¥¢ œ™——˜šœ¡¥¥¦¨ªª«®±²±®©¤ž˜“Ž‹‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰Ž’–šœžŸ¢¦©¬¯²¸ÀÄÂÀ¿¾º·¶µ²¯®°²³´µ¶¸¹º½ÁÃÇÍÒÕ×ÛÞàâäååååæéìíîîððïïïïïíìêéëïòôööñìæáÛÕÐÌÊÉÇÄÃÁÀ¿½º¶³²²±°®¬ª¨§¨§¦¦§¨ª¬®°°®®¬ª«±´±®¬©¤ Ÿžœš™˜—˜™šš™šœŸ¢¥¦¥¤¤¤¤¦¦¦¦§¨ª¨¦¥¤¤¤£¢¢¡Ÿ ¡£¢¡¡¢£¢¡Ÿ™–•–—™ŸŸ¢¤¦§ª±²²¯ª¤˜“Ž‹Š‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ‹Ž‘“—œ¡££¤§©«°´ºÃÈÆÄÃÁ½¹¸¶²¯¯®®¯±´µµ¶¶¸º»»¿ÂÅÊÎÒÔÖÛÞáãääääääçéêìîðïîîïïíëéééíðòôôôðìçâÛÔÍÇÇÇÄÁ¿¿ÀÀ¾»¶³²²±¯®«¦¤££¢¢¢£¤¦¨©©¨¨§¦¦©²´±®«¨¤ žœœœœœœœœ›››œž¡£¥¦¥¥¥¤£¢£££¤¦¤¢¡¡¡¡ Ÿžœœœœœœžžžœœ›™–•••˜™š›ž £¥¨«¯²´¯©£ž™“ŽŒ‰‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‰‹‘“–šŸ¥¦¦§ª«¯²¶½ÄÉÈÇŽº¸µ±°°°°²´¶¶¸¸¸¹»¼¾ÁÄÇËÎÑÔ×ÛßáääåäãâãäåçêîðïîïðîìéçèêíðòóòòðíèâÛÔËÆÅÄÂÀ¾¾¾¿¾»·´²±°¯¬©¤¢ ŸžžŸ¡¢¤¤¤££¤¤£¤§«°²¯¬ª¨£Ÿ›š›œžžœœž ¢¥¥¥¥¥£ ¡ ¡¡ŸžžžžŸŸŸœ›š˜—˜™˜˜™™ššš›š™—•””•–––™› £¦ª®³´¯ª¥ š”Œ‰‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŒ‘”–™¢¦¨©ª«¯²¶º¿ÅÊËÊÈÅÀ½¹¶³³´´³µ¶·¸»ºº¼¾¿ÂÄÈËÎÐÓÕØÜáãåæåäãâáâäæéíðïîïïîëçæéêìîðñññîëèâÛÓÊÅÄÃÁ¿¾¾¿¿¾»¸µ³°¯ª¦¢Ÿš™™› ¢¡ŸžžŸ ¢¥ª®°®¬ª§¢Ÿ›™™›ŸŸžžžžžžŸ ¡£££¤¤¢¡ žŸžžœ›œœœ›šš™˜—•–—˜˜˜————˜˜—–”’“”•••—š›œž¡¤¨¬°±¨¤ ›–‘Š‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰Œ’•™œœž¡¤¥¨ª¯±´¹¼ÀÆËÌÌÊÇÄÀ½¹¹¹¸·¶··¸»½¼¼ÀÂÄÆÉÍÐÓÔÖ×ÙÝáâãããäæåäãäçëíîííîîíëèææçéëîðïîëéåß×ÐÉÄÃÄÃÀ¾¾¿¿¼¸µ³±°«¨¤ ›—”’’”—šœ›š™šœŸ ¢¤§««¨¦¥¢ž›š›œžŸ¡¡¡ ŸŸŸ ¡¢££¢ žž›››š››™˜˜—–”””–˜˜–•””•–––•“‘’’’“”—™››œŸ£¨¬¯°¬¨¥¡œ˜“ŽŠˆ…ƒ‚‚„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡Š•™œŸŸ¡¢¢¤¨«¯°³¸½ÁÅÊÍÎÍÌÊÈÆÁ½¾½¼»¹¹¹»¾¿¿ÀÄÈÉÊÍÑÕ×××ÙÛÞàáááâåèçæåæéììííííììëéæææèëííîíêæáÜÕÎÈÄÄÅÄÂÀ¿¿¿¼·µ³²¯¬©¥ ›•’Ž‘”—–•–—™›ž ¢¥©¬©¦¥£ žœœœ ¢£¥¢¡ŸžŸŸœ›œž ¡¡¡¡žœœ›š›šš™™—–••””’’•—•“‘‘“”””’‘’”˜š™šœ ¥ª®°¬§¤ œ˜“ŽŠ‡…ƒ„……†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆ‹‘•™ž¢¢££¤¦ª±³·¼ÁÅÉÍÑÐÎÍÌËÈÃÀÀÀ¿¾½½½¾¿ÁÂÄÈËÍÏÑÔØÚÚÚÜÞßàáâãåçèèèééëíííìëëëêêèççæèêëëîïêåáÝÕÏÉÆÄÃÄÄÂÀÀ¿¼¹·´°«§¢œ–’‹‰‹Ž‘’”—›Ÿ¡¤¨©¦¤£¡ŸŸžœœœŸ¢¥¦¤¢¡ Ÿ›™˜™œžŸŸ œš™˜™™™——–”“”•”’‘’““‘ŽŒŒŽ‘’’‘ŒŒŽ“–˜™™šœ¢¨¬«¨¤ ™”Šˆ‡‡ˆ†‡‡„ƒ‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‰‹Œ“–›¡¤¤¥¥§©°³·»ÀÄÈÍÒÕÓÐÏÎÌÊÆÃÂÂÁÁÂÂÂÁÂÃÅÈÊÍÐÒÓÖÙÛÛÛÜÞßßàâãåçèèéêëìíííìêëëëêèèççéêëìïîéåáÜÕÏÉÅÂÃÅÅÃÁÀ¾½º·²®«¨¤Ÿš”Ž‹ˆ†‡‰Š‹ŠŠ‹Ž‘—œŸ¢¥¥¤£¡ ŸŸžœž¡£¤¥¥¥¥¥¢Ÿœ™˜˜˜™š›žœ™–“’’’’‘‘’“’‘’‘ŒŒŒ‰ˆˆ‹ŽŽ‹ˆ‡‡ˆ‹‘“–˜™˜šŸ£¦©¨¦¡žš–“ŒŒ‹ˆ††…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ŠŽ’•˜œ¡¤¦§¨¨©¬±´·»¿ÄÈÍÓÖØÖÔÑÎÌÊÇÅÄÅÄÅÄÃÂÁÂÄÄÆÉÎÒÓÔÖ×Ø×ÖØÚÝßàáâäåææèèéêêêëëíííìëéèçéééêëìëçãÞØÑÌÇÃÂÃÃÃÂÂÀ¾¼¹´®©¦¢žœ˜“Œ‰†„…‡‰‰ˆˆˆˆŠŽ”™›œž ŸŸž››ŸžŸ ¢¤¦¦§©¨¤ žœš™–•–˜šœš–’ŽŽŒ‘‘‘’ŒŠŠ‰…„…‰‹‹ˆ…ƒƒ„†‰ŒŽ‘•˜™˜—œ¡¥§¥¤Ÿœ˜–“‘‰††„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Š“–˜šŸ£§¨ª¬¬¬±µ¹¼¿ÃÈÌÑÖÙÚÙ×ÓÐÍÊÈÇÈÉÉÉÇÅÃÂÃÄÅÇÊÏÑÓÔÕÕÖÔÓÔ×ÛßâãããäååççééêêëìíîîíëéèèééèèééèäàÚÓÍÉÄÁÁÂÂÃÃÃÀ¿¼¸³¬§£ž›š—“ŽŠ†…ƒ„†‡‡………†ˆ“——˜›œœœœ›š›Ÿ ¡¡¡£¦§§©««¨¤¡Ÿœš—“”–˜™–‘Œ‹ŠŠŠŠŠŒŽ’Œˆ†……ƒ‚„†‡‡…ƒ‚‚‚„†‰’•–—––› ¤¦¥£ ›™•“‘‘Œ‰†…„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡Œ‘—›Ÿ¢¥¨«¯°°¯±µ¹½ÁÄÇËÏÔØÛÞÜÚÖÔÐÎÍËËÌÎÎÊÆÄÂÂÃÅÇÉÌÎÑÑÒÒÑÐÏÑÕÚßãååäãåæçèéëìììììíîìêéèççæååååãÞÚÖÑÌÈÄÂÂÃÃÄÄÃÂÀ¼·²¬¦¡œ™–”Œˆ„ƒƒ„……„ƒ‚ƒ…‡‹Ž’”–˜™™š››š™™œŸ¡£¥¥§¨ª«¬¬ª¦¤¢Ÿ›–’“•––“Œ‹Š‰ˆˆ‰Š‹‘’ŽŠ†ƒƒƒ‚‚ƒƒƒƒ‚‚‚‚‚ƒ„†Š’””••–šž¡¤£¢ œ›˜–”’’’Œˆ†……„ƒƒ„„ƒƒ‚‚ƒ‚‚‚‚„…‡‰Œ‘–› ¥¨«¬°²²²³µ¹½ÂÅÇÊÍÑÖÚßâàÝÛØÕÓÑÐÏÏÒÒÎÉÅÃÄÅÇÉÉÉÍÐÐÏÎÎÎÏÑÕÚÝâååãäæçèéëííîîîíîîìëêèèæåããâáßÚÕÒÐÍÊÆÃÃÃÃÃÃÃÃÁ¼¶±«¤Ÿ™•“‘‰†ƒ‚‚ƒƒƒƒƒƒƒ…‡ˆŠ‘•—–•—˜˜˜™œ ¢¥§¨¨«®®®®©¦¥£Ÿ›–’‘‘‹‹ŒŒ‹Š‰ŠŠŠŠ‹Ž‘’‰„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ŠŽ‘‘’’“—›žŸŸžœš™™™™–““’ŒŠˆ†„ƒ„………„ƒƒ„„„„†‰Œ”™œ ¤©¬®®¯±³´¶·º¾ÂÆÉËÍÏÓÙßãæåäâßÜÙ×ÕÔÓÔÓÐËÇÇÈÉÊÊÉÉÍÏÏÎÍÌÍÎÐÓÖÚàäãâäææçéëìííïïðïíìëëëêéåãâáßÞÚÖÓÒÏËÇÅÃÂÀ¿¿¿À¿º´®§¢—’Š‡„‚‚‚‚‚‚‚ƒ„‚‚…‡‡ˆ‰Œ‘’“•˜œŸ¢£¤§©±°¯®ª¨¦£Ÿš•ŽŒ‹Š‰‹‹‹ŠŠŠ‹‹‹‹ŽŽ‰„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰ŒŽ‘•˜™ššš™˜—˜™š˜–•”‘ŽŒ‰†……††‡‡†…†‡ˆˆŠŒ‘”—šž¡¥©¬¯²±°²´µ·¹¾ÃÇËÏÐÑÓÖÝãçëìëèäâàÜÚÙ×ÖÕÑÍËÊËËÌÍËÊÌÌÍÍÍÌÌÎÐÑÔÙÞáâäæèççèêììîðññðîííííìêæãàßÞÜÚ×ÕÔÑÍÊÈÄÁ¾½½¼½¼¸³«¤Ÿš”Œ‰†„‚‚‚‚‚‚‚‚ƒƒ‚ƒ„„ƒ„…‡‰Š‹ŒŽ’–šŸ¡¢£¦ª¯³±¯®¬©§¥£ž˜“Œ‰‡‡†‡ˆ‰ˆ‡‡ˆ‰‹ŒŽ‘Ž‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‰‹’”–—––––•—™šš™˜–“Ž‹‰ˆ‡†‡‰ŠŠŠ‹Œ’“•˜›ž¢¦«¯²´³²²³µ¸»ÁÆÉÍÑÓÖØÛáçíòòñîëèåàÝÛÚØÕÒÐÎÎÍÍÎÎÍÌËÊËÍÍÍÍÍÎÐÔØÜàãæèêèçèéìíïññððððððïïìèãàßÝÛÙ×ÕÔÑÏÌÉÅ¿¼»»»º´®§¢œ–Œ‰†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„…‡‰Œ‘—›ž ¢£¤¦«°µ²°«¨¥¤¢˜”Š‡†„…†‡ˆˆ‡‡‡‰ŒŽ‘‘‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡ŠŒŽ‘“””“““”•—š›š™—“ŽŒ‹Š‰‡ˆ‹ŒŽŽŽ“–——™›Ÿ¢¥ª®°±´µ³²²³¶¹¾ÄÇÊÎÒÖÙÛßåëñõõôòïìçäáàÞÛ×ÖÓÒÑÏÏÐÐÐÏÍÌÎÏÏÏÎÍÏÒÕØÜàäæèééééêìïñóòññðïïïïîëèãßÝÛÙØÖÔÒÑÏÌÉƾºº¹¹¶°ª¦¡›”Ž‹‰…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‹‘— ¢£¤¥§¬±¶´±«©¦£ ›˜”Š†ƒ„…‡‰ˆ‡†‡ŠŽŽŠ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰‹Ž’‘‘‘’“•—™˜––”‘ŽŒŒŒŒ‰‰ŠŒŽ’•˜™™›ž¡¤§«®±³µµ´´´µ¸¼ÀÄÆÈÌÒÕ×ÛàåêîñððîîêçåãâáÝÚ×ÕÖÖÓÒÒÓÓÓÒÓÓÒÐÏÏÐÓÖÙÛÞáâäæèéêêëíðññðïîìëêèçæåâßÜÚ×ÔÓÒÐÎÎÍËÉÅÁ¼¸¶´´±«§¤ ›•’‘‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰’˜ ¡¢£¥¨³·µ°ª©¦£Ÿœ™–“‹†ƒ‚„‡ˆˆ‡‡‡‹ŽŽŽ‹‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŠ‹ŒŽ‘‘’‘‘“—˜•”’‘ŽŽŽŽŽŒ‹‹‘’•˜š›œž¡¤§ª°±³µµ¶··¸»¾ÂÄÅÈÌÏÒÖÛáæéìîìëëëéççåäâßÛÙÙÚÚ×ÖÖÖÖÖØÙØÕÒÐÒÓ×ÛÝßáâãäçêëëìíïòòñïîëêçåáßàßßÝÙÕÒÏÏÏÍËÌËÊÊÅÁ»·´±¯¨¥¢žš——•Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‹•šž ¡£¤¦©¯µ·³¯¬ª©§¤ œ˜–“Š†ƒƒ„†‡††‡‰ŒŽŽŒ‹‰ˆ…ƒ‚‚‚‚ƒ„ƒ„„„ƒƒ‚‚‚‚‚‚ƒ†ˆ‰‹‘’’“’’‘’•–•“‘‘‘ŽŽ‘Ž‘“–˜ššš›ž¢¥©°³³³´µ·¸º¾ÁÃÄÅÇÉËÎÑÕÛáãåçéèççèççèèæäáÞÝÜÞßÝÜÚÙÙÚÜÝÚ×ÔÓÓÕÙÝßáâäååéìììíîðòòñîìéæãàÜÛÛÜÜÚÕÐÍËÊÊÉÊÊÉÉÈÿ»¶±®¬ª§¥¢žœœ›™“Œ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‹‘–œ £¥§¨©¬±¶¸´¯«©¦£Ÿš–”‘‰†„„„„……†ˆŠŒŽŒ‹‹Š‡…ƒ‚‚ƒ…‡‡‡‡‡†…ƒ‚‚‚‚‚ƒ…†‡‹’’“””’’“”–•’ŽŽŽŽ“–™™š™™›ž£¨«¯²´´´´µ¸»¿ÃÄÅÅÆÈÉÉÌÑÖÜàáãåææåæççèêìéçäãâáááááÞÜÝÞàáÞÛØÖÖÙÝáââãææçëîíìíîïññðíêæâßÛØÖ×ØÙÖÑÌÉÇÅÅÇÈÈÈÈÅÁ¾ºµ°«¨§¦¢Ÿ žš”†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‹’˜¡¥§©ªª®³¶¹¶±ª¦£ œ˜“‹ˆ…ƒ‚‚‚ƒ……„…†‡Š‘‘Ž‰…ƒƒ…†ˆ‰ˆ‰Š‹‹‰†„ƒ‚‚‚‚ƒ…ˆŒ‘’”–•”••––•’ŒŒŒŽŽŒŒ’•—™™™™›œ¢§«®°²´µµ·¹¼¿ÂÂÂÄÆÈÉÉËÐÖÚÞáååææççèèèëíëèççäãááâãáßßâäåâàÝÜÝßáäããåççéíïíëêëíîîíêçâÝÙÖÕÔÓÒÒÐÍÉÆÄÂÂÄÅÃÃÂÀ¾¼¸´±ª§§¥¡ Ÿ žš•ˆ„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Œ“—œŸ¢¦¨©ª°µ¹¼¹³¨£Ÿœ™–‘Œˆ…ƒ‚‚‚‚ƒ„ƒ‚‚ƒ…ˆ‹‘’’’’’’‘Œˆ…„†‰Š‰ŠŒŽŒ‰‡…ƒ‚‚‚ƒ…‰Œ“•—––———–”’ŒŒ‹ŠŠŒ‹Š‰‰Š‘“•—˜˜™šœœž¢¦ª¬¯²µ·¹»¾ÀÁÂÂÂÅÆÈÉÊÌÑÖÚÞâååæçèçççéíïìêëéçåããääãâãåæçåãâáâãäæååæèéëíïíëêêëììêèæàÚÖÓÒÐÍËËÊÈÅÃÁÀ¿ÀÁ¿¿¾¼»¸µ²¯©¦¦¥£¡¡¡Ÿ˜’Œ‡‡…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Œ’–šœ ¤§©«°µº½¸²«¥ œ˜•’‹‡„‚‚‚‚‚ƒ„ƒ‚‚ƒ„…‰ŒŽ‘““””“Œˆ†‡ˆŠŒŽ’”‘Ž‹ˆ…ƒ‚ƒ„†‡Š’–˜™™š˜–•”’‹‹Šˆ‡‡†‡ˆ‰Š‘“•——˜šœž ¢¤¦ª®²µº¼¿ÀÁÃÄÃÃÃÄÆÉÊÌÐÓÙßáãäççèèèéìïïíííìêçææåååæçèéêèçççççèèççæçèéëíìëëëëííëèäÞØÓÏÍËÈÆÅÃÁ¿¾½»»¼½½½»º¸¶³°¬¨§§§¥£¢¢¢¡œ˜’Œ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰“˜œ ¤§©¬°¶»½·°ª¥Ÿ™•‘‰†ƒ‚‚‚‚‚ƒƒƒ‚‚‚‚ƒ‡‹‘”•”””‘ŽŠ‡‡‰‹Ž’–—•‘Ž‹ˆ††‡ˆˆ‰ŒŽ’–šœœœœ˜”“’‘‹Š‰‡†„„†‰ŠŒŽ’“”––˜šœžŸ ¡¤¨²¶º½ÀÁÃÅÄÃÂÂÄÆÈÊÌÐÔÚÞàâåèèèèéëíïðïïðïìêèæææèéêëííííììëëêêéèççèêëëëìëêêëëéåàÚÖÒÎËÈÆÄÀ¾¼¹¹¹¸·¸ººº¹¹¶´±¯«ª©¨§¦£¢¡¢¢Ÿ›•Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‘–œ¡¥§©¬±µº»´®¨£ž™”Œˆ†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚„‡Š‹Œ’’’“‘Š‡†‡‰Œ’•—–”‘‹‹‹ŒŽ‘•™œœœ—“‘ŽŠˆ†„„ƒ‚ƒ†‰ŠŒ‘”••–—™š›œŸ¢¤§¬°³¸»¾ÀÂÂÃÄÅÅÆÇÈÈÊÎÔÚÞàãæééèèéêíîððððïíêæãäåæçéëíîïðïîîîììëéèèêìëêééééèçæäßÚÕÒÎËÇÅÃÁ¿¼¸···µ´µµ¶···µ²¯®¬«ª¨¦¥¤¡ ¡¢¡ž™“ˆ…ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰•›¡¤¦¨«¯´¹¹²«¦£Ÿš•Š‡……„‚‚‚‚‚‚‚‚‚‚‚ƒ„‡‰Š‹‰††…‡Š’“•˜˜–”’‘‘’‘‘’’•—œŸŸ›–’Œ‹‹Š‰†ƒ‚‚‚ƒ‡‰Š‹Ž‘”•–—™›››š £¤¦«¯²µ¸»¾ÀÁÄÆÇÇÇÈÈÇÈÎÕÚÞàãçëëêéèêìïòòòñïíêåâãääçéìïñóõôòñðîíìëééëìëêéêéçåâáÞÙÔÐÌÉÆÄÂÀ¿½»¸¶µµ³²±°²´µ´²°««©§§¦¢Ÿ ¢¢ ˜‘Œˆ†…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡“š¡£¥¦©®³¶¶°ª¥¢˜“‹ˆ†„‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„…‡‰‹Œ‹ŒŒŠ…ƒƒƒ„‡‹‘’•˜—˜˜˜˜˜™™—–••–™ž ž›—“‹‹‹‹‹ˆ„‚‚‚„‡‰‰‹Ž’“•˜š››š›Ÿ¢¤§ª®±²µ¹½ÀÂÅÆÇÈÈÉÊÈÉÍÓØÞáäèìëêèèêîòôòñïíêèäááâäçêïòô÷øöôòñïíììëëììííììéæâÞÛØÔÐÌÈÄÂÁÀ¿½»¹·¶µµ³²¯®¯°°¯¬««ªª§¦¦¥¡Ÿ¡¡¡ ˜’ŽŠˆ‡…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…Š˜ž ¢¤¨±´´¯©¥¡œ—‘‹Š‡ƒ‚‚‚‚‚‚‚‚‚‚ƒ„ƒƒƒƒ…ˆ‰‰‰‰ˆ‡„‚‚‚ƒ†‹’•˜˜™šžŸŸŸœš˜™›ž ¡¡Ÿœ˜“‹ŠŠŒŠ†ƒ‚ƒ†ˆ‰ŠŒ‘’”—˜™š™š›Ÿ¡¤§«¯¯°´¸»¿ÂÄÅÇÇÇÈÈÇÈÍÒØÞáãçêëêééìðôöóðîëéæãàáãäçìñô÷ø÷÷öóðîîîîîîíîîîìéçåàÚÖÓÏËÉÄÁÀ¿¾¾¼º···¶´³±¯¬¬¬««©¨¨¨©©¨§¥¤¡ ŸŸ Ÿœ˜“ŽŒ‹‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆŽ–œ £§«®²²¬§£Ÿœ—‘‹‰†ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚„†„„……„…„ƒ‚‚„‰‘“–š™™œžŸ¡¡¡ Ÿœš›œž žœ—’ŒŠŠŒŽŒˆ„‚ƒ†ˆ‰‹Ž‘”—˜—–—˜™š ¤§«¯±°±³¶¹»½ÀÂÃÂÃÅÆÆÈÍÓØÝàãåèêëêëïóôõòðïîëçäâãããæëîòõõôôõòððððïîííîíìèåäãÝ×ÔÐËÇÄÂÁ¿»ººº¸···¶´³±ªª«ª¨§§§§§¨§¥¢ žœœœ˜•’Ž‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‹‘–›ž¡¤¦¨«°±¬§£Ÿ›–Œ‹‰‡„‚‚‚‚‚‚‚‚‚‚ƒ„„„‚‚ƒƒ‚‚‚‚‚‚ƒƒ‚ƒ‡‹‘’“˜›››Ÿ¡£¤¥£¢žžŸ Ÿ˜“ŒŒŽŽŒˆ…‚ƒ…‡Š‘”—™™–••—™šœ ¤¨¬°³²±³¶¸¹»¾¿¿¾¿ÂÄÅÈÎÔØÛßãåéëììîñóôôòññðìçåååååçëíñôóòóóòòóôòðïíííìéæââßÚÕÑÌÈÄÁÀ¾»·µ·¹··¶¶µ´³°«©©ª¨§¦§§§§¨¥£ ž›››š™™—•’Ž‹ˆ†„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆŽ’—›Ÿ¢¤¥¦©®®ª¦ ›—“‹ˆ…ƒ‚‚‚‚‚‚‚‚‚ƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚ƒƒ†‰Ž’’”˜››œž¡£¥¨¨¥¢ŸŸ¡¢¡¢¡ Ÿ™•ŒŽŽ‹ˆ…„„†‰ŒŽ‘”——˜—––——™›ž¡¥¨¬±´²²³¶¸º½½¼¼¼½ÀÂÅÉÎÓÖÚÞáåêíïðòóôôôóóòòíèçæçèèéëîñóòñññòõ÷÷óïìëêéèçäáàÝØÓÎÉÅÂÀ½º¶³³´´¶·¶µ´´³¯«©¨§§¦¥¥§¨¨¨¥£ š™˜———•“‘ŽŒ‹‰ˆˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚„Š”˜œŸ¢£¤¦¨«©¦¡™•‘‹‰†ƒ‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚„…ˆŠŽ’“”˜ššœž¡¤¦¨©¦¢¡¡£££¢¡ Ÿ™•ŒŽŠ†…††‡Š’–˜—––—˜˜˜š ¤¦©¬°²²³µ¸¹º¼½¼»¼¾ÀÃÇËÏÓ×ÛÞáåëîïóõôóôõôóòñíéççééêêíðòóòññòôøúøóîìëéèçåâßÝÚÕÑÌÆÃÁ¾»·²°°°±³µ³³´´±®«©§¦¦¤£¥§§§¦¤¡žœ™˜—–•”“’Ž‹Š‰ˆ‰ˆ†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‹•˜šŸ¢£¤¥¥¢ž›—’ŽŒŠˆ†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰‹‘‘’”•–—™œ £¤¥£¢ ¡¡ Ÿžœ™–’Œˆ‰‹ŠŠˆ‡‡‡††‰‹Ž‘•—–•••––˜œŸ¢¤¦¨ª°°²µ¸··º½½½¿ÁÄÈÊÎÑÕØÜßâæëìîðòòôõõóððïìèççèéëîñóôõôõõõ÷ùøöóðîîëéæäàÛ×ÔÐÍÉÅÁ¾»¸³®¬«¬®¯²³³±®«¨¦¥¢ ¡¤¤¤£¢ žœš™™˜–“‘‘ŽŒ‹‰†………„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰Ž“–™™›œž ¡¡ž™–’Ž‹‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‰Š‹‹‘‘’”–™œžŸ ¡ žŸŸžœ›™—”Š††‡ˆ‡ˆˆˆ‰ˆ‡‰Š‹Ž“•–•”““”˜œŸ¡¤¥§«¯¯±µ···º¼¾ÁÃÅÊÍÏÒÔÖÙÜßäéììíïñòôõõñïîíêèçæçêîñóö÷÷øøøøúú÷õóððïíéçåàÚÓÏËÉÆÃÀ¼¸´°¬ª©¨©©©¬¯±³±¯ª§¥£ ž ¢¢¡ žœ››š™˜—•’ŽŒŠˆ…ƒ‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰‘”––—˜šœœ™•‘ŽŒŠ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‰‹‰ˆŠ‹‹ŽŽ’“•—š›œœœœœ›ššš™—•’ŽŠ‡……††‡‰Š‹Œ‰‡‡ˆˆ‹’““’‘‘“—œ ¢¥¨«¬®¯³µ¶·¹¼ÀÅÈÌÎÐÒÔÕ×ÚÝâèíïïðïîïñóõñíìëéèçåéíñõ÷ùúüüüûûüüøõòððïëéèåßØÐÊÇÅÂÀ½¹´°ª§¦¥¥¥¦ª®±²±§¤£¡Ÿžžžœœ›šš™˜—”’‘ŒŠˆ…‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ˆŒ‘““““•••––’Ž‹‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‡†ˆŠ‰ˆˆˆ‰ŠŒŽ‘’’“•–—˜˜™™——™›š—“‹‡…………†‡‰ŒŽŒˆˆ‡ˆŠ‘”˜œŸ¡¤§ª«®±´µ¸º½ÂÈÌÏÑÒÔÖ×ØÛßåêðóòñîììîóôñîìêééçæëïòöøúûýþýýýüûùöòññîêèçåÞÖÎÈÅÂÀ¾ºµ±ª¦¤£££££§¬°²°«¦£¡Ÿœ››œ››ššš™—•’’‘‘‘‹‡„‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰‹ŒŽ‘‘’““ŒŠˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ†ˆˆˆ‡‡‡ˆ‹Ž‘’’“““•—–—š›˜”Œ‰†„…‡‡‡‰‹ŽŒŠ‰ˆ‰ŠŒŽŽ‘”—›Ÿ¢¥§ªª«¯²¶º¿ÄÈÌÎÑÒÓÖØÚÜàåêðôóòðîíïòóñïìëêêççëîñóöùúûûûûûúúù÷óðîêèæåâÛÔÌǾ»¸³¯¬©¥¢¡¡ŸžžŸ£©¯¬¨¦¥¢ žœœš˜•“““’‘‘Š‡…‚‚‚‚‚ƒ‚‚‚‚‚‚ƒ„„ƒƒ‚‚ƒ‡‹ŒŒŒŒŽ‘’“”‘Šˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‡‡‡†‡ŠŽŽŽ’•–—šœš•‘Ž‹‡…†ˆˆˆŠŽ‹‰‰ˆˆŠ‹ŽŽ“–™››œ £¤¥¥§ª¬°µºÀÅÈÊÍÐÒÕØÚÜÞâçìñôôóóñððòóñðîìëêééìîðòõùúûûüûûúøùøôïëçæäãßØÒËž¹·²ª¨¥¡ŸŸŸžœž¢¦ª¬ª§¦¥¤££¢ žžžŸŸž›˜•“””““’Œˆ†„‚‚‚‚‚ƒ‚‚‚‚ƒ„†ˆ†…„„ƒƒˆŽŒŠ‰Š‹’’‹‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„††…………†ˆ‹‹‹ŠŠˆˆ‰‹ŒŽ“–˜›œ™•’Œˆ†‡Š‹Œ‘’’‹‰ˆ†‡ˆ‰‹ŒŒ‘”–˜™™›žŸ¡¡£§«¯´ºÁÅÆÉÍÑÕØÛÞáâåéîòõõöõõóððñññññðïííîîîðô÷úüýýúù÷õööñìèååãáßÙÒÊü¸´¯©¥£¡ ŸžžžžœŸ¡¥©©¨§§¦¥¤£ žžŸžžœ™–••••–”‘Œ‡„‚‚‚‚‚„†…„ƒƒƒ„‡Š‰ˆ†…„†Š‹ˆ‡‡ˆ‹ŽŽ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†…ƒ„……†ˆŠŠˆˆ‰†…†‡ŠŒ‘•™œž›˜•“‹ˆ†ˆŠŒ’”••‘ŒŠ‰ˆˆˆˆŠ‹Ž“•––˜™ššœžŸ¢¥¨³»ÁÃÆÊÎÓØÛßâäæéëïôö÷øø÷ôñðñòóõõóòðîîíîðóöúüýüúøöõõõðëçäãââàÙÑÈÀ»¶²¨¤¡Ÿžžœœ›œž¡¥¦§¨§¦¥¤£¢ Ÿžœ›œš˜–•””–˜•Š…ƒ‚‚‚‚ƒ…‡‡…„„„…‡‰‰‰‡‡‡‰Œ‹‰‡††‰‹‹‹Œ‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†……„ƒ„‡ŠŒ‹ŠŠ‰‡†„…‰ŒŽ‘•˜šš–”’Œˆ…ƒ„‡Š“””‘ŽŒŒ‹‰‰‹‘‘“”––—˜šŸ £¤§®µ¼ÁÄÈÌÏÓ×ÚÞáäçêíñõøøø÷õòñðñòôõõòðîííîîïòöøúúùøøöõ÷÷ñëæãâââàØÐÇ¿º¶±«¨¤ žœšš››š›žžž ¢££¢¡¡¢ Ÿžœ™˜š›™–”“’“••‘ŽŠ†…„„„„„……ƒ‚‚ƒƒ„……†……†‡‰‹ŒŠ‰ˆ†„…‡‰ŠŠŠ‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ………„ƒ…ˆŒŽŒ‹‰‡…ƒ…ˆŒŽ‘”–˜—”‰…ƒ‚ƒ†Š’“”’ŽŒ‹Œ“”’‘’“”–˜™œŸ¢£¤§¯·½ÂÅÉÍÐÓÖÚÞáåèëïó÷úúù÷óñïïñòóôôñïìëííîðòõ÷ø÷ö÷÷ö÷úúóìæââããáÙÑÇÀºµ²®«§¤ ™™™™šœœ›™˜š›žžŸž›˜––—™˜•“’‘’““‘ŽŠˆ‡‡†††…„‚‚‚‚‚‚‚‚ƒƒƒ„†ˆ‰‰‰‡‡‡‡……†ˆ‰‰ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚ƒ„‡‹ŽŒŠ‰ˆ†„„†Š’”••‘‹Š‡„‚‚ƒˆŒ‘’”––”“’‘‘Ž’•–•”Ž’”•—šžŸ¡£§®¶¼ÁÄÇËÏÓÖÛßãçéëïóøüúùöóðîïñòóôôòñíìììîððóöøöõõõöùûúôíæãäææäÜÓÉÁ»·³¯«©§£Ÿš˜˜šœœ›™•“”–˜š›œœœš™–”””–—•”“’‘’‘ŒŠˆ‡††„ƒ‚‚‚‚‚‚‚‚‚ƒƒ„„†††…„„„†‡‡ˆˆ‡††„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‹ŽŒŠˆ‰‡…„„†‰‘‘’’ŽŠˆ†…ƒ‚‚…‰‘‘’–˜˜—–•”“’•–˜–“ŒŽ‘”—›Ÿ¢¤©¯µ»¿ÂÅÊÎÑÖÛáäçèëïõúüûú÷ôñðññòôõôôòïíììîððòô÷öõôõ÷úûúôíèåæèèåÝÓʼ¸´±®¬«©¦¡›–—™›œš–‘Ž‘•˜™™™˜—•’‘‘’“””“’‘‘‘‘‹‰‡†††„‚‚‚‚‚‚‚‚‚‚ƒƒ„…ƒ‚‚‚ƒ„†‡ˆˆˆ‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„‡‹ŒŠˆ‡…ƒ‚ƒ†ŠŽ‰†„ƒƒ‚‚‚ƒ‡‹‘“–˜™™—•””““”•••’ŽŽŽŽ‘”™›¡¤¦ª®´¹½ÀÃÇËÐÔÙßâäæéïõùýüû÷ôóóòòóõõôôóðïîïðññóõööööö÷øùøòíéææçæâÛÓËĽ¸³¯«©¦£œ––—™™–’Š‹‘””““”’ŽŽ‘’’‘‘‘’’’’‹Š‰ˆˆ‡…ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„…‡ˆˆˆ‰‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰Œ‹‰‡†„‚‚‚…ˆŠ‹‰ˆ‰ˆ„‚‚‚‚‚‚‚ƒ†Š’“—šœ™——˜———–•“ŽŽ‘•˜›¡¥¨«¯³¸¼¾ÁÅÉÎÒØÞàâæêïõùüýüøööõôôõööõôòñññññòóõ÷ö÷÷øøøùùøôïëèèçåâÛÓÌž¹³¯¯¯¬©§£—–•——”Ž‰‡‡‰ŒŽŽ‹ŠŠŒŽ‘’’’““’Œ‹Š‰‰ˆ‡‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚„……†ˆˆˆ‰Šˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰ˆˆ‡…ƒ‚‚ƒ„…†‡‡†…ƒ‚‚‚‚‚‚‚‚„‡ŠŽ”™žŸžœ›œœ›š˜—•’‘’‘Ž’•˜›ž¡¥¨¬¯±µº½ÀÃÆÊÏ×Ýßáåêïôùýþýûúø÷÷øø÷÷÷õôôõôóôõö÷øúúúøø÷÷øøôðíëéæäáÙÒÍÇÀº´±°°«§£žš—–••Š†„…‡‰Š‹Œ‹‹‰ˆˆˆ‰Š‹’““•–”’ŽŒ‹Š‰‰ˆˆˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚„‡‡‡‡ˆˆ‰Š‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„……†…„‚‚ƒ‚‚ƒ…‡†ƒ‚‚‚‚‚‚‚‚‚ƒ†‰‹Ž‘–œ¡¡Ÿžžž›™–”’’“’’’‘’•™ž¢¤§ª®¯±µ¹¼¿ÂÃÈÎÖÜßáæêïôùüüýüüúùúúøö÷÷öôõöôôôõö÷ùûúù÷õõõ÷øôðíëèåâÞ×ÐËÅ¿¹´°¯®ª¦¢Ÿ›˜–”‘‹†ƒƒ„…†‡‡‡ˆ‰ˆ‡‡†…†Š‹Œ’“•––“‘‹‹‹‹Šˆ‰ˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚…††‡††ˆ‰Š‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„„ƒƒƒƒ…‡‡ˆ…ƒ‚‚‚‚‚‚‚‚‚ƒ‡‹’•˜œ¡ ž›ššœœ›˜•“““““•”“‘’—¢¦¨ª«¬®²µ¸º½ÀÃÉÏÖÜßâåêïôøúúúúûúùøøõôóòññòòññðñóôõõóòññðñóõòîëèãàÜØÒÌÆÁº´¯«ª©§¢Ÿš—”‘‡ƒ‚‚‚‚‚‚‚„†‰ˆˆ‡„ƒ…ˆŠŠ‹‘“’‘Œ‹ŠŠ‹‰ˆˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„ƒ‚‚ƒ„…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„„„…‡‰‰ˆ†ƒ‚‚‚‚ƒ…†…„…ˆŽ‘•—˜œ Ÿš˜™›››˜•••“”•––•““™ ¦ª¬¬°´·¹»¾ÀÄÉÏÖÜàäçêïô÷ùùùúûúùø÷õòïììííîïïîîïïïíìëììíîñòðìéåáÜ×ÓÍÈþ¶°¬ª¨¦¤¡ž›™–“‘ŽŠ…‚‚‚‚‚‚‚‚‚…‡ˆ‡…ƒƒ„‡‰ŠŠ‹ŒŽŽŽŒŒŒ‹ŒŒŠˆ‡…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„††……††‡ˆˆ†ƒ‚‚‚„†ŠŠ‰‡‡Š‘–™šž Ÿ›™™š›œš™˜—••–—––•–œ£©®°±¯¯²¶¹¼½¿ÂÆÊÏÕÜáæéìðóöøùùùùùúø÷óðëççééêëëëëêéçååæèêëíîîêæãáÛÕÒÏÊÅÀº²¬§¤¡Ÿ›™–”‘‰…‚‚‚‚‚‚‚‚‚‚ƒ……„ƒƒ‚„…†‡‡ˆŠŒŒŒŠ‰‰Š‹ŒŽ‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†††††……‡‡…ƒ‚‚ƒ†ŠŽŒŒŒ”™›Ÿ Ÿžœ™™šœœ››š˜––––———š ¦¬±³³²²µ¹¼¾¿ÁÃÈÌÏÕÜáçêíñóöùúúùùùùøöòíæããääåçèçæãâáààáãåçéêêåáÞÛÕÐÍÉÅÀ»¶¯¨£ž›™˜–”’Ž‹ˆ„‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒƒƒ„………†‡‰Š‰‰ˆ‡‡‡‰ŒŽ‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„……‡†…„…†‡…„‚‚‚†ŠŽ‘“–˜š›œžŸž›™™š››ššš™—–•””–™œ£©®²²²²´¸»¾ÁÂÂÅÈËÏÕÜáæèíðòô÷øùùùøöôòíæàÝÜÜÜÜÞàààßÞÝÝÝÞàâäååäßÛØÖÐÊÆÄ¿ºµ±ª¤ œ˜–•“ŒŠˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡†…„„………†…„ƒƒ†‰‹Œˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…„…‡†…„„†‡…„‚‚„ˆ‹Ž’“•—™šœœžžž›˜˜—˜˜˜˜™™—•““”—›¡¦¬±²²³µ¸»½ÀÁÂÄÆÈËÐÖÛàäçìïòôö÷øùù÷óñîèâÝÙ×ÕÔÕ×ÙÙÚÚÚÚÛÚÛÜÞÞßàßÛÖÔÑÌÆÃÀºµ±¬¦¢ž›—•“ŒŠˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡†„‚‚‚‚ƒƒ‚‚‚ƒ…‡‰Šˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„……„„ƒ‚‚„†…„ƒƒ†‹Ž’”—™›œœžžžžžžž›™–”““““”••”““•˜£¨®±´¶¸¹»¼¾¿ÀÃÇÈËÎÑÕÚÝáæëïóöøø÷øøóïíêæàÚÖÒÐÏÐÑÒÓÔÕÖÖÖÖÖÖÖÕÖÙÛÖÒÏËÇÃÀ¼¸³®¨¥¢ž›˜•‘Šˆ…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ†„‚‚‚‚‚‚‚‚‚ƒ…‡‰‹Š‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡…„ƒƒ‚‚„†……„…ŠŽ’”–™œŸžž ŸŸŸŸŸ™–”“’‘‘“––•““–™Ÿ¥ª²¶¸º»»¼¾¿¿ÄÈÊÍÏÐÔ×Úßäéíòöøø÷öôðëéæáÜ×ÒÏÌÊËËËÍÏÐÑÒÓÓÒÑÐÏÒÕÖÓÎÉÆĽ¹µ±«¥£¡š—”‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‡…ƒ‚‚‚‚‚‚‚‚‚ƒ„‡Š‹Šˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†…„ƒƒƒ„†‡‡‡‡‰‹‘”•—šœœœžŸŸ¡¡ œ™˜˜–“’“–˜––”“•™Ÿ¤§¬±·¹º¹¹»½¼¾ÂÇÊÍÎÐÒÕØÜàäêïòõõóòñìçäàÜ×ÒÏÍËÉÈÆÅÆÇÈËÍÎÎÎÍÌÍÐÓÕÐÊÆľ¸´²¯¨¢ —“’‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†…ƒ‚‚‚‚‚‚‚‚‚‚ƒ†‡‡‡†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„…†…ƒ‚ƒ…ˆŠŠŠ‹ŒŽ‘“”–™››š™šž ££¡ššš—•••™š˜–””—› £§«±¸¹¸··¹º»½ÁÆÊÎÏÏÒÔØÜßâæêïòñðïìèäßÛ×ÒÎËÊÈÇÅÃÁÁÁÃÆÉËÊÊÉÊËÎÑÓÎÈÅÁ¾¹´±¯¬¦¡™“Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„ƒ‚‚‚‚‚‚‚‚‚‚„††……„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒ…†††…„ƒ„…†……„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„…„ƒƒƒ„‡‹‘’’’’”•–—˜˜˜˜™›¡¥¥¤ ›˜—–—šœš——š¡¤¨¬²¸·¶µ¶·¸»¾ÃÈÌÏÐÑÓÖÙÜÜÞãèíñïìéæãßÛ×ÒÍÊÈÅÂÁÀ¿¾¼¼¿ÂÇÊÉÉÉÉÊËÎÐËǾºµ±«¨¥¡›•‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ……ƒƒƒƒ‚‚‚‚‚‚ƒƒƒƒ„„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚ƒ†ˆ‰ˆ‡†††ˆ‰ˆˆ‡‡…ƒ‚‚ƒƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„ƒ‚ƒ…ˆ”——•”””•––—˜˜˜™œž£¦¦¥¢¡ žœšššžœš›Ÿ¢¦ª®³··µ´µ·¹¼ÀÅÊÍÏÑÒÔÖØÚÙÛàæêíëçäáÝÚÖÒÎÊÇÿ½»ººº¹¹»¿ÅÈÈÇÈÉÈÉÌÌÊÆÁ¼·²¯«¨¦¤ ™’‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡…„„ƒ‚‚‚‚‚‚ƒ„‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„†ˆ†…†‡……†‡‡†‡ˆ††‡‡‡†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„ƒƒ„‡ŠŽ‘“•—˜——–•””•–—™šœž¡¥§¨§¥¤££¡ ¡¡ ŸžŸ¡¤§«¯³¶¶´²³¶¹»¿ÃÇËÏÐÑÔ×ØØÖ×ÛàãååãÞÙÖÓÎÉÆÄ¿¼º¸¶´´µ¶·¹½ÂÆÆÇÈÉÉÊËÊÇÄÀ¼¶±¬¨¥¤¡˜’Œˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ƒ‚‚‚‚‚‚‚‚ƒ„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„„ƒ„†‡†„†‡†‡‰‹‹‹ŒŒ‹Šˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„…†ˆ‹Ž’•–—™™™˜—•“”•–˜›Ÿ¡¤§©©©¨§§§§¦¦§¦¤£¢¡ ¡£§ª°³µµ³²²µ·º¾ÂÆËÎÏÐÔØ×ÖÔÕØÜàâàÜ×ÒÏÌÅÀ¿¼¸µ³±¯®®°²´·»ÀÄÅÇÉÉÉÉÉÈÅ¿¼¶¯ª¦£¡ž›–‘‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒƒ‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…††……†‡ˆ‰‹Ž‰…„ƒ‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‡ŠŠŒ”—™›œœ™—–••••˜›ž ¢¤§©ª©¨¨©¨©©«««©§¤¢¡ ¡¤§«¬¯±²±°°±±³·»¿ÅÉÌÍÐÕØÖÔÓÔ×ÛÞÞÙÔÏÌÉžº·´±®«¨§§©¯²µ¸¼ÀÃÆÆÇÆÆÇÇÄÀ½º´®ª¥¡ž›˜“ŽŠ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„……………„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…„„……‡‰‰ŠŒ’“““““Œ‰ˆ†…„ƒƒ„†‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŽ’•˜›Ÿž›™—–––—™¡£¤¥¦¨©¨¨©ª©©¬¬¬ª¨¥£¡ ¢¥¨¬¬®¯¯¯¯¯¯¯±´¸½ÃÇËÌÎÓÕÔÒÒÒÕØÚÚÔÎÊÇÿ¹´¯¬ª§¤¡ £¨«°³¶»¿ÁÂÄÄÃÅŽº¸²©¤Ÿš˜”‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‡‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„„„„ƒƒ„…††††‰‘‘‘Š‰ˆˆ…ƒ„…‡ˆ…ƒƒƒ‚‚‚‚‚‚‚‚‚‚„ˆ‰ŠŒŽ‘”–™œ ¢£ š———˜›ž¡¢¢¡¢¤§§¦§§§¨ªª©§¥¤£¢ŸžŸ ¤©ª¬¯±²±°±³´µºÀÄÈÉÊÍÏÏÏÍÍÑÔÖÖÐËƽ¹´¯©¥¤¢¡ žŸ ¢¤©¬°³µ·¹¼¼½½½»¸¶³®ª§£˜’‰…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‡††…„ƒ„„…†…†ŠŽŽ‘‘ŠŠ‰†„…†‡ˆ‡…†…ƒ‚‚‚‚‚‚‚‚‚„†‡ŠŒ“–˜› £¥§¥¡œšššœŸ¡¢¡ Ÿ ¢¤¤¥¦¦§§¨§¥£¡¡ œœž£¦©«±³³²±³³²³¸½ÂÆÇÆÇÈÊËÉÉÍÐÓÓÎǽ¸³®©¤ žž›šš›¡¦ª®°³µµ¶¶µ´²¯ª§¥¢œ•Žˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ‰‰ˆ‡†……††……‡ŠŒŽ‘’’‘ŽŒ‰‡††‡ˆˆ†…††„ƒƒƒ‚‚‚‚‚‚ƒ…‡ŠŒ’–› ¢¤¨ª¨¥ žŸ¢£¢¡ŸŸŸŸ ¢¥¥§§¦¥¤¢ ž›˜˜š ¢¦ª®³´´²³²±°²µ¹¾ÂÁÁÂÃÅÆÆÇÉËÍÎÊü¶²§£Ÿœ™—————–—–—šž£§§¨¨©ª¬¯°°¯®«§¤¢ š“‹…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‰‰ŠŠ‰ˆˆ‰‡‡‡ˆ‰‹ŒŽŽ‘’’’Œ‰‰‰Š‹Œ‹Š‰‰‰ˆ‡†…„ƒ„ƒƒƒ„†ˆ‹’–šŸ¢¥§«®«§£ ¡£¤¤¢ ŸŸžž¡£¥§§§¥£ ž›™——™œž¡¥©¯´´³²±±°°±³·»¾½½¾¿ÀÂÃÅÆÇÉÊž¶±¨£ž›š—•“’“”””“”–šž¡¡¡¡¡¢¥ª«ª©¨¦£¡ —ˆƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‡ˆ‹ŽŒŒ‹‰‰ˆˆŠŒŒŒŒŽŽ‹‹‹Œ‘’ŽŒ‹ŠŠ‰ˆ‡††‡‡‰‹“—›ž¢¥©¬®¯¬¨¤¡ ¢¢¡ Ÿœœœ››Ÿ£¦¥¤¢¡¡¡Ÿœ›™˜šŸ¢¦ª¯³³²±¯¯®°²³µ¸º¹ººº»½¿ÀÀÁÃþ·±©¥¡š˜”’Ž‘“”–—™›œžŸŸ¡¤¥£¡ Ÿœ›˜’Œ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†ˆ‘ŽŒŠ‰ŠŒŒŒ‹ŠŠŠŒŽŒŽ‘“–—–”“’‘ŽŒŠ‰‰ŠŒ“–›ž¢¥©°±±ª§¤¤¥£¡Ÿ›š››™™›ž£¥£¢¡ žœš™™› £§¬¯±±°®®°²²³´µ´´´´·¹»¼¼¾¿½·±¬¨¥¢Ÿœ™•’‘ŽŒŒŒ‹Ž‘‘“•–˜š›œœžŸ›››š˜–“ŽŠ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…Š••”’‘ŽŽŽŽ‹‰ˆ‰‰Š‹Ž‘’“—šœž›™–”“’’‘Ž‘”˜œŸ¤¨¬¯²´³¯¬ª¨¨§¥£¡Ÿœš›š˜˜›ž¡££¢¡ žœœœš˜——›Ÿ¡£§«°¯««¬®°±±°¯®¬¯²´µµµ··µ±¨£ ž›˜•’‘Œ‰ˆ‡‡ŠŒŒ‘“•——˜˜˜—˜˜˜—•’Š†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…„‚‚‚‚‚‚‚‚‚‚„ˆ”š›™—•“‘‘‘‘ŽŒŠŠŠŠ‹’“”–™ ¢£¢ ™—––—•”””““”–›Ÿ¢¦«°²µµ³°®¬ª¨§¥£¢žš™˜˜——šœž¡¡ ž›››˜——™œž £¦©¬®ªªª«¯°°®¬©§¨©«®¯¯¯°°°ª¤Ÿ›˜”‘ŽŒ‰†…„„†ˆˆ‰ŠŒŽ‘’“““’“““”“‘Œ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡†„‚‚‚‚‚‚‚‚ƒ…ˆŠ”šš˜™˜•’‘‘‘’‘ŽŽŽŽŽ’”•–––˜šŸ ŸŸ›š™™›››šš™˜—š¢¥¨²´µ´²°¨¥¤¢¡ ™———–”•—™œŸŸžŸ ›š——˜™š›œŸ£§ª«ª«««¬®¯®¬ª¨§§¦¦¦§¨©ª«¬«¨¥ œ™–“Šˆ‡…ƒ‚‚‚„„…‡‰‰‰‹Ž‹‰‰ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚„‡‹—ššš››—”’‘‘’’“’’’’’“”––—˜˜———˜šœžžœœž ¡¡¡ Ÿœ ¤¦©¯´¶¶µ²¯«¨¥¡žœ™––—–•“”–™œžœžŸžœ˜–—˜šœšš›œ¡¦©«ªª«¬¬¬©§¦¥¤¢ ¡¢£¦§§¥¢˜”‘ŽŒ‹‰…„„ƒ‚‚‚‚‚‚ƒ…‡†‡ˆŠŒŒŒŒŽŒŠ†……†…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ“–™ššœœ˜–••–————˜˜˜™™˜˜——™›™˜–•–˜š›žŸ¡£¤¥¦¦¦¥¤¡¡£¥§¬°´¶·¶´¯«¨¤Ÿœ™˜—–•”“““”–˜šœœŸ ž›—•–˜šœ™™™šž¡¥¨©ª¬®¬ª©©¦¤£££¡š™™™šœž¡¢ œ™–“‹‡…ƒ‚‚‚‚‚‚‚‚‚‚‚ƒ„……„…‡‰ŒŒŠ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰‘”—˜š››šššš››››œžœ›š™››š™—–•—™›Ÿ£¦§©ª«ªª©©¥¤¤¥ª®²´¶··µ°«¨¥ ›˜—–•”“’’’“•˜™›œžž›—•—˜›œ™˜˜™›ž¢¦¨ª¬¬ª¨¨§¤¢¢¢Ÿœ˜•“’’“–™ž›—•“‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚ƒ„‡‰‹Š‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‹’”–˜šœžžžŸŸžžžŸŸ Ÿ ›››œœš™™š›Ÿ¢¥§¨ª¬®¬«©§§¨«®°²´¶¸¹¸²«¨¢œ˜–•”“‘‘’’’”––—™œœœœš–”–™œœš™šœžŸ ¢¥§¨©©©¨§¦¤£¡œ—’Ž’–——”’Ž‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‹‘’’•—™œž ¡¡¤¥£¡¢£¢¡¡¢£¤££ žžžžžžŸŸŸž ¤¦©ª°²°¯«ª«°²³´µ·¸ººµ°®¬¥žš—–•“’’’‘‘“”””—šš››™–•—šœ››œŸŸžŸ¢£¤¥§©¨¨§¦¤ ›”ŒŒ‹ŒŽ‘‘‹‰…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…Š’”–™›ž¢¤¦¨©§¥¥¦¥££¥¦¦¦¥£¢¡Ÿžž ¢¡¡ Ÿ¢¦ª®°³µ´²°¯²´µµµµµ·»¼¸³±§¢™—–•”‘‘’““”•˜š™˜˜˜˜™›œœžž››› £¥¦§©¨¥£ š”Œ‹ŠŠŠŠ‹‹‹ˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ŠŽ‘”–™œ ¤¥¨ª¬ª¨¨¨§¤¤¤¥¦§¨¦¥£ Ÿ ¢£¡¡Ÿž¡¦«®¯°²³³´±°±³µ·¸·¶¶¶¹¼¼¹µ²¯ª¥ž™———•‘Ž“—š˜———˜˜šœœ›™—™œ ¤¥¥§©¨¦¤ š“‹Š‰ˆ‡‡‡‡‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„‡‹“–˜›Ÿ¡£¤§ª©¨¦¦¤¢¡¡¢£¦§¥£¡¡¡¢£¢Ÿœœž¡¥¨ª««¬®°°°²´¶¸¸···¹»»»¹·´°ª£™˜˜—•’‹‹Š‹’–š˜–•–••˜›œœœœœœššœž¢¦§§§¨¦¤¢ž˜’‰‡‡‡‡‡‡ˆ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡‡ˆŒŽŽ“•–˜œž¡£¦ª©¦¥¤¢¡Ÿ ¡£§§¥££¢¡¢¢¡ž›šš›Ÿ£¥¦¦§ª®°²´¶¸¸···º»»»º¸¶²«¤žš™—–”’ŽŠ‡†‡‰‹Ž’–š™—•”“”˜›œœ›šœœ›œž ¤§§§§¦¤£ œ—“‰‡††‡‡‡ˆ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‹ŒŒŒŽ“””—˜›Ÿ¢¦©¦£¢ ŸŸžŸ¡¤¦¦¥¥¥¤£¢¡ ™——˜™œ ¡¢¢£¥¨«®°²´¶¶¶¶·º¼¼¼¹¶µ²¬¥Ÿ›˜–”’‹†ƒƒ…ˆ‹”™™—”‘’—ššš™›œœžŸ¡£¥¥¥¥¥¤£ œ—“Š†„„………†‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡ŠŒŽŒ‘’’”•–˜£§§¤¡ŸŸ¡£¤¤¤¦¥¥¤¢¡ œ˜–•–—šžžž ¤©®°²´¶¶¶··¹»¼»¸µµ³®¨¢™–”’Ž‰„‚ƒ„ˆ‹”˜˜–“’•—˜˜š›œœžŸ¡£¥££¤¤¤¢ ›—’Ž‹ˆ†…„„„……ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŽ‘‘‘”—˜™¡¤¥¢Ÿœšš›œžžžžž ¢¢£¢¡Ÿ›š˜˜——™›š™š›Ÿ£§«¯²µ¸¸¸··¹¼¼»¸µ´³¯ª¤žš—•’‡ƒ‚‚ƒ†‰“–•”’‘“–˜™š››œŸ ¡¢¢¡¡¢¢¡Ÿš–’ŽŒ‹‰‰‰ˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ…ˆ‹ŒŒŒ‘‘’•˜šœŸ¢¤¡žš™˜™››šššŸ ¡ Ÿ›ššš™˜———–•˜›ž¡¤¨±·º¹¸··¹»¼¼¸µ´²¯«¦£ž™–’Œ†ƒ‚‚‚…‰‘’’“’’‘‘“•–——˜œŸŸžŸ ŸŸ¡Ÿœ›–“‘Ž‹‰†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…†ˆ‹ŒŒŒŽ‘“–™›œŸŸžœ™——™›››š™™œŸ ¡Ÿžœš™š™˜•“““’‘“—œ ¤§«°¶¹¸·¸¹¸¹»»¹·µ±ª¨¦Ÿš–‘‹†ƒ‚‚…ˆ‹ŒŽ‘‘‘‘Ž‘’’”—œŸžžžŸ Ÿžž˜•‘‘ŽŒ‰†„„„ƒ„„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‡‰ŒŽŽŽ‘“–™›››››˜–—™š›››™˜›ž ¡ Ÿ›››™˜”’‘‘‘•šŸ£§ª¯´¸¸¹¹¸·¸ºº¹¸µ°¬ªª§ ™•Š…‚‚ƒ…ˆŠŠ‹Ž‹ŒŽ’—œžœ››œœž ŸŸ™•’‘‘‘‹‡…„………†………„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‰‹‘ŒŒ‘““”–—˜™›œœš™—•–™›œœ™˜›ž¡¤¤¢ žŸž›™–“’’‘’“”—›Ÿ£§«±µ·¶µµ¶¸¹¹·µ±«ª§¢˜‘‹†ƒ‚‚‚ƒ‡ŠŠ‹ŽŽŒŒŠ‰Š’•˜™˜˜™™š››œ›—’ŽŒ‹ˆ…ƒ‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†ˆŠ‹ŽŽŒŒŒŽ‘“““”””–˜šœœš˜––˜›œžŸŸœ›Ÿ¢¦§¦¤££¡š˜•“’“””•—›ž¢¤¨®²´³²²³µ··µ³¯«¨£Ÿ›”‡„ƒ‚‚‚ƒ‡ŠŠ‹ŒŠ‰‰Š‹‰ˆŠ‘’“”•——––˜˜˜™ššš™”Ž‹‰‰‰‰ˆ†…ƒ‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‡ˆ‰ŠŒŒ‹ŒŽ‘““’“••—™›š˜˜šŸ ¢£¢ ¡£¦©©©©©§¤ ™—””•––—˜œŸ¡£¦ª®®®®°²´³³±®©¥Ÿš•‹‡„ƒ‚‚‚„‡ŠŠ‹‹‹ŠŠ‰ˆˆˆ‡‡‰Œ‘’“”••”•––—˜———–‘Œˆ‡‡‡†„‚‚‚‚‚‚‚‚‚‚„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…††………‡ŠŒŽ‘’‘’”••–šœš™šœ £¤¥¥¤¤¤¥§©ª«¬««ª§¤Ÿ™–•––——™œŸ¢£¤§ª©¨©«¬¯±²²°¨¢š”‘Ž‹‡„ƒ‚‚‚„‡ŠŠ‹‹Œ‹‰ˆ‡‡ˆˆ‡‰‹‘“””””••–—•““‘ˆ†……„‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„††„ƒƒ…ˆ‰‰ŠŠ‹Ž‘‘’““”—™š™™›Ÿ¢¤¥§¨§¦§©««ª©©©©¨¦£¢žš˜˜——–•—™œŸŸŸ¢¥¦¥¦§©¬¯°¯®«¥Ÿ–‘ŽŠ‡„ƒƒƒ„†‰Œ‹ŠŠŒŠ‡†††‡‡‡‰ŽŽŽ‘’””Œ‹‡…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†„ƒ„†ˆˆˆ‡‡ŠŒŽ‘‘’’“•—˜™™› £¥¨ª©§¨ª¬¬¬ª©©©§¤¤£ žœ›™˜–””—š›šš¡¢¢¢£§ª¬®®¬©¢›“Ž‹Š‡„ƒƒ„‡‰Œ‹‰ŠŒ‰††‡ˆ‰‰ˆ‹ŽŒ‹‹ŠŠ‹‹Œ‘Œ‰‡…ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ……ƒƒ…†‡‡†…†‡ˆŠ’““”•••–˜š £§©ª©¨©¬®¯¬ª©¨¥¥¦¦¤¡ Ÿš–“”–———˜š››œŸ£¨«¬¬ª¦ ™’ŽŒŠˆ†…„„†ˆŠŒŒ‰ˆŠ‹‰‰‰Š‹‹‹ŒŒŠŠˆ‡‡‡ˆŠ‹ŒŠ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†…ƒ‚‚‚ƒ„…„„…††ˆŒ‘“”””““”–™ž¢¥§¨©©©«®¯°¯¬©¦¥¦¨©§¥¤¢Ÿ™“‘’””•––———˜™œ¡¦ªª¦¢˜’Ž‹‰‡††‡‡‡ˆŠ‹Š‰‰Š‹‹‹‹ŒŒŒŽŽŽŽ‹‹‰ˆ††…†‡‰Šˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„……ƒ‚‚‚‚‚ƒ†………‡ˆŠ‘“’’’“–› ¤¥¥¦¨©«°®®°³²¯«¨§¨©©¦¤¡žš•‘“”””••–—˜› ¤©¬¨¤žš–’Ž‹ˆ‡††‡‡††ˆ‡‡‰Š‹Œ‹Š‰‰Š‹ŒŒŒŒŒ‹ŒŒ‹Š‰ˆˆ‰ŠŠ‡„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚ƒ†‰‡……‡ˆŠŒŽŽŽ‘‘‘’”—›¡¥¦¦¦§©«¯±¯¯²´³±®ªªªªª¦£Ÿš–‘Œ‹ŒŽ‘‘‘”–—™œŸ£¨«¨¢›˜”‹‰ˆ‡††………„„…ˆ‹ŽŠ‰ˆ‰ŠŒŒ‹Œ‹ŒŽŽŒ‹Œ‹Š‡………„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚ƒ…ˆŠ‡………†ˆ‹ŽŽ‘“•˜œ¡¥¦§¦§¨ª®°°±²³³²°®¬«©¤ ›—’ŠˆˆŠ‹“–™›ž¡¥©¬©¥Ÿš–’‹‰ˆ†„ƒ‚ƒ‚‚‚ƒ‡ŒŽŽŒŠˆŠŒŽŒ‹‹‹Œ’’“‘ŽŠ‡‡‡ˆ‰‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚ƒ……ˆŠ‡……†‡ˆ‹ŒŽ‘’–˜›ž¢¥¦§§§¨ª¯°±³´³²±°®¬ª¨£ž˜“Œˆ…†ˆŠŠŠ‹Ž’—™ ¢¥©¬¨¤ž™•’Œ‹‰‡„ƒƒƒ‚‚‚„ˆ‹ŽŽŠˆ‹ŽŒŠ‰‹Ž’”••”’‰‡ˆŠ‹Šˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„…‡‡†‡‰Š‰‰‰ŠŒŽ‘“–™œ ¢£¥¦§¥¥¦¨ª«¬®±´²°¯®¬ª©§£ž—‘Œ‡„…ˆŠ‹‹Œ”—™› £§ª§¢™—”ŒŒŠ‰‡†……………ˆ‹Œ‹Šˆ†ˆŠŒ‹‰ˆ‰Œ’”•––•’ŽŠˆ‰Š‰ˆˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„…„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡ˆ‰‹‹Š‰ˆˆ‹Ž’—› £¤¤¥¦¦¥¥¥¦§¨©«¯±°¯®®¬ª©§¢œ–’‡„„‡ŠŒŽ’•—˜™›ž¡¦©§£Ÿ›™—“ŽŒŒ‹‰‡‡‡ˆŠŒŒ‹‰‰‡†‡ˆŠŠˆ‡‡‰’“•–—–“‹ˆ‰Šˆˆ‡‡‡†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆ‰‹Œ‹‰‡‡‹’–šœ ¤¦¦¦¦¤¤¥¦¦¦¦¦§©¬¯±±°¯¬ª©¦¡œ˜”‘‡„…‡ŠŽ’•——˜šœ ¥§§¥¢Ÿ›–‘Ž‹Š‰‰‹ŽŽŒŠŠ‰‡‡‡ˆŠ‰‡‡‡ŠŽ‘”–——–“‹Š‰ˆˆ‡‡ˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰‹ŒŠ‰ˆˆ‹Ž“—›ž£§§§¦¦¥¤¥¨§¥¥¥¦©°²²±°«¨¥ ›˜•‘Œ‡„…ˆ‹Ž’“•–———šŸ¤¨§¥¤¡žœ—’ŽŽŽŽŒ‹‹ŽŒ‹‹Šˆˆˆˆˆ‰ˆˆ‰‰‹Ž‘“–———–“‘Ž‹Šˆˆ‰ˆˆˆ‰‡…‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡Š‹Šˆ‡‰Š‹“–šŸ£¦¦§¦§¦¥¦¦¥¥¤¤§«¯²²±±¯¬¨¦¤ž™•’ŽŠ†ƒ„ˆ‹Ž’••–••˜¢¥£¡ žœ›—“ŽŒŒŒ‹ŠŠ‹‹ŒŒŒŠ‰‰ˆˆ‰‰ˆŠ‹Š‹Ž‘”–••–•“‹ˆˆˆˆ‰‰ˆ‡†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‡†‡Š‘’•šŸ£¦§¦§¨§¥¦¦¦¦¦§ª®²´²¯°¯ª¥£¡œ—“ŒŠ†ƒ…‡ŠŒŽ’••”’’–›Ÿ¢¡Ÿ›š™—“ŽŒŠ‹Œ‰‡ˆ‡‰‹ŽŒ‰‰ˆ‰‰‰ŠŒŒ‹ŒŽ’”•””””’‰†‡‡ˆ‰ˆˆ†„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…†‰Œ”•””–™ž¢¥¥¦¨ª§¥¥¦§©©ª¬¯±´²°®¨£¡Ÿš•‹‰ˆ†…†‡‰Œ“•”’’”˜›žœ™—–•”“’‘ŒŠ‰ˆ††††ˆ‹Ž‰ˆ‡‡ˆ‰Š‹‹‹ŒŽ‘“••”“’Œ‡††‡ˆ‰ˆ‡……„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…Š•˜˜˜˜™š ¤¥¦©ª¨¦¦¦§©ª¬¯²µ²¯®«¦£ ™“Ž‰‡‡‡†…†‰‹Œ’”“’•˜šš˜–”““”””’‘Œ‰‡‡†……„ˆŒ’‹‰†‡‰ŠŠ‹‹‹‹’””“‘‹ˆ†„„†‰Šˆ‡…„ƒƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†„ƒƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‹’—š›žž ¡¢¤¥§¨¨¨©¨§¨©«®°²´µ±®«©¥¡š—“‡„„…„ƒ…‡ˆŠŒ‘‘‘“””••”“””–––•“ŽŠ‡‡‡…„„…‰‘Š‡‡ˆ‰‰‰ŠŠŠ‹ŽŽ‹ˆ‡†„‚‚„‡Š‰‡„ƒƒ…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‡…ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Ž”˜Ÿ¢£¤¤¤¥¥§¨¨©ª«©¨©«®²´µ··²ª§£ œ˜–’‹†„„ƒ‚ƒ„…†ˆ‰ŒŽŽŽ‘‘‘’’’’“•–—–”‘Ž‹‰‡‡‡…„„†‰ŒŽ‘Œ‰‰ˆ‰‰ŠŠ‰ˆŠ‹ŽŒ‰†„„„ƒ‚‚ƒ†‰Šˆ†………ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„…‡ˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰•› £¦§¨¨©¨§¨ª«««ª©©«®±µ¶¸º¹´¯©¥¡žš—”‹‡††ƒƒ‚‚‚ƒ„†ˆ‹‹‹ŒŽŽŒŽ‘‘“““”•’ŽŒ‹‰ˆ‡†…„…‡‰ŠŽŽŒŒ‹Š‰ŠŠŠ‰‰‹ŽŒ‰…‚‚‚‚‚‚ƒ†‰Š‰ˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒ‚‚ƒ…††‰‹‹‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡Š‘—¢¥¨©ªª«ª©ª¬¬«ªª©©¬¯³¶¸º»ºµ¯©¤ œ™—”Œ‰ˆ‡…„ƒ‚‚‚‚ƒ‡ˆ‰Š‹Œ‹ŠŠ‹Ž’”ŒŒŠ‰ˆ‡ˆˆ‡‡‰‰‰ŒŽŒŠ‰‰ŠŠŠ‹ŒŽŽ‹‡„‚‚‚‚‚‚„†‡ˆ‡‡†„‚‚‚‚‚‚‚‚‚‚ƒ„„ƒƒƒ„…‡‰‹‹‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†ˆˆŠ–œ¡£¤¥¦¦¦¦§¨©ª«ª©¦¦©±´¸»½½¸³¬§ ›š™•‘ŽŒŠ‰ˆ‡…ƒ‚‚‚…††ˆ‰ŠŠŠ‹ŠŠŒŒŒ’ŽŒ‹Š‰ˆ‰ŠŠ‰‰‰‰Š‹Œ‹ŠŠŠŠˆ†‡ˆˆˆ‡‡‰Š†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚ƒ…ˆˆ‰Š‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡ˆ‰ˆ‰Ž•›Ÿ ¡¢£££¤¥¦¨ªª©¨¥¤§¬°³¸º½¾¹´®¨¡žœ›—“‘‹‹‹ˆ„ƒ‚„………†ˆ‡‰Š‹Š‰‰‰‰Š‹‹Ž‘ŽŒ‹‹ˆˆŠŒŒ‹Š‰‰‰ŠŠŠ‰‡‡‡†„„†‡†„ƒƒ…†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆˆ‰ŒŠˆ‡„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡‰‹‹Œ‘–›Ÿ Ÿ ¢£¤¥¥¦§¨©§¤¡¡¤ª²µ¸»½¹µ°©£Ÿœ—””“ŽŽŽŠ‡……ƒƒƒ„†ˆ‰‰ˆ‰‡†………†‡‰Ž‘ŒŠˆ†‡ŠŒ‹Šˆ‡ˆ‰ˆˆ‡†……ƒ‚‚‚„…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡†‡‹Ž‹ŠŠ‡…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ŠŒŽ”–šžžžŸ ¢¤¤¦§§¨¨¤ žŸ£¨¬°³¶¹»¹¶°ª¤ ž›˜———•“‘ŒŠˆ†ƒƒ„„†‡ˆˆˆ‰ˆ†„„ƒ„…ˆ‹ŽŒŠ‡‡†ˆŠŒ‹Š‰‰‰ˆ‡††…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ………‡ŠŒŠˆ‰Š‰‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰Ž‘“”•˜ššš› ¢¤¦¦§¨¨¤ ŸŸ¢¦©«¯³¶¹·´¯ª¥¡›™™šš˜”’‹ˆ‡……„ƒƒƒ„„…‡‡†…†„„…†ˆ‰‡…„……†‰‹ŒŒ‹‹‰‡†‡††„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„„†‰†……†††…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ…†‰Œ‘’”––•“”–––™šž¢¥¦¥¦§§£ŸŸŸ ¡¤§«°´¶µ³¯«§¢žœ››œœ™–”‘Ž‹‰ˆ‡‡„‚‚‚‚‚ƒ„…†††„ƒ„…†…ƒ‚‚‚ƒ„ˆ‹ŒŒŒŒ‰†…‡‡‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†„ƒ‚ƒ„„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰ŠŒŽ’—˜™˜—”’“””•—™¡¤¦¦¦¦¤ žžŸ £¨±³²±¯©¦¢Ÿžœš™—”‘‹‡„‚‚‚‚‚‚‚ƒ†‰ˆ…‚‚‚„„ƒ‚‚‚‚‚ƒ…ˆ‰‰ŠŒŠ‡‡‡‡‡†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‹Ž‘”—š›š˜•””””•—™¡¤§¦¦¤ žœœœ›ž¡¥©¯¯°¯®ª§£¡ žœ›™—”‘Ž‹†ƒ‚‚‚‚‚‚‚‚†Šˆ„‚‚ƒƒ‚‚‚‚‚‚‚‚ƒ……†‰‹‰ˆ†††††…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Œ“˜œŸžœ›š˜™™˜˜˜™› £¥¥£Ÿœšš›™™šœ¡¦¨ª¬«©¦£¡¡Ÿœš˜•’‹Šˆ„‚‚‚‚‚‚‚‚‚†Š‡ƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚ƒ………ƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŒ–›ž¡ žœœžŸžœœœŸ¡£¢ œ›™˜™˜˜—˜™ž£¦¨©©¨¥£¡¡ ›™–“ŽŒ‰†……‚‚‚‚‚‚‚‚‚ƒ‡‰†ƒ‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ††…ƒ‚‚ƒƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‹•›Ÿ¤£¡ ¢£¤¢ žž žœš™—•••–———šŸ£¦¥¥¤¢¡ žš—”’ŽŒŠˆ†„„„‚‚‚‚‚‚‚‚ƒ…††„ƒ‚‚ƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡†…ƒƒ…‡ˆˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆŠ”š¡¦¥¤¤£¤¦¨©¨¥¢Ÿ ¡ ž›˜™˜–“““”•––˜œ¡¤£¡ Ÿ žœ—“‘Œ‹‰†…ƒ„ƒ‚‚‚‚‚‚‚‚ƒ„……„„ƒ‚ƒ„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‡†……‡Š‹Œ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‰”›¢¦¦¦¤¤§ª«¬ª¨¤¡¡¢ žš˜˜˜”‘‘‘’•™ž¡Ÿœœœœœš˜•“’Ž‰‡††…„ƒ‚‚‚‚‚‚‚‚ƒ„†„„ƒ‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ†…„„†ˆ‹‹‰…‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Š‘–œ£¨¨¦¥¦¨«¯®«¦¢¢¢¡Ÿ›˜–”’ŽŽŽ’•šœššš™˜––•”’‘ŽŠ‡‡††…ƒ‚‚‚‚‚‚‚‚‚„†…„„ƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ†„ƒ„†‰ŒŽŠ…ƒ„……„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡“˜ž£¨§¦¥¦¨ª®°¯¬¨§¥¢¡Ÿ›˜”’ŽŽŽ‘”˜š™ššš˜—–•••““Šˆ†………ƒ‚‚‚‚‚‚‚‚‚„…„„„„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡†…†ˆŠ‹ŽŠ‡††ˆ‰ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…Š–™£§¦¥¥¦¨«®±¯ª§¤¢¡Ÿœ˜”ŽŒŒ“•–˜˜—••”““’‘‘ŽŠˆ‡…„„ƒ‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„†‡Š‹ŒŽ‹‰ˆ‰‹Œˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆ’—šž£§¦¥¥¦©«®¯®«¥¡ŸŸ›™—“ŒŠ‰‡‡†…‡‡ˆ‹ŽŒŠ‰ˆ†„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„†‰‰‹‘Ž‹ŠŠŠ‹‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰”˜œ £¤¦§¦§¨ª®¬¨¢œœ›š˜–’Š†…„ƒ‚‚‚‚„…‡ˆ‰‰‰‰ˆ‰Š‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†ˆˆ‰Ž‘ŒŽŽ‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Œ’–™ ¡£¥¦¦¦¥¥¨ª§¤Ÿ›š™˜—•“‡„‚‚‚‚‚‚‚‚‚‚ƒ„„„ƒƒ……ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„††Š’’‘ŒŠ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‹•˜šœž ¢£¤¤£¢¢¤¥£¡œš—–•“’‘Ž‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡Š””“’‘‘Šˆ…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†‹”˜›žžŸ¡£££¢¡ŸŸ ¡Ÿš—”“‘ŽŒŠˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆŒ‘”““’’’’‹ˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰Ž“˜›Ÿ¢£¤¥¥¥¤£¡ž›˜–“‘ŒŠ‰ˆ†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰Œ‘”“““”“‘Ž‰‡„ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆ“˜œ ¤§¨§§¨¨¦£Ÿœ›˜”’Œ‰†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‹’‘’’ŽŽŒ‹‰‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†Œ“™ž¡¥¨ªª©ª«ª¦¢Ÿ›™•‘ŽŒŠ‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆŠŽŽ‘“‘ŒŠ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰˜Ÿ£¥¨ª¬¬¬¬¬©¦¢Ÿœ™•“‘Ž‹ˆ†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ŠŒŒŽ‘“’’’“’‘‘‘‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰–œ¡¤¦©««¬¬ª¦£¡Ÿ™—•’Ž‰‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ˆ‹ŒŽ’““”•–•“““‹‡…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡‹•› ¤¦ª««¬®¯«¨¥¢Ÿœ™˜”‘‰†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡ŠŒ‘’’”–™˜––•’Š‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŒ“˜¡¦ª®±³®©¦¢Ÿœ›™”‘ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Š‘’”—š™˜—–“‘‰‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚ƒ„…‰Ž’–š ¥«®¯°²´¯«§¤¡žœ™•‘‹†ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‹Ž’“•˜š™——–“‹ˆ†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‡‰‰ŠŒŽ’•™Ÿ¥¨«°´¶²©¥¢Ÿ›—‘Š…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŠŒ’”•˜š˜˜—•“Ž‹‰…ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆŒŽ“”–™ž£§ª±µ·²§£¡ žœ—‘‹…‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡ˆŠ‘’“–˜–•••“‘‘‘ŽŠ‡†…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‰‘“•––””•–—šŸ¥¨«°´µ±¬¨¥£¡ž›–Š„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆ‰‘“–—•”””“““’Œ‰ˆ‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‰‘”—ššš™™™™šœ ¥¨«°´¶³¯ª¦£¡œ—’‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‹Ž“”•“’“”””“’Š‡…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒˆ‘•™š›››šš™š¢¦©¬°´µ³°«§¤Ÿ™”‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆ‹Ž‘“““’’“”““’’Ž‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰Ž•™›œœ››™˜˜› ¥©¬°³³±®¬©¢œ—“Ž‹‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆŠŒ‘’“’‘‘‘‘‘’‘Œ‹‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ŠŽ”˜š›œœš˜——›¡§ª¬¯±±¯®«§ š•Š‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‹Ž‘“”“’’‘’‘’ŽŒŒ‰†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Š”–™›œœœ™™——œ£©¬¬¯¯ª§¤Ÿ˜’Œˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰‹’”•”•““’’’‘ŽŽ‹ˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‰Œ“–˜™˜—˜˜–—œ£¨ª«®¯®ª§¤ œ–ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆŠŒ’•——–•””“’‘ŽŒˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‰“•–””–––˜¤§ª«®®©¤ œ—’Œ‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡‰Œ’”–˜˜˜—•”’’“’’‘‹ˆ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‰‘’‘‘’”–˜™ž£§«¬®¯®¨¢ž™”Š‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡ŠŽ’””––—˜—•“’““““‘Š‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŒŽŽŽ‘“–˜›ž¢§ª¬®®¬¥ œ™”‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†Š’’“”“’’‘‘‘‘Ž‹ˆ…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰ŒŒŽŽ’•™žŸ£§ª¬«¥ š•‹‡ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒƒƒ‚ƒƒ‡ŠŒŽ‹‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ŠŠŠ‹ŒŽ’–šžž¢¥§ª¬«¦¡™”‹ˆ…„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†††…„ƒ„„…‰ŒŒŽŽŽ‹ŠŠ‹ŒŒŒŠˆ…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†ˆ‡‡ˆ‹ŒŽ’—›žž ¡£¦ª©¥ œ˜•‘Šˆ††‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‰ˆ†„„†‡ˆŠ‹ŒŽŽŒŠˆ†‡‡‰ŠŠˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚ƒ„…†††ˆŠŒ”˜›žžžž¡¤¦¥£ ›—”’Ž‹ŠŠ‰ˆ†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆŠŠˆ††‡ˆ‰‹ŒŒ‹ˆ†……„„…‡…„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ƒ‚‚‚‚‚‚‚‚ƒƒƒƒ„…‡‰”–˜šœž £¢¡ ™•”‘ŽŒŠ‰‡†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ˆ‰Š‹ŠŠ‰‰Š‹ŒŽŽ‹‡…„ƒ‚‚ƒƒƒ‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚†ˆ…ƒ‚‚‚‚‚ƒ„…„ƒƒƒ…†‰’–˜˜šœœœŸ¡ ž›˜–”’‘Œ‹Š‰ˆˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒƒ„†ˆŠ‹ŒŽŒŒ‘‘ŽŒ‡…ƒ‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ˆŠˆ‡„ƒƒƒ…‡ˆˆ†„ƒ„…‡Š“˜™™›žž››œžžžš–”’‘‘ŒŠ‰ˆˆˆˆ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„ƒ„†ˆ‹ŽŽŽ‘ŽŽ‘’‘‹‡„‚‚‚‚‚‚‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚ƒ„†ŠŒ‹‰†„„…ˆ‹‹‰‡…„…‡ˆŒ•™ššŸžžœœœŸœ˜•”’‹ˆ‡‡†††‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒƒ„‡‹ŽŽŒ‹‹‹‹ŒŽŒ‹‹ˆ†„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‡ŠŒŽŒ‰†…„…ˆ‹‹‹Šˆ‡‡‡ŠŽ‘•™™šžœœŸ¡ž›˜—“‘‹ˆ‡†„„…†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„ˆŒ’Œ‹Š‰‰‰ˆ‰ŠŠ‰‰‰Š‰ˆ†…ƒ‚ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„„†ŠŒŽŠ‡‡††ˆ‹ŒŒŒ‹‰‡ˆ‹•˜™š›œžžž¡¡Ÿ›™”‘Šˆ†„ƒƒ„†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†‡Š’ŽŒŠˆˆ‰ˆ†‡ˆ‰ˆˆˆ‰ˆ‡††„„„„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†‡ŠŒ‘ŒŠˆ‡‡Š‹‰‰Š‹Œ“–˜™™šœŸŸ ¢¡ Ÿœ™”‘‹ˆ…ƒ‚‚ƒ„ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†ˆ‰Š‘’‘ŽŒˆˆ‰‰‡††‡ˆ‡ˆ‰‰ˆˆˆ‡†‡‡†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚ƒ„†‰‹ŒŽ‘“‘‹ŠŠŒŒŽ‹‹Œ‹Œ’•—™š›œŸ Ÿ Ÿœ›™–“’Ž‹‡„ƒƒ‚‚‚‚‚‚„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…‡ˆ‰‹‘Š‰‰‰ˆ‡‡‡‰Š‹Œ‹‹Š‹‰ˆˆˆ‡‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ˆŠ‘””’‘ŽŽŽŽŽ’”•—™š›œœœœ›š™—•”“‰†„„ƒ‚‚‚‚‚ƒ„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‡ˆ‹Ž‘ŒŠŠŠŠ‰‰‰Š‹ŒŽŒŒ‹Š‰ˆ‡‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‡Š’•••–”’‘‘’’’’‘’”••–™››œœœ›ššš™˜—–”‘Ž‹‡ƒ‚‚‚‚‚‚‚‚ƒ„„„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…†††‡‰ŠŒ‹‹‹‹Œ‹‹ŒŽŽŽŽŒŒ‹‹Šˆˆ‡„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†ŠŽ“•–˜˜˜—–•••––•••“’“•–—™›œ›™™š™—––•’Š…ƒ‚‚‚‚‚‚‚‚ƒ„……†„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„†ˆ‡†ˆ‰‰‰ŒŒŒŒŒŒŒŽŒŒ‰ˆˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„‰Ž’•——˜šš™˜—˜™™˜—•”“•———˜šœœ››œš˜˜—•”’‘‘Œ‡„„ƒƒ‚‚‚‚‚‚‚ƒƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆ††‡ˆ‡‡ŠŒŒŒ‹ŒŽŽ‘ŽŒ‹‹ŠŠˆ‡…ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ‡Œ“““•–——–––˜˜–––––——–––˜˜—˜šš™—–•“‘ŽŽŽŒˆ…„„„„‚‚‚‚‚‚‚ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ‚‚ƒ†‡††††…†ˆŠŒŒŒ‹‘ŽŽŒ‹ŠŠˆˆ‡„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…‰‘‘’”•••––——–—˜˜™™—•”•––••—˜˜–”’ŽŒŒŠˆ…„ƒ‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„…‡‡………†ˆˆˆˆ‡ˆŠŒ’“‘Ž’‘Œ‹Š‰†„„ƒ‚‚ƒƒƒ„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ†‡‡…………„ƒ‚‚ƒƒƒƒ‚‚‚‚‚ƒ„†ŠŽ‘“–˜™—–•”–—™š—•“’”••””““”‘ŒŠ‰‰Š‹‡„ƒ‚‚‚‚ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ…„ƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„†‡†††††‡ˆˆˆ‡‡ˆŠ‘”•“‘ŽŽ‘””’‘‘ŒŠ‡……„ƒ‚„……………„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚…ˆŠŠ‰‰‰ˆ†„ƒ„…††„‚‚‚‚ƒƒ„†ŠŽ‘”—š›™–”“”—››—”’‘’’“”’Œ‹Šˆ††ˆ‰†…„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚„„„„…†‡‡‡ˆ‹‹‹Œ’•–•“‘‘‘“••”“‘Ž‹Š‰‰‡†……‡ˆ‡†‡‡††††…ƒƒ‚‚‚‚‚‚‚‚‚‚„‡ŠŠ‰‰ˆ†…„„……††…ƒ‚‚‚ƒ„††ˆŒ‘“”–šœ™–’‘’–™š˜•‘’’Œ‹ŠŠˆ…„„†‡†…„„ƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒƒ„††††ˆŽŽ“”—˜–”““”–—˜—•‘ŽŽ‹‰Š‹‰ˆ‡‡‰ŠŠŠ‹‹‰ˆ‰‰ˆ†„ƒ‚‚‚‚‚‚‚‚„†‰‹Š‰ˆ†„ƒƒ…†††…„ƒ‚ƒƒ„…‡ˆŠŽ‘’“”–™›š—’’•˜š˜•ŽŒŠ‰ˆ‡„ƒƒƒ…†„ƒƒƒ‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚ƒ„…‡ˆŠ‘‘“””––•””–˜™šš™–’Œ‹‹‹‹Š‰ŠŠ‹ŒŽ‹Š‹Šˆ†„ƒ‚‚‚‚‚‚‚„†ˆŠŠˆ†„ƒƒƒ„…†††…ƒ‚ƒƒƒ…‡‰ŠŒ‘’’’“•—™š™–“’“•˜˜—”Ž‹‰ˆ†„0
\ No newline at end of file diff --git a/progs/demos/tessdemo.c b/progs/demos/tessdemo.c new file mode 100644 index 000000000..26403eee0 --- /dev/null +++ b/progs/demos/tessdemo.c @@ -0,0 +1,524 @@ + +/* + * A demo of the GLU polygon tesselation functions written by Bogdan Sikorski. + * Updated for GLU 1.3 tessellation by Gareth Hughes <gareth@valinux.com> + */ + +#include <GL/glut.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define MAX_POINTS 256 +#define MAX_CONTOURS 32 +#define MAX_TRIANGLES 256 + +#ifndef GLCALLBACK +#ifdef CALLBACK +#define GLCALLBACK CALLBACK +#else +#define GLCALLBACK +#endif +#endif + +#ifdef GLU_VERSION_1_2 + +typedef enum{ QUIT, TESSELATE, CLEAR } menu_entries; +typedef enum{ DEFINE, TESSELATED } mode_type; + +static GLsizei width, height; +static GLuint contour_cnt; +static GLuint triangle_cnt; + +static mode_type mode; +static int menu; + +static GLuint list_start; + +static GLfloat edge_color[3]; + +static struct { + GLfloat p[MAX_POINTS][2]; + GLuint point_cnt; +} contours[MAX_CONTOURS]; + +static struct { + GLsizei no; + GLfloat p[3][2]; + GLclampf color[3][3]; +} triangles[MAX_TRIANGLES]; + + + +static void GLCALLBACK error_callback( GLenum err ) +{ + int len, i; + char const *str; + + glColor3f( 0.9, 0.9, 0.9 ); + glRasterPos2i( 5, 5 ); + + str = (const char *) gluErrorString( err ); + len = strlen( str ); + + for ( i = 0 ; i < len ; i++ ) { + glutBitmapCharacter( GLUT_BITMAP_9_BY_15, str[i] ); + } +} + +static void GLCALLBACK begin_callback( GLenum mode ) +{ + /* Allow multiple triangles to be output inside the begin/end pair. */ + triangle_cnt = 0; + triangles[triangle_cnt].no = 0; +} + +static void GLCALLBACK edge_callback( GLenum flag ) +{ + /* Persist the edge flag across triangles. */ + if ( flag == GL_TRUE ) { + edge_color[0] = 1.0; + edge_color[1] = 1.0; + edge_color[2] = 0.5; + } else { + edge_color[0] = 1.0; + edge_color[1] = 0.0; + edge_color[2] = 0.0; + } +} + +static void GLCALLBACK end_callback() +{ + GLuint i; + + glBegin( GL_LINES ); + + /* Output the three edges of each triangle as lines colored + according to their edge flag. */ + for ( i = 0 ; i < triangle_cnt ; i++ ) { + glColor3f( triangles[i].color[0][0], + triangles[i].color[0][1], + triangles[i].color[0][2] ); + + glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] ); + glVertex2f( triangles[i].p[1][0], triangles[i].p[1][1] ); + + glColor3f( triangles[i].color[1][0], + triangles[i].color[1][1], + triangles[i].color[1][2] ); + + glVertex2f( triangles[i].p[1][0], triangles[i].p[1][1] ); + glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] ); + + glColor3f( triangles[i].color[2][0], + triangles[i].color[2][1], + triangles[i].color[2][2] ); + + glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] ); + glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] ); + } + + glEnd(); +} + +static void GLCALLBACK vertex_callback( void *data ) +{ + GLsizei no; + GLfloat *p; + + p = (GLfloat *) data; + no = triangles[triangle_cnt].no; + + triangles[triangle_cnt].p[no][0] = p[0]; + triangles[triangle_cnt].p[no][1] = p[1]; + + triangles[triangle_cnt].color[no][0] = edge_color[0]; + triangles[triangle_cnt].color[no][1] = edge_color[1]; + triangles[triangle_cnt].color[no][2] = edge_color[2]; + + /* After every three vertices, initialize the next triangle. */ + if ( ++(triangles[triangle_cnt].no) == 3 ) { + triangle_cnt++; + triangles[triangle_cnt].no = 0; + } +} + +static void GLCALLBACK combine_callback( GLdouble coords[3], + GLdouble *vertex_data[4], + GLfloat weight[4], void **data ) +{ + GLfloat *vertex; + + vertex = (GLfloat *) malloc( 2 * sizeof(GLfloat) ); + + vertex[0] = (GLfloat) coords[0]; + vertex[1] = (GLfloat) coords[1]; + + *data = vertex; +} + + +static void set_screen_wh( GLsizei w, GLsizei h ) +{ + width = w; + height = h; +} + +typedef void (GLAPIENTRY *callback_t)(); + +static void tesse( void ) +{ + GLUtesselator *tobj; + GLdouble data[3]; + GLuint i, j, point_cnt; + + list_start = glGenLists( 2 ); + + tobj = gluNewTess(); + + if ( tobj != NULL ) { + gluTessNormal( tobj, 0.0, 0.0, 1.0 ); + gluTessCallback( tobj, GLU_TESS_BEGIN, (callback_t) glBegin ); + gluTessCallback( tobj, GLU_TESS_VERTEX, (callback_t) glVertex2fv ); + gluTessCallback( tobj, GLU_TESS_END, (callback_t) glEnd ); + gluTessCallback( tobj, GLU_TESS_ERROR, (callback_t) error_callback ); + gluTessCallback( tobj, GLU_TESS_COMBINE, (callback_t) combine_callback ); + + glNewList( list_start, GL_COMPILE ); + gluBeginPolygon( tobj ); + + for ( j = 0 ; j <= contour_cnt ; j++ ) { + point_cnt = contours[j].point_cnt; + gluNextContour( tobj, GLU_UNKNOWN ); + + for ( i = 0 ; i < point_cnt ; i++ ) { + data[0] = (GLdouble)( contours[j].p[i][0] ); + data[1] = (GLdouble)( contours[j].p[i][1] ); + data[2] = 0.0; + gluTessVertex( tobj, data, contours[j].p[i] ); + } + } + + gluEndPolygon( tobj ); + glEndList(); + + gluTessCallback( tobj, GLU_TESS_BEGIN, (callback_t) begin_callback ); + gluTessCallback( tobj, GLU_TESS_VERTEX, (callback_t) vertex_callback ); + gluTessCallback( tobj, GLU_TESS_END, (callback_t) end_callback ); + gluTessCallback( tobj, GLU_TESS_EDGE_FLAG, (callback_t) edge_callback ); + + glNewList( list_start + 1, GL_COMPILE ); + gluBeginPolygon( tobj ); + + for ( j = 0 ; j <= contour_cnt ; j++ ) { + point_cnt = contours[j].point_cnt; + gluNextContour( tobj, GLU_UNKNOWN ); + + for ( i = 0 ; i < point_cnt ; i++ ) { + data[0] = (GLdouble)( contours[j].p[i][0] ); + data[1] = (GLdouble)( contours[j].p[i][1] ); + data[2] = 0.0; + gluTessVertex( tobj, data, contours[j].p[i] ); + } + } + + gluEndPolygon( tobj ); + glEndList(); + + gluDeleteTess( tobj ); + + glutMouseFunc( NULL ); + mode = TESSELATED; + } +} + +static void left_down( int x1, int y1 ) +{ + GLfloat P[2]; + GLuint point_cnt; + + /* translate GLUT into GL coordinates */ + + P[0] = x1; + P[1] = height - y1; + + point_cnt = contours[contour_cnt].point_cnt; + + contours[contour_cnt].p[point_cnt][0] = P[0]; + contours[contour_cnt].p[point_cnt][1] = P[1]; + + glBegin( GL_LINES ); + + if ( point_cnt ) { + glVertex2fv( contours[contour_cnt].p[point_cnt-1] ); + glVertex2fv( P ); + } else { + glVertex2fv( P ); + glVertex2fv( P ); + } + + glEnd(); + glFinish(); + + contours[contour_cnt].point_cnt++; +} + +static void middle_down( int x1, int y1 ) +{ + GLuint point_cnt; + (void) x1; + (void) y1; + + point_cnt = contours[contour_cnt].point_cnt; + + if ( point_cnt > 2 ) { + glBegin( GL_LINES ); + + glVertex2fv( contours[contour_cnt].p[0] ); + glVertex2fv( contours[contour_cnt].p[point_cnt-1] ); + + contours[contour_cnt].p[point_cnt][0] = -1; + + glEnd(); + glFinish(); + + contour_cnt++; + contours[contour_cnt].point_cnt = 0; + } +} + +static void mouse_clicked( int button, int state, int x, int y ) +{ + x -= x%10; + y -= y%10; + + switch ( button ) { + case GLUT_LEFT_BUTTON: + if ( state == GLUT_DOWN ) { + left_down( x, y ); + } + break; + case GLUT_MIDDLE_BUTTON: + if ( state == GLUT_DOWN ) { + middle_down( x, y ); + } + break; + } +} + +static void display( void ) +{ + GLuint i,j; + GLsizei ii, jj; + GLuint point_cnt; + + glClear( GL_COLOR_BUFFER_BIT ); + + switch ( mode ) { + case DEFINE: + /* draw grid */ + glColor3f( 0.6, 0.5, 0.5 ); + + glBegin( GL_LINES ); + + for ( ii = 0 ; ii < width ; ii += 10 ) { + for ( jj = 0 ; jj < height ; jj += 10 ) { + glVertex2i( 0, jj ); + glVertex2i( width, jj ); + glVertex2i( ii, height ); + glVertex2i( ii, 0 ); + } + } + + glEnd(); + + glColor3f( 1.0, 1.0, 0.0 ); + + for ( i = 0 ; i <= contour_cnt ; i++ ) { + point_cnt = contours[i].point_cnt; + + glBegin( GL_LINES ); + + switch ( point_cnt ) { + case 0: + break; + case 1: + glVertex2fv( contours[i].p[0] ); + glVertex2fv( contours[i].p[0] ); + break; + case 2: + glVertex2fv( contours[i].p[0] ); + glVertex2fv( contours[i].p[1] ); + break; + default: + --point_cnt; + for ( j = 0 ; j < point_cnt ; j++ ) { + glVertex2fv( contours[i].p[j] ); + glVertex2fv( contours[i].p[j+1] ); + } + if ( contours[i].p[j+1][0] == -1 ) { + glVertex2fv( contours[i].p[0] ); + glVertex2fv( contours[i].p[j] ); + } + break; + } + + glEnd(); + } + + glFinish(); + break; + + case TESSELATED: + /* draw triangles */ + glColor3f( 0.7, 0.7, 0.0 ); + glCallList( list_start ); + + glLineWidth( 2.0 ); + glCallList( list_start + 1 ); + glLineWidth( 1.0 ); + + glFlush(); + break; + } + + glColor3f( 1.0, 1.0, 0.0 ); +} + +static void clear( void ) +{ + contour_cnt = 0; + contours[0].point_cnt = 0; + triangle_cnt = 0; + + glutMouseFunc( mouse_clicked ); + + mode = DEFINE; + + glDeleteLists( list_start, 2 ); + list_start = 0; +} + +static void quit( void ) +{ + exit( 0 ); +} + +static void menu_selected( int entry ) +{ + switch ( entry ) { + case CLEAR: + clear(); + break; + case TESSELATE: + tesse(); + break; + case QUIT: + quit(); + break; + } + + glutPostRedisplay(); +} + +static void key_pressed( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + + switch ( key ) { + case 'c': + case 'C': + clear(); + break; + case 't': + case 'T': + tesse(); + break; + case 27: + case 'q': + case 'Q': + quit(); + break; + } + + glutPostRedisplay(); +} + +static void myinit( void ) +{ + /* clear background to gray */ + glClearColor( 0.4, 0.4, 0.4, 0.0 ); + glShadeModel( GL_FLAT ); + glPolygonMode( GL_FRONT, GL_FILL ); + + menu = glutCreateMenu( menu_selected ); + + glutAddMenuEntry( "clear", CLEAR ); + glutAddMenuEntry( "tesselate", TESSELATE ); + glutAddMenuEntry( "quit", QUIT ); + + glutAttachMenu( GLUT_RIGHT_BUTTON ); + + glutMouseFunc( mouse_clicked ); + glutKeyboardFunc( key_pressed ); + + contour_cnt = 0; + mode = DEFINE; +} + +static void reshape( GLsizei w, GLsizei h ) +{ + glViewport( 0, 0, w, h ); + + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho( 0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0 ); + + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + + set_screen_wh( w, h ); +} + +#endif + + +static void usage( void ) +{ + printf( "Use left mouse button to place vertices.\n" ); + printf( "Press middle mouse button when done.\n" ); + printf( "Select tesselate from the pop-up menu.\n" ); +} + + +int main( int argc, char **argv ) +{ + const char *version = (const char *) gluGetString( GLU_VERSION ); + printf( "GLU version string: %s\n", version ); + if ( strstr( version, "1.0" ) || strstr( version, "1.1" ) ) { + fprintf( stderr, "Sorry, this demo reqiures GLU 1.2 or later.\n" ); + exit( 1 ); + } + + usage(); + + glutInit( &argc, argv ); + glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB ); + glutInitWindowPosition(0, 0); + glutInitWindowSize( 400, 400 ); + glutCreateWindow( argv[0] ); + + /* GH: Bit of a hack... + */ +#ifdef GLU_VERSION_1_2 + myinit(); + + glutDisplayFunc( display ); + glutReshapeFunc( reshape ); + + glutMainLoop(); +#endif + + return 0; +} diff --git a/progs/demos/texcyl.c b/progs/demos/texcyl.c new file mode 100644 index 000000000..c04d5004e --- /dev/null +++ b/progs/demos/texcyl.c @@ -0,0 +1,288 @@ + +/* + * Textured cylinder demo: lighting, texturing, reflection mapping. + * + * Command line options: + * -info print GL implementation information + * + * + * Brian Paul May 1997 This program is in the public domain. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + +#include "readtex.h" + +#define TEXTURE_FILE "../images/reflect.rgb" + +#define LIT 1 +#define TEXTURED 2 +#define REFLECT 3 +#define ANIMATE 10 +#define POINT_FILTER 20 +#define LINEAR_FILTER 21 +#define QUIT 100 + +static GLuint CylinderObj = 0; +static GLboolean Animate = GL_TRUE; + +static GLfloat Xrot = 0.0, Yrot = 0.0, Zrot = 0.0; +static GLfloat DXrot = 50.0, DYrot = 125.0; + +/* performance info */ +static GLint T0 = 0; +static GLint Frames = 0; + + +static void Idle( void ) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + if (Animate) { + Xrot += DXrot * dt; + Yrot += DYrot * dt; + glutPostRedisplay(); + } +} + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT ); + + glPushMatrix(); + glRotatef(Xrot, 1.0, 0.0, 0.0); + glRotatef(Yrot, 0.0, 1.0, 0.0); + glRotatef(Zrot, 0.0, 0.0, 1.0); + glScalef(5.0, 5.0, 5.0); + glCallList(CylinderObj); + + glPopMatrix(); + + glutSwapBuffers(); + + if (Animate) { + GLint t = glutGet(GLUT_ELAPSED_TIME); + Frames++; + if (t - T0 >= 5000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + T0 = t; + Frames = 0; + } + } +} + + +static void Reshape( int width, int height ) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glFrustum( -1.0, 1.0, -1.0, 1.0, 10.0, 100.0 ); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -70.0 ); +} + + +static void SetMode(GLuint m) +{ + /* disable everything */ + glDisable(GL_LIGHTING); + glDisable(GL_TEXTURE_2D); + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + + /* enable what's needed */ + if (m==LIT) { + glEnable(GL_LIGHTING); + } + else if (m==TEXTURED) { + glEnable(GL_TEXTURE_2D); + } + else if (m==REFLECT) { + glEnable(GL_TEXTURE_2D); + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + } +} + + +static void ModeMenu(int entry) +{ + if (entry==ANIMATE) { + Animate = !Animate; + if (Animate) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + } + else if (entry==POINT_FILTER) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + } + else if (entry==LINEAR_FILTER) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } + else if (entry==QUIT) { + exit(0); + } + else { + SetMode(entry); + } + glutPostRedisplay(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + Animate = !Animate; + if (Animate) + glutIdleFunc(Idle); + else + glutIdleFunc(NULL); + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void SpecialKey( int key, int x, int y ) +{ + float step = 3.0; + (void) x; + (void) y; + + switch (key) { + case GLUT_KEY_UP: + Xrot += step; + break; + case GLUT_KEY_DOWN: + Xrot -= step; + break; + case GLUT_KEY_LEFT: + Yrot += step; + break; + case GLUT_KEY_RIGHT: + Yrot -= step; + break; + } + glutPostRedisplay(); +} + + +static void Init( int argc, char *argv[] ) +{ + GLUquadricObj *q = gluNewQuadric(); + CylinderObj = glGenLists(1); + glNewList(CylinderObj, GL_COMPILE); + + glTranslatef(0.0, 0.0, -1.0); + + /* cylinder */ + gluQuadricNormals(q, GL_SMOOTH); + gluQuadricTexture(q, GL_TRUE); + gluCylinder(q, 0.6, 0.6, 2.0, 24, 1); + + /* end cap */ + glTranslatef(0.0, 0.0, 2.0); + gluDisk(q, 0.0, 0.6, 24, 1); + + /* other end cap */ + glTranslatef(0.0, 0.0, -2.0); + gluQuadricOrientation(q, GLU_INSIDE); + gluDisk(q, 0.0, 0.6, 24, 1); + + glEndList(); + gluDeleteQuadric(q); + + /* lighting */ + glEnable(GL_LIGHTING); + { + GLfloat gray[4] = {0.2, 0.2, 0.2, 1.0}; + GLfloat white[4] = {1.0, 1.0, 1.0, 1.0}; + GLfloat teal[4] = { 0.0, 1.0, 0.8, 1.0 }; + glMaterialfv(GL_FRONT, GL_DIFFUSE, teal); + glLightfv(GL_LIGHT0, GL_AMBIENT, gray); + glLightfv(GL_LIGHT0, GL_DIFFUSE, white); + glEnable(GL_LIGHT0); + } + + /* fitering = nearest, initially */ + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); + + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + + if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) { + printf("Error: couldn't load texture image\n"); + exit(1); + } + + glEnable(GL_CULL_FACE); /* don't need Z testing for convex objects */ + + SetMode(LIT); + + if (argc > 1 && strcmp(argv[1], "-info")==0) { + printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); + printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); + printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR)); + printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS)); + } +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowSize( 400, 400 ); + glutInitWindowPosition( 0, 0 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + + glutCreateWindow(argv[0] ); + + Init(argc, argv); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutCreateMenu(ModeMenu); + glutAddMenuEntry("Lit", LIT); + glutAddMenuEntry("Textured", TEXTURED); + glutAddMenuEntry("Reflect", REFLECT); + glutAddMenuEntry("Point Filtered", POINT_FILTER); + glutAddMenuEntry("Linear Filtered", LINEAR_FILTER); + glutAddMenuEntry("Toggle Animation", ANIMATE); + glutAddMenuEntry("Quit", QUIT); + glutAttachMenu(GLUT_RIGHT_BUTTON); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/texdown.c b/progs/demos/texdown.c new file mode 100644 index 000000000..79525a039 --- /dev/null +++ b/progs/demos/texdown.c @@ -0,0 +1,403 @@ + +/* + * Copyright (C) 1999 Brian Paul All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/* + * texdown + * + * Measure texture download speed. + * Use keyboard to change texture size, format, datatype, scale/bias, + * subimageload, etc. + * + * Brian Paul 28 January 2000 + */ + + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <GL/glut.h> + + +static GLsizei MaxSize = 1024; +static GLsizei TexWidth = 256, TexHeight = 256, TexBorder = 0; +static GLboolean ScaleAndBias = GL_FALSE; +static GLboolean SubImage = GL_FALSE; +static GLdouble DownloadRate = 0.0; /* texels/sec */ + +static GLuint Mode = 0; + + +struct FormatRec { + GLenum Format; + GLenum Type; + GLenum IntFormat; + GLint TexelSize; +}; + + +static const struct FormatRec FormatTable[] = { + /* Format Type IntFormat TexelSize */ + { GL_BGRA, GL_UNSIGNED_BYTE, GL_RGBA, 4 }, + { GL_RGB, GL_UNSIGNED_BYTE, GL_RGB, 3 }, + { GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, 4 }, + { GL_RGBA, GL_UNSIGNED_BYTE, GL_RGB, 4 }, + { GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB, 2 }, + { GL_LUMINANCE, GL_UNSIGNED_BYTE, GL_LUMINANCE, 1 }, + { GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, GL_LUMINANCE_ALPHA, 2 }, + { GL_ALPHA, GL_UNSIGNED_BYTE, GL_ALPHA, 1 }, +}; +static GLint Format; + +#define NUM_FORMATS (sizeof(FormatTable)/sizeof(FormatTable[0])) + +static int +BytesPerTexel(GLint format) +{ + return FormatTable[format].TexelSize; +} + + +static const char * +FormatStr(GLenum format) +{ + switch (format) { + case GL_RGB: + return "GL_RGB"; + case GL_RGBA: + return "GL_RGBA"; + case GL_BGRA: + return "GL_BGRA"; + case GL_LUMINANCE: + return "GL_LUMINANCE"; + case GL_LUMINANCE_ALPHA: + return "GL_LUMINANCE_ALPHA"; + case GL_ALPHA: + return "GL_ALPHA"; + default: + return ""; + } +} + + +static const char * +TypeStr(GLenum type) +{ + switch (type) { + case GL_UNSIGNED_BYTE: + return "GL_UNSIGNED_BYTE"; + case GL_UNSIGNED_SHORT: + return "GL_UNSIGNED_SHORT"; + case GL_UNSIGNED_SHORT_5_6_5: + return "GL_UNSIGNED_SHORT_5_6_5"; + case GL_UNSIGNED_SHORT_5_6_5_REV: + return "GL_UNSIGNED_SHORT_5_6_5_REV"; + default: + return ""; + } +} + + +static void +MeasureDownloadRate(void) +{ + const int w = TexWidth + 2 * TexBorder; + const int h = TexHeight + 2 * TexBorder; + const int bytes = w * h * BytesPerTexel(Format); + GLubyte *texImage, *getImage; + GLdouble t0, t1, time; + int count; + int i; + + texImage = (GLubyte *) malloc(bytes); + getImage = (GLubyte *) malloc(bytes); + if (!texImage || !getImage) { + DownloadRate = 0.0; + return; + } + + for (i = 0; i < bytes; i++) { + texImage[i] = i & 0xff; + } + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + + if (ScaleAndBias) { + glPixelTransferf(GL_RED_SCALE, 0.5); + glPixelTransferf(GL_GREEN_SCALE, 0.5); + glPixelTransferf(GL_BLUE_SCALE, 0.5); + glPixelTransferf(GL_RED_BIAS, 0.5); + glPixelTransferf(GL_GREEN_BIAS, 0.5); + glPixelTransferf(GL_BLUE_BIAS, 0.5); + } + else { + glPixelTransferf(GL_RED_SCALE, 1.0); + glPixelTransferf(GL_GREEN_SCALE, 1.0); + glPixelTransferf(GL_BLUE_SCALE, 1.0); + glPixelTransferf(GL_RED_BIAS, 0.0); + glPixelTransferf(GL_GREEN_BIAS, 0.0); + glPixelTransferf(GL_BLUE_BIAS, 0.0); + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glEnable(GL_TEXTURE_2D); + + count = 0; + t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + do { + if (SubImage && count > 0) { + glTexSubImage2D(GL_TEXTURE_2D, 0, -TexBorder, -TexBorder, w, h, + FormatTable[Format].Format, + FormatTable[Format].Type, texImage); + } + else { + glTexImage2D(GL_TEXTURE_2D, 0, + FormatTable[Format].IntFormat, w, h, TexBorder, + FormatTable[Format].Format, + FormatTable[Format].Type, texImage); + } + + /* draw a tiny polygon to force texture into texram */ + glBegin(GL_TRIANGLES); + glTexCoord2f(0, 0); glVertex2f(1, 1); + glTexCoord2f(1, 0); glVertex2f(3, 1); + glTexCoord2f(0.5, 1); glVertex2f(2, 3); + glEnd(); + + t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + time = t1 - t0; + count++; + } while (time < 3.0); + + glDisable(GL_TEXTURE_2D); + + printf("w*h=%d count=%d time=%f\n", w*h, count, time); + DownloadRate = w * h * count / time; + +#if 0 + if (!ScaleAndBias) { + /* verify texture readback */ + glGetTexImage(GL_TEXTURE_2D, 0, + FormatTable[Format].Format, + FormatTable[Format].Type, getImage); + for (i = 0; i < w * h; i++) { + if (texImage[i] != getImage[i]) { + printf("[%d] %d != %d\n", i, texImage[i], getImage[i]); + } + } + } +#endif + + free(texImage); + free(getImage); + + { + GLint err = glGetError(); + if (err) + printf("GL error %d\n", err); + } +} + + +static void +PrintString(const char *s) +{ + while (*s) { + glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s); + s++; + } +} + + +static void +Display(void) +{ + const int w = TexWidth + 2 * TexBorder; + const int h = TexHeight + 2 * TexBorder; + char s[1000]; + + glClear(GL_COLOR_BUFFER_BIT); + + glRasterPos2i(10, 80); + sprintf(s, "Texture size[cursor]: %d x %d Border[b]: %d", w, h, TexBorder); + PrintString(s); + + glRasterPos2i(10, 65); + sprintf(s, "Format[f]: %s Type: %s IntFormat: %s", + FormatStr(FormatTable[Format].Format), + TypeStr( FormatTable[Format].Type), + FormatStr(FormatTable[Format].IntFormat)); + PrintString(s); + + glRasterPos2i(10, 50); + sprintf(s, "Pixel Scale&Bias[p]: %s TexSubImage[s]: %s", + ScaleAndBias ? "Yes" : "No", + SubImage ? "Yes" : "No"); + PrintString(s); + + if (Mode == 0) { + glRasterPos2i(200, 10); + sprintf(s, "...Measuring..."); + PrintString(s); + glutSwapBuffers(); + glutPostRedisplay(); + Mode++; + } + else if (Mode == 1) { + MeasureDownloadRate(); + glutPostRedisplay(); + Mode++; + } + else { + /* show results */ + glRasterPos2i(10, 10); + sprintf(s, "Download rate: %g Mtexels/second %g MB/second", + DownloadRate / 1000000.0, + DownloadRate * BytesPerTexel(Format) / 1000000.0); + PrintString(s); + { + GLint r, g, b, a, l, i; + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_RED_SIZE, &r); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_GREEN_SIZE, &g); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_BLUE_SIZE, &b); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_ALPHA_SIZE, &a); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_LUMINANCE_SIZE, &l); + glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTENSITY_SIZE, &i); + sprintf(s, "TexelBits: R=%d G=%d B=%d A=%d L=%d I=%d", r, g, b, a, l, i); + glRasterPos2i(10, 25); + PrintString(s); + } + + glutSwapBuffers(); + } +} + + +static void +Reshape(int width, int height) +{ + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho(0, width, 0, height, -1, 1); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + + +static void +Key(unsigned char key, int x, int y) +{ + (void) x; + (void) y; + switch (key) { + case ' ': + Mode = 0; + break; + case 'b': + /* toggle border */ + TexBorder = 1 - TexBorder; + Mode = 0; + break; + case 'f': + /* change format */ + Format = (Format + 1) % NUM_FORMATS; + Mode = 0; + break; + case 'F': + /* change format */ + Format = (Format - 1) % NUM_FORMATS; + Mode = 0; + break; + case 'p': + /* toggle border */ + ScaleAndBias = !ScaleAndBias; + Mode = 0; + break; + case 's': + SubImage = !SubImage; + Mode = 0; + break; + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void +SpecialKey(int key, int x, int y) +{ + (void) x; + (void) y; + switch (key) { + case GLUT_KEY_UP: + if (TexHeight < MaxSize) + TexHeight *= 2; + break; + case GLUT_KEY_DOWN: + if (TexHeight > 1) + TexHeight /= 2; + break; + case GLUT_KEY_LEFT: + if (TexWidth > 1) + TexWidth /= 2; + break; + case GLUT_KEY_RIGHT: + if (TexWidth < MaxSize) + TexWidth *= 2; + break; + } + Mode = 0; + glutPostRedisplay(); +} + + +static void +Init(void) +{ + printf("GL_VENDOR = %s\n", (const char *) glGetString(GL_VENDOR)); + printf("GL_VERSION = %s\n", (const char *) glGetString(GL_VERSION)); + printf("GL_RENDERER = %s\n", (const char *) glGetString(GL_RENDERER)); +} + + +int +main(int argc, char *argv[]) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 600, 100 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutSpecialFunc( SpecialKey ); + glutDisplayFunc( Display ); + Init(); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/texenv.c b/progs/demos/texenv.c new file mode 100644 index 000000000..590867b49 --- /dev/null +++ b/progs/demos/texenv.c @@ -0,0 +1,815 @@ + +/* Copyright (c) Mark J. Kilgard, 1994. */ + +/** + * (c) Copyright 1993, Silicon Graphics, Inc. + * ALL RIGHTS RESERVED + * Permission to use, copy, modify, and distribute this software for + * any purpose and without fee is hereby granted, provided that the above + * copyright notice appear in all copies and that both the copyright notice + * and this permission notice appear in supporting documentation, and that + * the name of Silicon Graphics, Inc. not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission. + * + * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" + * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON + * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, + * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY + * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, + * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF + * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN + * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE + * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. + * + * US Government Users Restricted Rights + * Use, duplication, or disclosure by the Government is subject to + * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph + * (c)(1)(ii) of the Rights in Technical Data and Computer Software + * clause at DFARS 252.227-7013 and/or in similar or successor + * clauses in the FAR or the DOD or NASA FAR Supplement. + * Unpublished-- rights reserved under the copyright laws of the + * United States. Contractor/manufacturer is Silicon Graphics, + * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. + * + * OpenGL(TM) is a trademark of Silicon Graphics, Inc. + */ + +/* + * Demonstrates texture environment modes and internal image formats. + */ + +/* + * Hacked on, updated by Gareth Hughes <gareth@valinux.com> + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <GL/glut.h> + +#undef max +#undef min +#define max( a, b ) ((a) >= (b) ? (a) : (b)) +#define min( a, b ) ((a) <= (b) ? (a) : (b)) + +GLfloat lightCheck[4] = { 0.7, 0.7, 0.7, 1.0 }; +GLfloat darkCheck[4] = { 0.3, 0.3, 0.3, 1.0 }; + +GLfloat labelColor0[4] = { 1.0, 1.0, 1.0, 1.0 }; +GLfloat labelColor1[4] = { 1.0, 1.0, 0.4, 1.0 }; +GLfloat *labelInfoColor = labelColor0; +GLfloat labelLevelColor0[4] = { 0.8, 0.8, 0.1, 1.0 }; +GLfloat labelLevelColor1[4] = { 0.0, 0.0, 0.0, 1.0 }; + +GLboolean doubleBuffered = GL_TRUE; +GLboolean drawBackground = GL_FALSE; +GLboolean drawBlended = GL_TRUE; +GLboolean drawSmooth = GL_FALSE; +GLboolean drawTextured = GL_TRUE; +GLboolean displayLevelInfo = GL_FALSE; + +int textureWidth = 64; +int textureHeight = 64; + +int winWidth = 580, winHeight = 720; + +struct formatInfo { + GLenum baseFormat; + GLenum internalFormat; + char *name; +}; + +#define NUM_LUMINANCE_FORMATS (sizeof(luminanceFormats) / sizeof(luminanceFormats[0])) +struct formatInfo luminanceFormats[] = +{ + { GL_LUMINANCE, GL_LUMINANCE, "LUMINANCE" }, + { GL_LUMINANCE, GL_LUMINANCE4, "LUMINANCE4" }, + { GL_LUMINANCE, GL_LUMINANCE8, "LUMINANCE8" }, + { GL_LUMINANCE, GL_LUMINANCE12, "LUMINANCE12" }, + { GL_LUMINANCE, GL_LUMINANCE16, "LUMINANCE16" }, +}; + +#define NUM_ALPHA_FORMATS (sizeof(alphaFormats) / sizeof(alphaFormats[0])) +struct formatInfo alphaFormats[] = +{ + { GL_ALPHA, GL_ALPHA, "ALPHA" }, + { GL_ALPHA, GL_ALPHA4, "ALPHA4" }, + { GL_ALPHA, GL_ALPHA8, "ALPHA8" }, + { GL_ALPHA, GL_ALPHA12, "ALPHA12" }, + { GL_ALPHA, GL_ALPHA16, "ALPHA16" }, +}; + +#define NUM_INTENSITY_FORMATS (sizeof(intensityFormats) / sizeof(intensityFormats[0])) +struct formatInfo intensityFormats[] = +{ + { GL_INTENSITY, GL_INTENSITY, "INTENSITY" }, + { GL_INTENSITY, GL_INTENSITY4, "INTENSITY4" }, + { GL_INTENSITY, GL_INTENSITY8, "INTENSITY8" }, + { GL_INTENSITY, GL_INTENSITY12, "INTENSITY12" }, + { GL_INTENSITY, GL_INTENSITY16, "INTENSITY16" }, +}; + +#define NUM_LUMINANCE_ALPHA_FORMATS (sizeof(luminanceAlphaFormats) / sizeof(luminanceAlphaFormats[0])) +struct formatInfo luminanceAlphaFormats[] = +{ + { GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, "LUMINANCE_ALPHA" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, "LUMINANCE4_ALPHA4" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE6_ALPHA2, "LUMINANCE6_ALPHA2" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE8_ALPHA8, "LUMINANCE8_ALPHA8" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE12_ALPHA4, "LUMINANCE12_ALPHA4" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE12_ALPHA12, "LUMINANCE12_ALPHA12" }, + { GL_LUMINANCE_ALPHA, GL_LUMINANCE16_ALPHA16, "LUMINANCE16_ALPHA16" }, +}; + +#define NUM_RGB_FORMATS (sizeof(rgbFormats) / sizeof(rgbFormats[0])) +struct formatInfo rgbFormats[] = +{ + { GL_RGB, GL_RGB, "RGB" }, + { GL_RGB, GL_R3_G3_B2, "R3_G3_B2" }, + { GL_RGB, GL_RGB4, "RGB4" }, + { GL_RGB, GL_RGB5, "RGB5" }, + { GL_RGB, GL_RGB8, "RGB8" }, + { GL_RGB, GL_RGB10, "RGB10" }, + { GL_RGB, GL_RGB12, "RGB12" }, + { GL_RGB, GL_RGB16, "RGB16" }, +}; + +#define NUM_RGBA_FORMATS (sizeof(rgbaFormats) / sizeof(rgbaFormats[0])) +struct formatInfo rgbaFormats[] = +{ + { GL_RGBA, GL_RGBA, "RGBA" }, + { GL_RGBA, GL_RGBA2, "RGBA2" }, + { GL_RGBA, GL_RGBA4, "RGBA4" }, + { GL_RGBA, GL_RGB5_A1, "RGB5_A1" }, + { GL_RGBA, GL_RGBA8, "RGBA8" }, + { GL_RGBA, GL_RGB10_A2, "RGB10_A2" }, + { GL_RGBA, GL_RGBA12, "RGBA12" }, + { GL_RGBA, GL_RGBA16, "RGBA16" }, +}; + +struct baseFormatInfo { + struct formatInfo *format; + int current, number; +}; + +#define NUM_BASE_FORMATS (sizeof(baseFormats) / sizeof(baseFormats[0])) +int baseFormat; +struct baseFormatInfo baseFormats[] = +{ + { luminanceFormats, 0, NUM_LUMINANCE_FORMATS }, + { alphaFormats, 0, NUM_ALPHA_FORMATS }, + { intensityFormats, 0, NUM_INTENSITY_FORMATS }, + { luminanceAlphaFormats, 0, NUM_LUMINANCE_ALPHA_FORMATS }, + { rgbFormats, 0, NUM_RGB_FORMATS }, + { rgbaFormats, 0, NUM_RGBA_FORMATS }, +}; + +#define NUM_ENV_COLORS (sizeof(envColors) / sizeof(envColors[0])) +int envColor = 0; +GLfloat envColors[][4] = +{ + { 0.0, 0.0, 0.0, 1.0 }, + { 1.0, 0.0, 0.0, 1.0 }, + { 0.0, 1.0, 0.0, 1.0 }, + { 0.0, 0.0, 1.0, 1.0 }, + { 1.0, 1.0, 1.0, 1.0 }, +}; + +struct envModeInfo { + GLenum mode; + char *name; +}; + +/* allow for run-time check for GL_EXT_texture_env_add */ +int NUM_ENV_MODES = 5; +struct envModeInfo envModes[] = +{ + { GL_REPLACE, "REPLACE" }, + { GL_MODULATE, "MODULATE" }, + { GL_BLEND, "BLEND" }, + { GL_DECAL, "DECAL" }, +#if GL_EXT_texture_env_add + { GL_ADD, "ADD" }, +#endif +}; + +static void checkErrors( void ) +{ + GLenum error; + + while ( (error = glGetError()) != GL_NO_ERROR ) { + fprintf( stderr, "Error: %s\n", (char *) gluErrorString( error ) ); + } +} + +static void drawString( const char *string, GLfloat x, GLfloat y, + const GLfloat color[4] ) +{ + glColor4fv( color ); + glRasterPos2f( x, y ); + + while ( *string ) { + glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_10, *string ); + string++; + } +} + +static void drawStringOutline( const char *string, GLfloat x, GLfloat y, + const GLfloat color[4], + const GLfloat outline[4] ) +{ + drawString( string, x - 1, y, outline ); + drawString( string, x + 1, y, outline ); + drawString( string, x, y - 1, outline ); + drawString( string, x, y + 1, outline ); + drawString( string, x, y, color ); +} + +static void begin2D( int width, int height ) +{ + glMatrixMode( GL_PROJECTION ); + + glPushMatrix(); + glLoadIdentity(); + + glOrtho( 0, width, 0, height, -1, 1 ); + glMatrixMode( GL_MODELVIEW ); + + glPushMatrix(); + glLoadIdentity(); +} + +static void end2D( void ) +{ + glMatrixMode( GL_PROJECTION ); + glPopMatrix(); + glMatrixMode( GL_MODELVIEW ); + glPopMatrix(); +} + +static void initialize( void ) +{ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + + glOrtho( -1.5, 1.5, -1.5, 1.5, -1.5, 1.5 ); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glShadeModel( GL_FLAT ); +} + +/* ARGSUSED1 */ +static void keyboard( unsigned char c, int x, int y ) +{ + switch ( c ) { + case 'c': + envColor++; + envColor = envColor % (int) NUM_ENV_COLORS; + break; + case 'g': + drawBackground = !drawBackground; + break; + case 'b': + drawBlended = !drawBlended; + break; + case 's': + drawSmooth = !drawSmooth; + break; + case 't': + drawTextured = !drawTextured; + break; + case 'i': + displayLevelInfo = !displayLevelInfo; + break; + case 27: /* Escape key should force exit. */ + exit(0); + break; + default: + break; + } + glutPostRedisplay(); +} + +/* ARGSUSED1 */ +static void special( int key, int x, int y ) +{ + switch ( key ) { + case GLUT_KEY_DOWN: + if ( ++baseFormat > NUM_BASE_FORMATS - 1 ) { + baseFormat = 0; + } + break; + case GLUT_KEY_UP: + if ( --baseFormat < 0 ) { + baseFormat = NUM_BASE_FORMATS - 1; + } + break; + case GLUT_KEY_LEFT: + --baseFormats[baseFormat].current; + if ( baseFormats[baseFormat].current < 0 ) { + baseFormats[baseFormat].current = baseFormats[baseFormat].number - 1; + } + break; + case GLUT_KEY_RIGHT: + ++baseFormats[baseFormat].current; + if ( baseFormats[baseFormat].current > baseFormats[baseFormat].number - 1 ) { + baseFormats[baseFormat].current = 0; + } + break; + default: + break; + } + glutPostRedisplay(); +} + +static void +reshape( int w, int h ) +{ + winWidth = w; + winHeight = h; + /* No need to call glViewPort here since "draw" calls it! */ +} + +static void loadTexture( int width, int height, + const struct formatInfo *format ) +{ + int luminanceSize = 0; + int alphaSize = 0; + int rgbSize = 0; + GLenum textureFormat; + GLubyte *texImage, *p; + int elementsPerGroup, elementSize, groupSize, rowSize; + int i, j; + + switch ( format->baseFormat ) { + case GL_LUMINANCE: + luminanceSize = 1; + textureFormat = GL_LUMINANCE; + break; + case GL_INTENSITY: + luminanceSize = 1; + /* Note: format=GL_INTENSITY for glTexImage is not legal */ + textureFormat = GL_LUMINANCE; + break; + case GL_ALPHA: + alphaSize = 1; + textureFormat = GL_ALPHA; + break; + case GL_LUMINANCE_ALPHA: + luminanceSize = 1; + alphaSize = 1; + textureFormat = GL_LUMINANCE_ALPHA; + break; + case GL_RGB: + rgbSize = 3; + textureFormat = GL_RGB; + break; + case GL_RGBA: + rgbSize = 3; + alphaSize = 1; + textureFormat = GL_RGBA; + break; + default: + fprintf(stderr, "bad internal format info\n"); + return; + } + + elementsPerGroup = luminanceSize + alphaSize + rgbSize; + elementSize = sizeof(GLubyte); + groupSize = elementsPerGroup * elementSize; + rowSize = width * groupSize; + + if ( (texImage = (GLubyte *) malloc( height * rowSize ) ) == NULL ) { + fprintf( stderr, "texture malloc failed\n" ); + return; + } + + for ( i = 0 ; i < height ; i++ ) + { + p = texImage + i * rowSize; + + for ( j = 0 ; j < width ; j++ ) + { + if ( luminanceSize > 0 ) + { + /** + ** +-----+-----+ + ** | | | + ** | W | LG | + ** | | | + ** +-----+-----+ + ** | | | + ** | DG | B | + ** | | | + ** +-----+-----+ + **/ + if ( i > height / 2 ) { + if ( j < width / 2 ) { + p[0] = 0xff; + } else { + p[0] = 0xaa; + } + } else { + if ( j < width / 2 ) { + p[0] = 0x55; + } else { + p[0] = 0x00; + } + } + p += elementSize; + } + + if ( rgbSize > 0 ) + { + /** + ** +-----+-----+ + ** | | | + ** | R | G | + ** | | | + ** +-----+-----+ + ** | | | + ** | Y | B | + ** | | | + ** +-----+-----+ + **/ + if ( i > height / 2 ) { + if ( j < width / 2 ) { + p[0] = 0xff; + p[1] = 0x00; + p[2] = 0x00; + } else { + p[0] = 0x00; + p[1] = 0xff; + p[2] = 0x00; + } + } else { + if ( j < width / 2 ) { + p[0] = 0xff; + p[1] = 0xff; + p[2] = 0x00; + } else { + p[0] = 0x00; + p[1] = 0x00; + p[2] = 0xff; + } + } + p += 3 * elementSize; + } + + if ( alphaSize > 0 ) + { + /** + ** +-----------+ + ** | W | + ** | +-----+ | + ** | | | | + ** | | B | | + ** | | | | + ** | +-----+ | + ** | | + ** +-----------+ + **/ + int i2 = i - height / 2; + int j2 = j - width / 2; + int h8 = height / 8; + int w8 = width / 8; + if ( -h8 <= i2 && i2 <= h8 && -w8 <= j2 && j2 <= w8 ) { + p[0] = 0x00; + } else if ( -2 * h8 <= i2 && i2 <= 2 * h8 && -2 * w8 <= j2 && j2 <= 2 * w8 ) { + p[0] = 0x55; + } else if ( -3 * h8 <= i2 && i2 <= 3 * h8 && -3 * w8 <= j2 && j2 <= 3 * w8 ) { + p[0] = 0xaa; + } else { + p[0] = 0xff; + } + p += elementSize; + } + } + } + + glTexImage2D( GL_TEXTURE_2D, 0, + format->internalFormat, width, height, 0, + textureFormat, GL_UNSIGNED_BYTE, texImage ); + + free( texImage ); +} + +static void drawCheck( int w, int h, const GLfloat lightCheck[4], + const GLfloat darkCheck[4] ) +{ + float dw = 2.0 / w; + float dh = 2.0 / h; + int i, j; + + for ( i = 0 ; i < w ; i++ ) { + GLfloat x0 = -1.0 + i * dw; + GLfloat x1 = x0 + dw; + + glBegin( GL_QUAD_STRIP ); + + for ( j = 0 ; j <= h ; j++ ) { + GLfloat y = -1.0 + j * dh; + + if ( (i ^ j) & 1 ) { + glColor4fv( lightCheck ); + } else { + glColor4fv( darkCheck ); + } + + glVertex2f( x0, y ); + glVertex2f( x1, y ); + } + + glEnd(); + } +} + +static const char *lookupFormat( GLint format ) +{ + switch ( format ) { + case GL_RGBA: + return "GL_RGBA"; + case GL_RGB: + return "GL_RGB"; + case GL_ALPHA: + return "GL_ALPHA"; + case GL_LUMINANCE: + return "GL_LUMINANCE"; + case GL_LUMINANCE_ALPHA: + return "GL_LUMINANCE_ALPHA"; + case GL_INTENSITY: + return "GL_INTENSITY"; + case GL_COLOR_INDEX: + return "GL_COLOR_INDEX"; + case GL_BGRA: + return "GL_BGRA"; + case GL_BGR: + return "GL_BGR"; + default: + return "unknown format"; + } +} + +static void drawSample( int x, int y, int w, int h, + const struct formatInfo *format, + const struct envModeInfo *envMode ) +{ + glViewport( x, y, w, h ); + glScissor( x, y, w, h ); + + glClearColor( 0.1, 0.1, 0.1, 1.0 ); + glClear( GL_COLOR_BUFFER_BIT ); + + begin2D( w, h ); + drawString( format->name, 10, h - 15, labelInfoColor ); + drawString( envMode->name, 10, 5, labelInfoColor ); + end2D(); + + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envMode->mode ); + glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, envColors[envColor] ); + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); + + loadTexture( textureWidth, textureHeight, format ); + + if ( drawBackground ) { + drawCheck( 15, 15, lightCheck, darkCheck ); + } + if ( drawBlended ) { + glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); + glEnable( GL_BLEND ); + } + if ( drawSmooth ) { + glShadeModel( GL_SMOOTH ); + } + else { + glShadeModel( GL_FLAT ); + glColor4f(1, 1, 1, 1); + } + if ( drawTextured ) { + glEnable( GL_TEXTURE_2D ); + } + + /* + * if (drawSmooth) then draw quad which goes from purple at the + * bottom (100% alpha) to green at the top (50% alpha). + */ + glBegin( GL_QUADS ); + if ( drawSmooth ) glColor4f( 1.0, 0.0, 1.0, 1.0 ); + glTexCoord2f( 0.0, 0.0 ); + glVertex2f( -0.8, -0.8 ); + + if ( drawSmooth ) glColor4f( 1.0, 0.0, 1.0, 1.0 ); + glTexCoord2f( 1.0, 0.0 ); + glVertex2f( 0.8, -0.8 ); + + if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 0.5 ); + glTexCoord2f( 1.0, 1.0 ); + glVertex2f( 0.8, 0.8 ); + + if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 0.5 ); + glTexCoord2f( 0.0, 1.0 ); + glVertex2f( -0.8, 0.8 ); + glEnd(); + + glDisable( GL_BLEND ); + glShadeModel( GL_FLAT ); + glDisable( GL_TEXTURE_2D ); + + if ( envMode->mode == GL_DECAL && + (format->baseFormat == GL_ALPHA || + format->baseFormat == GL_LUMINANCE || + format->baseFormat == GL_LUMINANCE_ALPHA || + format->baseFormat == GL_INTENSITY)) { + /* undefined format/mode combination */ + begin2D( w, h ); + drawStringOutline( "UNDEFINED MODE", 15, h / 2, + labelLevelColor0, labelLevelColor1 ); + end2D(); + } + else if ( displayLevelInfo ) { + GLint width, height, border, format; + GLint redSize, greenSize, blueSize, alphaSize; + GLint luminanceSize, intensitySize; + char buf[255]; + + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_BORDER, &border ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_RED_SIZE, &redSize ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_GREEN_SIZE, &greenSize ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_BLUE_SIZE, &blueSize ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_ALPHA_SIZE, &alphaSize ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_LUMINANCE_SIZE, &luminanceSize ); + glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_INTENSITY_SIZE, &intensitySize ); + + begin2D( w, h ); + sprintf( buf, "dimensions: %d x %d", width, height ); + drawStringOutline( buf, 15, h / 2 + 20, labelLevelColor0, labelLevelColor1 ); + + sprintf( buf, "border: %d", border ); + drawStringOutline( buf, 15, h / 2 + 10, labelLevelColor0, labelLevelColor1 ); + + sprintf( buf, "internal format:" ); + drawStringOutline( buf, 15, h / 2, labelLevelColor0, labelLevelColor1 ); + + sprintf( buf, " %s", lookupFormat( format ) ); + drawStringOutline( buf, 15, h / 2 - 10, labelLevelColor0, labelLevelColor1 ); + + sprintf( buf, "sizes:" ); + drawStringOutline( buf, 15, h / 2 - 20, labelLevelColor0, labelLevelColor1 ); + + sprintf( buf, " %d / %d / %d / %d / %d / %d", + redSize, greenSize, blueSize, alphaSize, + luminanceSize, intensitySize ); + drawStringOutline( buf, 15, h / 2 - 30, labelLevelColor0, labelLevelColor1 ); + + end2D(); + } +} + +static void display( void ) +{ + int numX = NUM_ENV_MODES, numY = NUM_BASE_FORMATS; + float xBase = (float) winWidth * 0.01; + float xOffset = (winWidth - xBase) / numX; + float xSize = max( xOffset - xBase, 1 ); + float yBase = (float) winHeight * 0.01; + float yOffset = (winHeight - yBase) / numY; + float ySize = max( yOffset - yBase, 1 ); + float x, y; + int i, j; + + glViewport( 0, 0, winWidth, winHeight ); + glDisable( GL_SCISSOR_TEST ); + glClearColor( 0.0, 0.0, 0.0, 0.0 ); + glClear( GL_COLOR_BUFFER_BIT ); + glEnable( GL_SCISSOR_TEST ); + + x = xBase; + y = (winHeight - 1) - yOffset; + + for ( i = 0 ; i < NUM_BASE_FORMATS ; i++ ) + { + struct formatInfo *format; + + if ( i == baseFormat ) { + labelInfoColor = labelColor1; + } else { + labelInfoColor = labelColor0; + } + + format = &baseFormats[i].format[baseFormats[i].current]; + + for ( j = 0 ; j < NUM_ENV_MODES ; j++ ) { + struct envModeInfo *envMode; + + envMode = &envModes[j]; + drawSample( x, y, xSize, ySize, format, envMode ); + x += xOffset; + } + + x = xBase; + y -= yOffset; + } + + if ( doubleBuffered ) { + glutSwapBuffers(); + } else { + glFlush(); + } + + checkErrors(); +} + +static void usage( char *name ) +{ + fprintf( stderr, "usage: %s [ options ]\n", name ); + fprintf( stderr, "\n" ); + fprintf( stderr, "options:\n" ); + fprintf( stderr, " -sb single buffered\n" ); + fprintf( stderr, " -db double buffered\n" ); + fprintf( stderr, " -info print OpenGL driver info\n" ); +} + +static void instructions( void ) +{ + fprintf( stderr, "texenv - texture environment and internal format test\n" ); + fprintf( stderr, "\n" ); + fprintf( stderr, " [c] - cycle through background colors\n" ); + fprintf( stderr, " [g] - toggle background\n" ); + fprintf( stderr, " [b] - toggle blend\n" ); + fprintf( stderr, " [s] - toggle smooth shading\n" ); + fprintf( stderr, " [t] - toggle texturing\n" ); + fprintf( stderr, " [i] - toggle information display\n" ); + fprintf( stderr, " up/down - select row\n" ); + fprintf( stderr, " left/right - change row's internal format\n" ); +} + +int main( int argc, char *argv[] ) +{ + GLboolean info = GL_FALSE; + int i; + + glutInit( &argc, argv ); + + for ( i = 1 ; i < argc ; i++ ) { + if ( !strcmp( "-sb", argv[i] ) ) { + doubleBuffered = GL_FALSE; + } else if ( !strcmp( "-db", argv[i] ) ) { + doubleBuffered = GL_TRUE; + } else if ( !strcmp( "-info", argv[i] ) ) { + info = GL_TRUE; + } else { + usage( argv[0] ); + exit( 1 ); + } + } + + if ( doubleBuffered ) { + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); + } else { + glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE ); + } + + glutInitWindowSize( winWidth, winHeight ); + glutInitWindowPosition( 0, 0 ); + glutCreateWindow( "Texture Environment Test" ); + + initialize(); + instructions(); + + if ( info ) { + printf( "\n" ); + printf( "GL_RENDERER = %s\n", (char *) glGetString( GL_RENDERER ) ); + printf( "GL_VERSION = %s\n", (char *) glGetString( GL_VERSION ) ); + printf( "GL_VENDOR = %s\n", (char *) glGetString( GL_VENDOR ) ) ; + printf( "GL_EXTENSIONS = %s\n", (char *) glGetString( GL_EXTENSIONS ) ); + } + +#if GL_EXT_texture_env_add + if ( !glutExtensionSupported( "GL_EXT_texture_env_add" ) ) { + fprintf( stderr, "missing extension: GL_EXT_texture_env_add\n" ); + NUM_ENV_MODES--; + } +#endif + + glutDisplayFunc( display ); + glutReshapeFunc( reshape ); + glutKeyboardFunc( keyboard ); + glutSpecialFunc( special ); + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/texobj.c b/progs/demos/texobj.c new file mode 100644 index 000000000..40bce6e56 --- /dev/null +++ b/progs/demos/texobj.c @@ -0,0 +1,284 @@ + +/* + * Example of using the 1.1 texture object functions. + * Also, this demo utilizes Mesa's fast texture map path. + * + * Brian Paul June 1996 This file is in the public domain. + */ + +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "GL/glut.h" + +static GLuint Window = 0; + +static GLuint TexObj[2]; +static GLfloat Angle = 0.0f; +static GLboolean UseObj = GL_FALSE; + + +#if defined(GL_VERSION_1_1) || defined(GL_VERSION_1_2) +# define TEXTURE_OBJECT 1 +#elif defined(GL_EXT_texture_object) +# define TEXTURE_OBJECT 1 +# define glBindTexture(A,B) glBindTextureEXT(A,B) +# define glGenTextures(A,B) glGenTexturesEXT(A,B) +# define glDeleteTextures(A,B) glDeleteTexturesEXT(A,B) +#endif + + + + +static void draw( void ) +{ + glClear( GL_COLOR_BUFFER_BIT ); + + glColor3f( 1.0, 1.0, 1.0 ); + + /* draw first polygon */ + glPushMatrix(); + glTranslatef( -1.0, 0.0, 0.0 ); + glRotatef( Angle, 0.0, 0.0, 1.0 ); + if (UseObj) { +#ifdef TEXTURE_OBJECT + glBindTexture( GL_TEXTURE_2D, TexObj[0] ); +#endif + } + else { + glCallList( TexObj[0] ); + } + glBegin( GL_POLYGON ); + glTexCoord2f( 0.0, 0.0 ); glVertex2f( -1.0, -1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex2f( 1.0, -1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex2f( 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex2f( -1.0, 1.0 ); + glEnd(); + glPopMatrix(); + + /* draw second polygon */ + glPushMatrix(); + glTranslatef( 1.0, 0.0, 0.0 ); + glRotatef( Angle-90.0, 0.0, 1.0, 0.0 ); + if (UseObj) { +#ifdef TEXTURE_OBJECT + glBindTexture( GL_TEXTURE_2D, TexObj[1] ); +#endif + } + else { + glCallList( TexObj[1] ); + } + glBegin( GL_POLYGON ); + glTexCoord2f( 0.0, 0.0 ); glVertex2f( -1.0, -1.0 ); + glTexCoord2f( 1.0, 0.0 ); glVertex2f( 1.0, -1.0 ); + glTexCoord2f( 1.0, 1.0 ); glVertex2f( 1.0, 1.0 ); + glTexCoord2f( 0.0, 1.0 ); glVertex2f( -1.0, 1.0 ); + glEnd(); + glPopMatrix(); + + glutSwapBuffers(); +} + + + +static void idle( void ) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + Angle += 120.0*dt; + glutPostRedisplay(); +} + + + +/* change view Angle, exit upon ESC */ +static void key(unsigned char k, int x, int y) +{ + (void) x; + (void) y; + switch (k) { + case 27: +#ifdef TEXTURE_OBJECT + glDeleteTextures( 2, TexObj ); +#endif + glutDestroyWindow(Window); + exit(0); + } +} + + + +/* new window size or exposure */ +static void reshape( int width, int height ) +{ + glViewport(0, 0, (GLint)width, (GLint)height); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + /* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 );*/ + glFrustum( -2.0, 2.0, -2.0, 2.0, 6.0, 20.0 ); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glTranslatef( 0.0, 0.0, -8.0 ); +} + + +static void init( void ) +{ + static int width=8, height=8; + static GLubyte tex1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; + + static GLubyte tex2[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 2, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 }; + + GLubyte tex[64][3]; + GLint i, j; + + + glDisable( GL_DITHER ); + + /* Setup texturing */ + glEnable( GL_TEXTURE_2D ); + glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL ); + glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST ); + + + /* generate texture object IDs */ + if (UseObj) { +#ifdef TEXTURE_OBJECT + glGenTextures( 2, TexObj ); +#endif + } + else { + TexObj[0] = glGenLists(2); + TexObj[1] = TexObj[0]+1; + } + + /* setup first texture object */ + if (UseObj) { +#ifdef TEXTURE_OBJECT + glBindTexture( GL_TEXTURE_2D, TexObj[0] ); + assert(glIsTexture(TexObj[0])); +#endif + } + else { + glNewList( TexObj[0], GL_COMPILE ); + } + /* red on white */ + for (i=0;i<height;i++) { + for (j=0;j<width;j++) { + int p = i*width+j; + if (tex1[(height-i-1)*width+j]) { + tex[p][0] = 255; tex[p][1] = 0; tex[p][2] = 0; + } + else { + tex[p][0] = 255; tex[p][1] = 255; tex[p][2] = 255; + } + } + } + + glTexImage2D( GL_TEXTURE_2D, 0, 3, width, height, 0, + GL_RGB, GL_UNSIGNED_BYTE, tex ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + if (!UseObj) { + glEndList(); + } + /* end of texture object */ + + /* setup second texture object */ + if (UseObj) { +#ifdef TEXTURE_OBJECT + glBindTexture( GL_TEXTURE_2D, TexObj[1] ); + assert(glIsTexture(TexObj[1])); +#endif + assert(!glIsTexture(TexObj[1] + 999)); + } + else { + glNewList( TexObj[1], GL_COMPILE ); + } + /* green on blue */ + for (i=0;i<height;i++) { + for (j=0;j<width;j++) { + int p = i*width+j; + if (tex2[(height-i-1)*width+j]) { + tex[p][0] = 0; tex[p][1] = 255; tex[p][2] = 0; + } + else { + tex[p][0] = 0; tex[p][1] = 0; tex[p][2] = 255; + } + } + } + glTexImage2D( GL_TEXTURE_2D, 0, 3, width, height, 0, + GL_RGB, GL_UNSIGNED_BYTE, tex ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + if (!UseObj) { + glEndList(); + } + /* end texture object */ + +} + + + +int main( int argc, char *argv[] ) +{ + glutInit(&argc, argv); + glutInitWindowPosition(0, 0); + glutInitWindowSize(300, 300); + glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); + + Window = glutCreateWindow("Texture Objects"); + if (!Window) { + exit(1); + } + + /* check that renderer has the GL_EXT_texture_object extension + * or supports OpenGL 1.1 + */ +#ifdef TEXTURE_OBJECT + { + char *exten = (char *) glGetString( GL_EXTENSIONS ); + char *version = (char *) glGetString( GL_VERSION ); + if ( strstr( exten, "GL_EXT_texture_object" ) + || strncmp( version, "1.1", 3 )==0 + || strncmp( version, "1.2", 3 )==0 ) { + UseObj = GL_TRUE; + } + } +#endif + + init(); + + glutReshapeFunc( reshape ); + glutKeyboardFunc( key ); + glutIdleFunc( idle ); + glutDisplayFunc( draw ); + glutMainLoop(); + return 0; +} diff --git a/progs/demos/trispd.c b/progs/demos/trispd.c new file mode 100644 index 000000000..165d088e3 --- /dev/null +++ b/progs/demos/trispd.c @@ -0,0 +1,253 @@ + +/* + * Simple GLUT program to measure triangle strip rendering speed. + * Brian Paul February 15, 1997 This file is in the public domain. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> +#include <GL/glut.h> + + +static float MinPeriod = 2.0; /* 2 seconds */ +static float Width = 400.0; +static float Height = 400.0; +static int Loops = 1; +static int Size = 50; +static int Texture = 0; + + + +static void Idle( void ) +{ + glutPostRedisplay(); +} + + +static void Display( void ) +{ + float x, y; + float xStep; + float yStep; + double t0, t1; + double triRate; + double pixelRate; + int triCount; + int i; + float red[3] = { 1.0, 0.0, 0.0 }; + float blue[3] = { 0.0, 0.0, 1.0 }; + + xStep = yStep = sqrt( 2.0 * Size ); + + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + + triCount = 0; + t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + if (Texture) { + float uStep = xStep / Width; + float vStep = yStep / Height; + float u, v; + for (i=0; i<Loops; i++) { + for (y=1.0, v=0.0f; y<Height-yStep; y+=yStep, v+=vStep) { + glBegin(GL_TRIANGLE_STRIP); + for (x=1.0, u=0.0f; x<Width; x+=xStep, u+=uStep) { + glColor3fv(red); + glTexCoord2f(u, v); + glVertex2f(x, y); + glColor3fv(blue); + glTexCoord2f(u, v+vStep); + glVertex2f(x, y+yStep); + triCount += 2; + } + glEnd(); + triCount -= 2; + } + } + } + else { + for (i=0; i<Loops; i++) { + for (y=1.0; y<Height-yStep; y+=yStep) { + glBegin(GL_TRIANGLE_STRIP); + for (x=1.0; x<Width; x+=xStep) { + glColor3fv(red); + glVertex2f(x, y); + glColor3fv(blue); + glVertex2f(x, y+yStep); + triCount += 2; + } + glEnd(); + triCount -= 2; + } + } + } + glFinish(); + t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + + if (t1-t0 < MinPeriod) { + /* Next time draw more triangles to get longer elapsed time */ + Loops *= 2; + return; + } + + triRate = triCount / (t1-t0); + pixelRate = triRate * Size; + printf("Rate: %d tri in %gs = %g tri/s %d pixels/s\n", + triCount, t1-t0, triRate, (int)pixelRate); + + glutSwapBuffers(); +} + + +static void Reshape( int width, int height ) +{ + Width = width; + Height = height; + glViewport( 0, 0, width, height ); + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + glOrtho(0.0, width, 0.0, height, -1.0, 1.0); + glMatrixMode( GL_MODELVIEW ); + glLoadIdentity(); +} + + +static void Key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void LoadTex(int comp, int filter) +{ + GLubyte *pixels; + int x, y; + pixels = (GLubyte *) malloc(4*256*256); + for (y = 0; y < 256; ++y) + for (x = 0; x < 256; ++x) { + pixels[(y*256+x)*4+0] = (int)(128.5 + 127.0 * cos(0.024544 * x)); + pixels[(y*256+x)*4+1] = 255; + pixels[(y*256+x)*4+2] = (int)(128.5 + 127.0 * cos(0.024544 * y)); + pixels[(y*256+x)*4+3] = 255; + } + glEnable(GL_TEXTURE_2D); + glTexImage2D(GL_TEXTURE_2D, 0, comp, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + printf("Texture: GL_MODULATE, %d comps, %s\n", comp, filter == GL_NEAREST ? "GL_NEAREST" : "GL_LINEAR"); +} + + +static void Init( int argc, char *argv[] ) +{ + GLint shade; + GLint rBits, gBits, bBits; + int filter = GL_NEAREST, comp = 3; + + int i; + for (i=1; i<argc; i++) { + if (strcmp(argv[i],"-dither")==0) + glDisable(GL_DITHER); + else if (strcmp(argv[i],"+dither")==0) + glEnable(GL_DITHER); + else if (strcmp(argv[i],"+smooth")==0) + glShadeModel(GL_SMOOTH); + else if (strcmp(argv[i],"+flat")==0) + glShadeModel(GL_FLAT); + else if (strcmp(argv[i],"+depth")==0) + glEnable(GL_DEPTH_TEST); + else if (strcmp(argv[i],"-depth")==0) + glDisable(GL_DEPTH_TEST); + else if (strcmp(argv[i],"-size")==0) { + Size = atoi(argv[i+1]); + i++; + } + else if (strcmp(argv[i],"-texture")==0) + Texture = 0; + else if (strcmp(argv[i],"+texture")==0) + Texture = 1; + else if (strcmp(argv[i],"-linear")==0) + filter = GL_NEAREST; + else if (strcmp(argv[i],"+linear")==0) + filter = GL_LINEAR; + else if (strcmp(argv[i],"-persp")==0) + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); + else if (strcmp(argv[i],"+persp")==0) + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); + else if (strcmp(argv[i],"-comp")==0) { + comp = atoi(argv[i+1]); + i++; + } + else + printf("Unknown option: %s\n", argv[i]); + } + + glGetIntegerv(GL_SHADE_MODEL, &shade); + + printf("Dither: %s\n", glIsEnabled(GL_DITHER) ? "on" : "off"); + printf("ShadeModel: %s\n", (shade==GL_FLAT) ? "flat" : "smooth"); + printf("DepthTest: %s\n", glIsEnabled(GL_DEPTH_TEST) ? "on" : "off"); + printf("Size: %d pixels\n", Size); + + if (Texture) + LoadTex(comp, filter); + + glGetIntegerv(GL_RED_BITS, &rBits); + glGetIntegerv(GL_GREEN_BITS, &gBits); + glGetIntegerv(GL_BLUE_BITS, &bBits); + printf("RedBits: %d GreenBits: %d BlueBits: %d\n", rBits, gBits, bBits); +} + + +static void Help( const char *program ) +{ + printf("%s options:\n", program); + printf(" +/-dither enable/disable dithering\n"); + printf(" +/-depth enable/disable depth test\n"); + printf(" +flat flat shading\n"); + printf(" +smooth smooth shading\n"); + printf(" -size pixels specify pixels/triangle\n"); + printf(" +/-texture enable/disable texture\n"); + printf(" -comp n texture format\n"); + printf(" +/-linear bilinear texture filter\n"); + printf(" +/-persp perspective correction hint\n"); +} + + +int main( int argc, char *argv[] ) +{ + printf("For options: %s -help\n", argv[0]); + glutInit( &argc, argv ); + glutInitWindowSize( (int) Width, (int) Height ); + glutInitWindowPosition( 0, 0 ); + + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + + glutCreateWindow( argv[0] ); + + if (argc==2 && strcmp(argv[1],"-help")==0) { + Help(argv[0]); + return 0; + } + + Init( argc, argv ); + + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutDisplayFunc( Display ); + glutIdleFunc( Idle ); + + glutMainLoop(); + return 0; +} diff --git a/progs/demos/tunnel.c b/progs/demos/tunnel.c new file mode 100644 index 000000000..6a240580e --- /dev/null +++ b/progs/demos/tunnel.c @@ -0,0 +1,535 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#ifdef WIN32 +#include <windows.h> +#endif + +#include <GL/glut.h> +#include "readtex.h" +#include "tunneldat.h" + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +static int WIDTH = 640; +static int HEIGHT = 480; + +static GLint T0 = 0; +static GLint Frames = 0; +static GLint NiceFog = 1; + +#define NUMBLOC 5 + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +/* +extern int striplength_skin_13[]; +extern float stripdata_skin_13[]; + +extern int striplength_skin_12[]; +extern float stripdata_skin_12[]; + +extern int striplength_skin_11[]; +extern float stripdata_skin_11[]; + +extern int striplength_skin_9[]; +extern float stripdata_skin_9[]; +*/ + +static int win = 0; + +static float obs[3] = { 1000.0, 0.0, 2.0 }; +static float dir[3]; +static float v = 30.; +static float alpha = 90.0; +static float beta = 90.0; + +static int fog = 1; +static int bfcull = 1; +static int usetex = 1; +static int cstrip = 0; +static int help = 1; +static int joyavailable = 0; +static int joyactive = 0; + +static GLuint t1id, t2id; + +static void +inittextures(void) +{ + glGenTextures(1, &t1id); + glBindTexture(GL_TEXTURE_2D, t1id); + + if (!LoadRGBMipmaps("../images/tile.rgb", GL_RGB)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glGenTextures(1, &t2id); + glBindTexture(GL_TEXTURE_2D, t2id); + + if (!LoadRGBMipmaps("../images/bw.rgb", GL_RGB)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +} + +static void +drawobjs(const int *l, const float *f) +{ + int mend, j; + + if (cstrip) { + float r = 0.33, g = 0.33, b = 0.33; + + for (; (*l) != 0;) { + mend = *l++; + + r += 0.33; + if (r > 1.0) { + r = 0.33; + g += 0.33; + if (g > 1.0) { + g = 0.33; + b += 0.33; + if (b > 1.0) + b = 0.33; + } + } + + glColor3f(r, g, b); + glBegin(GL_TRIANGLE_STRIP); + for (j = 0; j < mend; j++) { + f += 4; + glTexCoord2fv(f); + f += 2; + glVertex3fv(f); + f += 3; + } + glEnd(); + } + } + else + for (; (*l) != 0;) { + mend = *l++; + + glBegin(GL_TRIANGLE_STRIP); + for (j = 0; j < mend; j++) { + glColor4fv(f); + f += 4; + glTexCoord2fv(f); + f += 2; + glVertex3fv(f); + f += 3; + } + glEnd(); + } +} + +static void +calcposobs(void) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + dir[0] = sin(alpha * M_PI / 180.0); + dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[2] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + obs[0] += v * dir[0] * dt; + obs[1] += v * dir[1] * dt; + obs[2] += v * dir[2] * dt; +} + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_LEFT: + alpha -= 2.0; + break; + case GLUT_KEY_RIGHT: + alpha += 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } +} + +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: + exit(0); + break; + + case 'a': + v += 5.; + break; + case 'z': + v -= 5.; + break; + +#ifdef XMESA + case ' ': + fullscreen = (!fullscreen); + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + break; +#endif + case 'j': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + case 't': + usetex = (!usetex); + break; + case 'b': + if (bfcull) { + glDisable(GL_CULL_FACE); + bfcull = 0; + } + else { + glEnable(GL_CULL_FACE); + bfcull = 1; + } + break; + case 'm': + cstrip = (!cstrip); + break; + + case 'd': + fprintf(stderr, "Deleting textures...\n"); + glDeleteTextures(1, &t1id); + glDeleteTextures(1, &t2id); + fprintf(stderr, "Loading textures...\n"); + inittextures(); + fprintf(stderr, "Done.\n"); + break; + case 'n': + NiceFog = !NiceFog; + printf("NiceFog %d\n", NiceFog); + break; + } + glutPostRedisplay(); +} + +static void +reshape(int w, int h) +{ + WIDTH = w; + HEIGHT = h; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(80.0, w / (float) h, 1.0, 50.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glViewport(0, 0, w, h); +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +printhelp(void) +{ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(0.0, 0.0, 0.0, 0.5); + glRecti(40, 40, 600, 440); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help"); + glRasterPos2i(60, 360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog"); + glRasterPos2i(60, 300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Toggle strips"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling"); + glRasterPos2i(60, 240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "a - Increase velocity"); + glRasterPos2i(60, 180); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "z - Decrease velocity"); + + glRasterPos2i(60, 150); + if (joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "(No Joystick control available)"); +} + +static void +dojoy(void) +{ +#ifdef WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha -= + 2.0 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.0 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.01; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.01; + } + } + else + joyavailable = 0; +#endif +} + +static void +draw(void) +{ + static char frbuf[80] = ""; + int i; + float base, offset; + + if (NiceFog) + glHint(GL_FOG_HINT, GL_NICEST); + else + glHint(GL_FOG_HINT, GL_DONT_CARE); + + dojoy(); + + glClear(GL_COLOR_BUFFER_BIT); + + if (usetex) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glShadeModel(GL_SMOOTH); + + glPushMatrix(); + calcposobs(); + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 0.0, 1.0); + + if (dir[0] > 0) { + offset = 8.0; + base = obs[0] - fmod(obs[0], 8.0); + } + else { + offset = -8.0; + base = obs[0] + (8.0 - fmod(obs[0], 8.0)); + } + + glPushMatrix(); + glTranslatef(base - offset / 2.0, 0.0, 0.0); + for (i = 0; i < NUMBLOC; i++) { + glTranslatef(offset, 0.0, 0.0); + glBindTexture(GL_TEXTURE_2D, t1id); + drawobjs(striplength_skin_11, stripdata_skin_11); + glBindTexture(GL_TEXTURE_2D, t2id); + drawobjs(striplength_skin_12, stripdata_skin_12); + drawobjs(striplength_skin_9, stripdata_skin_9); + drawobjs(striplength_skin_13, stripdata_skin_13); + } + glPopMatrix(); + glPopMatrix(); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_FOG); + glShadeModel(GL_FLAT); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(350, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "Tunnel V1.5 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if (help) + printhelp(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + glutSwapBuffers(); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + +static void +idle(void) +{ + glutPostRedisplay(); +} + + + +int +main(int ac, char **av) +{ + float fogcolor[4] = { 0.7, 0.7, 0.7, 1.0 }; + + fprintf(stderr, + "Tunnel V1.5\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTH, HEIGHT); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + + if (!(win = glutCreateWindow("Tunnel"))) { + fprintf(stderr, "Error, couldn't open window\n"); + return -1; + } + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(80.0, WIDTH / (float) HEIGHT, 1.0, 50.0); + + glMatrixMode(GL_MODELVIEW); + + glShadeModel(GL_SMOOTH); + glDisable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogfv(GL_FOG_COLOR, fogcolor); + + glFogf(GL_FOG_DENSITY, 0.06); + glHint(GL_FOG_HINT, GL_NICEST); + + inittextures(); + + glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], fogcolor[3]); + glClear(GL_COLOR_BUFFER_BIT); + + calcposobs(); + + glutReshapeFunc(reshape); + glutDisplayFunc(draw); + glutKeyboardFunc(key); + glutSpecialFunc(special); + glutIdleFunc(idle); + + glEnable(GL_BLEND); + /*glBlendFunc(GL_SRC_ALPHA_SATURATE,GL_ONE); */ + /*glEnable(GL_POLYGON_SMOOTH); */ + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/tunnel2.c b/progs/demos/tunnel2.c new file mode 100644 index 000000000..75a199af5 --- /dev/null +++ b/progs/demos/tunnel2.c @@ -0,0 +1,605 @@ +/* + * This program is under the GNU GPL. + * Use at your own risk. + * + * You need TWO Voodoo Graphics boards in order to run + * this demo ! + * + * written by David Bucciarelli (tech.hmw@plus.it) + * Humanware s.r.l. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#ifdef WIN32 +#include <windows.h> +#endif + +#include <GL/glut.h> +#include "readtex.h" +#include "tunneldat.h" + +#ifdef FX +#endif + +#ifdef XMESA +#include "GL/xmesa.h" +static int fullscreen = 1; +#endif + +#ifdef FX +GLint fxMesaSelectCurrentBoard(int); +#endif + +static int WIDTHC0 = 640; +static int HEIGHTC0 = 480; + +static int WIDTHC1 = 640; +static int HEIGHTC1 = 480; + +static GLint T0 = 0; +static GLint Frames = 0; + +#define NUMBLOC 5 + +#ifndef M_PI +#define M_PI 3.1415926535 +#endif + +static float obs[3] = { 1000.0, 0.0, 2.0 }; +static float dir[3]; +static float v = 30.; +static float alpha = 90.0; +static float beta = 90.0; + +static int fog = 1; +static int bfcull = 1; +static int usetex = 1; +static int cstrip = 0; +static int help = 1; +static int joyavailable = 0; +static int joyactive = 0; + +static int channel[2]; + +static GLuint t1id, t2id; + +static void +inittextures(void) +{ + glGenTextures(1, &t1id); + glBindTexture(GL_TEXTURE_2D, t1id); + + if (!LoadRGBMipmaps("../images/tile.rgb", GL_RGB)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glGenTextures(1, &t2id); + glBindTexture(GL_TEXTURE_2D, t2id); + + if (!LoadRGBMipmaps("../images/bw.rgb", GL_RGB)) { + fprintf(stderr, "Error reading a texture.\n"); + exit(-1); + } + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); +} + +static void +drawobjs(const int *l, const float *f) +{ + int mend, j; + + if (cstrip) { + float r = 0.33, g = 0.33, b = 0.33; + + for (; (*l) != 0;) { + mend = *l++; + + r += 0.33; + if (r > 1.0) { + r = 0.33; + g += 0.33; + if (g > 1.0) { + g = 0.33; + b += 0.33; + if (b > 1.0) + b = 0.33; + } + } + + glColor3f(r, g, b); + glBegin(GL_TRIANGLE_STRIP); + for (j = 0; j < mend; j++) { + f += 4; + glTexCoord2fv(f); + f += 2; + glVertex3fv(f); + f += 3; + } + glEnd(); + } + } + else + for (; (*l) != 0;) { + mend = *l++; + + glBegin(GL_TRIANGLE_STRIP); + for (j = 0; j < mend; j++) { + glColor4fv(f); + f += 4; + glTexCoord2fv(f); + f += 2; + glVertex3fv(f); + f += 3; + } + glEnd(); + } +} + +static void +calcposobs(void) +{ + static double t0 = -1.; + double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0; + if (t0 < 0.0) + t0 = t; + dt = t - t0; + t0 = t; + + dir[0] = sin(alpha * M_PI / 180.0); + dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0); + dir[2] = cos(beta * M_PI / 180.0); + + if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5) + dir[0] = 0; + if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5) + dir[1] = 0; + if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5) + dir[2] = 0; + + obs[0] += v * dir[0] * dt; + obs[1] += v * dir[1] * dt; + obs[2] += v * dir[2] * dt; +} + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_LEFT: + alpha -= 2.0; + break; + case GLUT_KEY_RIGHT: + alpha += 2.0; + break; + case GLUT_KEY_DOWN: + beta -= 2.0; + break; + case GLUT_KEY_UP: + beta += 2.0; + break; + } +} + +static void +key(unsigned char k, int x, int y) +{ + switch (k) { + case 27: + exit(0); + break; + + case 'a': + v += 5.; + break; + case 'z': + v -= 5.; + break; + +#ifdef XMESA + case ' ': + fullscreen = (!fullscreen); + + glutSetWindow(channel[0]); + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + + glutSetWindow(channel[1]); + XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW); + break; +#endif + + case 'j': + joyactive = (!joyactive); + break; + case 'h': + help = (!help); + break; + case 'f': + fog = (!fog); + break; + case 't': + usetex = (!usetex); + break; + case 'b': + if (bfcull) { + glDisable(GL_CULL_FACE); + bfcull = 0; + } + else { + glEnable(GL_CULL_FACE); + bfcull = 1; + } + break; + case 'm': + cstrip = (!cstrip); + break; + + case 'd': + fprintf(stderr, "Deleting textures...\n"); + glDeleteTextures(1, &t1id); + glDeleteTextures(1, &t2id); + fprintf(stderr, "Loading textures...\n"); + inittextures(); + fprintf(stderr, "Done.\n"); + break; + } +} + +static void +reshapechannel0(int w, int h) +{ + float ratio; + + WIDTHC0 = w; + HEIGHTC0 = h; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + ratio = 0.5f * w / (float) h; + + glFrustum(-2.0, 0.0, -1.0 * ratio, 1.0 * ratio, 1.0, 60.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glViewport(0, 0, w, h); +} + +static void +reshapechannel1(int w, int h) +{ + float ratio; + + WIDTHC1 = w; + HEIGHTC1 = h; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + ratio = 0.5f * w / (float) h; + + glFrustum(0.0, 2.0, -1.0 * ratio, 1.0 * ratio, 1.0, 60.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glViewport(0, 0, w, h); +} + +static void +printstring(void *font, char *string) +{ + int len, i; + + len = (int) strlen(string); + for (i = 0; i < len; i++) + glutBitmapCharacter(font, string[i]); +} + +static void +printhelp(void) +{ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(0.0, 0.0, 0.0, 0.5); + glRecti(40, 40, 600, 440); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(300, 420); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help"); + + glRasterPos2i(60, 390); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help"); + glRasterPos2i(60, 360); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures"); + glRasterPos2i(60, 330); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog"); + glRasterPos2i(60, 300); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Toggle strips"); + glRasterPos2i(60, 270); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling"); + glRasterPos2i(60, 240); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate"); + glRasterPos2i(60, 210); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "a - Increase velocity"); + glRasterPos2i(60, 180); + printstring(GLUT_BITMAP_TIMES_ROMAN_24, "z - Decrease velocity"); + + glRasterPos2i(60, 150); + if (joyavailable) + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "j - Toggle jostick control (Joystick control available)"); + else + printstring(GLUT_BITMAP_TIMES_ROMAN_24, + "(No Joystick control available)"); +} + +static void +dojoy(void) +{ +#ifdef WIN32 + static UINT max[2] = { 0, 0 }; + static UINT min[2] = { 0xffffffff, 0xffffffff }, center[2]; + MMRESULT res; + JOYINFO joy; + + res = joyGetPos(JOYSTICKID1, &joy); + + if (res == JOYERR_NOERROR) { + joyavailable = 1; + + if (max[0] < joy.wXpos) + max[0] = joy.wXpos; + if (min[0] > joy.wXpos) + min[0] = joy.wXpos; + center[0] = (max[0] + min[0]) / 2; + + if (max[1] < joy.wYpos) + max[1] = joy.wYpos; + if (min[1] > joy.wYpos) + min[1] = joy.wYpos; + center[1] = (max[1] + min[1]) / 2; + + if (joyactive) { + if (fabs(center[0] - (float) joy.wXpos) > 0.1 * (max[0] - min[0])) + alpha -= + 2.0 * (center[0] - (float) joy.wXpos) / (max[0] - min[0]); + if (fabs(center[1] - (float) joy.wYpos) > 0.1 * (max[1] - min[1])) + beta += 2.0 * (center[1] - (float) joy.wYpos) / (max[1] - min[1]); + + if (joy.wButtons & JOY_BUTTON1) + v += 0.01; + if (joy.wButtons & JOY_BUTTON2) + v -= 0.01; + } + } + else + joyavailable = 0; +#endif +} + +static void +draw(void) +{ + static char frbuf[80] = ""; + int i; + float base, offset; + + dojoy(); + + glClear(GL_COLOR_BUFFER_BIT); + + glClear(GL_COLOR_BUFFER_BIT); + + if (usetex) + glEnable(GL_TEXTURE_2D); + else + glDisable(GL_TEXTURE_2D); + + if (fog) + glEnable(GL_FOG); + else + glDisable(GL_FOG); + + glShadeModel(GL_SMOOTH); + + glPushMatrix(); + calcposobs(); + gluLookAt(obs[0], obs[1], obs[2], + obs[0] + dir[0], obs[1] + dir[1], obs[2] + dir[2], + 0.0, 0.0, 1.0); + + if (dir[0] > 0) { + offset = 8.0; + base = obs[0] - fmod(obs[0], 8.0); + } + else { + offset = -8.0; + base = obs[0] + (8.0 - fmod(obs[0], 8.0)); + } + + glPushMatrix(); + glTranslatef(base - offset / 2.0, 0.0, 0.0); + for (i = 0; i < NUMBLOC; i++) { + glTranslatef(offset, 0.0, 0.0); + glBindTexture(GL_TEXTURE_2D, t1id); + drawobjs(striplength_skin_11, stripdata_skin_11); + glBindTexture(GL_TEXTURE_2D, t2id); + drawobjs(striplength_skin_12, stripdata_skin_12); + drawobjs(striplength_skin_9, stripdata_skin_9); + drawobjs(striplength_skin_13, stripdata_skin_13); + } + glPopMatrix(); + glPopMatrix(); + + glDisable(GL_TEXTURE_2D); + glDisable(GL_FOG); + glShadeModel(GL_FLAT); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glOrtho(-0.5, 639.5, -0.5, 479.5, -1.0, 1.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glColor3f(1.0, 0.0, 0.0); + glRasterPos2i(10, 10); + printstring(GLUT_BITMAP_HELVETICA_18, frbuf); + glRasterPos2i(350, 470); + printstring(GLUT_BITMAP_HELVETICA_10, + "Tunnel2 V1.0 Written by David Bucciarelli (tech.hmw@plus.it)"); + + if (help) + printhelp(); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + + Frames++; + { + GLint t = glutGet(GLUT_ELAPSED_TIME); + if (t - T0 >= 2000) { + GLfloat seconds = (t - T0) / 1000.0; + GLfloat fps = Frames / seconds; + sprintf(frbuf, "Frame rate: %f", fps); + T0 = t; + Frames = 0; + } + } +} + +static void +drawchannel0(void) +{ + glutSetWindow(channel[0]); + draw(); + glutSwapBuffers(); +} + +static void +drawchannel1(void) +{ + glutSetWindow(channel[1]); + draw(); + glutSwapBuffers(); +} + +static void +drawall(void) +{ + glutSetWindow(channel[0]); + draw(); + glutSetWindow(channel[1]); + draw(); + + glutSetWindow(channel[0]); + glutSwapBuffers(); + glutSetWindow(channel[1]); + glutSwapBuffers(); +} + +static void +init(void) +{ + float fogcolor[4] = { 0.7, 0.7, 0.7, 1.0 }; + + glShadeModel(GL_SMOOTH); + glDisable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + glEnable(GL_TEXTURE_2D); + + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_EXP2); + glFogfv(GL_FOG_COLOR, fogcolor); + + glFogf(GL_FOG_DENSITY, 0.06); + glHint(GL_FOG_HINT, GL_NICEST); + + glEnable(GL_BLEND); + /* + glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE); + glEnable(GL_POLYGON_SMOOTH); + */ + + glClearColor(fogcolor[0], fogcolor[1], fogcolor[2], fogcolor[3]); + glClear(GL_COLOR_BUFFER_BIT); +} + +int +main(int ac, char **av) +{ + fprintf(stderr, + "Tunnel2 V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n"); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(WIDTHC0, HEIGHTC0); + glutInit(&ac, av); + + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + +#ifdef FX + if (fxMesaSelectCurrentBoard(0) < 0) { + fprintf(stderr, "The first Voodoo Graphics board is missing !?!?\n"); + return -1; + } +#endif + if (!(channel[0] = glutCreateWindow("Channel 0"))) { + fprintf(stderr, "Error, couldn't open window\n"); + return -1; + } + + reshapechannel0(WIDTHC0, HEIGHTC0); + init(); + inittextures(); + glutDisplayFunc(drawchannel0); + glutReshapeFunc(reshapechannel0); + glutKeyboardFunc(key); + glutSpecialFunc(special); + +#ifdef FX + if (fxMesaSelectCurrentBoard(1) < 0) { + fprintf(stderr, "The second Voodoo Graphics board is missing !\n"); + exit(-1); + } +#endif + glutInitWindowPosition(WIDTHC0, 0); + glutInitWindowSize(WIDTHC1, HEIGHTC1); + if (!(channel[1] = glutCreateWindow("Channel 1"))) { + fprintf(stderr, "Error, couldn't open window\n"); + exit(-1); + } + + reshapechannel1(WIDTHC1, HEIGHTC1); + init(); + inittextures(); + glutDisplayFunc(drawchannel1); + glutReshapeFunc(reshapechannel1); + glutKeyboardFunc(key); + glutSpecialFunc(special); + + glutIdleFunc(drawall); + + calcposobs(); + + glutMainLoop(); + + return 0; +} diff --git a/progs/demos/tunneldat.h b/progs/demos/tunneldat.h new file mode 100644 index 000000000..af1e52e1f --- /dev/null +++ b/progs/demos/tunneldat.h @@ -0,0 +1,395 @@ +/* Object: skin_13 */ + +#if defined(_MSC_VER) && defined(_WIN32) +#pragma warning( disable : 4305 ) /* 'initializing' : truncation from 'const double' to 'float' */ +#endif + +static const int striplength_skin_13[] = { + 10, 7, 3, 5, 5, 4, 4, 4, 4, 5, 3, 4, 5, 4, 4, 4, 4, 4, 4, 6, + 6, 3, 6, 3, 3, 3, 3, 0 +}; + +static const float stripdata_skin_13[] = { + 0.415686, 0.415686, 0.415686, 1.000000, 0.000000, 1.500000, 2.000000, + 4.000000, 0.000000, 0.341176, 0.341176, 0.341176, 1.000000, -0.500000, + 1.500000, 4.000000, 4.000000, 0.000000, 0.545098, 0.545098, 0.545098, + 1.000000, 0.000000, 1.000000, 2.000000, 4.000000, 2.000000, 0.435294, + 0.435294, 0.435294, 1.000000, -0.500000, 1.000000, 4.000000, 4.000000, + 2.000000, 0.517647, 0.517647, 0.517647, 1.000000, 0.000000, 0.500000, + 2.000000, 4.000000, 4.000000, 0.450980, 0.450980, 0.450980, 1.000000, + -0.500000, 0.500000, 4.000000, 4.000000, 4.000000, 0.427451, 0.427451, + 0.427451, 1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, + 0.388235, 0.388235, 0.388235, 1.000000, -0.500000, 0.000000, 4.000000, + 4.000000, 6.000000, 0.356863, 0.356863, 0.356863, 1.000000, 0.000000, + -0.500000, 2.000000, 4.000000, 8.000000, 0.333333, 0.333333, 0.333333, + 1.000000, -0.500000, -0.500000, 4.000000, 4.000000, 8.000000, + 0.435294, 0.435294, 0.435294, 1.000000, 1.500000, 1.000000, -4.000000, + 4.000000, 2.000000, 0.415686, 0.415686, 0.415686, 1.000000, 1.000000, + 1.500000, -2.000000, 4.000000, 0.000000, 0.545098, 0.545098, 0.545098, + 1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000, 0.450980, + 0.450980, 0.450980, 1.000000, 0.500000, 1.500000, 0.000000, 4.000000, + 0.000000, 0.600000, 0.600000, 0.600000, 1.000000, 0.500000, 1.000000, + 0.000000, 4.000000, 2.000000, 0.415686, 0.415686, 0.415686, 1.000000, + 0.000000, 1.500000, 2.000000, 4.000000, 0.000000, 0.545098, 0.545098, + 0.545098, 1.000000, 0.000000, 1.000000, 2.000000, 4.000000, 2.000000, + 0.435294, 0.435294, 0.435294, 1.000000, 1.500000, 1.000000, -4.000000, + 4.000000, 2.000000, 0.341176, 0.341176, 0.341176, 1.000000, 1.500000, + 1.500000, -4.000000, 4.000000, 0.000000, 0.415686, 0.415686, 0.415686, + 1.000000, 1.000000, 1.500000, -2.000000, 4.000000, 0.000000, + 0.356863, 0.356863, 0.356863, 1.000000, 0.000000, -0.500000, 2.000000, + 4.000000, 8.000000, 0.364706, 0.364706, 0.364706, 1.000000, 0.500000, + -0.500000, 0.000000, 4.000000, 8.000000, 0.427451, 0.427451, 0.427451, + 1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, 0.415686, + 0.415686, 0.415686, 1.000000, 0.395020, -0.133318, 0.420032, 4.000000, + 6.533272, 0.423529, 0.423529, 0.423529, 1.000000, 0.388550, -0.103582, + 0.445932, 4.000000, 6.414327, + 0.423529, 0.423529, 0.423529, 1.000000, 0.388550, -0.103582, 0.445932, + 4.000000, 6.414327, 0.427451, 0.427451, 0.427451, 1.000000, 0.383423, + -0.069344, 0.466541, 4.000000, 6.277375, 0.427451, 0.427451, 0.427451, + 1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, 0.435294, + 0.435294, 0.435294, 1.000000, 0.380371, -0.034595, 0.478689, 4.000000, + 6.138380, 0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000, + 0.482673, 4.000000, 6.000000, + 0.407843, 0.407843, 0.407843, 1.000000, 0.414673, -0.191394, 0.341301, + 4.000000, 6.765576, 0.411765, 0.411765, 0.411765, 1.000000, 0.403687, + -0.162957, 0.385368, 4.000000, 6.651829, 0.364706, 0.364706, 0.364706, + 1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.415686, + 0.415686, 0.415686, 1.000000, 0.395020, -0.133318, 0.420032, 4.000000, + 6.533272, + 0.400000, 0.400000, 0.400000, 1.000000, 0.438232, -0.232438, 0.247284, + 4.000000, 6.929754, 0.403922, 0.403922, 0.403922, 1.000000, 0.425171, + -0.212276, 0.299425, 4.000000, 6.849104, 0.364706, 0.364706, 0.364706, + 1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.407843, + 0.407843, 0.407843, 1.000000, 0.414673, -0.191394, 0.341301, 4.000000, + 6.765576, + 0.396078, 0.396078, 0.396078, 1.000000, 0.467285, -0.260554, 0.130636, + 4.000000, 7.042214, 0.400000, 0.400000, 0.400000, 1.000000, 0.453857, + -0.250068, 0.184711, 4.000000, 7.000273, 0.364706, 0.364706, 0.364706, + 1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.400000, + 0.400000, 0.400000, 1.000000, 0.438232, -0.232438, 0.247284, 4.000000, + 6.929754, + 0.396078, 0.396078, 0.396078, 1.000000, 0.500000, -0.270672, 0.000000, + 4.000000, 7.082688, 0.396078, 0.396078, 0.396078, 1.000000, 0.482788, + -0.267902, 0.068730, 4.000000, 7.071609, 0.364706, 0.364706, 0.364706, + 1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.396078, + 0.396078, 0.396078, 1.000000, 0.467285, -0.260554, 0.130636, 4.000000, + 7.042214, + 0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000, 0.482673, + 4.000000, 6.000000, 0.474510, 0.474510, 0.474510, 1.000000, 0.379272, + 0.180448, 0.482673, 4.000000, 5.278208, 0.517647, 0.517647, 0.517647, + 1.000000, 0.000000, 0.500000, 2.000000, 4.000000, 4.000000, 0.513726, + 0.513726, 0.513726, 1.000000, 0.379272, 0.360896, 0.482673, 4.000000, + 4.556417, 0.545098, 0.545098, 0.545098, 1.000000, 0.379272, 0.500000, + 0.482673, 4.000000, 4.000000, + 0.545098, 0.545098, 0.545098, 1.000000, 0.379272, 0.500000, 0.482673, + 4.000000, 4.000000, 0.545098, 0.545098, 0.545098, 1.000000, 0.000000, + 1.000000, 2.000000, 4.000000, 2.000000, 0.517647, 0.517647, 0.517647, + 1.000000, 0.000000, 0.500000, 2.000000, 4.000000, 4.000000, + 0.600000, 0.600000, 0.600000, 1.000000, 0.500000, 1.000000, 0.000000, + 4.000000, 2.000000, 0.545098, 0.545098, 0.545098, 1.000000, 0.000000, + 1.000000, 2.000000, 4.000000, 2.000000, 0.552941, 0.552941, 0.552941, + 1.000000, 0.379272, 0.541344, 0.482673, 4.000000, 3.834625, 0.545098, + 0.545098, 0.545098, 1.000000, 0.379272, 0.500000, 0.482673, 4.000000, + 4.000000, + 0.552941, 0.552941, 0.552941, 1.000000, 0.379272, 0.541344, 0.482673, + 4.000000, 3.834625, 0.556863, 0.556863, 0.556863, 1.000000, 0.459717, + 0.541344, 0.160891, 4.000000, 3.834625, 0.600000, 0.600000, 0.600000, + 1.000000, 0.500000, 1.000000, 0.000000, 4.000000, 2.000000, 0.556863, + 0.556863, 0.556863, 1.000000, 0.500000, 0.541344, 0.000000, 4.000000, + 3.834625, 0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344, + -0.160891, 4.000000, 3.834625, + 0.396078, 0.396078, 0.396078, 1.000000, 0.517212, -0.267902, -0.068730, + 4.000000, 7.071609, 0.396078, 0.396078, 0.396078, 1.000000, 0.500000, + -0.270672, 0.000000, 4.000000, 7.082688, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.364706, + 0.364706, 0.364706, 1.000000, 0.500000, -0.500000, 0.000000, 4.000000, + 8.000000, + 0.400000, 0.400000, 0.400000, 1.000000, 0.546143, -0.250068, -0.184711, + 4.000000, 7.000273, 0.396078, 0.396078, 0.396078, 1.000000, 0.532715, + -0.260554, -0.130636, 4.000000, 7.042214, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.396078, + 0.396078, 0.396078, 1.000000, 0.517212, -0.267902, -0.068730, 4.000000, + 7.071609, + 0.403922, 0.403922, 0.403922, 1.000000, 0.574829, -0.212276, -0.299425, + 4.000000, 6.849104, 0.400000, 0.400000, 0.400000, 1.000000, 0.561768, + -0.232438, -0.247284, 4.000000, 6.929754, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.400000, + 0.400000, 0.400000, 1.000000, 0.546143, -0.250068, -0.184711, 4.000000, + 7.000273, + 0.411765, 0.411765, 0.411765, 1.000000, 0.596313, -0.162957, -0.385368, + 4.000000, 6.651829, 0.407843, 0.407843, 0.407843, 1.000000, 0.585327, + -0.191394, -0.341301, 4.000000, 6.765576, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.403922, + 0.403922, 0.403922, 1.000000, 0.574829, -0.212276, -0.299425, 4.000000, + 6.849104, + 0.423529, 0.423529, 0.423529, 1.000000, 0.611450, -0.103582, -0.445931, + 4.000000, 6.414327, 0.415686, 0.415686, 0.415686, 1.000000, 0.604980, + -0.133318, -0.420033, 4.000000, 6.533272, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.411765, + 0.411765, 0.411765, 1.000000, 0.596313, -0.162957, -0.385368, 4.000000, + 6.651829, + 0.435294, 0.435294, 0.435294, 1.000000, 0.619629, -0.034595, -0.478689, + 4.000000, 6.138380, 0.427451, 0.427451, 0.427451, 1.000000, 0.616577, + -0.069344, -0.466541, 4.000000, 6.277375, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.423529, + 0.423529, 0.423529, 1.000000, 0.611450, -0.103582, -0.445931, 4.000000, + 6.414327, + 0.513726, 0.513726, 0.513726, 1.000000, 0.620728, 0.360896, -0.482673, + 4.000000, 4.556417, 0.474510, 0.474510, 0.474510, 1.000000, 0.620728, + 0.180448, -0.482673, 4.000000, 5.278208, 0.427451, 0.427451, 0.427451, + 1.000000, 1.000000, 0.000000, -2.000000, 4.000000, 6.000000, 0.439216, + 0.439216, 0.439216, 1.000000, 0.620728, 0.000000, -0.482673, 4.000000, + 6.000000, 0.356863, 0.356863, 0.356863, 1.000000, 1.000000, -0.500000, + -2.000000, 4.000000, 8.000000, 0.435294, 0.435294, 0.435294, 1.000000, + 0.619629, -0.034595, -0.478689, 4.000000, 6.138380, + 0.333333, 0.333333, 0.333333, 1.000000, 1.500000, -0.500000, -4.000000, + 4.000000, 8.000000, 0.388235, 0.388235, 0.388235, 1.000000, 1.500000, + 0.000000, -4.000000, 4.000000, 6.000000, 0.427451, 0.427451, 0.427451, + 1.000000, 1.000000, 0.000000, -2.000000, 4.000000, 6.000000, 0.517647, + 0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000, 4.000000, + 4.000000, 0.513726, 0.513726, 0.513726, 1.000000, 0.620728, 0.360896, + -0.482673, 4.000000, 4.556417, 0.545098, 0.545098, 0.545098, 1.000000, + 0.620728, 0.500000, -0.482673, 4.000000, 4.000000, + 0.333333, 0.333333, 0.333333, 1.000000, 1.500000, -0.500000, -4.000000, + 4.000000, 8.000000, 0.427451, 0.427451, 0.427451, 1.000000, 1.000000, + 0.000000, -2.000000, 4.000000, 6.000000, 0.356863, 0.356863, 0.356863, + 1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, + 0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344, -0.160891, + 4.000000, 3.834625, 0.552941, 0.552941, 0.552941, 1.000000, 0.620728, + 0.541344, -0.482673, 4.000000, 3.834625, 0.545098, 0.545098, 0.545098, + 1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000, 0.517647, + 0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000, 4.000000, + 4.000000, 0.450980, 0.450980, 0.450980, 1.000000, 1.500000, 0.500000, + -4.000000, 4.000000, 4.000000, 0.388235, 0.388235, 0.388235, 1.000000, + 1.500000, 0.000000, -4.000000, 4.000000, 6.000000, + 0.517647, 0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000, + 4.000000, 4.000000, 0.552941, 0.552941, 0.552941, 1.000000, 0.620728, + 0.541344, -0.482673, 4.000000, 3.834625, 0.545098, 0.545098, 0.545098, + 1.000000, 0.620728, 0.500000, -0.482673, 4.000000, 4.000000, + 0.450980, 0.450980, 0.450980, 1.000000, 1.500000, 0.500000, -4.000000, + 4.000000, 4.000000, 0.435294, 0.435294, 0.435294, 1.000000, 1.500000, + 1.000000, -4.000000, 4.000000, 2.000000, 0.545098, 0.545098, 0.545098, + 1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000, + 0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000, 0.482673, + 4.000000, 6.000000, 0.517647, 0.517647, 0.517647, 1.000000, 0.000000, + 0.500000, 2.000000, 4.000000, 4.000000, 0.427451, 0.427451, 0.427451, + 1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, + 0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344, -0.160891, + 4.000000, 3.834625, 0.545098, 0.545098, 0.545098, 1.000000, 1.000000, + 1.000000, -2.000000, 4.000000, 2.000000, 0.600000, 0.600000, 0.600000, + 1.000000, 0.500000, 1.000000, 0.000000, 4.000000, 2.000000 +}; + + +/* Object: skin_12 */ + +static const int striplength_skin_12[] = { + 12, 12, 12, 12, 12, 0 +}; + +static const float stripdata_skin_12[] = { + 0.498039, 0.498039, 0.498039, 1.000000, -0.099976, 1.500000, -2.400000, + -4.000000, -0.000002, 0.337255, 0.337255, 0.337255, 1.000000, -0.500000, + 1.500000, -4.000000, -4.000000, -0.000002, 0.568627, 0.568627, 0.568627, + 1.000000, -0.099976, 1.100000, -2.400000, -4.000000, 1.599999, 0.341176, + 0.341176, 0.341176, 1.000000, -0.500000, 1.100000, -4.000000, -4.000000, + 1.599999, 0.498039, 0.498039, 0.498039, 1.000000, -0.099976, 0.700000, + -2.400000, -4.000000, 3.200000, 0.325490, 0.325490, 0.325490, 1.000000, + -0.500000, 0.700000, -4.000000, -4.000000, 3.199999, 0.352941, 0.352941, + 0.352941, 1.000000, -0.099976, 0.300000, -2.400000, -4.000000, 4.800000, + 0.282353, 0.282353, 0.282353, 1.000000, -0.500000, 0.300000, -4.000000, + -4.000000, 4.800000, 0.282353, 0.282353, 0.282353, 1.000000, -0.099976, + -0.100000, -2.400000, -4.000000, 6.400001, 0.254902, 0.254902, 0.254902, + 1.000000, -0.500000, -0.100000, -4.000000, -4.000000, 6.400000, + 0.239216, 0.239216, 0.239216, 1.000000, -0.099976, -0.500000, -2.400000, + -4.000000, 8.000000, 0.227451, 0.227451, 0.227451, 1.000000, -0.500000, + -0.500000, -4.000000, -4.000000, 8.000000, + 0.239216, 0.239216, 0.239216, 1.000000, 1.099976, -0.500000, 2.400001, + -4.000000, 8.000000, 0.227451, 0.227451, 0.227451, 1.000000, 1.500000, + -0.500000, 4.000002, -4.000000, 8.000000, 0.282353, 0.282353, 0.282353, + 1.000000, 1.099976, -0.100000, 2.400001, -4.000000, 6.400001, 0.254902, + 0.254902, 0.254902, 1.000000, 1.500000, -0.100000, 4.000002, -4.000000, + 6.400001, 0.352941, 0.352941, 0.352941, 1.000000, 1.099976, 0.300000, + 2.400002, -4.000000, 4.800001, 0.282353, 0.282353, 0.282353, 1.000000, + 1.500000, 0.300000, 4.000002, -4.000000, 4.800001, 0.498039, 0.498039, + 0.498039, 1.000000, 1.099976, 0.700000, 2.400002, -4.000000, 3.200000, + 0.321569, 0.321569, 0.321569, 1.000000, 1.500000, 0.700000, 4.000003, + -4.000000, 3.200000, 0.568627, 0.568627, 0.568627, 1.000000, 1.099976, + 1.100000, 2.400002, -4.000000, 1.599999, 0.341176, 0.341176, 0.341176, + 1.000000, 1.500000, 1.100000, 4.000003, -4.000000, 1.599999, 0.494118, + 0.494118, 0.494118, 1.000000, 1.099976, 1.500000, 2.400003, -4.000000, + -0.000002, 0.337255, 0.337255, 0.337255, 1.000000, 1.500000, 1.500000, + 4.000004, -4.000000, -0.000002, + 0.639216, 0.639216, 0.639216, 1.000000, 0.300049, 1.500000, -0.799999, + -4.000000, -0.000002, 0.498039, 0.498039, 0.498039, 1.000000, -0.099976, + 1.500000, -2.400000, -4.000000, -0.000002, 0.858824, 0.858824, 0.858824, + 1.000000, 0.300049, 1.100000, -0.799999, -4.000000, 1.599999, 0.568627, + 0.568627, 0.568627, 1.000000, -0.099976, 1.100000, -2.400000, -4.000000, + 1.599999, 0.686275, 0.686275, 0.686275, 1.000000, 0.300049, 0.700000, + -0.799999, -4.000000, 3.200000, 0.498039, 0.498039, 0.498039, 1.000000, + -0.099976, 0.700000, -2.400000, -4.000000, 3.200000, 0.419608, 0.419608, + 0.419608, 1.000000, 0.300049, 0.300000, -0.800000, -4.000000, 4.800000, + 0.352941, 0.352941, 0.352941, 1.000000, -0.099976, 0.300000, -2.400000, + -4.000000, 4.800000, 0.298039, 0.298039, 0.298039, 1.000000, 0.300049, + -0.100000, -0.800000, -4.000000, 6.400001, 0.282353, 0.282353, 0.282353, + 1.000000, -0.099976, -0.100000, -2.400000, -4.000000, 6.400001, + 0.247059, 0.247059, 0.247059, 1.000000, 0.300049, -0.500000, -0.800000, + -4.000000, 8.000000, 0.239216, 0.239216, 0.239216, 1.000000, -0.099976, + -0.500000, -2.400000, -4.000000, 8.000000, + 0.639216, 0.639216, 0.639216, 1.000000, 0.699951, 1.500000, 0.800002, + -4.000000, -0.000002, 0.639216, 0.639216, 0.639216, 1.000000, 0.300049, + 1.500000, -0.799999, -4.000000, -0.000002, 0.858824, 0.858824, 0.858824, + 1.000000, 0.699951, 1.100000, 0.800001, -4.000000, 1.599999, 0.858824, + 0.858824, 0.858824, 1.000000, 0.300049, 1.100000, -0.799999, -4.000000, + 1.599999, 0.686275, 0.686275, 0.686275, 1.000000, 0.699951, 0.700000, + 0.800001, -4.000000, 3.200000, 0.686275, 0.686275, 0.686275, 1.000000, + 0.300049, 0.700000, -0.799999, -4.000000, 3.200000, 0.419608, 0.419608, + 0.419608, 1.000000, 0.699951, 0.300000, 0.800001, -4.000000, 4.800001, + 0.419608, 0.419608, 0.419608, 1.000000, 0.300049, 0.300000, -0.800000, + -4.000000, 4.800000, 0.298039, 0.298039, 0.298039, 1.000000, 0.699951, + -0.100000, 0.800001, -4.000000, 6.400001, 0.298039, 0.298039, 0.298039, + 1.000000, 0.300049, -0.100000, -0.800000, -4.000000, 6.400001, 0.247059, + 0.247059, 0.247059, 1.000000, 0.699951, -0.500000, 0.800000, -4.000000, + 8.000000, 0.247059, 0.247059, 0.247059, 1.000000, 0.300049, -0.500000, + -0.800000, -4.000000, 8.000000, + 0.494118, 0.494118, 0.494118, 1.000000, 1.099976, 1.500000, 2.400003, + -4.000000, -0.000002, 0.639216, 0.639216, 0.639216, 1.000000, 0.699951, + 1.500000, 0.800002, -4.000000, -0.000002, 0.568627, 0.568627, 0.568627, + 1.000000, 1.099976, 1.100000, 2.400002, -4.000000, 1.599999, 0.858824, + 0.858824, 0.858824, 1.000000, 0.699951, 1.100000, 0.800001, -4.000000, + 1.599999, 0.498039, 0.498039, 0.498039, 1.000000, 1.099976, 0.700000, + 2.400002, -4.000000, 3.200000, 0.686275, 0.686275, 0.686275, 1.000000, + 0.699951, 0.700000, 0.800001, -4.000000, 3.200000, 0.352941, 0.352941, + 0.352941, 1.000000, 1.099976, 0.300000, 2.400002, -4.000000, 4.800001, + 0.419608, 0.419608, 0.419608, 1.000000, 0.699951, 0.300000, 0.800001, + -4.000000, 4.800001, 0.282353, 0.282353, 0.282353, 1.000000, 1.099976, + -0.100000, 2.400001, -4.000000, 6.400001, 0.298039, 0.298039, 0.298039, + 1.000000, 0.699951, -0.100000, 0.800001, -4.000000, 6.400001, 0.239216, + 0.239216, 0.239216, 1.000000, 1.099976, -0.500000, 2.400001, -4.000000, + 8.000000, 0.247059, 0.247059, 0.247059, 1.000000, 0.699951, -0.500000, + 0.800000, -4.000000, 8.000000 +}; + + +/* Object: skin_11 */ + +static const int striplength_skin_11[] = { + 12, 12, 12, 12, 12, 0 +}; + +static const float stripdata_skin_11[] = { + 0.145098, 0.145098, 0.145098, 1.000000, -0.099976, 1.500000, -2.400000, + 4.000002, 0.000000, 0.141176, 0.141176, 0.141176, 1.000000, -0.500000, + 1.500000, -4.000000, 4.000002, 0.000000, 0.176471, 0.176471, 0.176471, + 1.000000, -0.099976, 1.100000, -2.400000, 2.400001, 0.000000, 0.145098, + 0.145098, 0.145098, 1.000000, -0.500000, 1.100000, -4.000000, 2.400001, + 0.000000, 0.341176, 0.341176, 0.341176, 1.000000, -0.099976, 0.700000, + -2.400000, 0.800000, 0.000000, 0.188235, 0.188235, 0.188235, 1.000000, + -0.500000, 0.700000, -4.000000, 0.800000, 0.000000, 0.450980, 0.450980, + 0.450980, 1.000000, -0.099976, 0.300000, -2.400000, -0.800000, 0.000000, + 0.247059, 0.247059, 0.247059, 1.000000, -0.500000, 0.300000, -4.000000, + -0.800000, 0.000000, 0.439216, 0.439216, 0.439216, 1.000000, -0.099976, + -0.100000, -2.400000, -2.400000, 0.000000, 0.270588, 0.270588, 0.270588, + 1.000000, -0.500000, -0.100000, -4.000000, -2.400000, 0.000000, + 0.364706, 0.364706, 0.364706, 1.000000, -0.099976, -0.500000, -2.400000, + -4.000000, 0.000000, 0.258824, 0.258824, 0.258824, 1.000000, -0.500000, + -0.500000, -4.000000, -4.000000, 0.000000, + 0.364706, 0.364706, 0.364706, 1.000000, 1.099976, -0.500000, 2.400001, + -4.000000, 0.000000, 0.258824, 0.258824, 0.258824, 1.000000, 1.500000, + -0.500000, 4.000002, -4.000000, 0.000000, 0.439216, 0.439216, 0.439216, + 1.000000, 1.099976, -0.100000, 2.400001, -2.400001, 0.000000, 0.270588, + 0.270588, 0.270588, 1.000000, 1.500000, -0.100000, 4.000002, -2.400001, + 0.000000, 0.454902, 0.454902, 0.454902, 1.000000, 1.099976, 0.300000, + 2.400002, -0.800000, 0.000000, 0.247059, 0.247059, 0.247059, 1.000000, + 1.500000, 0.300000, 4.000002, -0.800000, 0.000000, 0.341176, 0.341176, + 0.341176, 1.000000, 1.099976, 0.700000, 2.400002, 0.800000, 0.000000, + 0.184314, 0.184314, 0.184314, 1.000000, 1.500000, 0.700000, 4.000003, + 0.800000, 0.000000, 0.176471, 0.176471, 0.176471, 1.000000, 1.099976, + 1.100000, 2.400002, 2.400001, 0.000000, 0.145098, 0.145098, 0.145098, + 1.000000, 1.500000, 1.100000, 4.000003, 2.400001, 0.000000, 0.145098, + 0.145098, 0.145098, 1.000000, 1.099976, 1.500000, 2.400003, 4.000003, + 0.000000, 0.141176, 0.141176, 0.141176, 1.000000, 1.500000, 1.500000, + 4.000004, 4.000002, 0.000000, + 0.145098, 0.145098, 0.145098, 1.000000, 0.300049, 1.500000, -0.799999, + 4.000002, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, -0.099976, + 1.500000, -2.400000, 4.000002, 0.000000, 0.262745, 0.262745, 0.262745, + 1.000000, 0.300049, 1.100000, -0.799999, 2.400001, 0.000000, 0.176471, + 0.176471, 0.176471, 1.000000, -0.099976, 1.100000, -2.400000, 2.400001, + 0.000000, 0.580392, 0.580392, 0.580392, 1.000000, 0.300049, 0.700000, + -0.799999, 0.800000, 0.000000, 0.341176, 0.341176, 0.341176, 1.000000, + -0.099976, 0.700000, -2.400000, 0.800000, 0.000000, 0.709804, 0.709804, + 0.709804, 1.000000, 0.300049, 0.300000, -0.800000, -0.800000, 0.000000, + 0.450980, 0.450980, 0.450980, 1.000000, -0.099976, 0.300000, -2.400000, + -0.800000, 0.000000, 0.627451, 0.627451, 0.627451, 1.000000, 0.300049, + -0.100000, -0.800000, -2.400001, 0.000000, 0.439216, 0.439216, 0.439216, + 1.000000, -0.099976, -0.100000, -2.400000, -2.400000, 0.000000, + 0.458824, 0.458824, 0.458824, 1.000000, 0.300049, -0.500000, -0.800000, + -4.000000, 0.000000, 0.364706, 0.364706, 0.364706, 1.000000, -0.099976, + -0.500000, -2.400000, -4.000000, 0.000000, + 0.145098, 0.145098, 0.145098, 1.000000, 0.699951, 1.500000, 0.800002, + 4.000002, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, 0.300049, + 1.500000, -0.799999, 4.000002, 0.000000, 0.262745, 0.262745, 0.262745, + 1.000000, 0.699951, 1.100000, 0.800001, 2.400001, 0.000000, 0.262745, + 0.262745, 0.262745, 1.000000, 0.300049, 1.100000, -0.799999, 2.400001, + 0.000000, 0.580392, 0.580392, 0.580392, 1.000000, 0.699951, 0.700000, + 0.800001, 0.800000, 0.000000, 0.580392, 0.580392, 0.580392, 1.000000, + 0.300049, 0.700000, -0.799999, 0.800000, 0.000000, 0.713726, 0.713726, + 0.713726, 1.000000, 0.699951, 0.300000, 0.800001, -0.800000, 0.000000, + 0.709804, 0.709804, 0.709804, 1.000000, 0.300049, 0.300000, -0.800000, + -0.800000, 0.000000, 0.631373, 0.631373, 0.631373, 1.000000, 0.699951, + -0.100000, 0.800001, -2.400001, 0.000000, 0.627451, 0.627451, 0.627451, + 1.000000, 0.300049, -0.100000, -0.800000, -2.400001, 0.000000, 0.458824, + 0.458824, 0.458824, 1.000000, 0.699951, -0.500000, 0.800000, -4.000000, + 0.000000, 0.458824, 0.458824, 0.458824, 1.000000, 0.300049, -0.500000, + -0.800000, -4.000000, 0.000000, + 0.145098, 0.145098, 0.145098, 1.000000, 1.099976, 1.500000, 2.400003, + 4.000003, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, 0.699951, + 1.500000, 0.800002, 4.000002, 0.000000, 0.176471, 0.176471, 0.176471, + 1.000000, 1.099976, 1.100000, 2.400002, 2.400001, 0.000000, 0.262745, + 0.262745, 0.262745, 1.000000, 0.699951, 1.100000, 0.800001, 2.400001, + 0.000000, 0.341176, 0.341176, 0.341176, 1.000000, 1.099976, 0.700000, + 2.400002, 0.800000, 0.000000, 0.580392, 0.580392, 0.580392, 1.000000, + 0.699951, 0.700000, 0.800001, 0.800000, 0.000000, 0.454902, 0.454902, + 0.454902, 1.000000, 1.099976, 0.300000, 2.400002, -0.800000, 0.000000, + 0.713726, 0.713726, 0.713726, 1.000000, 0.699951, 0.300000, 0.800001, + -0.800000, 0.000000, 0.439216, 0.439216, 0.439216, 1.000000, 1.099976, + -0.100000, 2.400001, -2.400001, 0.000000, 0.631373, 0.631373, 0.631373, + 1.000000, 0.699951, -0.100000, 0.800001, -2.400001, 0.000000, 0.364706, + 0.364706, 0.364706, 1.000000, 1.099976, -0.500000, 2.400001, -4.000000, + 0.000000, 0.458824, 0.458824, 0.458824, 1.000000, 0.699951, -0.500000, + 0.800000, -4.000000, 0.000000 +}; + + +/* Object: skin_9 */ + +static const int striplength_skin_9[] = { + 18, 0 +}; + +static const float stripdata_skin_9[] = { + 0.384314, 0.384314, 0.384314, 1.000000, -0.500000, 1.500000, -4.000000, + 4.000000, 8.000000, 0.384314, 0.384314, 0.384314, 1.000000, 1.500000, + 1.500000, 4.000000, 4.000000, 8.000000, 0.376471, 0.376471, 0.376471, + 1.000000, -0.500000, 1.250000, -4.000000, 3.695518, 9.530733, 0.403922, + 0.403922, 0.403922, 1.000000, 1.500000, 1.250000, 4.000000, 3.695518, + 9.530733, 0.415686, 0.415686, 0.415686, 1.000000, -0.500000, 1.000000, + -4.000000, 2.828427, 10.828427, 0.431373, 0.431373, 0.431373, 1.000000, + 1.500000, 1.000000, 4.000000, 2.828427, 10.828427, 0.435294, 0.435294, + 0.435294, 1.000000, -0.500000, 0.750000, -4.000000, 1.530734, 11.695518, + 0.443137, 0.443137, 0.443137, 1.000000, 1.500000, 0.750000, 4.000000, + 1.530734, 11.695518, 0.439216, 0.439216, 0.439216, 1.000000, -0.500000, + 0.500000, -4.000000, 0.000000, 12.000000, 0.435294, 0.435294, 0.435294, + 1.000000, 1.500000, 0.500000, 4.000000, 0.000000, 12.000000, 0.427451, + 0.427451, 0.427451, 1.000000, -0.500000, 0.250000, -4.000000, -1.530734, + 11.695518, 0.411765, 0.411765, 0.411765, 1.000000, 1.500000, 0.250000, + 4.000000, -1.530734, 11.695518, 0.396078, 0.396078, 0.396078, 1.000000, + -0.500000, 0.000000, -4.000000, -2.828427, 10.828427, 0.368627, + 0.368627, 0.368627, 1.000000, 1.500000, 0.000000, 4.000000, -2.828427, + 10.828427, 0.341176, 0.341176, 0.341176, 1.000000, -0.500000, -0.250000, + -4.000000, -3.695518, 9.530733, 0.301961, 0.301961, 0.301961, 1.000000, + 1.500000, -0.250000, 4.000000, -3.695518, 9.530733, 0.294118, 0.294118, + 0.294118, 1.000000, -0.500000, -0.500000, -4.000000, -4.000000, + 8.000000, 0.294118, 0.294118, 0.294118, 1.000000, 1.500000, -0.500000, + 4.000000, -4.000000, 8.000000 +}; diff --git a/progs/demos/winpos.c b/progs/demos/winpos.c new file mode 100644 index 000000000..2ee1df69f --- /dev/null +++ b/progs/demos/winpos.c @@ -0,0 +1,118 @@ + +/* + * Example of how to use the GL_MESA_window_pos extension. + * Brian Paul This file is in the public domain. + */ + +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#ifdef _WIN32 +#include <windows.h> +#endif +#define GL_GLEXT_PROTOTYPES +#include "GL/glut.h" + +#include "readtex.h" + +#define IMAGE_FILE "../images/girl.rgb" + + +#ifndef M_PI +# define M_PI 3.14159265 +#endif + + + +static GLubyte *Image; +static int ImgWidth, ImgHeight; +static GLenum ImgFormat; + +typedef void (APIENTRY * PFNWINDOWPOSFUNC)(GLfloat x, GLfloat y); +static PFNWINDOWPOSFUNC WindowPosFunc; + +static void draw( void ) +{ + GLfloat angle; + + glClear( GL_COLOR_BUFFER_BIT ); + + for (angle = -45.0; angle <= 135.0; angle += 10.0) { + GLfloat x = 50.0 + 200.0 * cos( angle * M_PI / 180.0 ); + GLfloat y = 50.0 + 200.0 * sin( angle * M_PI / 180.0 ); + + /* Don't need to worry about the modelview or projection matrices!!! */ + (*WindowPosFunc)( x, y ); + + glDrawPixels( ImgWidth, ImgHeight, ImgFormat, GL_UNSIGNED_BYTE, Image ); + } + glFinish(); +} + + +static void key( unsigned char key, int x, int y ) +{ + (void) x; + (void) y; + switch (key) { + case 27: + exit(0); + } +} + + +/* new window size or exposure */ +static void reshape( int width, int height ) +{ + glViewport(0, 0, (GLint)width, (GLint)height); +} + + +static void init( void ) +{ +#ifdef GL_ARB_window_pos + if (glutExtensionSupported("GL_ARB_window_pos")) { + printf("Using GL_ARB_window_pos\n"); + WindowPosFunc = &glWindowPos2fARB; + } + else +#elif defined(GL_ARB_window_pos) + if (glutExtensionSupported("GL_MESA_window_pos")) { + printf("Using GL_MESA_window_pos\n"); + WindowPosFunc = &glWindowPos2fMESA; + } + else +#endif + { + printf("Sorry, GL_ARB/MESA_window_pos extension not available.\n"); + exit(1); + } + + Image = LoadRGBImage( IMAGE_FILE, &ImgWidth, &ImgHeight, &ImgFormat ); + if (!Image) { + printf("Couldn't read %s\n", IMAGE_FILE); + exit(0); + } + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +} + + +int main( int argc, char *argv[] ) +{ + glutInitWindowPosition(0, 0); + glutInitWindowSize(500, 500); + glutInitDisplayMode( GLUT_RGB ); + + if (glutCreateWindow("winpos") <= 0) { + exit(0); + } + + init(); + + glutReshapeFunc( reshape ); + glutKeyboardFunc( key ); + glutDisplayFunc( draw ); + glutMainLoop(); + return 0; +} |