-
Notifications
You must be signed in to change notification settings - Fork 0
/
tunnel-racer.html
316 lines (279 loc) · 14.5 KB
/
tunnel-racer.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
<!DOCTYPE html>
<html lang="en"
>
<head>
<title>Tunnel Racer (DX and 3DSMax) - Sean Azlin</title>
<!-- Using the latest rendering mode for IE -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="/tunnel-racer.html">
<meta name="author" content="Sean Azlin" />
<meta name="keywords" content="Game Development" />
<meta name="description" content="Building a 3D game with DirectX and 3DSMax" />
<meta property="og:site_name" content="Sean Azlin" />
<meta property="og:type" content="article"/>
<meta property="og:title" content="Tunnel Racer (DX and 3DSMax)"/>
<meta property="og:url" content="/tunnel-racer.html"/>
<meta property="og:description" content="Building a 3D game with DirectX and 3DSMax"/>
<meta property="article:published_time" content="2007-04-02" />
<meta property="article:section" content="RIT" />
<meta property="article:tag" content="Game Development" />
<meta property="article:author" content="Sean Azlin" />
<meta property="og:image"
content="/../images/sean1.jpg"/>
<!-- Bootstrap -->
<link rel="stylesheet" href="/theme/css/bootstrap.spacelab.min.css" type="text/css"/>
<link href="/theme/css/font-awesome.min.css" rel="stylesheet">
<link href="/theme/css/pygments/native.css" rel="stylesheet">
<link rel="stylesheet" href="/theme/css/style.css" type="text/css"/>
<link href="/css/custom.css" rel="stylesheet">
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand">
Sean Azlin </a>
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li >
<a href="/category/microsoft.html">Microsoft</a>
</li>
<li >
<a href="/category/programming.html">Programming</a>
</li>
<li class="active">
<a href="/category/rit.html">Rit</a>
</li>
<li >
<a href="/category/side-projects.html">Side projects</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="/archives.html"><i class="fa fa-th-list"></i><span class="icon-label">Archives</span></a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div>
</div> <!-- /.navbar -->
<!-- Banner -->
<!-- End Banner -->
<div class="container">
<div class="row">
<div class="col-sm-9">
<section id="content">
<article>
<header class="page-header">
<h1>
<a href="/tunnel-racer.html"
rel="bookmark"
title="Permalink to Tunnel Racer (DX and 3DSMax)">
Tunnel Racer (DX and 3DSMax)
</a>
</h1>
</header>
<div class="entry-content">
<div class="panel">
<div class="panel-body">
<footer class="post-info">
<span class="label label-default">Date</span>
<span class="published">
<i class="fa fa-calendar"></i><time datetime="2007-04-02T01:34:00-07:00"> Mon 02 April 2007</time>
</span>
<span class="label label-default">Tags</span>
<a href="/tag/game-development.html">Game Development</a>
</footer><!-- /.post-info --> </div>
</div>
<p>As a follow up to the simple tri-strip and terrain project, we spent the
rest of this awesome class at RIT creating a 3D game of our
choice. Obviously, this was a blast. I ended up taking the reigns on the
project since I had been working on game engines earlier that academic
year.The idea was to create a 3D Tunnel Racing game similar to an old
but still awesome game called <a href="http://en.wikipedia.org/wiki/Ballistics_(video_game)">Ballistics</a>.</p>
<p><img alt="Tunnel Game Screen" src="../images/tunnel_game1.jpg" /></p>
<p>Some cool things we did with our game:
<em> We created our levels as sets of Direct3D meshes manually in 3DSMax. One mesh was a visual tube that we rendered for the user. The second mesh was a clone of the visual tube but it was invisible and had a smaller tube radius. The radiai of the second tube mesh were then used at load time to generate the invisible track that a racer would drive on. The third mesh was a bunch of buildings and landscapes for our "outdoor" parts of the game. Basically, we turned 3DSMax into our level builder without any retooling. Awesome.
</em> We skewed the POV angle of the camera as the racer sped up, just like in Ballistics.
<em> We implemented simple collision detection and created a "defuse the bombs by running into them" mode.
</em> We used sound well, kind of got multitexturing to work (see below), mipmapping, bump mapping, and high resolution textures.
<em> We got to play with some advanced math for what we called our "tube physics"
</em> We actually had a semi-fun game after only 2 months of class work!</p>
<p>Some challenges we faced and lessons we learned:</p>
<ul>
<li>The D3D .mesh format we used was fine for basic geometry, but it was useless for exporting material information at all. Exporting multiple sets of UV coordinates was impossible, which limited our options for multitexturing.</li>
<li>It was really hard to get 3DSMax to give us consistent output for our invisible track, which led to some buggy parts in the level. The racer would start moving really slowly at some points in a track. This was due to 3DSMax randomly increasing the # of radiai in the invisible track, which threw off our simple level logic at load time.</li>
<li>Game development is time consuming and requires commitment. Flaky students who want to get an easy A should go take underwater basket weaving instead. Or at least stay out of my project groups.</li>
<li>Getting textures to look right takes a long time.</li>
<li>Materials are very important in general, and they are impossible to get right without serious forethought into how they are going to be created and loaded for rendering.</li>
</ul>
<p>Unfortunately, I was busy starting another big game project during the presentation of the final game and, amidst the chaos, I forgot to email myself the game's source or even some decent screenshots. Oy! It's no big deal - the project was a big hack-job anyway.</p>
</div>
<!-- /.entry-content -->
<hr/>
<section class="comments" id="comments">
<h2>Comments</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'seanazlin'; // required: replace example with your forum shortname
var disqus_identifier = 'tunnel-racer';
var disqus_url = '/tunnel-racer.html';
var disqus_config = function () {
this.language = "en";
};
/* * * DON'T EDIT BELOW THIS LINE * * */
(function () {
var dsq = document.createElement('script');
dsq.type = 'text/javascript';
dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by
Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</section>
</article>
</section>
</div>
<div class="col-sm-3" id="sidebar">
<aside>
<div id="aboutme">
<p>
<img width="100%" class="img-thumbnail" src="../images/sean1.jpg"/>
</p>
<p>
<strong>About Sean Azlin</strong><br/>
Software Engineer with 7 years of experience building world-class software. Microsoft Alum, RIT Alum, Code Fellow, and Certified Scrum Master (CSM).
</p>
</div>
<section class="well well-sm">
<ul class="list-group list-group-flush">
<li class="list-group-item"><h4><i class="fa fa-home fa-lg"></i><span class="icon-label">Social</span></h4>
<ul class="list-group" id="social">
<li class="list-group-item"><a href="http://twitter.com/SeanAzlin2"><i class="fa fa-twitter-square fa-lg"></i> Twitter</a></li>
<li class="list-group-item"><a href="http://linkedin.com/in/seanazlin"><i class="fa fa-linkedin-square fa-lg"></i> LinkedIn</a></li>
<li class="list-group-item"><a href="http://github.com/sazlin"><i class="fa fa-github-square fa-lg"></i> GitHub</a></li>
</ul>
</li>
<li class="list-group-item"><a href="/"><h4><i class="fa fa-tags fa-lg"></i><span class="icon-label">Tags</span></h4></a>
<ul class="list-group " id="tags">
<li class="list-group-item tag-1">
<a href="/tag/python.html">
Python
</a>
</li>
<li class="list-group-item tag-1">
<a href="/tag/game-development.html">
Game Development
</a>
</li>
<li class="list-group-item tag-1">
<a href="/tag/tribemind-studios.html">
TribeMind Studios
</a>
</li>
<li class="list-group-item tag-1">
<a href="/tag/codefellows.html">
CodeFellows
</a>
</li>
</ul>
</li>
<li class="list-group-item"><h4><i class="fa fa-github fa-lg"></i><span class="icon-label">GitHub Repos</span></h4>
<div id="gh_repos">
<p class="list-group-item">Status updating...</p>
</div>
</li>
<li class="list-group-item"><h4><i class="fa fa-twitter fa-lg"></i><span class="icon-label">Latest Tweets</span></h4></li>
<div id="twitter_timeline">
<a class="twitter-timeline" data-chrome="noheader" href="https://twitter.com/SeanAzlin2" data-widget-id="485870315860287488">Tweets by SeanAzlin2</a>
</div>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<li class="list-group-item"><h4><i class="fa fa-external-link-square fa-lg"></i><span class="icon-label">Links</span></h4>
<ul class="list-group" id="links">
<li class="list-group-item">
<a href="http://ec2-54-213-173-105.us-west-2.compute.amazonaws.com/" target="_blank">
Project rheTOracle
</a>
</li>
<li class="list-group-item">
<a href="http://codefellows.org" target="_blank">
Code Fellows - Seattle
</a>
</li>
<li class="list-group-item">
<a href="http://rit.edu" target="_blank">
RIT
</a>
</li>
</ul>
</li>
</ul>
</section>
</aside>
</div>
</div>
</div>
<footer>
<div class="container">
<hr>
<div class="row">
<div class="col-xs-10">© 2014 Sean Azlin
· Powered by <a href="https://github.com/DandyDev/pelican-bootstrap3" target="_blank">pelican-bootstrap3</a>,
<a href="http://docs.getpelican.com/" target="_blank">Pelican</a>,
<a href="http://getbootstrap.com" target="_blank">Bootstrap</a> </div>
<div class="col-xs-2"><p class="pull-right"><i class="fa fa-arrow-up"></i> <a href="#">Back to top</a></p></div>
</div>
</div>
</footer>
<script src="/theme/js/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/theme/js/bootstrap.min.js"></script>
<!-- Enable responsive features in IE8 with Respond.js (https://github.com/scottjehl/Respond) -->
<script src="/theme/js/respond.min.js"></script>
<!-- GitHub JS -->
<script type="text/javascript">
$(document).ready(function () {
if (!window.jXHR) {
var jxhr = document.createElement('script');
jxhr.type = 'text/javascript';
jxhr.src = '/theme/js/jXHR.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(jxhr, s);
}
github.showRepos({
user: 'sazlin',
count: 8,
skip_forks: false,
target: '#gh_repos'
});
});
</script>
<script src="/theme/js/github.js" type="text/javascript"></script>
<!-- End GitHub JS Code -->
<!-- Disqus -->
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'seanazlin'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function () {
var s = document.createElement('script');
s.async = true;
s.type = 'text/javascript';
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
<!-- End Disqus Code -->
</body>
</html>