report fixes
This commit is contained in:
parent
8325611c28
commit
c74d2c8b89
@ -33,9 +33,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>3.500000</xPos>
|
||||
<xPos>-0.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>-0.500000</zPos>
|
||||
<zPos>3.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>17</idBlue>
|
||||
<typeID>80</typeID>
|
||||
@ -62,9 +62,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>2.500000</xPos>
|
||||
<xPos>-2.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>-2.500000</zPos>
|
||||
<zPos>2.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>16</idBlue>
|
||||
<typeID>80</typeID>
|
||||
@ -91,9 +91,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>1.500000</xPos>
|
||||
<xPos>0.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>0.500000</zPos>
|
||||
<zPos>1.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>15</idBlue>
|
||||
<typeID>80</typeID>
|
||||
@ -120,9 +120,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>-0.500000</xPos>
|
||||
<xPos>1.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>1.500000</zPos>
|
||||
<zPos>-0.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>14</idBlue>
|
||||
<typeID>80</typeID>
|
||||
@ -149,9 +149,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>-0.500000</xPos>
|
||||
<xPos>-1.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>-1.500000</zPos>
|
||||
<zPos>-0.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>13</idBlue>
|
||||
<typeID>20</typeID>
|
||||
@ -178,9 +178,9 @@
|
||||
<yRot>0.0</yRot>
|
||||
<zRot>0.0</zRot>
|
||||
<manualPos>false</manualPos>
|
||||
<xPos>-2.500000</xPos>
|
||||
<xPos>-1.500000</xPos>
|
||||
<yOffset>0.0</yOffset>
|
||||
<zPos>-1.500000</zPos>
|
||||
<zPos>-2.500000</zPos>
|
||||
<idGreen>0</idGreen>
|
||||
<idBlue>12</idBlue>
|
||||
<typeID>80</typeID>
|
||||
@ -265,38 +265,59 @@
|
||||
<bColour>1.0</bColour>
|
||||
</ambientLight>
|
||||
|
||||
<fogColour>
|
||||
<rColour>0.10</rColour>
|
||||
<gColour>0.14</gColour>
|
||||
<bColour>0.14</bColour>
|
||||
<fogColourDay>
|
||||
<rColour>0.57</rColour>
|
||||
<gColour>0.80</gColour>
|
||||
<bColour>0.98</bColour>
|
||||
<alpha>1.0</alpha>
|
||||
</fogColour>
|
||||
</fogColourDay>
|
||||
|
||||
<fogColourRise>
|
||||
<rColour>0.88</rColour>
|
||||
<gColour>0.38</gColour>
|
||||
<bColour>0.38</bColour>
|
||||
<alpha>1.0</alpha>
|
||||
</fogColourRise>
|
||||
|
||||
<fogColourNight>
|
||||
<rColour>0.09</rColour>
|
||||
<gColour>0.1</gColour>
|
||||
<bColour>0.24</bColour>
|
||||
<alpha>1.0</alpha>
|
||||
</fogColourNight>
|
||||
|
||||
<directionalLight>
|
||||
<xOffset>-1.0</xOffset>
|
||||
<yOffset>1.5</yOffset>
|
||||
<yOffset>-6</yOffset>
|
||||
<zOffset>1.0</zOffset>
|
||||
<rColour>1.0</rColour>
|
||||
<gColour>1.0</gColour>
|
||||
<bColour>0.9</bColour>
|
||||
<intensity>0.2</intensity>
|
||||
<intensity>0.6</intensity>
|
||||
</directionalLight>
|
||||
|
||||
<terrain>
|
||||
<texture>seamlessTerrain.png</texture>
|
||||
<ambientFactor>0.1</ambientFactor>
|
||||
<ambientFactor>0.14</ambientFactor>
|
||||
<diffuseFactor>0.8</diffuseFactor>
|
||||
<specularFactor>0.2</specularFactor>
|
||||
<shininess>3.0</shininess>
|
||||
<shininess>1.0</shininess>
|
||||
</terrain>
|
||||
|
||||
<skydome>
|
||||
<texture>skydome.png</texture>
|
||||
<model>skydome.obj</model>
|
||||
<texture>skydomeNew.png</texture>
|
||||
<nightTexture>nightskydome.png</nightTexture>
|
||||
</skydome>
|
||||
|
||||
<waterPlane>
|
||||
<yPosition>14.5</yPosition>
|
||||
<texture>waterTexture.png</texture>
|
||||
</waterPlane>
|
||||
|
||||
<physics>
|
||||
<friction>0.9</friction>
|
||||
<strength>100.0</strength>
|
||||
<strength>300.0</strength>
|
||||
</physics>
|
||||
|
||||
<positionConstraint>
|
||||
|
@ -16,20 +16,20 @@
|
||||
\gdef\HyperFirstAtBeginDocument#1{#1}
|
||||
\providecommand\HyField@AuxAddToFields[1]{}
|
||||
\providecommand\HyField@AuxAddToCoFields[2]{}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Teaser\relax }}{1}{figure.1}}
|
||||
\newlabel{fig:Teaser}{{1}{1}{Teaser\relax }{figure.1}{}}
|
||||
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces The player reached the end of the game.\relax }}{1}{figure.1}}
|
||||
\newlabel{fig:Teaser}{{1}{1}{The player reached the end of the game.\relax }{figure.1}{}}
|
||||
\@LN@col{1}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {1}Gameplay}{1}{section.1}}
|
||||
\@LN@col{2}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Basic Layout}{1}{section.2}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Details}{1}{section.3}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Loading}{1}{subsection.3.1}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {2}Implementation}{1}{section.2}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Loading}{1}{subsection.2.1}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Triggers}{1}{subsection.2.2}}
|
||||
\bibstyle{acmsiggraph}
|
||||
\bibdata{references}
|
||||
\@LN@col{1}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Triggers}{2}{subsection.3.2}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Graphics}{2}{subsection.3.3}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Physics}{2}{subsection.3.4}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.3}Graphics}{2}{subsection.2.3}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.4}Physics}{2}{subsection.2.4}}
|
||||
\@LN@col{2}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Content Creation}{2}{subsection.3.5}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}Conclusion}{2}{section.4}}
|
||||
\@writefile{toc}{\contentsline {subsection}{\numberline {2.5}Content Creation}{2}{subsection.2.5}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {3}Conclusion}{2}{section.3}}
|
||||
\@writefile{toc}{\contentsline {section}{\numberline {4}References}{2}{section.4}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex 2015.2.27) 10 MAR 2015 15:38
|
||||
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2015/dev/Debian) (preloaded format=pdflatex 2015.2.26) 10 MAR 2015 16:14
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
@ -250,21 +250,21 @@ Package: array 2014/10/28 v2.4c Tabular extension package (FMi)
|
||||
) (./report.aux)
|
||||
\openout1 = `report.aux'.
|
||||
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 18.
|
||||
LaTeX Font Info: ... okay on input line 18.
|
||||
LaTeX Font Info: Try loading font information for OT1+ptm on input line 18.
|
||||
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 19.
|
||||
LaTeX Font Info: ... okay on input line 19.
|
||||
LaTeX Font Info: Try loading font information for OT1+ptm on input line 19.
|
||||
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd
|
||||
File: ot1ptm.fd 2001/06/04 font definitions for OT1/ptm.
|
||||
@ -310,7 +310,7 @@ File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
|
||||
)
|
||||
Package color Info: Driver file: pdftex.def on input line 137.
|
||||
)
|
||||
Package hyperref Info: Link coloring ON on input line 18.
|
||||
Package hyperref Info: Link coloring ON on input line 19.
|
||||
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
|
||||
Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section
|
||||
@ -320,89 +320,89 @@ Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO)
|
||||
)
|
||||
\c@section@level=\count112
|
||||
)
|
||||
LaTeX Info: Redefining \ref on input line 18.
|
||||
LaTeX Info: Redefining \pageref on input line 18.
|
||||
LaTeX Info: Redefining \nameref on input line 18.
|
||||
LaTeX Font Info: Try loading font information for OT1+phv on input line 25.
|
||||
LaTeX Info: Redefining \ref on input line 19.
|
||||
LaTeX Info: Redefining \pageref on input line 19.
|
||||
LaTeX Info: Redefining \nameref on input line 19.
|
||||
LaTeX Font Info: Try loading font information for OT1+phv on input line 26.
|
||||
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd
|
||||
File: ot1phv.fd 2001/06/04 scalable font definitions for OT1/phv.
|
||||
)
|
||||
LaTeX Font Info: Font shape `OT1/phv/m/n' will be
|
||||
(Font) scaled to size 13.24796pt on input line 25.
|
||||
(Font) scaled to size 13.24796pt on input line 26.
|
||||
LaTeX Font Info: Font shape `OT1/phv/bx/n' in size <14.4> not available
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 25.
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 26.
|
||||
LaTeX Font Info: Font shape `OT1/phv/b/n' will be
|
||||
(Font) scaled to size 13.24796pt on input line 25.
|
||||
(Font) scaled to size 13.24796pt on input line 26.
|
||||
LaTeX Font Info: Font shape `OT1/phv/bx/n' in size <10> not available
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 25.
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 26.
|
||||
LaTeX Font Info: Font shape `OT1/phv/b/n' will be
|
||||
(Font) scaled to size 9.19998pt on input line 25.
|
||||
(Font) scaled to size 9.19998pt on input line 26.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <7> on input line 25.
|
||||
(Font) <7> on input line 26.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <5> on input line 25.
|
||||
(Font) <5> on input line 26.
|
||||
|
||||
<images/teasersmall.png, id=4, 1606.0pt x 702.625pt>
|
||||
File: images/teasersmall.png Graphic file (type png)
|
||||
|
||||
<use images/teasersmall.png>
|
||||
Package pdftex.def Info: images/teasersmall.png used on input line 25.
|
||||
Package pdftex.def Info: images/teasersmall.png used on input line 26.
|
||||
(pdftex.def) Requested size: 505.89pt x 221.32803pt.
|
||||
|
||||
|
||||
Package caption Warning: The option `hypcap=true' will be ignored for this
|
||||
(caption) particular \caption on input line 25.
|
||||
(caption) particular \caption on input line 26.
|
||||
See the caption package documentation for explanation.
|
||||
|
||||
LaTeX Font Info: Font shape `OT1/ptm/bx/n' in size <9> not available
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 25.
|
||||
(Font) Font shape `OT1/ptm/b/n' tried instead on input line 26.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <8> on input line 25.
|
||||
(Font) <8> on input line 26.
|
||||
LaTeX Font Info: External font `cmex10' loaded for size
|
||||
(Font) <6> on input line 25.
|
||||
(Font) <6> on input line 26.
|
||||
LaTeX Font Info: Font shape `OT1/phv/m/n' will be
|
||||
(Font) scaled to size 11.03998pt on input line 27.
|
||||
(Font) scaled to size 11.03998pt on input line 28.
|
||||
LaTeX Font Info: Font shape `OT1/phv/bx/n' in size <12> not available
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 27.
|
||||
(Font) Font shape `OT1/phv/b/n' tried instead on input line 28.
|
||||
LaTeX Font Info: Font shape `OT1/phv/b/n' will be
|
||||
(Font) scaled to size 11.03998pt on input line 27.
|
||||
(Font) scaled to size 11.03998pt on input line 28.
|
||||
LaTeX Font Info: Font shape `OT1/phv/m/n' will be
|
||||
(Font) scaled to size 9.19998pt on input line 42.
|
||||
|
||||
Underfull \vbox (badness 2173) has occurred while \output is active []
|
||||
|
||||
LaTeX Font Info: Font shape `OT1/phv/m/n' will be
|
||||
(Font) scaled to size 9.19998pt on input line 46.
|
||||
[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}
|
||||
|
||||
|
||||
<./images/teasersmall.png>]
|
||||
No file report.bbl.
|
||||
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 132.
|
||||
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 134.
|
||||
[2]
|
||||
Package atveryend Info: Empty hook `AfterLastShipout' on input line 132.
|
||||
Package atveryend Info: Empty hook `AfterLastShipout' on input line 134.
|
||||
(./report.aux)
|
||||
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 132.
|
||||
Package atveryend Info: Empty hook `AtEndAfterFileList' on input line 132.
|
||||
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 132.
|
||||
Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 134.
|
||||
Package atveryend Info: Empty hook `AtEndAfterFileList' on input line 134.
|
||||
Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 134.
|
||||
)
|
||||
Here is how much of TeX's memory you used:
|
||||
6608 strings out of 493105
|
||||
101685 string characters out of 6137072
|
||||
189260 words of memory out of 5000000
|
||||
9999 multiletter control sequences out of 15000+600000
|
||||
6606 strings out of 493105
|
||||
101652 string characters out of 6137072
|
||||
189198 words of memory out of 5000000
|
||||
9997 multiletter control sequences out of 15000+600000
|
||||
22273 words of font info for 43 fonts, out of 8000000 for 9000
|
||||
1141 hyphenation exceptions out of 8191
|
||||
43i,13n,40p,636b,363s stack positions out of 5000i,500n,10000p,200000b,80000s
|
||||
43i,13n,40p,657b,363s stack positions out of 5000i,500n,10000p,200000b,80000s
|
||||
{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/share/texliv
|
||||
e/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy6.pfb></usr/share/texlive/texmf
|
||||
-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/share/texlive/texmf-dist/f
|
||||
onts/type1/urw/helvetic/uhvb8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/u
|
||||
rw/times/utmb8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a
|
||||
.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
|
||||
Output written on report.pdf (2 pages, 857427 bytes).
|
||||
Output written on report.pdf (2 pages, 860033 bytes).
|
||||
PDF statistics:
|
||||
59 PDF objects out of 1000 (max. 8388607)
|
||||
46 compressed objects within 1 object stream
|
||||
63 PDF objects out of 1000 (max. 8388607)
|
||||
50 compressed objects within 1 object stream
|
||||
14 named destinations out of 1000 (max. 500000)
|
||||
6 words of extra memory for PDF output out of 10000 (max. 10000000)
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
@ -14,19 +14,20 @@ University, Germany)}
|
||||
\keywords{game programming, pinball game}
|
||||
|
||||
\usepackage{tabularx}
|
||||
\usepackage{hyperref}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\teaser{
|
||||
\includegraphics[width=\linewidth]{images/teasersmall.png}
|
||||
\caption{\label{fig:Teaser} Teaser}
|
||||
\caption{\label{fig:Teaser} The player reached the end of the game.}
|
||||
}
|
||||
|
||||
\maketitle
|
||||
|
||||
\begin{abstract}
|
||||
|
||||
Marble Racing games are a sub-genre of games where the player controls a marble to either run races, solve puzzles or complete similar tasks. In Saxum the player must travel through an open level completing some basic switch tasks and a simple puzzle to help the sun rise again.
|
||||
Marble Racing games are a sub-genre of games where the player controls a marble to either run races, solve puzzles or complete similar tasks. In \textit{Saxum} the player must travel through an open level completing some basic switch tasks and a simple puzzle to help the sun rise again.
|
||||
|
||||
\end{abstract}
|
||||
|
||||
@ -34,27 +35,22 @@ Marble Racing games are a sub-genre of games where the player controls a marble
|
||||
Common Marble Racing Games usually strive for action- and skill-based gameplay with many obstacles and a fast pace. Our game takes a different approach and explores the possibility of a more puzzle-based concept with exploration elements: The player is located in an initially dark
|
||||
area where only a few torches light the path ahead. Only if he manages to master the obstacles on his way (like impassable water), he can reach the end of the stage and let the sun rise again as shown in Figure 1.
|
||||
|
||||
Level design is certainly not completely open but leaves room for a bit of exploration. The in comparison rather slow marble speed helps to create a for the most part relaxing gaming experience which gets further emphasized by generous checkpoint distribution and the resignation of flashy effects. Puzzles revolve around moving blocks onto switches and pushing switches in the correct order.
|
||||
The level design is certainly not completely open but leaves room for a bit of exploration. The in comparison rather slow marble speed helps to create a for the most part relaxing gaming experience which gets further emphasized by generous checkpoint distribution and the resignation of flashy effects. The puzzles revolve around moving blocks onto switches and pushing switches in the correct order.
|
||||
|
||||
|
||||
\section{Basic Layout}
|
||||
|
||||
Our game is designed around the main level class. In it we load all the data from our XML files as needed. From here we also have access to the other two main classes, the physics and the graphics classes. Additionally we have the list of all our objects here.
|
||||
|
||||
\section{Details}
|
||||
\section{Implementation}
|
||||
|
||||
\subsection{Loading}
|
||||
|
||||
Our game plays mainly on a height-map. We load the height-map from a greyscale png and pass the height-data to a framebuffer, so ACGL can render it. We also pass the height-data to \textit{Bullet Physics}, to create a colision shape.
|
||||
Our game plays mainly on a heightmap. We load the height-map from a greyscale PNG and pass the height data to a framebuffer, so ACGL can render it. We also pass the height data to \textit{Bullet Physics}, to create a collision shape.
|
||||
|
||||
On the height-map we place objects that we load from two XML files. The compositions file defines some properties for classes of objects, like the names of the obj file and the texture file, and parameters for lighting and for the physics. It also defines compositions that are made up of multiple objects that can be scaled, rotated and translated individually. One compositions file could get used for multiple levels. The level XML file defines which compositions are placed where. This part of the file gets generated by our converter. In addition to that, the compositions can also be scaled and rotated manually here.
|
||||
On the height-map we place objects that we load from two XML files. The compositions file defines some properties for classes of objects, like the names of the OBJ file and the texture file, and parameters for lighting and for the physics. It also defines compositions that are made up of multiple objects that can be scaled, rotated and translated individually. One compositions file could get used for multiple levels. The level XML file defines which compositions are placed where. This part of the file gets generated by our converter. In addition to that, the compositions can also be scaled and rotated manually here.
|
||||
|
||||
The converter is a separate executable that takes the path to a PNG file as input. In the PNG file compositions are placed as pixels.
|
||||
We decided to let the red value of the pixel identify which kind of composition it is. The green and blue values are written by the converter and used to identify single compositions. This way manual changes in the generated level XML can be kept when the converter is run again.
|
||||
We decided to let the red value of the pixel identify which kind of composition it represents. The green and blue values are written by the converter and used to identify single compositions. This way manual changes in the generated level XML can be kept when the converter is run again.
|
||||
|
||||
\subsection{Triggers}
|
||||
|
||||
Because a lot of the gameplay in Saxum is focused on solving challenges and activating events, we decided to integrate the scripting language Lua to make our triggers customizable. In the level XML we can add triggers to objects. We define a region in global space and when the object enters or leaves the region a Lua script is called. The script can then activate different events like opening a door or letting the sun rise at the end of the level.
|
||||
Because a lot of the gameplay in \textit{Saxum} is focused on solving challenges and activating events, we decided to integrate the scripting language Lua to make our triggers customizable. In the level XML we can add triggers to objects. We define a region in global space and when the object enters or leaves the region a Lua script is called. The script can then activate different events like opening a door or letting the sun rise at the end of the level.
|
||||
|
||||
\subsection{Graphics}
|
||||
|
||||
@ -71,17 +67,16 @@ resolutions(the closer to the camera, the higher the resolution).
|
||||
Later we expanded on this by implementing shadow mapping for point lights using cube map textures. It took quite some time to implement them correctly due to
|
||||
discrepancies of how OpenGL defined the up vector and how we thought it should be.
|
||||
|
||||
We implemented a basic day/night cycle using one sky texture for the day and one for the night which get blended together depending of the height
|
||||
of the sun.
|
||||
We implemented a basic day/night cycle using one sky texture for the day and one for the night which get blended together depending on the height of the sun.
|
||||
|
||||
The sky textures were mapped on a skydome and the sun was procedually painted on top. This allowed the sun to easily be moved during runtime.
|
||||
The sky textures are mapped to a skydome and the sun is procedurally painted on top. This allowed the sun to easily be moved during runtime.
|
||||
|
||||
To hide the popping of object and the terrain into the view frustum we implemented a basic fog.
|
||||
We later changed the color of the for depeding of the sun height to get a more realistic sun rise.
|
||||
To hide the popping of objects and the terrain into the view frustum we implemented a basic fog.
|
||||
We later changed the color of the fog depending on the sun height to get a more realistic sun rise.
|
||||
|
||||
The last feature we implemented was a basic flame rendering.
|
||||
To do that we used a geometry shader to generate a basic flame shape during runtime.
|
||||
The circular flame shape is generated using a cosine and a exponential function.
|
||||
The circular flame shape is generated using a cosine and an exponential function.
|
||||
|
||||
To get a simple illusion of heat we blurred the flames:
|
||||
We do this in several render passes:
|
||||
@ -91,25 +86,32 @@ We then blur the parts selected by the stencil shader.
|
||||
|
||||
\subsection{Physics}
|
||||
|
||||
The physics is based on Bullet Physics, with a simple callback function used to relay the data to the graphics pipeline. We decided to use a btvhTerrainShape for the terrain. This is much more effective than using a triangle mesh. Additionally we have spheres, boxes, and a few other basic primitives. Finally we implemented btvhTriangleMesh shapes and concave triangle meshes, which are more strenuous for the system, but allow for moveable triangle meshes.
|
||||
The physics is based on \textit{Bullet Physics}, with a simple callback function used to relay the data to the graphics pipeline. We decided to use a btvhTerrainShape for the terrain. This is much more effective than using a triangle mesh. Additionally we have spheres, boxes, and a few other basic primitives. Finally we implemented btvhTriangleMesh shapes and concave triangle meshes, which are more strenuous for the system, but allow for moveable triangle meshes.
|
||||
|
||||
Unfortunately Bullet Physics proved unable to handle many forms of constraints that we required. For this we created two instances of spring constraints. The first is a spring constraint which creates a force attempting to keep two rigid bodies a set distance apart. The second was a derivation of the first, generating a force in an attempt to confine the rigid body to a certain position. This constraint is what we used to create switches that could be embedded within the terrain by filtering out the collision between the two bodies.
|
||||
We also used a similar constraint to create a physics based camera. The camera attempts to follow the player at an angle specified by the player. Finally we used the constraints to get the player to float in the air. To do this a constraint is added via the LUA script, allowing the player get an improved view of the sunrise.
|
||||
Unfortunately \textit{Bullet Physics} proved unable to handle many forms of constraints that we required. For this we created two instances of spring constraints. The first is a spring constraint which creates a force attempting to keep two rigid bodies a set distance apart. The second was a derivation of the first, generating a force in an attempt to confine the rigid body to a certain position. This constraint is what we used to create switches that could be embedded within the terrain by filtering out the collision between the two bodies.
|
||||
We also used a similar constraint to create a physics based camera. The camera attempts to follow the player at an angle specified by the player. Finally we used the constraints to get the player to float in the air. To do this a constraint is added via the Lua script, allowing the player get an improved view of the sunrise.
|
||||
|
||||
Additionally the respawn animation was created using the physics engine. It lets the ball continue to rotate, while changing certain properties of it, especially how it will move and that it will ignore the collision with all other objects. After it sinks a certain distance it will reappear in a similar fashion before its normal physic state is restored.
|
||||
|
||||
The physics came with many challenges, partially stemming from our integration into a new field, but also partially due to the nature of Bullet Physics itself. If bullet does not recieve enough updates the simulation becomes jagged and unrealistic. To solve this it is suggested to recall the world multiple times per frame to allow a more accurate simulation. Unfortunately, especially with the introduction of the physics based camera, problems arose. To solve this we not only recalled the complete update method within the physics, but also recall the complete update method in the level to stabilize the experience.
|
||||
The physics came with many challenges, partially stemming from our integration into a new field, but also partially due to the nature of \textit{Bullet Physics} itself. If bullet does not recieve enough updates the simulation becomes jagged and unrealistic. To solve this it is suggested to recall the world multiple times per frame to allow a more accurate simulation. Unfortunately, especially with the introduction of the physics based camera, problems arose. To solve this we not only recalled the complete update method within the physics, but also recall the complete update method in the level to stabilize the experience.
|
||||
|
||||
\subsection{Content Creation}
|
||||
Saxum contains many custom models that we created with the tools that the program Blender provides as well as several textures from the website cgtextures.com. We edited these textures, so they can fit our purposes: Texture editing work included smoothing for better UV-Mapping, removing seams etc. All editing, including the creation of the PNGs that are used for heightmap generation and object placement, as well as our completely custom textures were done with the GNU Image Manipulation Program.
|
||||
\textit{Saxum} contains many custom models that we created with the tools that the program Blender provides as well as several textures from the website cgtextures.com. We edited these textures, so they can fit our purposes: Texture editing work included smoothing for better UV-Mapping, removing seams etc. All editing, including the creation of the PNGs that are used for heightmap generation and object placement, as well as our completely custom textures were done with the GNU Image Manipulation Program.
|
||||
\section{Conclusion}
|
||||
|
||||
Our group had no prior experience with such large projects. Though our lack of previous experience hampered our progress, we have managed to amass a great deal of experience in game design, project management and teamwork, as well as knowledge in the underlying framework of games.
|
||||
|
||||
Our game is an interesting twist on an old concept, and our play tests have shown that we manage to achieve a notable awe factor for those who complete it.
|
||||
|
||||
Through the experience we have gained we are confident that all our future projects, especially those in the discipline of game programming will benefit greatly.
|
||||
Through the experience we have gained we are confident that all our future projects, especially those in the discipline of game programming will benefit.
|
||||
|
||||
\section{References}
|
||||
|
||||
\href{http://cgTextures.com}{cgTextures.com}\\
|
||||
\href{http://blender.org}{Blender}\\
|
||||
\href{http://Gimp.org}{Gimp}\\
|
||||
\href{http://bulletphysics.org}{Bullet Physics}\\
|
||||
ACGL - Aachen Computer Graphics Library
|
||||
|
||||
|
||||
%\begin{figure}[t]
|
||||
|
Loading…
Reference in New Issue
Block a user