Jump to content
  • Advertisement
Sign in to follow this  
  • entries
    68
  • comments
    177
  • views
    82452

About this blog

Save your forks, there's pie!

Entries in this blog

 

TDD for the masses

If you hang out in #gamedev, then you've heard Washu and I talk a lot about WHY you should use TDD, with plenty of horror stories of when people DIDN'T use TDD. But we don't really talk about HOW to use TDD. I wrote this 1-printed-page (had to cheat on the margins) document for use at work, in an attempt to convince everyone else that they should be using TDD, just like they said they would. (don't ask) Anyway, it covers the main points (though not all of them), and has a couple of resource links for more information. The point of this doc is to be short. People won't pay attention to 2+ page docs.

Test First, Ask No Questions Later


Test driven development (TDD) can help developers create higher quality code on first iteration, as it helps developers avoid common errors of logic and design. The tests serve as a form of documentation, making clear the proper usage of the code. A large test suite facilitates subsystem integration, as it provides immediate feedback when new changes break old code. Test results are explicit and discrete, giving a better overview of the development progress. In short, tested code is confident code.

The TDD cycle:
1.) Take small implementation steps; large changes introduce large bugs,
2.) Design your implementation with testing in mind; determine what defines successful completion of the requirement and how to test for that completion
3.) Write one test; resist the urge to code in large runs,
4.) Write enough code so that your tests compile; do not write an implementation--just stubs,
5.) Run your tests, your new test should fail; if this is a tertiary pass through the TDD cycle, your changes may cause other, previously passing tests to fail,
6.) Write just enough code to pass all the tests; do not continue until all the tests pass, in this way you know that your changes do not break existing code,
7.) Refactor as necessary; minimize duplicate code, eliminate inefficiencies,
8.) Continue from step 2; consider if you need to expand your testing, remember to test boundary cases of input (bad input, good input that is close to being bad, typical input, etc.),
9.) Return to step 1; continue implementing small pieces of the requirement.

Tips on writing good tests:
1.) How to move a mountain: blast it into pebbles. Small tests (as defined by the number of Assertions made by the test) have a very high "Testing Resolution". A failed assertion immediately terminates the test, even if the test contains more assertions. Large tests with multiple assertions may hide assertion failures that occur after the first failed assertion. By splitting multi-assertion tests into single-assertion tests, all Assertions that can fail will fail, giving a higher resolution picture of the defect at hand. The test itself may be long on code to prepare for the Assertion, but it should only have one or two assertions.
2.) Test early, test often, test everything. Developers may feel like TDD requires more time than coding without testing. Initially, this is true. The developer not only takes the time to write the code, they also take the time to write the tests. The total amount of time spent on the code is far less, as higher quality code requires fewer bug fixes.
3.) The only good GUI is a thin GUI. How will you programmatically duplicate user interaction with reliability, precision, accuracy, and flexibility? Design GUI's as only being a front end to well-tested, GUI-independent logic classes. Ensure the GUI elements are receiving the expected bindings and trust that the GUI elements of the Operating System work as advertised. This also aids in code reuse.
4.) In with the good data, out with the bad. How will you programmatically ensure that a map does not render 500 feet off kilter? In general, data validation must be completed via Regression Testing (comparison to known good results) or typically "by eye".
5.) For more information:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp02172004.asp (includes an example project)
http://www.nunit.org/getStarted.html (getting started with nUnit)

capn_midnight

capn_midnight

 

3 hour game programming contest

Saturday morning, in the #gamedev Afternet channel, I'm going to encourage everyone to compete in a "3 hour gamedev contest". You'll have 3 hours to complete a game of your choosing to fit specified theme. Everyone can email me the submissions, I'll host the files on my GDNet+ space, make a page for them really quick, etc., ad nauseum.

Now, to come up with a theme.

Some ideas:
RPG Element (i.e. a battle engine, or a world map, or an inventory system)
Black and White, (not even grey-scale, just B+W)
Vector based games (ala Asteroids, Tempest, Battlezone, or my fav "Major Havoc")
board games
network games (simplistic, may require more time)

I believe highly in pseudorandom content generation. We'll discuss entries after coding is complete.

My system specs: P4 2.4Ghz, 768MB RAM, Radeon 9800, WinXP Pro, .Net 1.1, DX9c, Java 5, broadband internet. As long as I can execute it, I don't care what you use. Sorry, no SDL or Pythong. I could install Pythong and PyGame or whatever you want, but you'll have to link me directly to the downloads for my specs, I'm too lazy to find it on my own. I may whine if I see anything about "GPL" on the page you link me to.

Source code isn't required, but I'm thinking that if you do give it, I'll make a page with your source and your explanaition of the source. It'll be good for beginners on the site. In 3 hours, you won't write so much code that you won't be able to comment on every single line in complete detail later.

Prize? A nice, steaming plate of Rocky Mountain Oysters!

Three hours is plenty of time, if the scope of the project is clearly defined. Hell, I made Pong in under half an hour yesterday, without the use of game libraries or game makers, just straight Java.

capn_midnight

capn_midnight

 

How NOT to make games

that would be "As fast as possible, and in Java"
done as a dare, completed in 27 minutes

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.Timer;

/*
* Created on Jul 13, 2005
*
*/

public class Pong extends JFrame implements MouseMotionListener, MouseListener, ActionListener
{
int p1x = 10, p1y = 0, p2x, p2y = 0, bx, by, bdx, bdy, s1 = 0, s2 = 0, state = DEAD, minspd = 2;
static int DEAD = 0, PLAY = 1;
Random r = new Random();
BufferStrategy bs;
Timer t;
Pong()
{
super("Pong in 27 minutes");
this.setBounds(0, 0, 800, 600);
this.addMouseMotionListener(this);
this.addMouseListener(this);
this.setVisible(true);
this.createBufferStrategy(2);
this.setBackground(Color.BLACK);
this.setForeground(Color.WHITE);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
bs = this.getBufferStrategy();
t = new Timer(1, this);
p2x = this.getWidth() - 10;
t.start();
}
/**
* @param args
*/
public static void main (String[] args)
{
new Pong();

}
public void mouseDragged (MouseEvent arg0)
{
// TODO Auto-generated method stub

}
public void mouseMoved (MouseEvent arg0)
{
p1y = arg0.getY();
}
public void actionPerformed (ActionEvent arg0)
{
update();
paint();

}
public void paint()
{
Graphics2D g = (Graphics2D) bs.getDrawGraphics();
g.clearRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.WHITE);
g.fillRect(bx-5, by-5, 10, 10);
g.fillRect(p1x-5, p1y-20, 10, 40);
g.fillRect(p2x-5, p2y-20, 10, 40);
g.setFont(new Font("fixedsys", 24, 24));
g.drawString(""+s1, this.getWidth()/3, 60);
g.drawString(""+s2, this.getWidth()*2/3, 60);
g.drawLine(this.getWidth()/2, 0, this.getWidth()/2, this.getHeight());
if(state == DEAD)
{
g.drawString("click a mouse button to start play", this.getWidth() - 500, this.getHeight()/2);
}
bs.show();

}
public void update()
{
if(state == PLAY)
{
bx += bdx;
by += bdy;
if(bx >= this.getWidth()){
s1++;
state = DEAD;
}
else if(bx0){
s2++;
state = DEAD;
}
if(40>= by || by>=this.getHeight())
{
bdy*=-1;
}
checkPaddles();
AIMove();
}

}
public void checkPaddles()
{
if(p1x - 5 5 >= bx && p1y - 20 20 >= by)
{
int dy = by - p1y;
bdx *= -1;
bdy += dy/10;

}
else if(p2x - 5 5 >= bx && p2y - 20 20 >= by)
{
int dy = by - p2y;
bdx *= -1;
bdy += dy/10;
}
}
public void AIMove()
{
if(by > p2y) p2y += 7+minspd/2;
if(by 7+minspd/2;
}
public void mouseClicked (MouseEvent arg0)
{
if(state == DEAD)
{
bx = this.getWidth()/2;
by = this.getHeight()/2;
bdx = r.nextInt(5)+minspd;
bdy = r.nextInt(5)+minspd;
minspd++;
state = PLAY;
}

}
public void mouseEntered (MouseEvent arg0)
{

}
public void mouseExited (MouseEvent arg0)
{
// TODO Auto-generated method stub

}
public void mousePressed (MouseEvent arg0)
{
// TODO Auto-generated method stub

}
public void mouseReleased (MouseEvent arg0)
{
// TODO Auto-generated method stub

}
}


capn_midnight

capn_midnight

 

is that better?

The Greatest Scientific Genius in the Universe Washu doesn't like it that I don't ever mention him in my journals. Well guess what, NOW I HAVE! Mr. Hyperbole! Now you can't say I *never* mention you!

capn_midnight

capn_midnight

 

so busy

well, I've been quite busy lately.

Two weeks ago, I started a new job working on a GIS web portal. Right now, I'm running through QA testing, oh joy, oh rapture, take me now. I HAVE NEVER BEEN SO FREAKING BORED IN MY LIFE!!!

On occasion, I get to write some code. It's funny, I was hired because I knew how to program C# using the features of .Net, and I had some experience with the eXtreme Programming methodology, which they are transitioning to (from what, I don't know, maybe CBTSOYP).

Transitioning to XP, my ass. They are flat out RESISTING it. Absolutely NO pair programming. Tasks are assigned, not volunteered. Strangely, we ARE doing the morning standup meetings. Almost no unit testing, and certainly no test driven development. I wrote a single class the other day and quadrupled the number of unit tests in the entire project, and it wasn't a large class (it handled adding and retrieving URLs from a DB). And yet, they find themselves with the problems that XP is meant to prevent (breaking large portions of functionallity when refactoring, ensuring that components integrate properly, etc), and wonder why.

(I need to cut this short, at work *right now*)

Some of you have probably already read "wasting time, but getting paid for it, so it's okay". So you'll know that little bit of code that I got to write is basically 50% wasted. I can reuse the DB code, since it's essentially the same data, I can reuse the data retrieval module (thankfully, that's the class that quadrupled the number of tests). But I have to completely rewrite the UI and the business logic, and add on top of that an RSS aggregator. Oh, did I mention that our "client" stipulates that we cannot use any OSS of any kind? (not that *I* mind, but I think the VP won't like the fact that I'm going to have to spend a few days reimplementing something that could be just dropped in).

I went to Miami, Florida to visit a friend and just generally party for 5 days. It was great, I took pictures.

I've gotten no work on projects done since starting this new job. It's about an hour drive to and from work, so by the time I get home I just want to eat, relax, and get to bed by 10pm so that I can get up at 5am and start over again. I hope it doesn't stay like this.

My flipping computer died. I think it's the hard drive. Luckily I keep all my docs on the secondary drive. And I don't have any money... I still need to buy a car and pay off my student loans. Someone kill me now.

capn_midnight

capn_midnight

 

Optical Illusions: what's next

In the original optical illusion project, all hills are of equal slope. In order for a hill to achieve greater altitude, it's base area must increase as well. This leads to a "throne thought" (i.e. a thought you have while sitting on the "porcelain throne"), is it possible to indicate areas of greater slope in the optical illusion rendering technique?

The rendering technique is based off of a specific tile design. A little ASCII art is necessary:


oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo
oooooooo


This is an 8x8 pixel tile. There are two color values, and they may be alternated. There are 3 more patterns that are rotations of this pattern, there are 2 patterns with the two smaller squares in opposing corners, and 1 blank tile with no small squares. With all small-square orientations and color alternations, there are a total of 14 tiles.

Without the small squares, there is no illusion, the illusion springs from the small squares in a way that I only understand intuitively; I cannot quite articulate it. All I can really say is that it sort of tricks the mind into seeing an aliased line, the stair-stepping that happens when rendering a solid line on a raster display without an anti-aliasing algorithm.

With the 8x8 tile, the small squares MUST be this size, any larger and they are no longer visible as squares (they would appear as half of the tile); any smaller and they are single pixels and too small. However, with larger tiles, like 32x32, the size of the smaller squares can be modulated. This may enable us to indicate areas of differing slope. The direction of the slope selects the tile pattern and the magnitude of the slope selects the size of the small squares.

We'll see.

edit: oh, I got an A on my paper.

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #10

This is the last update!

The paper is finished. All done. Waiting on a grade.

In summary, the hypothesis that optical illusions could be used in a utilitarian fashion was correct. Using optical illusions I was able to convey information that users were able to effectively use to complete a task. Read the paper for more.

I had a lot of fun working on the project. Going out to Philladelphia for the research symposium was great. I will be submitting my paper to a research conference in the next week or so, my professor thinks it has a good chance of being accepted, so that's cool.

The project has already impressed quite a few important people. I recently talked with the President of a local software development company, who saw my project poster, and he was very interested in some of the things that I proposed from it.

I want to thank the staff of Gamedev for stickifying my Survey Thread (Oluseyi is the one who did it, I believe). Because of that, I collected 550 data points, which really made my data look nice and complete.

Things I learned from the project:

stretching out into other fields of expertise is recommended
test driven development ALWAYS saves time. You may feel like you are writing twice the code, but the truth is that you are spending half the time (total) writing it. ALWAYS test, THEN code. NEVER code before you test. Even if you think it's small. Just don't do it.
regression testing is kind of dirty, but it can get the job done in a pinch. For 2D applications, it may not be necessary in most cases, you should try to find a way around it.
never write java applets. applications are okay (but only just so), applets are garbage. I wonder how good flash is for web apps?
pace yourself and work is a breeze! keeping this journal over the course of the project really made the poster and the final paper a simple task.

So, if anyone out there has a job for a graduating computer science student that involves 2D graphics and making people dizzy, send me an email!

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #9

I've finished a 40"x48" poster as a summary of my research project. It is supposedly going to be hung in the hall of my CS department for a year. I guess I'll have to come by and see it some time.

Poster (4.0MB).

Also, my abstract was published in the St. Joseph's University Sigma Xi Research Symposium Abstract Booklet. See page 58.

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #8

On Friday I attended the Sigma Xi Student Research Symposium at St. Joseph's University. We actually had a total of 5 students from Ship presenting, all pretty good projects.

The keynote speaker for the event was Dr. Joy Crisp of the Jet Propulsion Laboratories. She spoke about the Mars Rover project, and had some very interesting things to say about the evidence of liquid water they have found on Mars. After the talk, I even had the chance to talk with her. In fact, one other student from my school and I nearly monopolized all of her time.

We had our posters setup before the speach, so all we had to do was walk over and present. Basically, we stood next to our poster for 45 minutes (there were two "shifts" in this manner), and whomever wasn't presenting at that time/at all would walk around and ask questions. Dr. Crisp came by and asked all kinds of questions about my project, she seemed genuinely impressed.

I'm very happy with the event. Well, that's mostly because I got to try a real philly cheese steak for the first time, but the symposium was good too. I think I (as well as my fellow Shippensburg students) had one of the most original projects there. I know someone's project was "modelling the solar system in OpenGL and C++" and their abstract did not indicate how this was any different than what everyone does in Intro to Graphics. Someone else was doing some stuff with Normal Mapping. Their abstract made it sound like they were doing really revolutionary stuff, but I couldn't figure out how this was any different from Doom3, Far Cry, or Rainbow Six 3. I really wanted to go over to their posters and see what the big deal was, but I had people asking questions for the entire hour and a half for the posters (yes, that means I was presenting outside of the timespan I was expected).

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #7

okay, here are some preliminary results.

For test #0, there were a total of 125 attempts, of which 7 were successes and 118 where failures. This is a 5.60% success rate. This test was (as guessed by Monder) a control against random selection of points.


Test #2: 155 total attempts, 151 successes and 4 failures. That is a 2.58% failure rate. Since the isometric map makes the height of the hills very apparent, the user should be able to determine the highest hill every time. This test is therefore a control against user error, as well as the unfortunate habit of the program to put the hill against the edge of the map (an easy fix, I only just noticed it today).

Test #1: Out of 150 attempts there were a total of 127 successes and 23 failures, an 86.67% success rate.

For anyone that explicitly said they had problems with the program, I removed their data point. This data is considered corrupted. If we consider people who got 0 or 1 successes as statistical outliers, then the success rate for test type 1 jumps to exactly 90%.

capn_midnight

capn_midnight

 

Optical Illusion update #6

I have come to the conclusion that Applets are irrevocably bugged. The stand alone application version works exactly as planned. The 1.4.2 applet version does not render the sheep (as indicated previously by a few of the subjects), and it renders a red line between each row of pixels. I am so furious right now that I could beat a freshman (well, one doesn't necessarily have to be mad to do that :) )

I will be working on a standalone, JAR application. I have found JAR apps to be much more reliable. I'll probably also work on a report collecting server so that people don't have to copy their report codes.

In the meantime, the survey applet is broken, you will not be able to reliably use it for reporting. It actually runs, it just doesn't give any visual representation of it running, meaning you could possibly hit enter before the sheep gets to its destination and you would not record accurately.

If you still want to check it out, the JAR file that the applet runs from includes a random map viewer (it just doesn't do the reporting). Click here for an executable JAR file. This application generates 1 map for use with the 3 different types of rendering, so that you may compare and contrast the effects. Alt+f4 (or command+w for mac users) to close a rendering window when you are done veiwing it. Hitting 'S' will bring up a file chooser prompt, and will save a PNG Screenshot to the location you select.

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #5

Getting closer to the final product (I better hope so, I'm presenting it in 2 days). Here you can see the three images of the eventual survey. These three images represent the same tilemap data rendered using three different methods. The first displays no height data whatsoever. It will be used as a control against users that guess at random. The third is an isometric map that makes the height of the hills very apparent, this will be used as a control of the effectiveness of the solution (will users be able to pick the hill as easily as normal). The second image is the experiment.




capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #4

I have prepared a set of surveys that I hope to distribute soon. I can't talk about the survey very much, or what the survey will be testing, because obviously that may compromise the survey.

Obvious aspects of any survey experiment

The survey is an experiment:
You first create a hypothesis, what you expect to happen based on your observations while researching and preparing for the survey. You then create an experiment that will either prove or disprove the hypothesis. If you hypothesize that shoe size correllates with hand span, you will design an experiment to collect the associated data of a participant's shoe size and hand span, but you will NOT also measure that person's height, because that has nothing to do with the hypothesis in question.

There is more than one survey:
Your variables are the participants (and any knowledge that they may bring), the environment for the survey, the information you give the participant, and the questions you ask the participant. In order to appropriatly account for each variable, you must create a number of minutely different surveys.

There are certain variables you cannot control:
This is probably the number one consideration of any experiment. All other considerations stem as a necessity from this consideration.

I will not be able to control the participants environment past the framework I create for distributing data. Since this survey will be computer-based, this means that not only do the person's system specs become a consideration, but so does the entire area around the participant. Since I cannot see this area around the participant, I will have to collect data from many participants.

For this reason also, we must select participants for each specific survey at random. This will ideally distribute the variation in the uncontrolled variables across all experiments, giving them the same error.

The knowledge of the participant can effect the outcome of the survey (or, why we need control experiments):
If a survey participant knows what you are trying to test/prove, then the participant will either conciously or unconciously skew their replies to match your expectations. It is vital that you control the amount of information your participants have on the survey. Part of this means that you will also conduct two sets of experiments: one where the participants are provided with no knowledge of the test, and one where the participants are provided with some knowledge of the test.

For example, say I am testing the effects of minute amounts of alcohol on the ability to drive. I hypothesize that, in small quantities, alcohol will act as a mild stimulant and actually increase the participants driving ability. I will conduct three sets of experiments, one in which I tell the participants nothing about the experiment, one in which I tell the participants that small amounts of alcohol are grossly detrimental to driving ability, and one in which I tell the participants that small amounts of alcohol are effective in enhancing driver responce time. In this case, I may find that my hypothesis is correct, but I may also find that knowledge of the situation has a greater effect than the alcohol itself.

I will also double this number of experiments again. This time, one set of experiments will use real alcohol, and one set will use a substitute with no intoxicating effects. Again, I may find that knowledge of the situation is the most important aspect.

aside: as it turns out, minute amounts of alcohol actually DO enhance driving ability. However, knowledge contrary to observation (that is, that it does *not* enhance driving ability) enhances driving to a greater extent (participants are more cautious). Also, the social implications are too great, as common knowledge of this fact may be used as an excuse to drink and drive.

More participants are better:
A larger sample of the population is statistically a better representation of the population as a whole. More participants = more accurate testing.

A very good set of guidelines for preparing online questionaires.

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #3

I've moved hosting of my optical illusion project to here on GameDev. Link for great justice.

I planned the next entry to include my screenshots, so I will copy the screenshots page to here.


Die Schirmschusse fur alle
Demo 0
Basically just getting the isometric map rendering without any effects.


Demo 1
This is the isometric map of demo 0 with the primrose illusion rendered underneath, utilizing a different set of colors.


Demo 2
The illusion effect in demo 1 was not very strong, specifically because of the isometric projection. I attempted to return the pattern of the illusion itself to a normal orthographics projection, and then clip it down to fit the map, but the results were not impressive.




Demo 3
This is the demo that can be viewed in the isometric map demo under the demos page. Only a small portion of the illusion pattern is revealed at any one point in time, and that portion sweeps across the screen, giving the effect of a moving wave. This, however, is very subtle, leading me to rethink the perspective of the project.



Demo 4
This is the demo that can be viewed in the orthographic map demo under the demos page. It utilizes both the primrose field illusion for the water and the bulge illusion for the hills. This is the strongest demo so far. I will most likely make a game similar to Fire Emblem on the GameBoy Advance (yes, I will even develope it on the GBA).

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #2

My work began by first attempting to determine the current "state of the art" in optical illusions in CG. Much of this is covered in the literature summary linked to in Optical Illusions in Computer Graphics #1. This included searches on:

Google,
Citeseer, and
The ACM Digital Library.
The majority of the information I found was in the realm of neuropsychology, discussing the underlying mechanisms of the visual system that lead to the creation of illusion. While a cursory understanding of this area will be essential to a thorough project, the search results were much too detailed for my purposes.

From Google, I found two very interesting sites:

Michael Bach's Optical Illusions & Visual Phenomena, and
Akiyoshi Kitaoka's illusion pages.
Michael Bach provided some excellent explanations on how optical illusions work.

Akiyoshi Kitaoka has provided the main basis for my work. His illusions :
and

will be the main components of my final project.

Most of the other papers are specific descriptions of CG techniques such as Phong Shading, or ruminations on possible uses for illusion. One paper in particular is very interesting, however, Phenomenal Characteristics of Peripheral Drift Illusion"[A. Kitaoka, 2003], which is the best explaination on HOW to generate a specific illusion I have ever seen. I will have to request Dr. Kitaoka's other papers.

my current bibliography (if you missed it in the litsum)

[Gouraud 1971] H. Gouraud, "Computer Display of Curved Surfaces," Department of Computer Science, University of Utah, (June 1971).
[Phong 1975] B.T. Phong, "Illumination for Computer Generated Pictures," Communications of the ACM 18, 6, 311- 317, (June 1975).
[Blinn 1978] J. F. Blinn, "Simulation of wrinkled surfaces," in SIGGRAPH 78, pp. 286-292, (1978).
[Freeman, Adelson, Heeger 1991] W.T. Freeman, E.H. Adelson, D.J. Heeger, "Motion Without Movement," Computer Graphics, Volume 25, Number 4, (July 1991).
[Kitaoka, Ashida 2003] A. Kitaoka, H. Ashida, "Phenomenal Characteristics of the Peripheral Drift Illusion," VISION Vol. 15, No. 4, pp. 261-262 (2003).
[Fermeuller, Pless, Aloimonos 1996] C. Fermeuller, R. Pless, Y. Aloimonos, "Families of Stationary Patterns Producing Illusory Movement: Insights into the Visual System," Computer Vision Laboratory, University of Maryland, College Park, MD, (October 1996).
[Kitaoka 2002] A. Kitaoka, "Primrose's Field," Trick Eyes, (2002).
[Yu, Choe 2004] Y. Yu, Y. Choe, "Angular Disinhibition Effect in a Modified Poggendorff Illusion," Department of Computer Science, Texas A&M University, (2004).
[Christie 1975] P.S. Christie, "Asymmetry in the Mueller-Lyer illusion: Artifact or genuine effect?" Perception 4:453-457 (1975)
[Eidos 1995] Eidos Interactive, "Thief: the Dark Project," Eidos Interactive, (1995).


If anyone has any links to papers on visual illusion specifically in the context of CG, please let me know. Remember, a visual illusion could be practically anything. Any time CG aims to represent reallity through less-than-reallistic modelling, that is essentially an illusion. So, papers that deal in maximizing poly counts are probably about making modelling more reallistic, and therefore are not in my problem domain. Papers that deal with shading/texturing/whatever to make up for lack of detail in modelling ARE in my problem domain.

capn_midnight

capn_midnight

 

Optical Illusions in Computer Graphics #1

I'm working on a research project involving optical illusions in computer graphics. Many people here on Gamedev have already seen a lot of my screenshots. With this journal I will attempt to track my total research and development process.

I highly suggest that all computer science students complete a research project, either as a course or as an independent study credit. It will provide a good start for your portfolio and resume.

As an aside, I also suggest that CS students schedule as many Software Engineering courses as possible. Most everything else is pretty much stuff that you can learn on your own.

I have already put a lot of work into the project, but I will not present all of it right now.



The idea for the project began after viewing an odd illusion:


After viewing this illusion, and seeing the smoothly flowing ripples, I remarked to myself that the human brain was much better at manufacturing "special effects" than most computers.


capn_midnight

capn_midnight

 

Preparing for senior year

Well, one more year of college. I think...

This year I am Vice President of the programming team (it sort of fell on me, like a tree falls on a parked car during a hurricane). I am also the President of the new Upsilon Pi Epsilon chapter on campus (we're Alpha Beta Sigma). I will also have some sort of advisory capacity to the campus ACM chapter, since I was president last year and this year's president will probably need a lot of help.

I'm working on Sundays, stocking bread on shelves in the Harrisburg/Camp Hill area. I'm going to be trying to sell some websites, don't know how well that will go, need to bang out some templates. The problem is, web design is usually packaged along with some sort of hosting plan, and I don't have any hosting capability.

Work will continue on Showdown IRC. I also intend to start a new project, similar to Showdown but themed around snipers, with movement. I also intend to limit the use of the IRC server. With Showdown, it's a stand-alone IRC Client with an embeded game. With this sniper game, I intend to make it less obvious it is an actual IRC client and seem more like it's a regular game server.

The idea is to not allow the user to select the IRC server (or perhaps severly limit this option) and not allow the user to join any channel they choose. With Showdown, the game client user and regular IRC client users can interact freely, which spreads users of the game client too thin -- they can't find each other. By removing the selection of server and channel, I force all of the users into one location (and since there are very few users for such an indie game, this is a good way to ensure they all come tomether). This channel should be password protected, and the password automatically relayed by the game client (a manner of authenticating to the channel that the joining user is actually using the game client, leaving regular chatters outside).

From there, users will create "rooms" which are tertiary channels, password protected in the same way as the lobby channel. In this way I can ensure more rigid control over >2 users joing a game.

I'll write a lobby-bot that will not appear in the user list, and will respond to automatic queries about room status'.

Basically, the idea is again to use the preexisting IRC server as the game server. However, this time it is meant to be more transparent to the user, making it appear more like a traditional game server. I guess it's similar to MSN's gaming zone lobby system, just I don't actually own the servers.

This will be an excellent way for me to learn C# and Managed DirectX. I'm obviously fully capable of the design necessary for the game, as I was able to create Showdown on my own. Now it's just a matter of learning the syntactical and library differences between Java and C#.

Oh, did I mention I'm also taking 6 classes?

capn_midnight

capn_midnight

 

Just Subscribed

It feels great to be a GDNet+ subscriber. The gang really went all out with the improvements. I can really see this as an enhancement to my portfolio when I strike out into the job market. To have webspace explicity associated with the largest gamedev site on the planet will be quite a plus.

capn_midnight

capn_midnight

Sign in to follow this  
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!