Skip to content

Commit 75525d3

Browse files
author
christoph murauer
committed
add files
1 parent 7db9bea commit 75525d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+20081
-0
lines changed

.classpath

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path="src"/>
4+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
5+
<classpathentry kind="output" path="bin"/>
6+
</classpath>

.project

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>IntroGraphics</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>tern.eclipse.ide.core.ternBuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
<buildCommand>
14+
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
15+
<arguments>
16+
</arguments>
17+
</buildCommand>
18+
</buildSpec>
19+
<natures>
20+
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
21+
</natures>
22+
</projectDescription>

.settings/.jsdtscope

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<classpath>
3+
<classpathentry kind="src" path=""/>
4+
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
5+
<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
6+
<classpathentry kind="output" path=""/>
7+
</classpath>

.settings/org.eclipse.jdt.core.prefs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
eclipse.preferences.version=1
2+
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
3+
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
4+
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
5+
org.eclipse.jdt.core.compiler.compliance=1.8
6+
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
7+
org.eclipse.jdt.core.compiler.debug.localVariable=generate
8+
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
9+
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
10+
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
11+
org.eclipse.jdt.core.compiler.source=1.8
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Window

.tern-project

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"ide":{},"libs":["ecma5","browser"],"plugins":{"guess-types":{},"angular":{}}}

Manual.html

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
6+
<title>Tetris - 2</title>
7+
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
8+
<link rel="icon" href="img/favicon.ico" type="image/x-icon">
9+
<link rel="stylesheet" href="css/foundation.css" />
10+
<!-- Foundation -->
11+
<script src="js/vendor/modernizr.js"></script>
12+
13+
</head>
14+
15+
16+
17+
18+
<!-- Bei Seitenaufruf wird sofort die Funktion WebGL ausgeführt -->
19+
<body>
20+
21+
<div class="row">
22+
<div class="large-12 columns">
23+
<h1>TETRIS - lab2</h1>
24+
<h3>VU Introduction to Computer Graphics / Christoph Murauer - 1127084</h3>
25+
<hr>
26+
</div>
27+
</div>
28+
29+
<div class="row">
30+
31+
<div class="row">
32+
<div class="large-12 columns">
33+
<a href="Start.html" class="button round">Back</a>
34+
</div>
35+
</div>
36+
37+
<div class="panel">
38+
<h4>News</h4>
39+
<p><b>22. November:</b> Unfortunately, there are currently only 2 elements and the Collision Detection works only in the random rotation perfectly. Work in progress.</p>
40+
</div>
41+
42+
<div class="panel">
43+
<h4>Controls</h4>
44+
<ul>
45+
<h5>------------Movement------------</h5>
46+
<li>'\/' or '2'..........move in -Z direction</li>
47+
<li>'/\' or '8'..........move in Z direction</li>
48+
<li>'<-' or '4'.........move in -X direction (left)</li>
49+
<li>'->' or '6'.........move in X direction (right)</li>
50+
<li>'Space'..........release the object</li>
51+
<li>'W'.................stop/start the gravity</li>
52+
<h5>------------Rotation-------------</h5>
53+
<li>'x'/'X'..............rotate counter-/clockwise around the X-axis</li>
54+
<li>'y'/'Y'..............rotate counter-/clockwise around the Y-axis</li>
55+
<li>'z'/'Z'..............rotate counter-/clockwise around the Z-axis</li>
56+
<h5>---------------View---------------</h5>
57+
<li>'Mouse'.........change cameraposition - left: translation / right: rotation
58+
<li>'P'.................switch between orthographic and perspective view</li>
59+
<li>'G'.................toggle wireframe.</li>
60+
<li>'R'.................hide the whole wireframe</li>
61+
<li>'Q'.................restore the View/Lock the mouse</li>
62+
<li>'S'.................zoom in/out</li>
63+
<h5>--------------Debug--------------</h5>
64+
<li>'I'...................print all informations about the current Object in the console(F12)</li>
65+
<li>'U'.................print the globalGrid in the console(F12)</li>
66+
</ul>
67+
</div>
68+
69+
70+
<div class="panel">
71+
<h4>Readme</h4>
72+
<h5>ARBEITSABLAUF</h5>
73+
<p>Als Lernunterlagen für WebGL habe ich vorwiegend folgende Quellen verwendet:
74+
<b>-Buch:</b> WebGL Programming Guide / Kouichi Matsuda, Rodger Lea
75+
<b>-Online:</b> http://learningwebgl.com/blog/?page_id=1217; https://developer.mozilla.org/de/docs/Web/JavaScript; http://webglfundamentals.org/webgl/lessons/webgl-fundamentals.html;
76+
Weiters verwende ich das <b>CSS-Framework 'Foundation'</b> (http://foundation.zurb.com/) um die Seite etwas ansehnlicher zu gestalten.
77+
Als Programmiersprachen werden Javascript, HTML und GLSL ES genutzt.</p>
78+
79+
</br>
80+
<h5>PROGRAMMSTRUKTUR</h5>
81+
82+
<h7>SPIELFELD</h7></br>
83+
<p><li><b>globalGrid:</b> Hierbei handelt es sich um die Matrix-repräsentation des Spielfelds im Hintergrund. Es wird verwendet um die Kollisionsabfrage zu handeln. Wird erstellt in <b>grid.js/resetGrid()</b>.
84+
<li><b>drawGrid:</b> Dies ist die gezeichnete, visuelle Variante des Grids. Wird erstellt in <b>grid.js/createGrid()</b> sowie createToggleGrid() und gezeichnet in tetris.js/drawScene() </li></p>
85+
86+
<h7>TETROMINOS</h7></br>
87+
<p>Die Form, Farbe und der Objektgrid jedes Tetromino wird übersichtlichkeitshalber in einer eigenen Javascript Datei definiert (O.js, S.js,usw.). </br>
88+
Zusätzlich wird in jeder Tetromino-Datei ein Objekt erstellt, mittels der Funktion <b>tetrominoConstructor()</b> (Tetris.js) und anschließend in das Array
89+
tetrominos[] gespeichert. Aufgerufen werden die Dateien einmalig in initBuffer() (Tetris.js). </br> Jedes Objekt hat seinen eigenen Namen, Farbwerte, blocks, sowie
90+
individuelle positionen im golbalGrid sowie im drawGrid.
91+
<b>Gelandete Elemente</b> werden im Array landedElems[] gespeichert und in drawScene() fortlaufend gezeichnet.</p>
92+
93+
<h7>STEUERUNG</h7></br>
94+
<p>Die Steuerung wird in <b>keyHandler.js</b>, mittels event-handling realisiert.</p></li>
95+
96+
<h7>KOLLISIONSABFRAGE</h7></br>
97+
<p>In <b>collisionDetection.js</b> wird im globalGrid auf Kollisionen kontrolliert. <b>checkSpawnPosition()</b> prüft die Startposition und liefert false zurück, wenn sie besetzt ist, was zum gameOver() führt. </br>
98+
<b>checkGrid()</b> hingegen kontrolliert bei jeder Bewegung den globalGrid.
99+
Ist ein Objekt gelandet, so wird die Funktion <b>drawInGrid()</b> aufgerufen, welche den ObjectGrid des Tetrominos in den globalGrid mit '1' speichert. </p>
100+
101+
<h7>TETRIS.JS</h7></br>
102+
<p>Hier sind alle essentiellen Funktionen implementiert, die für das aktuelle lauffähige Tetris Programm notwendig sind.
103+
<li><b>tetrominoConstructor(name, items,posSize,colSize, blocks, colors, vertexIndices,
104+
objectGrid0, objectGrid90, objectGrid180, objectGrid270, startPointGrid, endPointGrid, topleft):</b> Erzeuge ein neues Tetromino Objekt. </li>
105+
<li><b>spawn(elem):</b> Überwacht, ob ein Element gelandet ist oder nicht. Nicht Gelandet: Zeichne das aktuelle Objekt; Gelandet: Kopiere das aktuelle Element und speichere in landedElems[]</li>
106+
<li><b>gravity():</b> Bewege das Objekt in konstanter Geschwindigkeit in -Y Richtung. Speichere gleichzeitig die aktuelle Y-Position des Objekts.</li>
107+
<li><b>transformationAnimation():</b> Animiere Roationen und Bewegungen.</li>
108+
<li><b>webGLStart():</b> Initialisiert WebGL, den Vertex- und den Fragmentshader, sowie die Buffer fuer die Eckpunkte und Farbwerte, behandelt Tastatureingaben und wiederholt das Programm</li>
109+
<li><b>initGL(canvas):</b> Initialisiere WebGL (Web Graphic Libary) und waehlt den Rendering Context WebGL fuer das Canvas Element aus.</li>
110+
<li><b>getShader(gl, id):</b> Ruft den korrekten Shadertyp auf und liefert einen Grafikkarten kompatiblen Shader</li>
111+
<li><b>initShaders():</b> Fuegt den Vertexshader (zustaendig fuer Berechnung der Eckpunkte des 3DModels) und den Fragmentshader (zustaendig fuer die Oberflaeche des Modells), zu einem WebGL
112+
Programm Objekt (ausfuerbar direkt auf der GraKa) zusammen. Jedes Programm besteht aus jeweils einem Vertex- sowie Fragment- oder Pixelshader.</li>
113+
<li><b>setMatrixUniforms():</b> Wandle die Matrizen von Javascript auf WebGL (Grafikkarten-seitig) um, damit die Sichtbarkeit fuer die Shaders garantiert ist.</li>
114+
<li><b>degToRad(degrees):</b> Umrechnung vom Radiant- zum Grad Winkelmaß</li>
115+
<li><b>mvPushMatrix():</b> Speichere die globale mvMatrix (ModelView-) auf einen Stack.</li>
116+
<li><b>mvPopMatrix():</b> Lade die letzte Matrix vom Stack.</li>
117+
<li><b>initBuffers():</b> Definiere die Objekte mithilfer ihrer Eckpunkte. Fuelle Grafikkarten Buffer mit informationen uber die gewuenschten Objekte.</li>
118+
<li><b>drawScene():</b> Zeichnet die Szene inklusive den Objekten und den drawGrid.</li>
119+
<li><b>animate():</b> Fuehrt eine Animation aus, wenn der Zielwinkel noch nicht erreicht wurde.</li>
120+
<li><b>tick():</b> Aktualisiert das Bild um eine Animation zu erschaffen.</li></p>
121+
122+
<h7>START.HTML</h7></br>
123+
<p>Im Head werden alle Scripts aufgerufen, wobei sich der Code der beiden Shaderscripts (Vertex- und Fragmentshader) direkt in der HTML befindet.
124+
Außerdem ist hier natürlich der gesamte HTML Code zum Seitenaufbau enthalten und ruft beim Seitenaufruf sofort die Funktion <b>webGLStart()</b> (in Tetris.js) auf.</p>
125+
126+
<h7>WEBGL-UTILS.JS</h7></br>
127+
<p>Liefert das entsprechende unabhängige Refresh-Plugin für den Browser, damit sich dieser Grafik-Änderungen sofort wahrnimmt und darstellt.</p>
128+
129+
<h7>GLMATRIX-0.9.5.MIN.JS</h7></br>
130+
<p>Bibliothek die alle mathematischen Matrix operationen beinhaltet.</p>
131+
132+
133+
</div>
134+
135+
136+
<div class="row">
137+
<div class="large-12 columns">
138+
<a href="Start.html" class="button round">Back</a>
139+
</div>
140+
</div>
141+
142+
</div>
143+
144+
</body>
145+
</html>
146+
147+
148+
149+
150+
151+

Start.html

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
<!DOCTYPE html>
2+
<html>
3+
4+
<head>
5+
6+
<title>Tetris - lab2</title>
7+
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
8+
<link rel="icon" href="img/favicon.ico" type="image/x-icon">
9+
<link rel="stylesheet" href="css/foundation.css" />
10+
<style type="text/css" media="screen">
11+
canvas, img { display:block; margin:1em auto; }
12+
canvas { background:url(img/snow.jpg) }
13+
</style>
14+
<body oncontextmenu="return false;"> <!-- Deactivate the right-click-context menu -->
15+
16+
<!-- Foundation -->
17+
<script src="js/vendor/modernizr.js"></script>
18+
19+
<!-- WebGL -->
20+
<script type="text/javascript" src="src/glMatrix-0.9.5.min.js"></script>
21+
<script type="text/javascript" src="src/webgl-utils.js"></script>
22+
23+
<!-- Tetris -->
24+
<script type="text/javascript" src="src/tetris.js"></script>
25+
<script type="text/javascript" src="src/O.js"></script>
26+
<script type="text/javascript" src="src/T.js"></script>
27+
<script type="text/javascript" src="src/I.js"></script>
28+
<script type="text/javascript" src="src/L.js"></script>
29+
<script type="text/javascript" src="src/S.js"></script>
30+
<script type="text/javascript" src="src/grid.js"></script>
31+
<script type="text/javascript" src="src/keyHandler.js"></script>
32+
<script type="text/javascript" src="src/collisionDetection.js"></script>
33+
34+
<!-- Matrix Operations -->
35+
<script type="text/javascript" src="src/matrixOperations.js"></script>
36+
37+
<!-- Fragmentshader - oder Pixelshader - gibt die Farbe aller Pixel zwischen den Eckpunkten zurueck
38+
(mithilfe der variablen FragColor)-->
39+
<script id="shader-fs" type="x-shader/x-fragment">
40+
precision mediump float;
41+
42+
varying vec4 vColor;
43+
varying vec3 vLightWeighting;
44+
45+
void main(void) {
46+
gl_FragColor = vColor;
47+
}
48+
</script>
49+
50+
51+
52+
<!--Interpoliert
53+
gl_Position: Finale Position des Eckpunktes = Projektionsmatrix * Model-Viewmatrix * eckpunkte
54+
Attribute: sind Werte die auf einzelne Knoten angewendet werden (nur Vertex; z.b. jeder Eckpunkt eigene Farbe)
55+
Uniform: Wird an beide Shader (vertex,Fragment) gesendet und ist für alle Vertex gleich (z.b. Lichtposition)
56+
Varyings: Wird im Vertex Shader deklariert und soll auch mit dem Fragmentshader geteilt werden koennen (lichtberechnungen) -->
57+
<script id="shader-vs" type="x-shader/x-vertex">
58+
attribute vec3 aVertexPosition;
59+
attribute vec4 aVertexColor;
60+
attribute vec3 aVertexNormal;
61+
62+
uniform mat4 uMVMatrix;
63+
uniform mat4 uPMatrix;
64+
uniform mat3 uNMatrix;
65+
66+
67+
uniform vec3 uAmbientColor;
68+
uniform vec3 uLightingDirection;
69+
uniform vec3 uDirectionalColor;
70+
uniform bool uUseLighting;
71+
72+
varying vec4 vColor;
73+
varying vec3 vLightWeighting;
74+
75+
void main(void) {
76+
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0) ;
77+
vColor = aVertexColor;
78+
79+
if (!uUseLighting) {
80+
vLightWeighting = vec3(1.0, 1.0, 1.0);
81+
} else {
82+
vec3 transformedNormal = uNMatrix * aVertexNormal;
83+
float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);
84+
vLightWeighting = uAmbientColor + uDirectionalColor * directionalLightWeighting;
85+
}
86+
}
87+
</script>
88+
89+
90+
</head>
91+
92+
93+
94+
95+
<!-- Bei Seitenaufruf wird sofort die Funktion WebGL ausgeführt -->
96+
<body onload="webGLStart();">
97+
98+
99+
<div class="row">
100+
<div class="large-12 medium-12 columns">
101+
<h1>TETRIS - lab2</h1>
102+
<h3>VU Introduction to Computer Graphics / Christoph Murauer - 1127084</h3>
103+
<hr>
104+
</div>
105+
106+
107+
108+
<div class="large-4 medium-4 small-4 columns">
109+
<div class="callout panel">
110+
<h5>Game</h5>
111+
<a id=start onclick="turnGravOn()" class="button round tiny success">Start</a>
112+
<a onclick="restart()" class="button round tiny alert">Restart</a>
113+
<a href="Manual.html" class="button round tiny info">Manual</a>
114+
</div>
115+
</div>
116+
117+
118+
<div class="large-4 medium-4 small-4 columns">
119+
<div class="callout panel">
120+
<h5>Grid</h5>
121+
<a onclick="gridBigger()" class="button round tiny info ">Bigger</a>
122+
<a onclick="gridSmaller()" class="button round tiny info">Smaller</a>
123+
<a onclick="defaultGrid()" class="button round tiny info">Resize</a>
124+
<a onclick="set2dView()" class="button round tiny info">2D/3D</a>
125+
<a onclick="reset()" class="button round tiny info">Reset</a>
126+
</div>
127+
</div>
128+
129+
<div class="large-4 medium-4 small-4 columns">
130+
<div class="callout panel">
131+
<h5>Score</h5>
132+
<label for="score"></label>
133+
<input id="score" name="score" disabled>
134+
</div>
135+
</div>
136+
137+
<div class="large-12 medium-12 columns">
138+
<input id="messages" name="messages" disabled>
139+
</div>
140+
141+
142+
143+
<div class="large-12 medium-12 columns">
144+
<div class="callout panel">
145+
<canvas id="canvas" style="border: none;" width="500" height="500">
146+
Please use a browser which is supporting "canvas"
147+
</canvas>
148+
</div>
149+
</div>
150+
151+
152+
<!-- <div class="large-12 medium-12 columns">
153+
<a onclick="setWallpaper()" id="spring" class="button round tiny info">Spring</a>
154+
<a onclick="setWallpaper()" id="sommer" class="button round tiny info">Sommer</a>
155+
<a onclick="setWallpaper()" id="autumn" class="button round tiny info">Autumn</a>
156+
<a onclick="setWallpaper()" id="winter" class="button round tiny info">Winter</a>
157+
</div>
158+
-->
159+
</div>
160+
</body>
161+
</html>
162+
163+
164+
165+
166+
167+

0 commit comments

Comments
 (0)