views:

441

answers:

3

I've been wanting to work on this application for about a year now. I want to create a 'Laser Show Simulator/Editor'. I want to be able to place lights in different positions on a stage and I want to be able to script each one of them to do various operations such as turning, go on and off at certain intervals, change color, etc. Being realistic isn't entirely my intention. I have further plans of writing a tool that makes it easy to synchronize and compose a laser show based on an existing audio file (which will usually be a song of course) based on certain information that can be detected such as the beats per minute, etc., for example.

I was originally thinking of working on this in C# with XNA. The editor will of course contain some 3D viewports (Maybe in Ortho Projection), kind of like a 3D Modeling tool I guess, but more like a level design tool for a game, since the amount of things one will be able to do with it will be limited such as light placement and property editing.

The thing is that I have never worked on a 3D programming project before. A few years back, I tried to learn OpenGL (Bought many books and honestly did read them, but back then I was new to programming and things just did not make sense. Also, I didn't understand much of the math that was used). I also did try to learn Managed DirectX, and although it did seem to make more sense, I guess I wasn't as motivated to learn it so I gave up.

Now I actually have a reason to learn it, so I will be motivated, and I am sure that I will understand most of the math now.

But I don't know where to start. This is something that I'm sure will take me a while to complete, so I know to be patient. I would like to know where you guys suggest I begin. The audio part I am sure I will leave to later. I guess the basics are the rendering engine and the editing interface, then the actual simulator to play back the created show.

Since I can't fit everything into one question, I will ask follow up questions later when I get to that area of the project. However, in the meantime the basic general questions I am asking are:

  1. Where should I begin? I have never worked on something of this magnitude, so I am overwhelmed with the amount of things going into this project and I don't understand what I should begin on. I know I will plan things out first, but I would appreciate at least a hint as to what one would begin on. I assume it is the rendering engine.

  2. Is it a good idea, or at least OK to use C# and XNA? I'm pretty familiar with C# and I did try to learn Managed DirectX a couple of years back which I believe is somewhat similar. And I'm familiar with the User Interface creation aspect of .Net with C#.

  3. Should I create my own rendering engine or use an existing one? Which do you recommend? I'm not entirely interested in creating my own engine so that I can learn. I'm sure I will eventually understand what's going on anyways, and I really don't want the rendering aspect to be a roadblock, especially if there's something out there that already exists that will be better than anything I can create in the immediate future. Still, of course, I will try to learn XNA; I'm not going to try to ignore it.

Thanks guys I really appreciate any input you can provide. Sorry if I was very vague. I have ideas for the specifics, but I wanted to ask the general questions for now, to give myself a sense of direction. Thanks again.

EDIT: I want to emphasize that I have never worked on something of this magnitude from scratch. I literally don't know where to begin. I've never worked on 3D programming nor a complicated user interface which an editor would entail. I do have the drive and motivation to learn and do anything programming related, as I have proved to myself in the past, but I would appreciate any details and specifics you guys can provide as to where to begin.

For example, some of you say begin with the rendering engine, but can you provide any specifics? Are there any free and/or open source engines out there that will suffice? Are there any 3D topics in particular that I should look into that might be of interest to me considering what I'm pursuing? For example, I've read that some lasers might just be 3D meshes with shaders, or something, I'm not well versed in 3D programming apparently.

I'm not looking into buying anything such as the rendering engine, at least in the immediate future. If I do, it will be once I have a core/base down which I can work upon.

Thanks guys, I really appreciate any insight you can provide, aside from what some of you have already done.

+2  A: 

I'm interested in your project because I used to be a laser show designer and control software developer.

First - sketch the design! It's interesting that you are thinking about implementation details like the rendering engine, while still overwhelmed by the scope of the project. Just imaging a rendering engine that will do anything you ask. Then when concepts firm up and you know the capabilities you need you can shop for one that fits your needs.

If you are unfamiliar with the system behaviors and use cases that would be associated with laser displays, I can definitely help you - I'll email ya.

+1  A: 

C# and XNA is a really good choice for a first 3D project. You won't have to write your own rendering engine, which is good news because it can be very time consuming. However it lacks GUI tools. There is no simple way (yet) to make menus, text boxes, labels, etc. However, there are some libraries out there than can help you.

I recommend you to take a look at Audio support to make sure the tools provided (especially XACT) are enough for what you want to do.

Jodi
+1  A: 

Depending on your desired laser motion control, a USB micro controller might be more what you're looking for.

Here is one of my favorite USB devices that do this sort of thing (servo controls, motor controls, LEDs, analog/digital I/O, etc.): phidgets.com servo kit

Cross platform, excellent. For example, setting the position of a servo to halfway I could call to the driver:

servo1.setPosition(50);

So using C# with XNA combined with these .Net compliant servos, you could get something going quickly!

Good luck!

bufferz
That's awesome, thanks. Can you please fix the link? I'm not really looking to doing anything physical at the moment, but I was hoping to do that sometime in the future once I have an app ready. This does indeed sound pretty awesome, I appreciate the answer.
Jorge Israel Peña
Link fixed, sorry about that!
bufferz