Slashdot Mirror


Designing Computer Animation Software?

reversedNormal asks: "I would like to write a full fledged 3d-Animation Software package from scratch. Yes, I know, a VERY daunting and time consuming task. But I have a very good understanding of 3D mathematics, physics, and computer graphics in general, plus a solid foundation in computer programming. To give you an idea, this package will be similar to Maya, 3DS Max, etc... in many respects. The question is, what is the best programming paradigm to use for such a project? I have all of the major concepts, and relationships in mind, but refuse to write one line of code until I have a good design plan. How does a professional programmer approach this design task? Ultimately I would like to be able to tie it into any number of different operating systems, graphics API's (OpenGL, DirectX, etc..), and so on. What are some good ways to do this?"

"Essentially I want the core of the software to be written in Standard C++, and then be able to tie into the Win32 API, or X, or QuickDraw (etc.) for display and input. The main concepts, such as procedural 2D and 3D geometry, 3D geometric transformation, polygon modeling, NURBS modeling, subdivision modeling, keyframe based animation of parameters, motion capture control of parameters, physics-based animation, sound synthesis, texture-mapping, lighthing, rendering, and so on are generally abstract ideas that do not need to depend on (but can certainly take advantage of) any particular API or environment. Of course, the idea is to eventually visualize the abstraction onto the screen, allowing the user to interact via the 2D pointer and keyboard input, and ultimately rasterize it, which will mean turning to various operating system standards. It will also be open as a plugin host and have a built in scripting language. Any design suggestions? I know that this is probably the most intelligent audience to communicate with, and any feedback would certainly be appreciated"

351 comments

  1. First of all, get advice from somewhere else by Dwonis · · Score: 5, Informative
    Slashdot is probably not the best place to get advice. It's great for ideas, but I would definitely recommend posting to a few newsgroups and getting involved in a few mailing lists as well. My experience is that the /. crowd has a lot of great ideas, but those ideas are usually not backed by a lot of practical experience.

    Of course, I'm giving you advice on Slashdot, so what do I know? :-P

    1. Re:First of all, get advice from somewhere else by hyperturbopete · · Score: 1

      heres some advice: build your project so that you can take advantage of CODE REUSE- even if you think you can do it better, you can always do it better later. dont reinvent 100% of the wheel, only reinvent the parts that interest you.

      -pete

    2. Re:First of all, get advice from somewhere else by Anonymous Coward · · Score: 0

      that's quite a sad story; here's my donation of advice: start contemplating suicide.

    3. Re:First of all, get advice from somewhere else by NickFortune · · Score: 1
      Slashdot is probably not the best place to get advice. It's great for ideas, but I would definitely recommend posting to a few newsgroups and getting involved in a few mailing lists as well. My experience is that the /. crowd has a lot of great ideas, but those ideas are usually not backed by a lot of practical experience.

      ...and this being slashdot, you'll probably get meta-commented to death before anyone gives says anything useful!

      My two hap'orth on the subject: Do some early prototyping.

      Don't be afraid to junk and restart a few times. You're planning on a heavily modularised configurable app, so much of your code should be reusable, and the overhead on rewrites should be minimal. If its not then your design has problems, ad it's better if you discover this early rather than late.

      Remember: Any clear and unambiguous specification is in fact code, and code is the only complete specification. Unless you need a paper trail to cover your behind, there is a limit to how much early design you can usefully do.

      It's probably not a popular view, but its worked for me for a long time now.

      --
      Don't let THEM immanentize the Eschaton!
  2. Rough Outline by cscx · · Score: 4, Funny

    Step 1: Create Sourceforge account.
    Step 2: Place project into "Planning" phase.
    Step 3: Wait 3 months.
    Step 4: Purchase 3D Studio Max using the money you've been saving for 3 months.

    1. Re:Rough Outline by Wavicle · · Score: 2

      Step 1: Create Sourceforge account.
      Step 2: Place project into "Planning" phase.
      Step 3: Wait 3 months.
      Step 4: Purchase 3D Studio Max using the money you've been saving for 3 months.


      I wish there was another moderation option:

      +1 Sad, but true.

      --
      Education is a better safeguard of liberty than a standing army.
      Edward Everett (1794 - 1865)
    2. Re:Rough Outline by The+Pi-Guy · · Score: 2

      Step 5: ???
      Step 6: Profit!

  3. what you need... by youBastrd · · Score: 4, Funny

    Seems to me you need some sort of mechanical device, perhaps one useful for motion. You should try a roundish shape, some research has proven useful in this area. However, you should not take advantage of this research, rather, reinvent it.

    --
    No one has ever fired for blaming Microsoft.
    1. Re:what you need... by pyrrho · · Score: 1

      it occurs to me if no one had reinvented the wheel, your harley would be riding on wooden wheels... or wait, maybe on big cylindrical stones... wait, on second thought, make that your Vespa.

      --

      -pyrrho

    2. Re:what you need... by timeOday · · Score: 3, Insightful

      That's my approach to the piano. So many other people already play, why bother reinventing the wheel by starting with chopsticks? I'm not playing a note until I get I get a record deal.

    3. Re:what you need... by Dexter's+Laboratory · · Score: 0

      There's nothing wrong with reinventing stuff. It helps you improve your skills, and it is a great way to really learn how stuff works.

  4. First things first. by shufler · · Score: 2, Interesting

    You might want to write pseudocode before you do touch that one line of code. For something this large, jumping right in will leave you frustrated and you will surely abandon this project.

    This is something that cannot be stressed enough. Every single detail should be planned out before you begin to code.

    The SDLC is your friend.

    1. Re:First things first. by Anonymous Coward · · Score: 0

      Portability is good. If you could make it run on linux, you would have an entire market that's been left out in the cold in this area. Is this opensource or for profit?

      If it's for profit, def. go linux. Like i said untouched market.

      btw, does anyone know of any good modeling studios for tux? i've been trying to find something i can use for .md2 or 3 models. any suggestions?

    2. Re:First things first. by Anonymous Coward · · Score: 0

      3 words:

      Worlds biggest flowchart!

    3. Re:First things first. by Peaker · · Score: 3, Insightful

      I disagree.

      Only the top level design should be completed in order to start working. There is no way in hell a programmer can think of every single detail of a large software project, even after writing it, let alone prior to writing it.

      Perhaps you mean that he shouldn't start if he doesn't have any idea of what interaction and what modules he has, and what the interfaces between those modules should at all look like.

      In that, I agree. But I've made The Last Detail mistake in the past, and it has prevented the success of some of my attempted software projects. I have done much better in projects where I jumped right into the water. Usually got it right, when I didn't, I had a much better clue how to get it right the second time. The time it takes to spawn two attempts at a software problem is much quicker than trying to think of all of those details in the abstract.

    4. Re:First things first. by Anonymous Coward · · Score: 0

      seriously, how do you propose that someone writes an entire 100k+ line project in pseudocode?

      using c++ gives you the advantage of oo, and with modelling/simulation development, design patterns and other design tools depending on your design religion are much better. pseudocode is the last line of defense for large projects.

    5. Re:First things first. by scott1853 · · Score: 4, Insightful

      Pfff. What are you? A professional.

      Real developers jump in and just write.

      Then when you're done, you write it from scratch again after seeing all the mistakes you made the first time.

      Then you write it a third time and add comments since you can't remember what the hell you were thinking at 3:00AM on the last rewrite.

      You think I'm wrong? Look at Windows CE.

    6. Re:First things first. by Codifex+Maximus · · Score: 3, Interesting

      SDLC or Systems Development Life Cycle.

      Decide first if it is worth your while to write it.
      Get someone to fund it.
      Find out what your intended users need.
      Use IPO or input, process, output charts to help you get an idea of what the main program process must do. Break it down then into logical component parts and do IPOs for them too. When you get down to the simplest level that can be broken down, then you are ready to begin designing your datastructures and relationships - use DFD and ERDs. Use top down hierarchichal DFD to define the scope of your system. Don't try to do too much or you will kill your project. A tight refined scope is better than an ambiguous... It's gonna do everything!

      After datastructures are done, then do the pseudocode for manipulating the data. About this time, you want to begin work on defining an easy to use user interface - let the user's mull it over while you pseudocode.

      Review, refine, tighten the scope if neccessary. Reevaluate feasibility. Get some help but not too much. Use Ghant, Pert charts to plan phases of implementation. Make sure you have adequate hardware and software to support the system. Don't lock yourself into any proprietary toolkit that may carry license fees or limit your potential userbase.

      Chose a platform, coding model, naming convention, and language that best suits the apps purpose. Use a code control system such as CVS. Create a working prototype of the user interface the user's agreed on. Let them play with it and give you feed back.

      Review, refine, tighten the scope etc... etc... etc..

      Fill out the prototype with some real code and throw it at the users again.

      Review, refine... you get the picture.

      Somewhere along the line, you will begin to get a working system. Now you must support it or find/train someone to. Remember your documentation. Did you fully comment your code?

      Was it all worth it?

      --
      Codifex Maximus ~ In search of... a shorter sig.
    7. Re:First things first. by p3d0 · · Score: 2

      Agree on not jumping straight in. Disagree on pseudo-code. That is a waste of time. Properly written code looks like pseudo-code anyway.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    8. Re:First things first. by Peaker · · Score: 3, Interesting

      I believe this method of software creation is good for the Cathedral model, and with well-funded programmers who program for money, it can get done. But keep in mind, that since its not incremental, its not exciting. DFD's on paper, ERD's, are all boring, when you get down to them. Unless you finish it all very quickly, you're going to be stuck in very long design phases. Unless you're an extremely good designer, you're likely to hit some problems in the actual implementation that may require refining the design.

      Code is getting cheaper and cheaper to write. A rapid prototype of how even a large program should generally work or look like can be created in a very-high-level language in just hours. So if you're one of those who can do the designing while coding, its probably most efficient to do it that way, as you can easily throw away the code if seeing the design sucks (Much easier to see with your head on the ground and code written).

      Also, I don't see how multiple contributors can't fit into this well-framed process. I would also like to disagree with the requirement of pseudo-code, as today's high-level languages, such as Python, are pretty much as high-level as pseudo code and correctly described sometimes as "Running Pseudo Code". This also means that their code, written correctly, is _truly_ self-documenting, truly. Rarely is there a weird piece of code that requires extra documentation. I'm talking about the what and the how, and not the general software architecture, which should be documented separately.

      In summary, I think that your software creation model is too "formal" in the sense that it will not excite programmers, and will be very difficult to get contributors from all around. Excited programmers are better programmers. Also, I think its a bit presumptious of you to think you can know, to detail, the exact best way for the program to be designed, and thus its probably best to write it piece by piece, and see where usability's taking you. An assumption of mine, is that most useful features of a program are suggested at its usage stage, and not its design stage - This means you better minimize the design stage, and get to the usage stage as soon as possible. Do you disagree with this assumption?

    9. Re:First things first. by Herkum01 · · Score: 2, Insightful

      I cannot believe that this was modded as Funny. I think insightful, or Informative would be better. I cannot begin to think of the number of times I have gone back and rewrote something over just because it was just not right enough.

      But then again I am not a professional software developer and don't have a due date to meet.

    10. Re:First things first. by scott1853 · · Score: 2

      Hell yeah. I spent the day trying to write a unit that could detect an internet connection (LAN or DUN) and if one wasn't present, start up the default DUN, and it had to work on ALL versions of Windows, and also handle Windows doing an AutoDial during the LAN detection phase.

      I did an initial flow chart of how the detection should work. Of course after spending the day running a floppy from machine to machine to test the unit, and numerous hours in the newsgroups, it finally works nearly perfectly. Of course now I have to create a new flowchart to match what the unit ACTUALLY does now. Although I can keep two of the processes in the diagram (terminators for "connection good" and "no connection")

    11. Re:First things first. by Fulcrum+of+Evil · · Score: 2

      I believe this method of software creation is good for the Cathedral model, and with well-funded programmers who program for money, it can get done. But keep in mind, that since its not incremental, its not exciting. DFD's on paper, ERD's, are all boring, when you get down to them.

      All this formality, boring as it is, is necessary if you want a cohesive, functional product and not a pile of hacks. Further, this model is quite compatible with incremental delivery; it's just a matter of determining your feature set and building to support it at each stage.

      Also, I don't see how multiple contributors can't fit into this well-framed process.

      They certainly can, but they should be strictly limited in the initial stages. Too many designers will kill your design clarity.

      An assumption of mine, is that most useful features of a program are suggested at its usage stage, and not its design stage - This means you better minimize the design stage, and get to the usage stage as soon as possible. Do you disagree with this assumption?

      Vehemently. useful features and usage models are best done at design stage, which necessarily includes a prototype (Maya, in this case). The worst thing that can happen is to get to the usage stage (near the end of the dev cycle) and find out that your core assumptions were wrong. Better to find that out up front.

      As far as the specific question being asked here, I think this guy's got no chance, and he'd be better off thinking about what unique features he wants and then go write a plugin.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    12. Re:First things first. by Tablizer · · Score: 1

      3 words: Worlds biggest flowchart!

      Just call it "UML" to be fashionable.

    13. Re:First things first. by Anonymous Coward · · Score: 1, Informative

      Linux an untouched market? Hardly. Most of the big name large and powerful animation packages already run on Linux. For rendering, there's POV and BMRT, and Renderman for those with the $$. Then there's blender, scheduled to be opensource soon; not to mention the counteless modeling and animation projects that have already been started (ok, this is a stretch, most of them scarcely compile correctly, but someone's already working on it).

      What I'd really like to see is a Linux port of Rhinoceros. This is a really great modeling program. It's loads more useful than AutoCad for designing (IMO), and it does solid modeling for a mere $800. In fact, this and a few games are the only thing that ties me to Windows at all. I'd be willing to fork out up to 500$ more to pay for the privlidge to use it on Linux, and I know there is demand for a port. So far they have shown no intrest at all...

    14. Re:First things first. by Codifex+Maximus · · Score: 2

      >I believe this method of software creation is
      >good for the Cathedral model, and with
      >well-funded programmers who program for money, it
      >can get done. But keep in mind, that since its
      >not incremental, its not exciting. DFD's on
      >paper, ERD's, are all boring, when you get down
      >to them.

      The SDLC was originally designed in the cathedral yes. However, that doesn't mean it's not effective. Better to design your house and then build it rather than the other way around.

      I don't find DFDs and ERDs boring - rather, I find them useful and time saving tools for designing software. Some of my best programming has been done AWAY FROM THE COMPUTER.

      >Unless you finish it all very quickly, you're
      >going to be stuck in very long design phases.
      >Unless you're an extremely good designer, you're
      >likely to hit some problems in the actual
      >implementation that may require refining the
      >design.

      You can use a hybrid of the RAD method and the SDLC as I suggested. The RAD part is building a UI for the users to toy with while designing and building the core of the app.

      >Also, I don't see how multiple contributors can't
      >fit into this well-framed process.

      Let each contributor have a group of related DFD/Pseudocode blocks along with the ERDs to clarify their data relationships.

      >I would also like to disagree with the
      >requirement of pseudo-code, as today's high-level
      >languages, such as Python, are pretty much as >high-level as pseudo code and correctly described
      >sometimes as "Running Pseudo Code". This also
      >means that their code, written correctly, is
      >_truly_ self-documenting, truly. Rarely is there
      >a weird piece of code that requires extra
      >documentation. I'm talking about the what and the >how, and not the general software architecture,
      >which should be documented separately.

      Well, as you say, Python can be a form of runnable pseudocode. I'm not a python user but I'd assume C would run faster under most circumstances? We pick the best language for the job. C will not be the *best* under every circumstance. Anyway, nothing wrong with using Python for a pseudocode RAD tool - so much the better! It would dovetail nicely with the UI RAD idea.

      >In summary, I think that your software creation
      >model is too "formal" in the sense that it will
      >not excite programmers, and will be very
      >difficult to get contributors from all around.
      >Excited programmers are better programmers.

      Better is subjective. I don't know about you but... I kinda like knowing what I'm to program before I reqired to program it and find out it's not exactly what the user wanted. An excited programmer, in my myopic view, is one who has the tools before him/her, clear program specs to work from, good pay and benefits and the skills to do the job. In the opensource world, pay and benefits can translate to notoriety and peer recognition as well as goodwill that can open doors.

      >Also, I think its a bit presumptious of you to
      >think you can know, to detail, the exact best way
      >for the program to be designed, and thus its
      >probably best to write it piece by piece, and see
      >where usability's taking you.

      I agree. You will not know the exact best way for a program to be designed... that is precisely WHY I gather information during the design stage. During the design stage, you are dividing the program up into these little logical parts that you write piece by piece.

      >An assumption of mine, is that most useful
      >features of a program are suggested at its usage
      >stage, and not its design stage - This means you
      >better minimize the design stage, and get to the
      >usage stage as soon as possible. Do you disagree
      >with this assumption?

      I agree that ideas happen during the usage stage. Sometimes you get deluged with too many ideas and never actually get a running program. You have to decide what is need and what is want - this requires analysis. You can also get so wrapped up in the UI that you lose your focus on the actual problem. That said, the UI is important! That is what the users will see and interact with. It should be efficient and enjoyable as possible. Minimize keystrokes and mouse clicks to get the job done. Watch the users use it - see what they have to do to use it. Make it easier!

      It's the Systems Development Life ->Cycle- which means that it is iterative. RAD is another tool that can fit right into the SDLC. No reason why you can't have your cake and eat it too.

      The SDLC is iterative. This means that ideas come in from the users, they get evaluated and prioritized, coders are then selected (or in the case of opensource, they select themselves) and the coding is done. Rolled out to the users for feedback again and again.

      --
      Codifex Maximus ~ In search of... a shorter sig.
    15. Re:First things first. by Dexter's+Laboratory · · Score: 0

      I disagree on the pseudocode part. It has never proven to be useful to me; the only times I've ever written pseudocode is when it's a requirement for the lab assignment.

      Pseudocode is perhaps the most unnecessary part of programming ever.

      Now, flowcharts are ok and sometimes useful. Not often, but it happens.

      What you really should do, though, is to make some class diagrams. That's all you need to do (except step #1: Jotting down all the functions and abilities the software will have).

    16. Re:First things first. by Ztyx · · Score: 1

      I agree. Try writing and think in the programming language you use and not some kind of "fake programming language" like pseudo code...

    17. Re:First things first. by Anonymous Coward · · Score: 0

      That said, the UI is important! That is what the users will see and interact with. It should be efficient and enjoyable as possible. Minimize keystrokes and mouse clicks to get the job done. Watch the users use it - see what they have to do to use it. Make it easier!

      Very important! Also make sure to preserve screen real estate. Many Unix and Linux programs are particularly bad at this point, whereas most Windows applications successfully conserve screen space. Remember, not everyone has large screens - and those who have will be confronted with ridiculously huge dialogs if you don't optimze them for space. Somebody above mentioned GIRAM, a linux 3D modeller: take a look at the screenshots and see how they waste screen space - and this for a program that is intended for model design (where you want as accurate as possible display of the model, not of the pushbuttons). EndOfRant.

      Another thing that I have observed is lacking in many 3D modellers is the possibility to enter exact numbers for all aspects of the model. If one really wants to do serious design one has to use numbers sooner or later.

  5. More like wait nine days by yerricde · · Score: 5, Informative

    Wait 3 months [and] Purchase 3D Studio Max

    If you can't get your software from 0 to at least barely usable in nine days, then wait for blender.org to go live on October 13. My $10 helped; did yours?

    --
    Will I retire or break 10K?
    1. Re:More like wait nine days by WhtDaUWant · · Score: 1


      It would deffinetly help to have something to look at as far as designing the program and Blender would deffinetly be a great place to start.

      P.S. - Please make the interface easier to use then Blender.

      --
      My little Universe is cool for the people who can fit inside it (being 250 6'4" there aren't that many who can)
    2. Re:More like wait nine days by Tablizer · · Score: 1

      Blender needs a serious interface overhaul, at least WRT mousing and hotkeys. Its interface is famous for scaring away all but the bravest of newbies.

      I would also like to see a design front-end to POVRAY. There is a shareware version called Moray that is not bad, but lacks some nice features found in other packages.

    3. Re:More like wait nine days by glwtta · · Score: 2
      My $10 helped; did yours?

      Well, my $75 did, and I am going to be there in Amsterdam for the release party - god I love me! :) (btw, I live in the US, so I'm quite excited about the trip)

      --
      sic transit gloria mundi
    4. Re:More like wait nine days by Art+Popp · · Score: 1

      sic transit gloria mundi

      "Thus passes the glory of the world"

      It's a perfect quote for someone applying one-upsmanship to a braggard's boast, sadly parallel to Mr. Bush's responses to Mr. Hussein.

      Way to go!

    5. Re:More like wait nine days by dindinx · · Score: 1

      Ever tried Giram? http://www.giram.org/ ?

      --
      DindinX
    6. Re:More like wait nine days by thogard · · Score: 2

      From what I can tell, it needs better examples of how to do the simple stuff. The last example I saw, went from makeing a sphere to making it move. I would like to see a good example of how to merge items together and make simple models.

      I make models for POVray in cycas which is an architecture program but it works fine for many types of modles.

    7. Re:More like wait nine days by Anonymous Coward · · Score: 0

      No. But I kept my $10 and still will get to use blender.

      And after saying that, I wonder how many people got at least a little irritated.

    8. Re:More like wait nine days by Anonymous Coward · · Score: 0
      "My $10 helped; did yours? "


      Why should I give them $10 when I do not use the program?


      Hmmm, let's see... support this program I will never use, or buy a 12 pack of Bud.

  6. I just noticed by Anonymous Coward · · Score: 5, Funny

    I know that this is probably the most intelligent audience to communicate with, and any feedback would certainly be appreciated.

    You're new around here, aren't you?

    1. Re:I just noticed by Anonymous Coward · · Score: 0

      Ah, you must be the poster boy for slashtardism.

    2. Re:I just noticed by Anonymous Coward · · Score: 0

      You got a more intelligent audience in mind? Really. I have yet to find one recently. That includes being mixing it in with lawyers (pretty impressive depending on who you end up with), med school (not surprisingly unimpressive), several computer clubs (decent), a supposed top 15 university (decent), top 5 grad/lab environment (probably the tops I've ever met)....most people don't have access to these. The only things that come to mind otherwise are national labs, political think tank organizations, and upper tiers of some major corporation or niche medium size business.

      What's the community you find so intellectually enjoyable? (Oh, crap, you're gonna say Mensa....forget I asked.) Your IRC buddies?

  7. team work by murat · · Score: 2, Insightful

    I think the first thing you should do is getting/recruiting yourself some programmers and designers and having a good team.

  8. It's called a Wheel(tm), and it's been patented by yerricde · · Score: 2, Funny

    you need some sort of mechanical device, perhaps one useful for motion. You should try a roundish shape

    That's called a wheel, and it's been patented (PDF).

    --
    Will I retire or break 10K?
    1. Re:It's called a Wheel(tm), and it's been patented by Tablizer · · Score: 2, Funny

      No problem. Open source cars will simply use triangular wheels. The ride may be a little bumpy, but it is worth it to send a message to those greedy bastards.

      Wheel show them!

      BTW, why can't those slimeballs patent spam and popup ads, and then hunt down the spammers and wack them in the wallet. That is how the patent system is *supposed* to work in my way of thinking.

      On a serious note (and to avoid "offtopic" mods), I am surprised that 3D software packages are not riddled with patent disputes. Some of the technologies involved are not trivial. It is a good thing that in the 70's and early 80's it was tradition to share such info.

    2. Re:It's called a Wheel(tm), and it's been patented by crosbie · · Score: 1

      Actually, I believe there are oval or rounded triangular wheels and someone has successfully created a vehicle (bicycle?) that runs quite smoothly using them. I saw this on TV over 20 years ago...

    3. Re:It's called a Wheel(tm), and it's been patented by bcaulf · · Score: 1

      Perhaps you are thinking of oval bicycle chainrings?

      "Biopace is a patented non-round chainwheel design made and licensed by Shimano."

    4. Re:It's called a Wheel(tm), and it's been patented by Tablizer · · Score: 2

      Actually, I believe there are oval or rounded triangular wheels and someone has successfully created a vehicle (bicycle?) that runs quite smoothly using them. I saw this on TV over 20 years ago

      If you have enough triangular wheels rotated just right, then they could "average out" to being round. A lot of work though to get around (pun) a patent.

    5. Re:It's called a Wheel(tm), and it's been patented by crosbie · · Score: 1

      Funnily enough I have a mountain bike with a biopace chainring. They seem to have stopped making them and the excuse I heard was that the irregular height of the chain caused excess wear on the derailleur or something like that.

      But, no, that's not what I was thinking of.

      I do now recall someone cycling round a TV studio on a bicycle with non-circular wheels. They were either oval or triangular - I can't remember which.

  9. You forgot... by nytes · · Score: 2, Funny

    Step 5: ???
    Step 6: Profit!

    (Ahh, the oldies are still the goodies :-)

    --
    -- I have monkeys in my pants.
  10. Scripting Language by Hal_9000@!!!@ · · Score: 4, Insightful

    For your builtin scripting language, may I suggest you *not* invent your own, especially for a small project. If it were me, I'd create a Perl module (probably a class of them) and use those for the scripting. That way your program has much greater power than it would with a custom language (think web-based 3D apps) plus it reduces learning curves. Think AutoCad/Lisp.

    If you're going to enter the big, bad world of 3D, the only way you're going to get noticed is if you can offer something really special. And not having to retrain all your programmers in a new language is something special. Being able to give an artist a copy of "Learnig Perl" and having them go to town is a lot better than trying to give them some documentation written by a programmer at the last minute.

    --
    My email is real.
    1. Re:Scripting Language by BitwizeGHC · · Score: 1

      For your builtin scripting language, may I suggest you *not* invent your own, especially for a small project. If it were me, I'd create a Perl module (probably a class of them) and use those for the scripting. That way your program has much greater power than it would with a custom language (think web-based 3D apps) plus it reduces learning curves. Think AutoCad/Lisp.

      With that in mind, it seems like Guile seems like a perfect choice for this sort of thing.

      Then again, AutoCAD has been heading down the Visual Basic track more and more lately...
      --
      N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    2. Re:Scripting Language by tc · · Score: 3, Insightful

      Scripting in Perl is fine, and I agree with the advice about not inventing Yet Another Scripting Language, but you definitely need to also allow people to supply binary plugins developed in their language of choice (typically C/C++). You're going to be chewing a lot of data in many cases - trust me, using an intepreted language to do non-trivial things to million-poly datasets puts a real kink in your productivity.

    3. Re:Scripting Language by leandrod · · Score: 2
      > it reduces learning curves. Think AutoCad/Lisp.

      That is only true if you assume someone is already familiar with Perl and procedural, structured programming. For a lay person Lisp is as great and easy a programming language as one could wish, and far more powerfull too.

      All things considered, the original argument by RMS is still valid. If one is gonna need a language, why not learn the one more powerful language in the world, that happens also to be among the oldest and easier to read? Lisp all the way...

      --
      Leandro Guimarães Faria Corcete DUTRA
      DA, DBA, SysAdmin, Data Modeller
      GNU Project, Debian GNU/Lin
    4. Re:Scripting Language by the+gnat · · Score: 2

      That's an excellent idea, and I was about to suggest the same thing. However, in this case I'd argue for Python. I'm not a huge Python junkie, and I actually use Perl for most things, but if you want it to be easy for non-hackers to script and extend you should choose a language with cleaner syntax. At the level you probably want, Python really will look like pseudocode. Perl just seems like a bad idea for this because the syntax is so. . . different. You really don't want people taking advantage of all the shortcuts it offers.

      I'm suggesting this partly because there's a really excellent molecular graphics package out there called PyMOL. It's got an OpenGL core written in C, but the application itself is essentially one giant Python module, with higher-level commands and APIs written directly in Python. It also has a simplified command language- so you can extend it three different ways, and control it two different ways. Unfortunately the code is not very well documented and it's essentially a one-man job- rather difficult for me to contribute. However, the product creates beautiful images and the overall design concept is very sound. I know that several other similar programs use the same model, one using Tcl instead.

      These aren't going to be directly useful for the task under discussion, but they are very similar- the more sophisticated molecular graphics programs really are like 3D modellers. It's be a good idea to check them out, since they're more accessible (i.e. open-source) and higher-quality than most regular 3D products. They're also all cross-platform.

    5. Re:Scripting Language by reversedNormal · · Score: 1

      Yeah, I agree completely. I was actually thinking of ECMAScript since a lot of people know it, and it is pretty straight forward to learn for those who don't.

    6. Re:Scripting Language by ivant · · Score: 1

      I'd go further and use the same language to create the prototypes. This way you get the API for the scripting for free and it fits better with the hole system.

      Lisp (and Scheme) is good for quick prototypes and I would have used one of these.

      But then again, personal taste has a lot to do in this kind of choices.

  11. Blender by bsDaemon · · Score: 2

    was not this recently purchased from the people and GPLd? rip them off. it's cheep and easy. or better yet, forget it and just help them?

  12. Look at the Blender Source by kbroom · · Score: 5, Informative

    Now that the Blender Foundation have collected all the money (100k.. wow) to buy the blender source from NaN, they will be releasing the source under the GPL very soon (paid members pre-release due tomorrow).

    Blender is a full fledged 3d program with some animation capabilities. Maybe looking at their design will give you some good ideas.

    1. Re:Look at the Blender Source by Anonymous Coward · · Score: 1, Insightful

      fucking excellent idea.

      no better way to get started then to look at how someone else has gone before you.

      one look at blender code, and you might go "holy shit forget it"....or maybe "man this is some elementary shit"

      mod parent up

    2. Re:Look at the Blender Source by /dev/trash · · Score: 0, Flamebait

      Why the wait?
      I think it's vapourware.

    3. Re:Look at the Blender Source by JaredOfEuropa · · Score: 2

      You say you want to have a solid design before starting to code? In that case you don't need to look at source code just yet. But by all means steal ideas during the design phase: scripting languages, ideas for the user interface.

      Get the things you are trying to build down on a conceptual level first... start from the basics: what is an object, a path, how will I represent them, how will I describe them, manipulate them, etc. Looking at the work of others will give you ideas for this, but try to think the basics up yourself first. Having a solid foundation of the concepts will make or break the expandability and flexibility of your program later. You will have changes of mind and new ideas during the detailed design and implementation phases, but if you thought your concepts through well enough, the ideas that govern the structure of your design and code will not change, not by much. The difference between good and bad design on conceptual level is like having a framework for your house made of steel girders, strong yet open to changes, or having it made out of ground chicken poo, doing the job at a glance but the slightest shock could send it crashing.

      Do not look at code until you are wrapping up design, and perhaps not even then. Working bottom-up on this scale will be the kiss of death for your project

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    4. Re:Look at the Blender Source by Anonymous Coward · · Score: 0

      damn...i didn't think of that. (seriously)

      sharp crowd

    5. Re:Look at the Blender Source by Anonymous Coward · · Score: 0

      For God's sake, don't look at Blender. I'd scrounge up $2k for Maya before I'd try to make anything with it.

    6. Re:Look at the Blender Source by Anonymous Coward · · Score: 0

      Aside from the funky mouse and keyboard interface, what is your specific complaint about Blender? Or is the UI enough to totally sink the boat in your opinion?

    7. Re:Look at the Blender Source by quinto2000 · · Score: 2

      what else is there in 3d modeling software besides UI? Renderers are not that crucial, with most/many people exporting to renderman for any serious output. Even animation is highly dependent on UI.

      --
      Ceci n'est pas un post
    8. Re:Look at the Blender Source by glwtta · · Score: 2

      I am curious - will they actually give you the source code to Maya for $2K? I thought that was just the price of one seat. Looking at the app doesn't help this guy, he knows how they work, he needs to know how they are built.

      --
      sic transit gloria mundi
    9. Re:Look at the Blender Source by glwtta · · Score: 2

      odd, most people who like Blender rave about the UI being its best feature...

      --
      sic transit gloria mundi
  13. Consider writing plugings by youBastrd · · Score: 4, Interesting

    3DS MAX and Maya pretty much do everything under the sun. If they can't do it natively, third-party plugins are a good way to go. If you need some functionality that's not there, write the plugin, surely you've got the skills to do that. These products are very mature already, nevermind their popularity and the amount of training users have invested in them.

    You've got an uphill climb if you want to write this thing from scratch.

    --
    No one has ever fired for blaming Microsoft.
    1. Re:Consider writing plugings by Tablizer · · Score: 1


      I would note that 3DMAX and Maya are around 2 grand a pop (unless you pirate). These days many computer people are not cash intensive.

      Maya does have a "student version" I believe. Some say it is still too crippled to learn the finer points with.

    2. Re:Consider writing plugings by gerbache · · Score: 1

      I may be interpreting the original incorrectly, but it sounds like he may be doing this more for the learning experience and fun than anything else. Sure he does talk about eventually wanting it to be multi-platform, but that doesn't mean that it isn't just a learning project.

      For someone who has used the various 3D programs and has a strong background in math, it actually sounds like a rather interesting project. I don't have anywbere near the knowledge necessary right now, but honestly, after a few years of looking into the material, it sounds like something that I would do just for the heck of it.

      Then again, I tend to be interested in things that most people think are really weird, so I may not be the best judge on that sort of thing.

    3. Re:Consider writing plugings by protohiro1 · · Score: 2, Informative

      To be fair, maya was written pretty much from scratch about five years ago. It borrowed heavily from PowerAnimator and Wavefront Advanced Visualizer (and whatever that wavefront dynamics software was) but it was still revolutionary. It was also written by a very small team. I think its worth a shot at any rate, I always encourage innovation.

      Why anyone thinks they got a deal by spending 2k less on max rather then maya is beyond me, by the way. But the maya vs max thread is a flamewar for another time...

      --
      Sig removed because it was obnoxious
    4. Re:Consider writing plugings by reversedNormal · · Score: 1

      Yes, those products are very inspiring, and I would love to be able to create software that even comes close to competing to them (especially Maya). As for me, I'm a purist.

    5. Re:Consider writing plugings by Shinobi · · Score: 1

      Actually, Maya took 9 years from the start of the project to the release of Maya 1.0. For the first 4 years, no code other than pseudo-code was made, everything was planned, designed and researched during those 4 years, then 4 years for coding, and 1 year of beta testing, which included ILM, D2 etc testing it out.

      I had the opportunity to talk to a few persons from the development team during a pre-release demonstration, and I learned the above from them.
      And the team wasn't that small. Heck, it included over 20 programmers. And they got lots of outside help in the way of ideas that had been really thought through etc.

      Maya is probably one of the best examples of why actually spending time doing the general design, UI workflow process etc before starting the coding is a Really Good Thing. And no, UI workflow process is not only about the GUI.

      And I just gotta say that I love MEL, and the ability to rewrite large parts of the GUI through it =)

  14. File format by maddugan · · Score: 1

    Figure out what file format you are going to use and what information you need to maintain to display a 3d object. Also remember tha current versions of Max and Maya were not written from scratch rather, there have been several incantations. Maybe you should target the feature set of early modelers and then revision up to current standards.

    1. Re:File format by Anonymous Coward · · Score: 0

      Incantations? You mean incarnations. Incantations are what wizards recite.

    2. Re:File format by gjbivin · · Score: 1

      Knowing how software is written, "incantations" is pretty close to the truth...

  15. Are you familiar with the Blender project? by ekrout · · Score: 2, Informative

    You can read more about it at http://www.blender3d.com/. Here's a brief synopsis of their goals:

    Goal 1
    Make the sources free

    Goal 2
    Establish artist/coder services

    Goal 3
    Make Blender a better product, and promote free access to 3D technology in general

    So, not to totally discourage you, but perhaps you could simply learn how the code works for this project (which is very mature and powerful) and then contribute to it.

    Good luck regardless of whether you start your own project or learn about Blender and help those folks out. Most importantly, have fun!

    --

    If you celebrate Xmas, befriend me (538
  16. Maya is probably the result of 2-400 man years by SIGFPE · · Score: 3, Insightful
    So get some people to help you.


    Here are some suggestions:

    • Make sure the system is fully scriptable. And try to use a real programming language, not something like Mel in Maya.
    • One thing Maya gets right is its use of cached lazy evaluation and a pull through flowgraph model. If you want any degree of sophistication I think this is essential and your first code ought to be designing the architecture of your flowgraph processing.
    • Make everything procedural. You should be able to put expressions anywhere in a scene.
    • Think hard about an API for plugin writers to make it easy for others to extend it. You're going to need all the help you can get.
    --
    -- SIGFPE
    1. Re:Maya is probably the result of 2-400 man years by Anonymous Coward · · Score: 0

      One thing Maya gets right is its use of cached lazy evaluation and a pull through flowgraph model. If you want any degree of sophistication I think this is essential and your first code ought to be designing the architecture of your flowgraph processing.

      May I ask what "flowgraph" is?

      Make everything procedural. You should be able to put expressions anywhere in a scene.

      If you want that much programming control, perhaps POVRAY would be a better choice.

    2. Re:Maya is probably the result of 2-400 man years by wbattestilli · · Score: 2

      Disclaimer: I work for Alias|Wavefront.

      Just a word of advice when designing this...Be careful how you copy Maya's dependency graph stuff. While it is very cool, Alias|Wavefront, in general and Kevin Picott, specifically, holds several patents that describe the dependency graph's implementation.

      That being said, I think that Maya is one of the most elegently designed pieces of software that I have had the pleasure of working with. It would be a good place to start for ideas.

    3. Re:Maya is probably the result of 2-400 man years by protohiro1 · · Score: 1

      Please tell Mr. Picott that he is a genius. I have NEVER used a software product this well designed. Its as if someone sat down, thought about what the problems were for artists in the real world, solved them and then developed the most efficient interface ever created.

      --
      Sig removed because it was obnoxious
    4. Re:Maya is probably the result of 2-400 man years by SIGFPE · · Score: 2

      perhaps POVRAY would be a better choice

      Not if you want quality and decent render times!


      Tools like Maya have an underlying flowgraph model. Every operation you perform is added to this flowgraph and then the displayed model is a result of pulling data through this flowgraph. So suppose you do A, then B and then C. Internally it's stored as A->B->C. If you decide you did A wrongly but want B and C to remain the same you can edit A directly and make A'->B->C and then pull the data through again. A practical example: you might make a curve, form a surface of revolution from it and then apply a random jitter to the vertices. With a flowgraph model you can edit the initial curve without having to undo the later operations and then redoing them. Updating the curve automatically updates the final jittered surface of revolution. It means that your entire construction history is always available to be tweaked at will. Useful when a visual effects supervisor comes along and says "I think it looks to look a bit knobblier".

      --
      -- SIGFPE
    5. Re:Maya is probably the result of 2-400 man years by reversedNormal · · Score: 1

      Thank you for this feedback, I'm glad you mentioned the DAG issues. I agree that Maya's implementation is elegant and intelligent, and hope to incorporate that level of sophistication into my software. Of course, I would like to burn my own trail and not infringe on anyone's intellectual property.

  17. Needs a lot of experience by coljac · · Score: 5, Insightful

    My intuition says that there is years of work in this project. And, you ask, how does a professional programmer approach such a task? This kind of project is difficult and expensive even for teams of professionals with a lot of money behind them. They start with whiteboards, and use cases, and specs, etc.

    If I were you, the first thing I would do is identify a very small subset of the functionality - say, the ability to parse and view a .mdl file - and try that first. Perhaps there's a need out there for a model viewer. A project of the scope has a chance of completion, and if you're still enthusiastic at that point you can expand the scope of your app, building on the code you already have.

    Again, I'm sure you're smart and understand coding and the right physics, but the one thing the experience of a professional programmer would give you is a sense of the scope of this task.

    --
    Everyone knows that damage is done to the soul by bad motion pictures. -Pope Pius XI
  18. probability by khuber · · Score: 2, Redundant
    Probability this goes anywhere: 0.

    Anyone who had the drive to complete something like this would already be coding.

    Silly.

    -Kevin

    1. Re:probability by DetrimentalFiend · · Score: 1

      Exactly...anyone who has to ask this question of slashdot obviously doesn't have the expierence to develop something of this magnitude. Maybe he could be helpful to the blender project, but it isn't a sure thing.

      Anyway, my advice is to work on blender. Saying you want to create the next 3dmax is like saying that you want to write the next linux--you're probably in way over your head.

    2. Re:probability by Anonymous Coward · · Score: 0

      I wonder if anyone told Linus what he was doing was like trying to make the next Windows and that he was over his head.

      I don't see the point of your project, but what do I know. Good luck.

    3. Re:probability by khuber · · Score: 1
      Just for a tiny tiny hint of the complexity of Maya (which I'm sure is another order of magnitude beyond the Linux kernel), here's one entry from Alias's history.
      1983 - Development of first code starts Dave Springer supervises the project involving 300,000 lines of code written in C. This huge undertaking would require 36 man-years of programming or 18 programmers writing for two years.

      Maya itself has existed since 1993 so it has 10 years of history. Now if this guy had said "something like a really crappy Caligari Truespace" or "a cool plugin for Maya", I might buy it. Even assuming he has the technical knowledge (which I doubt), one developer probably couldn't develop Maya in a lifetime. Alias had a history in the industry so they had funding to get going and I'm sure they had numerous developers and existing tools to work with.

      I'm not trying to piss on this guy's enthusiasm. I certainly wish him luck on whatever project he works on. But realistically speaking, he needs to set a goal reachable by a mortal.

      -Kevin

    4. Re:probability by EZmagz · · Score: 1
      "Anyone who had the drive to complete something like this would already be coding. "

      Hey, come on, some of us have the drive to do this kind of thing, but we're just stuck spending our freetime downloading pr0n and posting on /. how 1337 we are.

      Wait, shit...

      --

      "Hell hath no fury like a woman scorned for SEGA. ..."

    5. Re:probability by reversedNormal · · Score: 1

      I appreciate your response and agree with you on Maya's complexity and the humanpower it took to create it. Of course, if I planned to write this entire project by myself, I would be busy for every moment of the rest of my life! I definitely plan on opening the project up for community development as soon as I have a solid codebase and design plan. Thanks!

    6. Re:probability by Dexter's+Laboratory · · Score: 0

      Yes Linus was in way over his head. No, wait... he wasn't.

    7. Re:probability by DetrimentalFiend · · Score: 1

      But Linus has the help of hundereds of people in developing Linux. I doubt this person will have the same support.

  19. A Few questions for you... by Schnapple · · Score: 5, Insightful
    Although your question was very specific in some respects, it was vague in others. Possibly purposely. Still, I have a few questions of my own for the original poster:
    1. Is your intent commercial software, free software or other?
    2. If your intent is free software then are you thinking Open Source?
    3. If your intent is commercial software, then why do you think this product would be any better than the other commercial packages out there?
    4. What is the overall goal for this - professional quality animation? Movie or TV quality work? Video Game design?
    5. Are you working alone?
    6. How is it that you will have the time to devote to this? What makes you think you will finish?
    7. And finally, if it turns out that you are an individual from a commercial organization willing to undertake such a tremendous task in a crowded field with such strong players, why do you think Slashdot will be a good place to get meaningful advice?
    Don;t get me wrong - I'm not trying to slam you or your idea or anything but these are the questions that popped into my head when I read this. I know history is filled with projects like this but for every Linus Torvalds who sits down and makes his own OS (and yes I have read the GNU/Linux FAQ) there are thousands that get 10% in and say screw it.
  20. Check out OGRE ... by Scotch+Game · · Score: 5, Informative

    Steve Streeting had a similar concept in mind when he implemented his OGRE 3D Engine. He also has designed his engine so that it is written in C++, has a modular plug-in architecture that enables extensibility without recompilation (for certain portions of it, obviously), offers multiple 3D API support and builds both with MSVC++ 6 & 7 and also gcc 3+. The MS builds require STLport, an open-source replacement STL that's more compliant than Microsoft's -- ha, imagine that ... -- but that's along the lines of what you're talking about.

    He's got a number of interesting design ideas and, from what I understand, is fairly accessible.

    Also, and let me offer this, I have no idea about your programming skill and knowledge other than what you've claimed, but please ignore whatever posts come up that try to tell you how incredibly difficult this all is and how you're just better off joining an open source project or buying a package and saving yourself the hassle. If you want to do it, can really do it, and enjoy doing it then, not meaning to quote Nike's marketing department or anything, but: Just do it.

    1. Re:Check out OGRE ... by Osty · · Score: 1

      The MS builds require STLport, an open-source replacement STL that's more compliant than Microsoft's -- ha, imagine that ...

      Does it still require STLport even with VC++.NET? VC++6's STL was pretty terrible, but then it's also quite a few years old, and the STL version they used was even older than that (deadline pressures and all, you know -- can't go adding in the latest&greatest when you've got to ship). VC.NET's STL is much better. I haven't seen any comparisons between it and STLport, though, so I don't know if there's something STLport does that VC.NET's STL doesn't.


    2. Re:Check out OGRE ... by p3d0 · · Score: 4, Insightful

      Unless I'm greatly mistaken, OGRE is nothing like a 3D modeller. It is a 3D realtime (ie. game) rendering engine.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    3. Re:Check out OGRE ... by cthulhubob · · Score: 3, Informative

      He's on the right track - the difference isn't so great.

      A good (or even decent, these days) realtime 3D engine is going to support skeletal animation, so you're halfway to modeling movable meshes.

      There's two real differences, and one of them is simply a matter of what data you put in, and the other is quickly becoming an actual part of realtime engines (I suspect either the next release of a "major" game, or the one after that).

      The first is simply that if you add vertices and pretty textures and procedurally generated effects and other eye candy to the point where you're only getting a fraction of a frame per second, it's no longer realtime even if you're still using the same engine, right? ;)

      The second big thing is doing *both* halves of the IK function per frame. Currently in game development, the first half of IK work (placing the targets for the movement and recording keyframes) is done in a 3d modeling program, and the second half (interpolating between keyframes to actually generate animation) is done in the realtime engine.

      UT2003's "ragdoll" system is an example of doing both halves of IK in realtime (or per frame, if you have enough data that you're not running in realtime - see above). A 3D modeling program would allow you to set an arbitrary situation, put force in the anchor points, and generate an animation.

      In the near (2-4 years) future, models for realtime engines won't require keyframes to make the skeletal animation work. You'll just drop in a model with some metadata attached to it that says "this is a hand" "this is a foot" "this is a knee" and the program knows that to take a step, it should move the foot forward a certain amount - the reason engines will move in this direction is because that will allow their animations to respond to the environment better, cleaner, and without extra work on the artists' part (in fact, less work on the artists' part). For instance, placing one foot on a stair and the other foot on the step below, or being able to block a punch thrown at the character's face without "teleporting" both characters into the appropriate positions for the pregenerated animation (or worse, allowing one character's arm to clip through the other's).

      So, to make a long point short - there's not too much difference between making a realtime engine and a non-realtime engine. Any optimizations that make it run faster are still good, as long as you're not sacrificing quality to do so. You want the physics to work realistically regardless (for your personal value of realistic, of course). So what's the diff?

      --

      In post-9/11 America, the CIA interrogates YOU!
    4. Re:Check out OGRE ... by Jotham · · Score: 1

      yes, but piggy-backing onto of a 3D engine can save ALOT of work, especially if the scene-graph/manager, objects, etc are well though out and easily extended.

    5. Re:Check out OGRE ... by steve_streeting · · Score: 1

      For info, VC.Net's STL still suffers from serious flaws which is why we still require STLport in all MS builds of OGRE. They didn't actually fix very much in the STL in VC.Net, they deferred a lot of it until the first service pack. Cheers Steve

  21. Man, you're a glutton for punishment! by Anonymous Coward · · Score: 0

    Why?

    Looking to break into the animation software market?

    Hire a team of programers - that's a start.

  22. About the design by Anonymous Coward · · Score: 1, Informative

    Regardless to what your general goal is, I would suggest you to look
    at some of designs behind Visualization Toolkit (VTK). Some important
    aspects include: unified API to all classes, reference couted object
    management, platform independent build system, and nightly checking if
    code compiles, regression tests, etc.

    Another thing you need is to design with scripting in mind. For
    example, almost every class in VTK can be accessed from Tcl, Python,
    and Java, with (almost) no work on developers side. Classes are
    wrapped with a fairly straightforward wrapping code, so it is
    relatively easy to add scripting language support. The fact that
    scripting is important you can see from a great success of AW Maya.

    GUI is probably the most important part of such a tool. Make sure for
    GUI to be easy to use, clean, and make sure it is scriptable. In AW
    Maya and Paraview you can modify every aspect of GUI through scripts.

    Good luck. Here are some url's:

    http://www.vtk.org
    http://www.paraview.org

  23. Have you considered C# by egg+troll · · Score: 4, Insightful

    As much as FSF advocates are pained to admit it, C# is going to become the de facto programming language in the next few years. By writing your program in C#, you'll be the first 3D animation package to use this, and take advantage of the power of .NET. Since there are already several packages similiar to yours, you have to do things like this to make your project stand out.

    Good luck!

    --

    C - A language that combines the speed of assembly with the ease of use of assembly.
    1. Re:Have you considered C# by Anonymous Coward · · Score: 0

      Put the crack down now and get some help.

    2. Re:Have you considered C# by Anonymous Coward · · Score: 0

      nah, use visual basic .net

    3. Re:Have you considered C# by Anonymous Coward · · Score: 0

      C# is going to become the de facto programming language in the next few years

      more like in a few million years, when Java 20.5.5 will come out and will beat it in any benchmark

    4. Re:Have you considered C# by be-fan · · Score: 2

      Heh heh. Newbs are so funny. First its VB. Then its Java. Now its C#. Meanwhile, everyone is STILL USING C.

      --
      A deep unwavering belief is a sure sign you're missing something...
    5. Re:Have you considered C# by Anonymous Coward · · Score: 0

      Actually, most people are using C++, followed by Java in the #2 position.

      Check the 'jobs wanted' section of anything for verification.

    6. Re:Have you considered C# by Anonymous Coward · · Score: 0

      By the time he completes this project, C# will already be an end-of-life product and Microsoft will be pushing the successor to C#'s successor. Given the scope of the project, he'd be better off picking a language that won't change much... like Fortran, C++, Common Lisp, Scheme, etc. for the core logic and slap on proxy code to interface with any external APIs that he needs to use.

    7. Re:Have you considered C# by Anonymous Coward · · Score: 0

      Actually, we're shipping our main product written in VB (VB 6.0, even). It's large, fast, extensible, well documented, and sales are going great.

      Sometimes it ain't the language, its how you use it...

    8. Re:Have you considered C# by fault0 · · Score: 2

      > Heh heh. Newbs are so funny. First its VB. Then its Java. Now its C#. Meanwhile, everyone is STILL USING C.

      Uh, in what world is everyone using _C_?
      C is probably less popular than VB, Java, or perhaps even C#.

      Anyways, most people who bash C# are people who haven't used it. I know because I did until a week ago when I got a copy of VS.NET. I was thinking of checking out managed C++, but I gave C# a try. I'll have to say that's a very pleasant language to work with. Anyone whose done any coding in C++, java, delphi, or even VB should pick it up quite fast.

      And also, VS.NET is a great IDE to work with.

    9. Re:Have you considered C# by Anonymous Coward · · Score: 0

      That's incorrect. Microsoft has said that .NET (specifically windows.forms) will eventually replace MFC. Also, VB is slowly going to be _slowly_ phased out in favor of C# (have you noticed how similiar C# and VB.NET's syntax is?).

      Basically, Microsoft is betting a lot in C#. They want to make C# the predominant language by the end of the lifeline of VS.NET, and the de-facto language by VS8. Support is of course planned for C/C++ in VS8 (which will probably come as an upgrade package for VS.NET), but only for niche areas such as driver development and legacy MFC apps.

      The appeal of C# is primarily than managed C++ is quite clunky and slow compared to (C++ + MFC) or straight C#.

    10. Re:Have you considered C# by FuzzyFurB · · Score: 1

      Lovely, and you'll be writing a piece of software that only runs on Windows. I get the feeling that isn't what you want. I suggest finding a group of individuals with similar interests, writing it in C++, and using Qt for the GUI since it's very portable...

      --
      Will Stokes Album Shaper http://albumshaper.sf.net
    11. Re:Have you considered C# by ari_j · · Score: 1

      Have you heard of Mono?

    12. Re:Have you considered C# by Anonymous Coward · · Score: 0

      > Uh, in what world is everyone using _C_?

      We are talking *serious* programming here, not 31337 wanabies that think that VB is a real programming language.

      Can you tell me of a *single* professional app written in VB/C#/Java?
      I would even say that there are more industrial strength software written in Perl(and God knows how much I hate it) than in VB or C#
      (eg. Bugzilla, it sucks, but scales very well to a few hundred thousand bugs + almost as many users)

      Except for java in the server side, where it is actually used for some serious tasks, I would say that 99% of the professional software out there is written C/C++

      Yea, even Dennis Ritchie has admitted that VB is the most "popular programming language" but just because it's used by millions of morons doesn't make it any better.

      If you are a professional/serious programmer, you program in C, and if you are lucky, maybe some Python too, *period*

      Nothing makes me more sick than VB programmers with inferiority complex(that is, all of them) trying to convince the world that VB is a real programming
      language... you could better try to convince me that the Earth is flat...

      > most people who bash C# are people who haven't used it.
      I have used it, and what can I say, if I had to use something like that I rather use Java where are I can take adventage of all the great work of the Jakarta people

      > And also, VS.NET is a great IDE to work with.
      Vim works fine, if I need more bloat I will run emacs, thank you.

      \\k

    13. Re:Have you considered C# by Anonymous Coward · · Score: 0

      And what is this program? Another shitty desktop wallpaper changer?

    14. Re:Have you considered C# by fault0 · · Score: 2

      > Uh, in what world is everyone using _C_?

      I was taking about C, not C++.

      No, VB isn't used in many real industrial-strength programming situations, but I suspect C#/VB.NET definatly will be. C# in many ways is just VB.NET with a more C-like syntax and Java-ish and Delphi-ish language constructs. Microsoft is making a huge push to C#, and whatever Microsoft makes a big push in usually succeeds, especially when they want to kill of competition. Their primary goal is to kill off java, but with the gradual depreciation of MFC, many C++ programmers will switch to C# with the next refresh of VS. Conversely, many VB programmers will also switch to C#, by first learning VB.NET.

      > And also, VS.NET is a great IDE to work with.
      Vim works fine,

      Very few professional programmers use vim or emacs anymore on non-UNIX platforms like Windows.

    15. Re:Have you considered C# by Anonymous Coward · · Score: 0

      C/C++ are still among the most popular langauge. A lot of applications are still written with them. And as far as I know, MS has not attempted to develop the next version of Windows with VB yet. Nor Sun is going to develop the next version of solaris on java. Nor are firmware or embedden applications going to be developed with c#. You are just looking at the world from your point of view which is rather narrow.

    16. Re:Have you considered C# by be-fan · · Score: 2

      Almost every major open source project is in C or (sometimes) C++. Most major Windows programs are in C. It is only in custom programming situations that programs are writting in things like Java or C#.

      --
      A deep unwavering belief is a sure sign you're missing something...
    17. Re:Have you considered C# by steve_streeting · · Score: 1

      I think the whole argument is pointless. I've got 10 years programming experience in a great many languages (including all the ones listed here - including COBOL for gods sake) and there is no such thing as a 'most popular' or 'best' language. Each has it's strengths and weaknesses in different contexts. So you're not going to write an o/s in VB, nor are you going to write a business app in assembler. Horses for courses. These arguments are all to do with opinion and personal preference rather than describing the 'world order'. And for the record, my personal preference is C++ / assembler for performance code, Java for business apps and pretty much any GUI builder for prototyping (yes, including VB). I consider C# to be a blatant, almost offensive plagiarism of Java (just less mature and with less features) so I see no point using it when I have Java available. I wouldn't _choose_ to use COBOL for anything, but circumstances have made me learn it. ;) But these are preferences, not facts. You'll likely find that a good proportion of the worlds systems are in COBOL or FORTRAN numerically speaking, but that doesn't mean they're the best does it? Looking down your nose at people because of the language they use is very immature; at the end of the day the content of the code is far more important than the language used to write it.

    18. Re:Have you considered C# by be-fan · · Score: 2

      I wasn't pushing a particular language as the best. My post was a reaction to the original poster who claimed that in 5 years time everyone would be using C#. I was pointing out that everytime one of these new languages like Java and C# come out, everyone claims that C/C++ is finally dead, but those claims have yet to come true.

      --
      A deep unwavering belief is a sure sign you're missing something...
  24. QT by Vardamir · · Score: 1, Redundant

    You may want to take a look at using Trolltech's QT for the GUI; it is very portable and already has nice support for OpenGL.

  25. Mauybe you've already done this but... by TheAwfulTruth · · Score: 3, Interesting

    The first thing to do is define your target audience. There are already so many 3d modeling/animation programs out there, what is it you are trying to do by making a new one?

    There is a reason why people are willing to pay hundreds and thousands for Maya and 3ds. They are THE standard and they work great. And if that doesn't matter to you then Martin Hash's Animation Master is an amazingly powerful set of programs for dirt cheap.

    So if it isn't to be either of those then what? The first 3d program with a truly easy to use interface? (That may not even be possible, but it would be a godsend)

    Before thinking about programming "para-dig-ums", I'd concentrate on what the "product" (Free or not) really is. Believe it or not, desighning the code framework for the internals and drawing the 3d elements on screen is the EASY part. Getting a good, no make that excellent, "User Interaction" going on what is likely the most difficult thing anyone does on a computer is far more work.

    --
    Contrary to popular belief, coding is not all free blow-jobs and beer. Those things cost MONEY!
  26. if you have to ask slashdot... by yorgasor · · Score: 5, Insightful

    I think this is one of those situations where if you have to ask slashdot, you're not up to the challenge ;)

    --
    Looking for a computer support specialist for your small business? Check out
    1. Re:if you have to ask slashdot... by Anonymous Coward · · Score: 0



      You mispelled, "challange", you farging idiot.

      Hey, I've been involved with *real* engineering that did not involve computers for about 3 years. It is always amusing to see the poseurs here.

      What can I say? Send the best and brightest back to elemental skill-teaching and make them learn all that stuff we discard simply 'cause it's too hard.

      The best and brightest (as USA likes to promote) is not native, it's bought, rented and compromised.

    2. Re:if you have to ask slashdot... by Anonymous Coward · · Score: 0

      You're joking, right? Please tell me you're trolling!

  27. For what purpose? by tc · · Score: 5, Insightful
    A fully-featured 3D animation package is pretty damn huge. What is your intended purpose in building your own, rather than using an existing package? I assume that it is simply for fun, or perhaps you have a more ambitious goal of creating an open source 3D modelling package that might be a replacement for Max, Maya et al?

    If you are intending a serious replacement for professional packages, perhaps you need to talk to some of the users of those packages. I'm sure some game developers (just as myself) and animation folks lurk on Slashdot, but to get really great feedback you really ought to go to a more special purpose forum.

    That said, some things I'd consider if you're planning a truly professional quality package are:

    - Support and documentation. Especially really great documentation and samples. Plan a lot of time on this. Getting this piece right will pay for a lot of fuckups on the rest of the design.

    - Extensibility. Every pro user I know uses an array of in-house extensions, for everything from custom data format importers and exporters to plugins for procedural geometry, custom shaders, special lighting models, and a whole slew of other things. Make everything scriptable, overrideable, and customisable. Consider writing the bulk of your standard features using the same toolkit people will use to write plugins, because then they serve as sample apps.

    - Consider providing compatibility modes for people migrating from other pro packages. Artists get very set in their ways. Unless you have a truly revolutionary and more productive UI, follow some of the existing conventions, or at least make it an option.

    - Provide a batch processing mode, so that offline tools can invoke the power of your package without firing up the whole damn UI. In the games business, we have a lot of build process running on our artwork from assorted batch files, Perl scripts, and whathaveyou. I'm sure the same is true in other pro environments too.

  28. Mod parent up by asland · · Score: 1

    The person asking this question will not be able to complete this programming task if he has to ask questions like this one.

  29. OpenGL sites by willpost · · Score: 2, Informative

    Take a look at this website.
    It has plenty of tutorials and downloads on OpenGL.
    There's also a large message forum.
    http://nehe.gamedev.net/

    This one is a reference to the OpenGL Commands
    http://www.eecs.tulane.edu/www/graphics/doc/OpenGL -Man-Pages/index.html

    1. Re:OpenGL sites by *xpenguin* · · Score: 2

      You better already know everything about OpenGL if you're writing a 3D modeling package.

    2. Re:OpenGL sites by Anonymous Coward · · Score: 0

      You might as well also use something uptodate... have a look @
      http://www.3dlabs.com/support/developer/ogl2/in dex .htm

  30. animation by Anonymous Coward · · Score: 1, Informative

    First, get every animation package you can get your hands on and use them (don't forget Blender, Alice under squeak). Try building animations with programming - and use several backends (POV, BMRT, OpenGL, java3d and so on).

    First (plus). Decide if you really want to do this, or would be willing to (say) modify Blender.

    Second. This is a fairly large project so finding assistance would be a Good Thing. Get your assistance to criticize, add, delete and so on.

    Third. Plan it out beforehand. Building a prototype (use a RAD tool if you can) can be valuable. Plan for staged completion (static first, backend done here, UI there, animation...).

    Fourth. High level design decisions. Would you want a low level api so that it could be programmed from other languages (ie guile, perl, python, .net etc)? (Hint: Yes)

    Fifth. Sketch (at least) your goals (see above), it helps here to build scenarios from the user level (things like "I want the user to be able to do this with this kind of actions") Write them down as formally as possible. Differentiate between UI and lower level support routines and API's

    Sixth. Write down your api as formally (use scenarios here too) as you can. Preconditions/postconditions will help a lot.

    Seventh. Iterate First through Sixth till you're satisfied things wont change too much.

    Finally. Code.

    Have fun

  31. Get A Lawyer by Anonymous Coward · · Score: 1, Insightful

    That area is chock full of software patents to unknowingly violate.

    1. Re:Get A Lawyer by Anonymous Coward · · Score: 0

      >That area is chock full of software patents to unknowingly violate

      that protect really intellectual property, not bogus, halfwit, homework grade code most people whine about.

    2. Re:Get A Lawyer by Anonymous Coward · · Score: 0

      Or move to Europe.

  32. haha by Anonymous Coward · · Score: 0

    Why not list DirectX first, weenies?

  33. lightness for rightness by 10am-bedtime · · Score: 1
    do it in r5rs scheme, as implemented by guile-1.4.x. this helps me improve guile (to the point of compilation) and helps you work in a rapid prototyping fashion. screw the "joy of implementation", get heady on the joy of design.

    if your personal temperament allows working with other people, design the core well and bask in the ensuing community effort. if you are more the lone wolf, rapid prototyping (currently incarnated under fad name "extreme programming") is even more indicated (in the medical sense) because you can (re- re- re-) design everything w/o undue discomfort. you could probably post a complete app in a few days, why not?

    (do it right and we'll hook it up to emacs, oh yes.)

    good luck!

    thi

  34. Take a smaller bite by Anonymous Coward · · Score: 0

    What you want to do will probably take more time that you will have available over the next 10 years.

    Projects like 3D Studio Max and Maya are designed by developers who have had years of experience developing previous versions of similar software. Then it takes a fairly large and experienced team to create a program such as 3DSMax or Maya.

  35. The Professional Approach by Anonymous Coward · · Score: 0

    How would a _professional_ approach it?

    He would use the existing tools because he would be too busy being a professional to fuck around reinventing the wheel.

    What does this have to do with _you_?

  36. Incremental work. by Peaker · · Score: 5, Insightful

    An important thing to remmember, especially for motivational projects (projects that require a lot of motivation to keep going), is to write code incrementally.

    One of the best methods I know to write code incrementally is to rapidly model it in a Rapid Development language such as Python.

    Since I get excited by seeing results quickly, I'd probably start by deciding on a GUI toolkit, and find some Python bindings for it. Perhaps an OpenGL GUI of my own, in any case, that's where I'd start. Whatever excites you the most (Perhaps rendering ray-traced images of simple objects excites you, and you can start there), is where you should start. As long as you're excited about what you're doing, you can easily keep on going.

    Then, when you have a GUI (Or a simple renderer for that matter), you need to generate "stubs" for other components. There are various meanings of the word "stub" flying around, so I'll explain mine: A simple replacement of the interface a software component, that is trivial to implement, lacks any of the functionality, and is intended to later be re-written.

    This enables you to work on an exciting Skeleton of your program, that lacks almost all of the functionality, but there is already a bit of something very exciting to you, and perhaps to others who share your interests, to work with.

    Notice this is the same method used in the early development of Linux.

    Linus provided a very simple Skeleton of a Kernel, with either stubs or extremely naive implementations of almost all kernel subsystems. This is much better than the alternative, of trying to create the 2.4.19 kernel, component by component, from scratch.
    Linux 2.4.19 shares very little in design and in code with Linux 0.1, and the actual implementation decisions of Linux 0.1 don't really matter at all now.

    This is why I emphasize that you should start before you know exactly where its going, because there's a good chance you'll be stuck planning it forever, if you try to get it all right in the first time. If you don't bind yourself to backwards compatability, it doesn't really make a difference what kind of design error you make now, it can be corrected with time and with rewrites. Don't worry - rewrites are much shorter than the original designs and writes, as they come after a lot of experience, and can often reuse most of the code.

    Keep excited, start coding. Whenever there are tidbits of work you don't like doing, but must, keep in mind how the great cool exciting things that depend on it will look like.
    Don't code without design, but do code what little parts you know the design of already.

    1. Re:Incremental work. by Tablizer · · Score: 1

      One of the best methods I know to write code incrementally is to rapidly model it in a Rapid Development language such as Python.

      As much as I am a fan of "dynamic" languages, I think for this *particular* domain Python is too slow. 3D graphics are very CPU-intensive.

      Maybe some parts can be in C or C++, but others in Python, depending on speed needs.

    2. Re:Incremental work. by fault0 · · Score: 2

      > One of the best methods I know to write code incrementally is to rapidly model it in a Rapid Development language such as Python.
      Since I get excited by seeing results quickly, I'd probably start by deciding on a GUI toolkit, and find some Python bindings for it.

      Or you could just do the whole thing in a RAD environment (Delphi, kylix, VB.NET, C#.NET). The last one is particularily good for new development in Windows.

    3. Re:Incremental work. by AceMarkE · · Score: 0

      I don't think he was necessarily saying use Python for the entire program. And yes, in the end Python _would_ probably wind up being a little too slow.

      On the other hand... one of Python's strengths IS the ability to rapidly put something together. Far better to go through 5 or 6 iterations of the interface with Python + (insert GUI toolkit here), decide what works, and move on to the next stage, then to take however many times longer using C++ or C#. Heck, for that matter, you could easily do large portions of the program in Python, then replace them one by one with C++ for more speed. They don't call it "executable pseudocode" for nothing.

      In all honesty, I've never worked on a project ANYWHERE close to the size he's talking about, but based on my (admittedly limited) tidbits of experience, prototyping in Python is an excellent way to go.

      Mark Erikson

    4. Re:Incremental work. by JudasBlue · · Score: 1

      Python is basically a RAD environment. The only difference between this and the stuff you named is that Py is free software and it is cross platform by nature.

      And that last is important, because writing a real 3d modeling ap and tying it to an OS like Windows where less and less real 3d work is happening doesn't seem wise.

      --

      7. What we cannot speak about we must pass over in silence.

    5. Re:Incremental work. by occam · · Score: 2

      It is interesting to note that while python is slow like a typical scripting language now, it may not necessarily be slow in the future (i.e., before this program is ever finished 1/2 :-). I have some suspicions that python 3.0 (2.2 is current version) will make a few changes to the language to allow it to speed up via java (jython) or just natively with an incremental compiler (a la java). For instance, it would be nice if not all numbers had to be objects (as they are now in python's very pure OO world). Such a change wouldn't violate most program semantics (since few programs subclass or customize numbers!), or perhaps there's a technique for providing the illusion that numbers are objects but treating them as CPU-native (until necessary). Smalltalk implementations did that.

      Anyway, current python is your typical (slow) scripting language (but not too slow), but won't necessarily still be so by the half-life of such a huge project as this one.

  37. Emacs by cscx · · Score: 4, Funny

    Doesn't Emacs already have this functionality built-in?

    1. Re:Emacs by xamel · · Score: 0

      no, but im sure that vi does...

      --
      GOD DAMNIT , MODERATE ME!
    2. Re:Emacs by Anonymous Coward · · Score: 0

      I think you missed the point. Emacs is big and bloated, and often called an operating system. That said, i like Emacs.

  38. The story of the lobsters by Laplace · · Score: 5, Funny

    The posts here remind me of a story I once heard. There was a bucket full of lobsters. The lobsters hated being in the bucket, and were all trying to get out. Every time it looked like one lobster was about to pull itself over the edge, the others would grab ahold of it in the hopes of being dragged out too. Instead of being finding their freedom, they would pull the lobster back down and they would all be back where they started.

    Why are you being a bunch of lobsters, Slashdotters? Why can't you support this guy and move him along towards his dream? Trolling and cynicism: is that what we have all come to?

    On the other hand, the guy does sound like a fucking idiot.

    --
    The middle mind speaks!
    1. Re:The story of the lobsters by ergo98 · · Score: 3, Insightful

      The lobsters represent, in general, the human condition: People see life as a zero sum gain, and any gain of anyone else is a loss of theirs. That sort of mentality is far too common.

      Mind you I think this ask slashdot is insane: That would be an absolutely massive project.

    2. Re:The story of the lobsters by Tablizer · · Score: 2

      Why can't you support this guy and move him along towards his dream? Trolling and cynicism: is that what we have all come to?

      What if the opposite happened? What if the author went ahead and started a huge project without exploring the scene (pun). 5 years later he/she releases it to find out that nobody is interested because there are better choice out there.

      I would rather be heartbroken up front than after wasting 5 years.

      He/she is still free to ignore our device. Are you saying that knowledge is dangerous here?

      I suppose we would also have talked Linus out of his little OS project :-)

    3. Re:The story of the lobsters by composer777 · · Score: 1

      I also think that if the guy isn't strong enough to handle a little adversity on slashdot, there's no way he'll finish. If he's as serious as he says he is, slashdot won't stop him. It's kind of like musicians that can't handle being criticized, they don't last long. A thick skin is a good thing.

    4. Re:The story of the lobsters by offby1 · · Score: 1

      Mr/Ms Laplace, you have made me laugh out loud. Thank you.

    5. Re:The story of the lobsters by Gerry+Gleason · · Score: 2
      When RMS created the GPL and started emacs and gcc, it looked pretty insane too. Same with Linux. Don't tell him he can't do it, just give him a shove and maybe he'll land on the outside of the bucket.

      Come to think of it, the whole think is pretty insane, but it's a wonderful insanity, and it just might work.

    6. Re:The story of the lobsters by travd · · Score: 1

      Well I've never posted on slashdot before, but I've also never laughed out loud while reading ./ either, so kudos.

  39. FAGS ? by jefu · · Score: 0, Offtopic

    Fags - Faggots Architect Great Software

  40. Re:Scripting Language - try Lua by null-und-eins · · Score: 4, Interesting

    Lua (http://www.lua.org/) is a small, fast, extensible language that is designed to be embedded into an application. It has already become a favourite among game designers. The idea is, that you extend it with new datatypes in C, such that the objects in your application become scriptable. Think TCL, just better. For a performance comparison, see http://www.bagley.org/~doug/shootout/craps.shtml. It beats both Perl and Python.

    --
    At the beginning was at.
  41. Perl 6 by dstone · · Score: 2

    I would like to write a full fledged 3d-Animation Software package from scratch. ... The question is, what is the best programming paradigm to use for such a project?

    Ask Larry Wall nicely. Maybe he'll squeeze some NURBS and Inverse Kinematics support into Perl 6.

  42. IGNORE THE POST ABOVE THIS by Anonymous Coward · · Score: 0

    I just read the article, it's a total scam.
    This person needs a life perhaps, but not money.

    fucker.

  43. Score 5 (Funny) by Anonymous Coward · · Score: 0

    Worst.. "Ask Slashdot"... Ever! - CBG

  44. there are plenty of rendering engines by avandesande · · Score: 1

    so why not write a front end that generates files for rendering? Writing a front end for renderman would be pretty interesting and wouldn't take you 65 years.

    --
    love is just extroverted narcissism
  45. troll post by Anonymous Coward · · Score: 0

    to be honest this story looks like a troll. but on the serious side of things take things step by step... why not write a few 3d demos, with a rotating torus or cube for example ;)

  46. A Framework is Key by Slicker · · Score: 1

    Open Source developers innovate in hundreds of little ways but not often in major ways. What I mean is, create a framework.

    If you can do the high level design very well and document it just as clearly, then it can be useful and effective to garner a team of other interested OSS developers. Once a minimally functional application is built to wow people on a point or two, others may very well take interest. When they do, you have to have available componants of the system to immediately delegate to them. These componants must be easy to understand--such as, "it inputs this and must output that." If you've engineered the framework to be modular, then others might be able to understand how to contribute prior to loosing interest because they're lost in your code.

    Matthew

    1. Re:A Framework is Key by reversedNormal · · Score: 1

      Thanks.

  47. Get end user comments by visgoth · · Score: 1

    In addition to all the solid advice given here, I offer this little bit: Get in touch with actual animators, modelers, lighting and texture artists. Get as many as possible, from as many different 3d packages as possible to put the program through its paces. Remember, a lot of these people are not very technically minded and will appreciate a clean and intuitive interface. For a prime example of a great UI look at Softimage|XSI It is easily the most intuitive of many 3d packages I've used.

    --
    My patience is infinite, my time is not.
  48. Use OO... by Ryu2 · · Score: 2

    Just some suggestions off the top of my head: It seems like that's what you're going to do by writing it in C++ so maybe I'm just repeating what you know, but it lends itself naturally for such things... abstract object/shape class and then go from there.

    You should have some sort of independent 3-D rendering layer, if you want API independence. Make it extensible, and don't forget about hardware shaders for quick visualization of textures, etc... even something that many commercial modellers don't support yet. Have some sort of translation layer to translate from your own material model to whatever hardware shading language is in vogue now.

    Use embedded Tcl/Tk for UI scripting, to allow maximum flexibility

    --
    There's 10 types of people in this world, those who understand binary and those who don't.
    1. Re:Use OO... by Anonymous Coward · · Score: 0

      And maybe have a crystal ball handy, because you'll to predict what pitfalls you`re to fall into...and also you keep the bug count really low... and you should have it so the user can use it for something or another...or maybe have an easter thingy going on...Those are just suggestions off the top of my noggin`

  49. break it up by g4dget · · Score: 3, Insightful
    How does a professional programmer approach this design task? Ultimately I would like to be able to tie it into any number of different operating systems, graphics API's (OpenGL, DirectX, etc..), and so on. What are some good ways to do this?"

    Professional programmers generally work as part of larger teams with lots of division of labor. Many such teams have dedicated designers. I seriously doubt that a professional programmer would attempt a project of this magnitude on his own. That doesn't mean it can't be done, but you are asking the wrong question.

    Another question to ask is: who is this software for? Is it for your own edification? Do you want to write a book about it? Do you want it to become a larger project with more participants? Answers to those questions should determine how you structure the project, how you design it, etc.

    My general advice would be: break the problem up into lots of smaller, independently useful programs. That way, you'll have something to motivate you and to show for your work. Don't create ambitious, general class hierarchies--that is the best way of killing even a large project, let alone a one person project.

  50. cross platform api's by jonpry_oneword · · Score: 0

    Essentially there are two ways to make sure your ap is portable, either write yourself a graphics library that your program uses exclusively and then port it. Or just use api's that can be cross compiled anyways. If you use opengl than you can compile on anything, but it you want to find a way to use direxctx or opengl you are essentially just going to have piles of wrapper code to slow it down and twice the work. I would recommend using something like gtk for your interface as it has been ported to windows and has opengl widgets to make the whole thing quite easy. It is fast looks pretty and makes sense, at least to me.

  51. Moonlight 3D by Anonymous Coward · · Score: 0

    Moonlight 3D, the modeller that was declared dead so often on /. (just search for "moonlight" in the /. internal search function) is under open development again, not yet functional - not quite functional, mostly due to OpenGL bugs but we'll get those bugs tracked down eventually

    not as featureful as blender, but when working, usually said to have a much nicer GUI...

    oxygene

  52. Similar Project by g0dfvk · · Score: 1

    I started working on a project similar to this but gave it up in order to devote more time to my 'main project'. I'm attempting to create some sort of electronic device that will do great numbers of calculations in a fraction of the time it would take humans. suggestions????

    --
    A circle-snot is a Taco-snotting circle-jerk, another practice common among the Slashdot crew.
  53. Two ways. by rice_burners_suck · · Score: 1
    There are two ways to make this happen.

    The first way is the "easy way out" and will give you almost immediate results if you have a lot of skill: Locate a bunch of free software math, physics, graphics and database libraries and programs. Try to sift the quality ones from the flaky and crappy ones. Then, write your main program, basically hacking out all the necessary features and modifying all the code you've obtained to suit your needs. It'll probably be flaky at first, but after hunting down some big bugs, it'll be relatively stable. Just make the program BITCHEN by giving it the most innovative user interface in the world and giving it all the features people need, many of the ones they want, and few relatively unused and unimportant features. People will love it, and they'll start submitting patches. By the time you're at version 2 (about three to four years down the road), you'll have a development team and can start doing rewrites of certain sections. In 20 years, you will probably have the most awesome graphics package around, and you'll be setting standards. The risks here are that you may not make it stable enough, and people won't be interested.

    The other way is to design and write everything from scratch. It is EXTREMELY difficult to raise a from-scratch piece of software so it actually works and is used by people. I'm out of time. Sorry. Gotta go.

  54. A little here, a little there by stejoki · · Score: 1

    Look carefully at Maya. It is going to be difficult to improve on THAT interface. Bill Buxton really knows his stuff, and has created the interface that is propelling Maya towards ubiquity. Are you going to write the renderer too? One step at a time! Make your modeller/key framer output renderman and then you can use BMRT until you've written your own. By all means, look at Blender, but don't even consider C#. QT is an excellent suggestion - many many graphics people prefer the mac (for good reason) and Linux is making great inroads in this arena, displacing SGI. QT will guaranteed crossplatform capbility. Fake it all in Python first, then code the critial stuff in C++. Use Python as a scripting language - there's already a ton of 3D and image support and you won't be alone. Many of the large houses use Python to tie things together. Also of great interest should be the Lightflow renderer. Gorgeous imagery and a (albeit limited) Python wrapper for scripted scene generation. And if you're going to do MOCAP, for heaven's sake avoid Euler angles. Quaternions applied early on will save you a lot of grief later.

    1. Re:A little here, a little there by Unordained · · Score: 1

      you -liked- maya's interface? anything that has me selecting from a drop-down so i can get a different set of menu options in the top menu bar ... [shiver]

      check out caligari trueSpace (http://www.caligari.com/) for an interface that won't suck your brain out. the renderer they use isn't bad (a few issues -- and they won't listen to me when i ask for 3d textures for water, coke, bubbles, etc.) but the main problem is their physics engine. i haven't bought their latest version, but the one i have has serious issues with collision detection during physics sims. which is sad, because i like good physics.

      trueSpace also uses python as its scripting language -- but at least when i was looking for it ... they had no documentation on what objects/classes/etc. were available from the interpreter. barely enough to poke around with.

      trueSpace sorta runs under WineX, but i would love to have a good, -actually- cross-platform 3d modeller/renderer/animator to use. best of luck.

      (and yes -- use quaternions! and don't forget, say, tensor-based fabrics, goo, strings, etc.!)

      if you have trouble coming up with 'features' you want, ask around -- the slashdot crowd is GREAT at scope creep.

    2. Re:A little here, a little there by Anonymous Coward · · Score: 0

      you -liked- maya's interface? anything that has me selecting from a drop-down so i can get a different set of menu options in the top menu bar ... [shiver]

      Bah! TrueSpace? Surely you jest!

      Pressing F2 to F6 immediately changes between menu sets. Holding down the space bar causes a hotbox to pop up around your mouse pointer, containing all the menu options (no need for pull down menus). Need a tool that doesn't exist, just select some MEL ops from your history or write some new MEL script from scratch, drag and drop it onto your tool shelf and Presto!, new tool icon! Most aspects of the GUI are easily editable via user-friendly dialog boxes, and virtually every aspect of Maya's operation can be changed in the MEL scripts.

      Spend some time with MAYA and you find that despite it's prodigious set of tools, everything is with a couple of keypresses and/or mouseclicks away. I'd love to see more software adopt the hotbox concept - unfortunately, I've been told that Alias|Wavefront has filed a patent on it.

      Another 3D package worth examining is Houdini. Though it lacks many of the nice GUI features of Maya, it operates on a far more consistent procedural paradigm and is based on top of TCL/TK. Unlike Maya, it treats the renderer as another operation, allowing multiple rendering processes (and even multiple renderers, Mantra/Renderman/Mental) and post-processing to be included within Houdini's rendering pipeline (not possible within Maya). For special effects, Houdini is unmatched. Perl is great for text processing, but overkill as a scripting language for a 3D package. Python is definitely the right choice.

      Rabitguy

  55. STLport by Unordained · · Score: 1

    if i remember right, though, STLport was necessary even for older versions of gcc that hadn't quite finished up templating the iostream stuff, etc.

    computer labs at school had an old borland c++ compiler that -thought- it knew what the STL was, and Visual C 6 with no pathces installed -- just enough to start compiling and croak. At least the borland compiler finished compiling, then trailed off when iterating through certain containers ...

    and we were learning 'data structures' on these, and couldn't convince anyone to just grab a copy of gcc on our Unix box. grrr.

    so yes, STLport is not a bad idea -- at least you know you've got a good STL available if your local compiler comes with stupid libraries ...

  56. Houdini apprentice by Anonymous Coward · · Score: 0

    The best 3d package I have seen is Houdini, from sidefx software. www.sidefx.com

    If I were to write my own it would be like this program and its procedural approach.

    they have a full demo you can download, and CD's in several of this months magazines (CGI is one).

    Along with video tutorials which help out alot.

    heres a mirror with the download.
    http://www.techimage.co.uk/tc/products/ houdini/hou dini_apprentice_download.html

  57. I just considered C#. by NFW · · Score: 4, Insightful
    Three weeks ago I would have laughed at this suggestion. But, three weeks ago I'd never messed with C# and the .Net API. I figured they were a necessary evil though, and set about learning them.

    Today I have a nifty little directed-graph editor with cut/copy/paste, a palette of nodes to be drag-dropped onto the graph, a property window for selected objects, and multi-level undo/redo. I've written 4-5 such things in the past using C++ (I have this digraph fetish, you see) but I never got near as much done in three weeks. The timeline really impressed me.

    Other environments may be just as effective, of course. I've only dabbled with java and smalltalk, so I'm not in a position to compare. I just know C# and .Net make for a pretty productive platform.

    And no, I don't work for MS. In fact I've loathed them since bundled their email application to their (monopoly-holding) operating system, thus both tying and dumping, and thus putting a previous employer of mine out of business. That's a pervasive rant though, so I'll stop here. :-)

    Anyhow, in spite of its birthplace, C# and .Net will be the foundation for my next couple of personal projects, and possible for many more, until something better comes along. I really like what I've seen so far.

    The lack of multiple inheritance bugs me, but it's less of a problem than I'd expected, and it also presents an interesting challenge.

    --
    Build stuff. Stuff that walks, stuff that rolls, whatever.
    1. Re:I just considered C#. by Anonymous Coward · · Score: 0

      Have you considered the possibility that your previous employer's email application failed in the marketplace because it just plain blew goats?

    2. Re:I just considered C#. by Anonymous Coward · · Score: 0

      Jezz ! It's time for you to discover Borland C++, and reduce your time-frame to 1 week and a half ... ;-)

    3. Re:I just considered C#. by NigelJohnstone · · Score: 1

      The problem with all of these pre-fab big block development environments is they only work if the blocks assemble into the thing you're trying to make.

      They give you blocks:

      ABCDE FGJK LMNOPQR

      If you want to make ABCDEFGJKLMNOPQR then its great.

      If you want to make EFH from that you end up with abcdEFgjk with H patched on and all the unwanted functionality ABCDGJK masked or partially masked off.

      Why would you do that when optimal implementations of E F and H are available already?

      I think .NET is largely just marketing.

    4. Re:I just considered C#. by WillWare · · Score: 2
      The lack of multiple inheritance bugs me, but it's less of a problem than I'd expected, and it also presents an interesting challenge.

      Before you write your preprocessor, you might want to look at how Java handles this challenge. The Java language also permits only single inheritance but there's an additional idea called an interface. The interface is an API which a class can implement; it's not inheritance because the interface doesn't offer any implementations for the methods, it simply requires that all its methods be implemented.

      Interfaces still give you polymorphism. It's pretty common where I work to write an interface specifying, say, some kind of event listener, and any class implementing that interface can be an argument to somebody's addEventListener method.

      --
      WWJD for a Klondike Bar?
  58. Use Cross-Platform Frameworks by MichaelCrawford · · Score: 0
    You should use cross-platform frameworks as much as you can.

    There are a great variety of cross-platform libraries and frameworks that you would find useful. For example, for a humble JPEG coded, the Independent JPEG Group's JPEG library works really well and runs on everything from DOS to a Cray. It is portable beyond belief. For a lossless graphics format there is libtiff. (I don't know what's available for cross-platform video format software, but I'm sure there is some.)

    If you're going to write in in C++, my favorite framework for GUI, file API's, TCP networking, multithreading and database is ZooLib. (But note that presently the best code to use is what's in CVS because it hasn't had a release in a long time (Real Soon Now, really!).

    I've started writing a book about ZooLib that is released under the GNU Free Documentation License.

    But if you don't like ZooLib, it's important to use some cross-platform framework. There are many to choose from.

    Another important framework is the Simple DirectMedia Layer. You will want this for your rendered scenes and for sound (ZooLib does 2-D graphics, it's not a 3-D API).

    If you write in C++, do as much as you can with the Standard Template Library. There are some excellent books that teach how to use it.

    For a long time, the STL has got a bad rap, in part because the template definitions in the header files are hard to read, and in part because of poor compiler implementations of the C++ ISO standard, or poor implementations of the library itself. But by now there are excellent implementations for every OS that is in common use. For example, on Windows, don't bother with Visual C++ - use Metrowerks CodeWarrior or Comeau C/C++.

    Even if you choose to work with a broken compiler, the STLPort library provides a compliant standard library that will work almost anywhere.

    I was rather intimidated by the STL when I first encountered it but once I got a good book and learned how to use it, I thought it was the best thing since sliced bread.

    Boost has many portable C++ libraries that are of excellent quality.

    Finally, I am (slowly) building a website devoted to educating developers in cross-platform and portable programming called ByteSwap.net. Read my first article there Writing Cross-Platform Software - Getting Started. More articles will appear when I get more free time!

    --
    Request your free CD of my piano music.
    1. Re:Use Cross-Platform Frameworks by fault0 · · Score: 2

      > For example, on Windows, don't bother with Visual C++. Even if you choose to work with a broken compiler, the STLPort [stlport.com] library provides a compliant standard library that will work almost anywhere.

      What version of Visual C++ are you talking about? While vc++ 6 was horrible broken in standards and the STL, VC++7 (VC++.NET) is quite good in both. My advice is to only use STLPort if you are targetting Visual C++ 6.0 for any windows development.

  59. Don't bother by Anonymous Coward · · Score: 0

    with the design phase. just open up an editor and start coding. the build and fix model of development is under-rated.

  60. you "refuse"??? by Anonymous Coward · · Score: 0

    Boy, you sound pretty damn arrogant.

    The realities are that you are never going to get it right the first time, stupid. Which means that you will probably never even start this "project" of yours other than jerking off to how intelligent you are because you have a very good understanding of 3D mathematics, etc.

    What you need to do is get version 1.0 out. Do what YOU think is the best design and just fucking program it. WHILE you are doing it, YOU will realize what you want to do. This is called evolution, and unless your project evolves and undergoes several layers of modifications, it will probably be pretty shitty.

    Getting the project up and running is the part of the project that has the greatest inertia, and by saying that you refuse to consider doing anything until you get it perfect really indicates that you are quite young and don't have any practical real-world experience.

  61. Particular paradigm is irrelevant by Goonie · · Score: 2
    At least until you understand the tools relevant to your design well enough to decide for yourself.

    Go away and build something (or multiple things) small, but related, using technologies and methodologies that might be useful. Learn what works for you and what doesn't. Repeat a few times, until you know what's going to work for your project.

    To give an analogy, look at what John Carmack is doing at Armadillo Aerospace. When he started out, he and his team didn't know enough about rocketry to decide what technologies they were going to use in their ultimate goal (a vehicle to win the X Prize for a private space shot). What did they do? They've experimented with a variety of things on test rigs and as part of complete craft, and discovered what works and what doesn't.

    --

    Any sufficiently advanced technology is indistinguishable from a rigged demo
    --Andy Finkel (J. Klass?)
  62. advice backed by practical experience by NFW · · Score: 4, Insightful
    [...] those ideas are usually not backed by a lot of practical experience.

    True, but if he's willing to separate wheat and chaff, there's probably enough people here who know what they're talking about that asking here will not have been a waste of his time.

    Especially if he's not discouraged by the e-holes ridiculing him for thinking big. While it's true that he probably won't realize all of his goals, before he's done he will have learned a lot and had a lot of fun. What else matters?

    Anyhow, I have a bit of experience (and some of it with a not-completely-unrelated project), so I thought I'd chime in.

    First, not coding yet is a good idea, and one that's lost on a lot of people. Think first, design, plan, write down your designs and plans (the very act of writing forces you to think about them more), and re-read them to think about them some more. Better yet, find some like-minded people to critique your designs and plans. They'll see things you won't.

    Changing designs is easy and painless when you've only invested a couple paragraphs. It's a huge pain in the ass when you've invested hours or weeks or months.

    I used to work for a manager who believed that with a good design document, you could hire a semi-talented high school student to do the coding. I think that's design documentation beyond the point where diminishing returns sets in, but on the other hand, you I also believe that if you know what it is you're going to create, you can't write too much design documentation. XP and "agile programming" are great for situations in which the client changes the requirements regularly, but if you have a clear picture of what you're creating, it's worth spending lots of time on documentation. In my experience it saves far more time than it costs.

    Design the user interface, and write that down, in detail.

    Do a high-level design of the whole system - what are the objects, what are their responsibilities, and how to they communicate?

    For each class, do a detailed design. How does it carry out its responsibilities?

    Then re-read the whole thing and look for issues that you didn't see when you started. Have a teammate reread the whole thing and look for issues. Look for assumptions you didn't know you had. Look for objects that have been tasked with doing things that they can't do with the information or interfaces they have available.

    Then figure out a game plan, a timeline, that will get you a minimal application with at least some usable functionality. That gives you a gratifying achievable goal to shoot for, and it gives you something functional to (hopefully) help keep you inspired.

    Good luck.

    --
    Build stuff. Stuff that walks, stuff that rolls, whatever.
    1. Re:advice backed by practical experience by g4dget · · Score: 3, Insightful
      with a good design document, you could hire a semi-talented high school student to do the coding

      Yes, and you will end up with software that looks like it was coded by a semi-talented high school student.

      Design the user interface, and write that down, in detail. Do a high-level design of the whole system - what are the objects, what are their responsibilities, and how to they communicate? For each class, do a detailed design. How does it carry out its responsibilities?

      And what you will get out of that process is a professional Windows-style application--a big, monolithic piece of software with lots of buttons. It's not very UNIX-like, and many UNIX programmers don't consider the product very high quality. But, I suppose, to each their own.

    2. Re:advice backed by practical experience by Hanno · · Score: 2

      First, not coding yet is a good idea

      In this case, I disagree. Having a remotely similar resume like you and a master's degree in informatics with a partial focus on software engineering, there's one thing I experienced:

      The only way to learn how to write software is by writing software.

      Apparently, the guy who asked the original question does not have a lot of experience in software development and now asks how to bypass this learning process. My advice to him: You can't. As someone else in this thread said correctly: You can't refuse to learn the piano and demand a record deal first.

      There IS NO working theory on software development. The holy grail hasn't been found yet. (There's a reason why commercial software development rarely is more organized than private hacking.)

      There are a number of methods and tools that are good and helpful, but some of them come and go like fashions (remember? "OOP is going to revolutionize software development!") and some of them are highly effective for one developer and highly distractive for others (e.g. Extreme Programming).

      I'd recommend that you start planning a rough outline of what you have in mind and then start coding. It's silly to expect that planning can replace experience.

      --

      ------------------
      You may like my a cappella music
    3. Re:advice backed by practical experience by PingoSvin · · Score: 4, Insightful

      Hey, with all due respect, that kind software development died along with the dinosaurs. It got waterfall written all over it.

      Design the user interface, and write that down, in detail.
      How about drawing a quick sketch, hack together a quick prototype, realising that in just a week you'll have a much better idea of the system you're writing.

      Do a high-level design of the whole system - what are the objects, what are their responsibilities, and how to they communicate?
      How about skipping that part entirely, realising that you're not going to get the architecture right upfront anyway. The architecture is going to evolve through a number of refactorings, not through some superhuman designprocess.

      For each class, do a detailed design. How does it carry out its responsibilities?
      How about realising that would be a complete waste of time, as you'll once again be much smarter after just week of codewriting. Here's some

    4. Re:advice backed by practical experience by NFW · · Score: 1
      Yes, and you will end up with software that looks like it was coded by a semi-talented high school student.

      Yep. Don't get me wrong - I'm not advocating that approach. :-)

      And what you will get out of that process is a professional Windows-style application--a big, monolithic piece of software with lots of buttons.

      Who said anything about monolithic software design? I'm suggesting he do the design up front. Whether he chooses to go with a monolith or a suite it entirely up to him.

      --
      Build stuff. Stuff that walks, stuff that rolls, whatever.
    5. Re:advice backed by practical experience by richie2000 · · Score: 4, Insightful
      the guy who asked the original question does not have a lot of experience in software development

      I didn't interpret it like that at all, he claims to have:

      a solid foundation in computer programming.

      He just wants more input on this particular task, probably since he has never put all of his experience in 3D graphics, maths and programming together in one single big-ass project before and wants to minimize the number of false starts. That's my take on his request anyway, I think it's actually a little skimpy to give any really solid advice on. One thing I'd say is to not go it alone. Very few people have the necessary skillset and experience in everything from project management, coding, 3D graphics, software development, documentation and the rest to be able to pull something like this off on their own. He might have, but odds are he hasn't.

      You can't refuse to learn the piano and demand a record deal first.

      Sure you can, if you have nice tits or are willing to undergo minor surgery. :-)

      There's a reason why commercial software development rarely is more organized than private hacking.

      Oh, it can be a LOT more organized. It might just not always help. :-) Microsoft, to name one, has very organized software development methods and employ lots of testers, internal quality tests, code audits and whatnot but still manage to miss out in the basic design - the very area you seem to play down.

      It's silly to expect that planning can replace experience.

      And it's silly to expect that coding skillz and experience can replace a good design.

      --
      Money for nothing, pix for free
    6. Re:advice backed by practical experience by NFW · · Score: 2
      The only way to learn how to write software is by writing software. [...] It's silly to expect that planning can replace experience.

      Agreed on both counts. Someone once said that if you want to write a great piece of software, write two and throw the first one away. (Donald Knuth?)

      That's common among professionals (when they get the time to write the second one, anyhow) and it's inevitable with a novice developer. He's gonna have some false starts, and they will be a key part of the learning process, and there's no way around that.

      He's gonna throw away code, that's a given. IHe'll be even better off if he throws away some design docs as well. It's neither necessary nor sufficient, but it's still valuable.

      --
      Build stuff. Stuff that walks, stuff that rolls, whatever.
    7. Re:advice backed by practical experience by CeruleanSilver · · Score: 1

      You didn't finish your thoughts there, but I don't think there's anything wrong with an incremental waterfall design process. Flesh out the overall architecture first, then implement functionality phases incrementally. During each phase you may discover your original design wasn't perfect, but I think you'd be better off that way then just starting to throw things together like you're seeming to suggest.

    8. Re:advice backed by practical experience by Anonymous Coward · · Score: 1, Interesting
      How about skipping that part entirely, realising that you're not going to get the architecture right upfront anyway. The architecture is going to evolve through a number of refactorings, not through some superhuman designprocess.
      I think that's a matter of personal experience, ability, and taste. I, for example, code exactly like that. Back when I was 'programming' (creating code that was compiled to a binary executable), that was how I worked. I started with a basic idea of what ends I wanted to realize, jotted a few notes in the header(s) of my source code, and away I went. After a few days, I jotted down some additional goals. I coded some aspects to perfection while tinkering with others. Slowly, my interface evolved, usually a complete re-write of the user interface occurred about ten times with any given project. When you have four principal features, the interface has to showcase them. When you grow to ten, you have to allot the space more evenly and logically for the other six, etc. Through this process, I had slowly more and more people using my program(s), and suggesting feature additions and changes. (Beta testers, friends cleverly disguised as beta testers, and even the general population)

      Now that I'm involved primarily in scripting (Shell scripting on Linux back-ends, web scripting the U.I.) I code pretty much the same way. One project I'm working on would never have been started if I'd waited until I had a solid, complete vision of the project's future. Instead, I got a few ideas and plowed ahead, roughshod. As the project developed I slowly got more and more ideas for feature additions, and eventually decided on a rough versioning system (ie; features A, B, and C will be complete for v0.1, D, E, and F, for 0.2 ... )

      I know, and have collaborated with people who can't STAND to work on a project with that design course, and it's perfectly understandable. I learn by doing, some people meticulously plan every detail. I doubt I'll change very radically in forseeabl future, and likewise doubt that a planner will change much either.

      I only hope that the submitter doesn't fall into the trap of planning for so long that the project gets forgotten, or that he loses interest. It would be excellent to see a 3D rendering app for Linux.

    9. Re:advice backed by practical experience by g4dget · · Score: 3, Insightful
      Who said anything about monolithic software design?

      You did: designing the UI and a class hierarchy almost always leads to that.

      I'm suggesting he do the design up front. Whether he chooses to go with a monolith or a suite it entirely up to him.

      If you do "the design" and "the user interface" "up front", that implies that there is a single design and user interface.

      If you took the traditional UNIX approach, you would build a dozen separate command line tools. Each tool would have its own design and often not attempt to reuse a lot of code from the other tools; the class hierarchies and designs are independent from one another. You would build a user interface only pretty late in the game, and it would be a thin wrapper, almost completely independent from the command line tools.

      No matter what the goal is, it is generally not a good idea for a new developer to start developing a large system with an up-front design: a developer new to some problem will simply not have the experience or knowledge of the patterns needed. Either the developer needs to throw away a couple of designs and implementation attempts, or he needs to design and implement multiple, small, loosely coupled programs.

    10. Re:advice backed by practical experience by NFW · · Score: 2
      Who said anything about monolithic software design?

      You did: designing the UI and a class hierarchy almost always leads to that.

      Not if you design it to be modular.

      Either the developer needs to throw away a couple of designs and implementation attempts, or he needs to design and implement multiple, small, loosely coupled programs.

      Or loosely coupled modules, e.g. the plug-ins the questioner was talking about. And as I said, I don't claim to have a way around rewrites and throwaways. However, I've seen a lot more time wasted writing thrown-away code than writing thrown-away design docs.

      --
      Build stuff. Stuff that walks, stuff that rolls, whatever.
    11. Re:advice backed by practical experience by Inthewire · · Score: 1

      ``Plan to throw one away; you will, anyhow.'' (Fred Brooks, ``The Mythical Man-Month'', Chapter 11).

      --


      Writers imply. Readers infer.
  63. a plan and a framework by russellh · · Score: 1

    The first thing is to ask yourself whether you want this to actually exist as a product that works. I'm sure you do. But it's possible your knowledge of physics and 3D math may be outweighed by your (in)ability to create a realistic development plan. You have grand aspirations. But if you can't make progress, let alone produce something useful, nothing else matters.

    So you need a design that will allow you to be productive, probably in small increments. You need the Unix shell model, in which the big stuff happens in a dynamic scripting type of environment, and the heavy lifting happens in a high performance environment, with a well-defined and straightforward interface. Go find the Unix Magic poster right now and hang it on your wall.

    In other words, you need a framework. I suggest this be your central design philosophy - code your high performance stuff in C++, keeping them small and self-contained. Do your higher level design in an interpreted, dynamic language that invokes/manipulates your low-level hiperf routines. You can migrate code to or from C++ to find the right balance between flexibility and performance. You will be able to change things all around and do significant experimentation quickly.

    But more importantly, with the right framework in place, it will be easy for anyone, such as you, to contribute in small increments.

    --
    must... stay... awake...
  64. wheel, fire. by Anonymous Coward · · Score: 0

    Hi.

    I have just decided to re-invent the wheel. Also, I'm going to re-discover fire.

    Do any of you guys know the best shape to make my new "wheel"? Also, what will make "fire" burn?

    Any help?

  65. Not enough arrogance by putaro · · Score: 1

    Taking on a project of this scale by yourself requires a monumental amount of arrogance. Now, that's not a bad thing necessarily (especially if you pull it off), however the fact that you asked other people for their advice shows you don't have enough arrogance to bring this thing to fruition. Either do it, or don't do it. If you're so smart that you know all about 3D mathematics and physics and computer graphics and have a solid background in programming (doesn't knowing all about computer graphics kind of require this?) then you should have done the design work for this kind of project in the past.

  66. use python by Anonymous Coward · · Score: 0

    Write it in Python. Python is a beautiful language! It is easy to learn, and it will cut your development time by an order of magnitude.

  67. What a pompous... by Anonymous Coward · · Score: 0

    Ridiculous waste of fukkin time! I don't think John Carmack would have posted anything close to such a wasteful interrogation (as an example!). If you want to do something you get off yer ass ans fukin do it, without waiting for a pat on the back and stupid advice from half-drunken moronz like us....

    I - D - I - O - T!!!

    Make an ASCII art renderer plugin! and save us the pain of Yet Another Unfinished Project!!!!!

  68. Best Comment ... Ever :) by Anonymous Coward · · Score: 0

    heh :)

  69. A Few Tips.. by Shelrem · · Score: 3, Informative

    I've used a couple of the big-name packages in this area (Maya, Lightwave, Renderman(prman & bmrt)), but i'm primarilly a programmer. Being a programmer of 3d applications at that, i have a few suggestions as to how you do it:

    First, encapsulate the system-specific stuff, preferably through pre-existing libraries where available. You can encapsulate the 3D renderer as well, though i'd suggest just picking one (*cough* OpenGL *cough*) and doing it well, at least at first, not worrying about wrapping it up. Next, i'd design the entire interface in said 3D rendering context or other windows popped up from it, both so that you don't have to worry about gui consistency across platforms, and so that it goes fast with fewer big library dependencies. There are a couple cross-platform libraries that do GUIs for OpenGL out there.

    Now, if you've used Maya much, you'll know that it's basically a big programming enviroment with a few graphics hooks. The rest is scripted. It's truly amazing, but i think that this is quite vital. I'd suggest using SWIG or Boost::Python to do Python interfacing to your compiled code, and use Python to build the interface and implement a lot of the details (some tools, basic relationships, ...). This doesn't mean you won't also want some simple command-language as well, but for the heavier-duty stuff, i think Python's your language, but then, it's really personal preference. I suggest you go with something that's clean and robust and has good, easy C or C++ language bindings.

    Don't worry about a rendering engine, just get it to work with Renderman (prman, entropy, bmrt, etc.). Most renderers in comercial software fall short of those anyway.

    Oh, and try to get the groundwork in there quickly, then do RAD with Python, replacing stuff as needed for performance.

    So, to recap: incremental development, scriptabiliy, OpenGL everything for display, scriptability, Renderman export, and above all, scripability. Especially scriptability that's easy for artist-types to use.

  70. Maybe the Plan is the Project by serutan · · Score: 2

    Something like:
    Software Engineering 201 - Large Project Design. Fall 2002
    McMartin/Dhawan, T-Th 1-3pm, Rm A104.
    Students will produce a detailed project plan for a large graphical software package, with emphasis on design, resource requirements and critical path.

  71. Here are a 10 suggestions you might find useful by eyefish · · Score: 2

    I will advice you on the things your 3D Experiment Project should have:

    1. A plug-in architecture, based on a very simple to use API. This way you concentrate on the basics, and hopefully then allow everyone else to develop plug-ins to extend the functionality. This will save you a lot of time.

    2. Provide a tutorial to show how simple it is to develop a plug-in for it.

    3. Use XML-based formats for your files.

    4. Plan from the start for the program to be distributable, so one can render on multiple nodes on a network.

    5. Check out the TrueSpace user interface. TrueSpace's output is not as refined as the big guys, but the 3D interface is bar-none the easiest to use (and it also support traditional 4-screen views). You can download a demo from there to check it out yourself.

    6. Make it run on Linux, Mac OS/X, and Windows 2000/XP.

    7. This is a long shot if you don't use Java, but if you program to the Java 3D API you automatically support OpenGL, Direct 3D, QuickDraw, etc, saving yourself a step in the process.

    8. Include a scripting language for ALL internal functions and user interface commands and menus. That way a hard-core programmer has access to the low-level stuff, and a casual programmer can create simple scripts to automate a series of keystrokes and menu commands. Javascript could be great for this, or maybe some XML-based language?

    9. Plan to include support for 3D glasses. They trully make modelling and animating a lot easier.

    10. Include a utility to import/export to at least one well-known format, so people can get started right away experimenting with their 3D objects and scenes (Lightwave, 3DS MAX, Maya, etc).

    1. Re:Here are a 10 suggestions you might find useful by composer777 · · Score: 1

      Number 9 is fairly simple. It just involves rendering the scene twice from different view points. I would avoid number 7, since java tends to be inherently slow and a memory hog. I agree with 10. As far as 3 goes, I haven't used XML, but have heard good things about it. I wrote a couple of importers, and the VRML parser I wrote used bison and lex, which are also quite useful. I would like to hear your input on the differences between bison/lexx and XML. I think 1 is definitely a must. Not only that, but try to have a generic object that other objects are derived from. The base class will have no form, then derived classes, such as a pyramid or other shape will have their own data stored in the form of trianagles, texture data, etc, to send to the pipeline at render time. I think that point number 6 is admirable but a big undertaking. I really have a feeling this guy is getting in over his head. Unless he's written 10 or 20 Open GL applications he probably doesn't realize how hard it is. I remember being in college, and thinking that knowing alot of math, programming, and knowledge of how 3D applications work as well as writing a few demo 3D engines was all that I needed. Well, it's true, it's all I needed to get an entry level job at the time. However, that was really a starting place, and I definitely had my work cut out for me. It's fun to talk about these projects, but we definitely cannot design this app. If he's getting stuck now, that's not a good sign. I would recommend that he write an application and scrap it. Then rewrite it based on what he learned. After all, this is a labor of love for him, he doesn't have to use the standard design protocol. It's actually easier to put a bunch of test cases in code, than to spend all day theorizing. A rough design is ok and a good thing, but anything more in depth than that is usually more for the management's sake than the programmers. I would much rather spend time revising my code or performing experiments than second guessing myself about a bunch of unknowns.

    2. Re:Here are a 10 suggestions you might find useful by composer777 · · Score: 1

      Oops, I meant to say, It's fun to talk about these projects, but we definitely cannot design this app for him.

  72. Possible... by somberj · · Score: 1

    It's easy to get caught up in all the features you need to have in 3d graphics, but the truth of the matter is that when creating 3d animation or models, there are not very many tools that are used often. Every software has some sort of bells and whistles to show what you can do in 5 seconds at a trade show, but building and animating is almost always a matter of pulling vertices, moving and rotating. If you can come up with an elegant way of doing these things, you have a very important basis for a software package. Some of the high end 3d tools of today have forgotten that artist spend a lot of time hitting the same buttons over and over again. The easier these few important areas are to navigate, the faster you can get the model or animation done. And everyone wants to go home and sleep at some point. Well, I'm assuming that's true of some people out there.

  73. Cool idea, but... by p3d0 · · Score: 4, Insightful
    Hi. I'd like to build myself a television. I know all the features I want to have (colour, brightness, and contrast controls; coax, RCA, and SVGA inputs; 16:9 aspect ratio; light weight; 35" diagonal). I'm wondering, what approach should I use to build my TV? How do the pros do it?

    I hate to be a downer, but that's way too big a question, and too fundamental. It's a catch-22: the fact that you are asking this question indicates you probably won't be able to accomplish the project.

    If what you want to do is try your hand at designing a 3D modeller, I'd say you should fork or join (no pun intended) an open-source project. If you don't like some of their design decisions, then redesign those parts.

    OK. Having said all that, I'm actually going to try to answer this question as best I can off the top of my head. Beware: this is a brain dump, and that's how it will read...

    Start with the interfaces. They are everything. Without good interfaces, you find that the development time for a project with n lines of code will grow as n^2. With good interfaces, it's more like nlogn. I don't know much about 3D modellers, but I bet it will get big enough that this will matter. If your brain is too small to design all these interfaces at once, try to design as many as you can, and then start writing prototype implementations, but be ready to chuck them when you figure out their weaknesses; after all, that is why you are writing them.

    For each interface, ask not what facility that interface provides, but rather what information it hides. That is, what changes could occur behind-the-scenes without requiring corresponding changes to the caller of that interface? If you can't describe in one simple sentence (with no "ands" or "ors" in it) what an interface is hiding, then it's no good, and you need to take another stab at it. (Of course, I didn't think up this information hiding thing myself.

    As you design your interfaces, identify those that are truly fundamental (ask yourself: would every conceivable 3D renderer need to be able to do this?), and separate them from the others that contain some of your own personal choices. The former are your base interfaces that should (in theory) converge toward the ideal design, such that you feel less and less need to change them as development progresses. The simplicity and stability of these interfaces will determine the flexibility of your design. Their header files should be physically segregated from those of the other less-fundamental interfaces.

    Then, remember to think big and code small. By that, I mean you should brainstorm while writing your interfaces, and design them so they could accomodate every plausible implementation; then, implement them in the simplest, most straightforward way you can. Churn out those prototype implementations with a focus on the shortest path toward correctness. Worry about everything else later; thanks to the flexibility of your interfaces, you can change any of the implementations later. This approach prevents premature optimization, and keeps you from writing lots of intricate code you don't need.

    Recognize when you have opposing forces on each side of one of your interfaces (ie. the caller and the implementor), and split that interface into two. That way you can give both the caller and the implementor an interface they like. (That's described in my thesis--chapter 4--and the PowerPoint slides on my web site.)

    When you don't know how you want to do something, see if you can make an interface that hides that decision. That way you don't need to think about it now; punt the decision until you have enough information to make a good choice. If there's no obvious "best" implementation, then that may be something you'll want to change later anyway, and you'll be glad you made an interface to hide it from the rest of the system.

    I have only just barely scratched the surface here. This is a truly vast question you have asked.

    Good luck with the project.

    --
    Patrick Doyle
    I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  74. Learn from the best by Prof.+F�HL · · Score: 2, Interesting

    Before I took my first hang gliding lesson in the late 70's I went down to the beach and watched seagulls soar along the cliffs for several hours.

    When I went to my first lesson, the instructor asked the group if anyone had prepared for it. I told them what I had done. The other students laughed out loud. The instructor gave me his best 'you are the only chucklehead here who even has a clue' look.

    Hope this helps

    1. Re:Learn from the best by Anonymous Coward · · Score: 0

      Helps what? Helps me remember why I am glad
      I was born after the era of lazy hippies and
      Jonathon Livingston Seagull?

      [actually, not the way I feel at all, but the
      whole setup just begged for such an answer]

  75. Plug-In? by dirvish · · Score: 2

    A more doable approach to getting into 3D animation software design would be to design something to complement an existing program.

    For example Weta designed an AI program to create the hordes of characters in the battle scenes of LOTR. Their program (plug-in?) worked with Maya (the industry standard)and far surpasses previous attempts. Compare the armies in LOTR to the robot army in Star Wars. If you look real close at Star Wars you can see multiple robots that are duplicates but in LOTR every character in the army behaves independently because they are all AI.

    This guy could work on something like that which would improve on the allready impressive Maya. Or you could just contribute to an open source project...

  76. Pray. by Anonymous Coward · · Score: 0

    Then realize that you're an atheist and you've just been wasting your time.

  77. Why don't the Ask Slashdotters every reply? by Jerf · · Score: 1

    Here's a great post filled with interesting questions. Where's the Ask Slashdot-ee's answers?

    Why don't the Ask Slashdot-ees every engage in the conversation? (At least not that I've seen.) Maybe they don't know when their question has been posted?

    So few Ask Slashdot questions can really be truly answered based just on the posted question, just as few (if any) pieces of software can be written without interactively interviewing the users and getting a dialog going about what they want. If you're going to Ask Slashdot, do it right!

    Forgiveness if the Ask Slashdotee has since replied to this, but it still holds in general.

    1. Re:Why don't the Ask Slashdotters every reply? by GigsVT · · Score: 3, Insightful

      So few Ask Slashdot questions can really be truly answered based just on the posted question,

      There are only a few types of Ask Slashdot questions:

      1. Ones where the question is answered in the first 5 posts, it's usually something a quick Google or Freshmeat search would have answered. These are also known as Cliffisms(tm).

      2. One that asks for specific legal advice. Obviously this isn't free-lawyers-who-like-to-accept-tons-of-liability- by-giving-half-assed-legal-advice.com, so these questions can never be answered.

      3. One that asks something like this. Usually the scope is too broad to give a meaningful answer, but sometimes some good ideas get thrown about. This is probably the most interesting, but still not too effective usually, unless the scope of the question is just right, which is rare.

      --
      I've had enough abrasive sigs. Kittens are cute and fuzzy.
  78. Alternatively CrystalSpace by jfmiller · · Score: 1

    Another SourceForge project that deserves mention in this catigory is CrystalSpace. It is very stable and looks realy good and has the advantage that it's cross platform. If nothing else, it would make a good display package for a 3D design package.

    JFMILLER

    --
    Strive to make your client happy, not necessarly give them what they ask for
  79. One thing... by voice+of+unreason · · Score: 1

    One thing you'll want to make sure and look at is the file formats and standards that the name-brand packages use. Try to accomodate those users that will have been using something else by making it easy to transfer files between your package and their old one. Don't make your interface too unlike other programs, either, or else it'll be confusing when your users make the switch to your package. Also, get some friends who aren't that good with computers to test stuff out, and see how easy it is for them to use it.

    Good Luck!

  80. Something isn't right. by SoaringRaven · · Score: 1

    If you are competent enough to even think of doing something so grandiose than why would you do an ask slashdot?

    --
    All other rights can be derived from freedom of speech.
    1. Re:Something isn't right. by Anonymous Coward · · Score: 0

      agree.
      you either:
      - are not half as competent as you think you are
      - have never really read slashdot user comments...

  81. new kind of spline by f00zbll · · Score: 2, Insightful
    If you're going to it, then why not do something totally revolutionary? Why just redo what already exist. Try to think of a totally new paradim for 3D modeling and animation. You mentioned NURB, polygons and a bunch of other stuff. All of the various techniques have weaknesses. For example, take hash splines in Hash Animation Master. Hash can create a surface with 3 or 5 points, where as NURB's have to have 4 points. A 4 point surface makes it easy for subdivision calculations are render time, but it increases the complexity of a model and requires more memory.

    If you can find a completely new way of representing a 3D object that is both more flexible to model and animate than current techniques, then you've got something really worth doing. I'm not smart enough to think of a totally new way to represent a 3D object, but if some one could it would change the 3D application world.

  82. What is your core? by BrynM · · Score: 1
    One of the reasons Maya is so powerful is that it is almost entirely written in it's scripting language, MEL. The core executable is the scripting language. This makes it easy to customize and build upon. This is why so many professional houses use it. They can customize it as they see fit.

    One such advantage for them because of this is prototyping the interface. They (or anyone else) can simply re-write the user interface, menu system or anything else. I believethis is the key to innovation in the industry.

    Point? Rather than looking at the design, look at expandability, power, and ease of scripting (MEL is a lot like C).

    --
    US Democracy:The best person for the job (among These pre-selected choices...)
  83. Talk to the Artists! by Anonymous Coward · · Score: 0

    As one of the artists that frequents slashdot now and then, I've got to tell you that your product won't be touched by us artists if it's just a straight knock-off of 3DSMAX or Maya. Talk to artists, get some original ideas in there. Yeah, it will get ripped off by Maya or Softimage eventually, but just get some new ideas in there. 3D software could be sooooo different.

  84. Renderman by Milinar · · Score: 1

    Consider implementing the Renderman interface. It's a widely accepted standard for renderers, and it's not difficult to write code that will export Renderman-ready files. The best part, I think, is that there are a diverse group of renderman renderers out there, some even GPL'ed. That way, you can focus on writing a good modeling/animation package, without having to worry about the renderer, or vice-versa.

    Dan

  85. I considered this once... by MadWilli · · Score: 2, Informative

    Despite the multitude of responses you've already received, I'll throw my two cents in.

    A while back I wrote a raytracer. After I had it doing primitives, texture mapping, etc. It occurred to me maybe I should just go whole hog and write a 3D modeller. Well I changed my mind due to time considerations, but maybe I can help you a little:-

    If you know the mathematics behind it, implement the different rendering engines you want: raytracing, radiosity, photon mapping, NPR, etc with the primitives you want to support (spheres, planes, triangles, nurbs, etc). Doing this lets you do what has already been mapped out for you by mathematics. Just implement them, the things I listed above really don't take that long if you have some solid time to dedicate, and a firm understanding of the math.

    Also make sure you have good reference to backup that firm understanding. If you haven't already,
    check out:
    I found this book useful for basic CG related math.

    This is a good one on radiosity.

    And this one photon mapping.

    Here, and here are useful as well.
    For particle streams and the such, see the papers residing somewhere in Pixar's servers.

    The problem comes when choosing APIs, GUIs, etc. I would suggest going with something like OpenGL with GLUT. Most of the 3D modellers out there use OpenGL and it has good cross-platform support. You can then use OGL not only to display scenes rendered (I wrote mine out to png - I was lazy), but you can use the wonderful main loop of GLUT to
    write your UI. Mind you this can be a pain, but it means you can make your interface fully scriptable and skinnable on-the-fly using discrete objects to make up the whole. The other choice is to rely on any of the many well-supported UIs out there with OGL support. Just watch the platform (in)dependence if that matters to you.

    Overall, take the project in stages, ideally from the best defined (math) to the least (UI). Make sure each chunk is highly modular so it's easy to alter or replace.

    I'm not sure if this will help, but I wish the best of luck to you. Remember to start a sourceforge project. You might find you can get some help.

  86. software engineering by Tablizer · · Score: 2

    (* I have all of the major concepts, and relationships in mind, but refuse to write one line of code until I have a good design plan. How does a professional programmer approach this design task? *)

    You will get a jillion different answers to this question. There are very few agreed-upon metrics for deciding which methodology is the best.

    It probably depends on the personality of the coders/mainainers and on the domain (graphics in this case).

    One size does not fit all. It is sometimes said that you don't get a decent design until the 3rd try.

    On another note, as others have noted, there are plenty of *existing* open-source projects that need some improvements. To be practical, you should look at improving existing ones instead of starting from scratch (unless it is a purely personal quest).

    Start by fix Blender's goofy interface :-)

  87. Opportunity for a rethink by oquigley · · Score: 3, Interesting

    I'm not a programmer, but I am a professional user of 3D tools.
    I've noticed that the huge advances in 3D modeling & animation packages that we saw in the late '90's, with the release of Maya, Max 1-3, Lightwave, Soft and the like seem to have come to a stop.
    The most recent releases of all of these seem to be converging on the same feature sets. They're all making dull, incremental progress. At the moment, I'm wondering whether it's even worth the hassle to upgrade from Max 4 to Max 5. The only thing it really seems to offer is built in global illumination rendering, which has been available as a plugin for a while.

    I'm wondering what the next revolution in 3D authoring tools is going to be. I can't imagine that we'll be going down this path of diminishing returns forever.

    One possibility seems to be true WYSIWYG realtime rendering using the coming generation of floating point accurate 3D cards. Another seems to be automation of character animation (embedding simple AI into the skeletons)...

    I'd question if it's worth the bother to simply replicate the existing functionality of mature, static programs. If it's a new project, you could rethink what a 3D package is supposed to do and make a real leap.
    What do you all think it would take to refresh the 3D tools world.

  88. Become a conductors partner with A|w by Genjurosan · · Score: 1

    Instead of attempting to conjure up a new software package and finding that many others have done this before, and failed... look at the conductors program that Alias|wavefront has for Maya and see how you can add to the community. Check out www.highend3d.com, find some local A|w and 3DS Max users groups and find out what is missing. Fact is, you're not going to make any money, and you're not going to top what A|w already has that is under patent. 5 years ago the price of Maya was 100k per seat.. now it is $2000. Let's put this in contrast with a dining room table that I just purchased. The table (made in asia) was $1299 and the 6 chairs pushed it up to $2500. Someone in Asia made this table for about $50 in parts and labor.. While Maya has costs millions of dollars and now can be had for $2000. See my point? If I were you I wouldn't waste my time.

    Zaxwerks Invigorator is a conductor product that has had a wonderful return for the creator. All it does is extrude ai or eps files to 3d objects. This guy has made thousands on something that I bet you would say would be cake to make.

    1. Re:Become a conductors partner with A|w by iggymanz · · Score: 1

      $2,000 is $2,000 too much for people who like Free Software, though someone will have to put in over $100K worth of time to realize this dream. If tens of thousands of people can have a 3D system for $0, that's worth more than hundreds of people who can have one for $2,000. Who cares if it does everything that Maya can, if people can use it? By the way, I paid $350 for my dining room table with 4 chairs...I won't have a cardiac arrest when someone slams things on it or gouges it. Heck, I can even burn it for firewood if I get tired of it. My table is therefore superior to your table! :)

    2. Re:Become a conductors partner with A|w by Genjurosan · · Score: 1

      Yeah, but the hardwood in my table gives me harder, hottter coals, and keeps me warmer longer. You're clearly not in the 3D field. Free software causes more garbage to be introduced to the system because the amateurs 10:1 to the pros. Are you in school at Full Sail? lafffffff.......

  89. a few suggestions for this beasty project by cotk_hayes · · Score: 1

    I would suggest using Qt from Trolltech. You can make custom widgets and it will save you cross-platform headaches. Also I would suggest just focusing on OpenGL support (atleast initially) for cross-platform reasons. I've heard good things about Python for scripting but I have limited knowledge in this area.

  90. Open GL by jellomizer · · Score: 2

    I would sugest that you use OpenGL it is widly used and it is better in cross platform development then DirectX is.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  91. Best wishes by Anonymous Coward · · Score: 0

    Hey! This seems like a really cool idea and a lot of fun! I hope you don't get discouraged by any of the other posts and go for it!

  92. ERROR: Life Extension Required by Jouni · · Score: 1
    While many of the concepts you list can be considered solved for the general purpose, the work of integrating them and working through the *unsolved* stuff that comes up could take many lifetimes worth of programming.

    Incidentally, the products you mention have each taken hundreds of man-years to write by extremely well manned and financed companies. It's good to set goals for yourself, but is one of them living to a thousand? :-)

    If you plan on making this a legacy quest for your children and grandchildren, go right ahead. Unfortunately you won't personally be there to see version 1.0 software ship.

    The more realistic alternative is to choose your focus more carefully; write a component, a plug-in or a tool for a more specialized task. Research new technologies or implement and synthesize from ones most recently discovered by others. Compared to the giants you are small and flexible, make use of that advantage.

    Oh, and whatever you do, do it with others. It's more fun that way.

    Jouni

    --
    Jouni Mannonen | Game Designer, Consultant
    1. Re:ERROR: Life Extension Required by iggymanz · · Score: 1

      Actually, in the last sentence of your post you give the solution to the "man-centuries" dilemma - a good "core" project with API's can fire up a host of people to jump on the bandwagon. There's man-decades of work in a typical Linux distro, too, but that didn't stop Linus (or A.T. from making Minix AND a compiler AND a textbook) Let this guy jump in and do something to tackle the monster problem, put it on sourceforge, and see what happens.

      I myself was heavily into CADD customization for 9 years, and am wondering WHAT IF I took my physics/math/CADD background and made (or started) an open source CADD package, since all the existing free ones are not what a real CADD person would use. In about a week I'll be done with the major spare-time project I've been doing for last 6 months; maybe the multi-user model/document management/CADD system will be next!

  93. Coming from a professional by composer777 · · Score: 5, Informative

    Ok, I thought I would try to make this stand out a bit, since I specialize in 3D graphics for a living. I am by no means the top guy at my company, but do have experience in design implementation, as well as reading the Open GL reference guide several times. Let's start with general advice:
    1. Keep all your rendering loops tight. Avoid doing any extraneous operations such as caching. Use arrays instead of linked lists(this keeps the data inside your cache). Avoid recursion unless you can be sure that your complier is not pushing and popping the function stack(some compilers are smart and will not create a stack unless you pass data as a parameter).
    2. Try to perform as much work as possible at startup or while the user is editing. Remember you want to make as many operations as possible a once only thing. The last thing you want to do is put a bunch of crap in your rendering loop.
    3. Take advantage of caching on your graphics card by using display lists and vertex buffers. On nvidia cards this alone can speed up your application by 3x. Only use immediate mode rendering when necessary. Keep in mind that most graphics cards use extra memory when you put the data inside a display list, so there are times when display lists can be slower.
    4. Perform depth sorting for proper rendering of alpha blended objects. (this is something we failed to do in the initial design of our application, which was written in 1992 before alpha blending was a widely used feature).
    5. Try to keep interface code generic, and try to make rendering code specific. It's always a tradeoff between readability and performance.
    6. Learn assembly, not because you're going to use it that much, but so that you can spot areas of slowdown. Learning which operations are expensive is crucial. Function calls, random memory access, pointer deferences can all slow your program down.
    7. As mentioned in six, optimize your access to memory, pay attention to byte alignment, which will allow you to pack more data into the cache. Also look into AMD and Intel's articles on optimizing for performance. The most crucial aspect is how you access memory. There are new instructions which allow you to load data from memory into cache before it's used. This can often speed computations up significantly in real-time applications. There are also many other tips, but I'll leave up to you to go to AMD and Intel's websites and download the white papers.

    You mention animation, the project that I worked on for the last year tackled this problem:

    The project was to integrate animation into an application that was not designed to do this, and to make it generic enough so that the user could animate anything. Here are some simple concepts to get you started in designing an app that allows users to animate in an intuitive manner:
    1. Timelines - A timeline is a graphical way of representing time. You can use something that looks similar to a ruler, with time marked in units of usually every second.
    2. Keyframes - These are points on this timeline that are specificed by the user. Keyframes always have a time associated with them. If I want to animate positional data, then that keyframe will have a time as well as data about the X,Y,Z position of that object. When the user hits play, the application will interpolate between points on the timeline.

    Here's where C++ comes in handy. You can make both timelines and keyframes a class. Then, let's say I want to animate clouds, I can simply create a class called cloud timeline that contains cloudkeyframes. When the user clicks a keyframe, an interface opens up that allows him to edit that data, which in the case of a cloud might be both transparency and position. Then when the user hits play both position and transparency are animated according to the values of the keyframes given. The neat thing is, that a cloud timeline can be derived from positiontimeline, which means that you only have to do the work of creating an interface for animating position and orientation once.

    Next, it is important to remember that timelines are a property of some object within the scene. I would say that it you can also keep object data organized in a generic manner. I would recommend using a scene graph. So, what the user would see is a scene represented by a tree, with the root node being the terrain and child nodes being objects on that terrain. You can also pull some neat tricks with scene graphs, such as nested transforms. This would allow you to have an object such as a car, with four wheels, to have wheels that are child nodes of that car. In this way, you could create a timeline for the entire car, and then the wheels could have their own timelines which would animate their rotation. The wheels would not know anything about the fact that they are moving along with the car. There are of course other ways of animation, such as writing your own scripting language, which I have never done. I have written a VRML parser, however, and I can tell you that learning both Bison and Lexx is important if you want to implement a language. There are other types of parsers, but using these compiler tools tends to be more straightforward. In the least it would be good to pick up a book on language designed and construction. The book I studied in College was "Compiler Construction: Principles and Practice" by Kenneth C Louden, but there are others that may be better. Anyway, that's enough rambling, and since most on slashdot are pedantic, please forgive any technical erros, it's Friday night and I wrote this in about 20 minutes.

    1. Re:Coming from a professional by dvdeug · · Score: 2

      Keep all your rendering loops tight. [etc.]

      Premature optimization is the root of all evil. This is not the place to start worrying about this; get a working program, and then you can worry about all the deep optimization then. Even most of the upper level optimization - data structures and such - you can rewrite once you know where you're going.

      Here's where C++ comes in handy. You can make both timelines and keyframes a class.

      You mean object orientation, right? The same OO you can do in Simula, Smalltalk, Ada, Java, and dozens of other languages.

    2. Re:Coming from a professional by jtdubs · · Score: 2

      If you are using OpenGL there are many more speed-up rendering speedups...

      If trying to be generic and use straight OpenGL 1.4:

      Arrange your geometry data (vertecies, normals, texture coordinates) into parallel arrays and use an index array to access it.

      Read up on glVertexPointer, glDrawElements and it's bretheren.

      Try to use triangle strips, which are O(N+2), or triangle fans, which are O(N+1), as opposed to regular triangle lists, which are O(3N).

      This will get you around 20M tris/sec on newish hardware.

      Also, try and arrange your data to minimize texture-swapping. If you can sort your buffers so your render all the triangles using one set of textures first, then the next set of triangles using the next set of textures, and so on, it will help.

      If you don't mind using some NV or ATI specific extensions:

      Do the above, but lock your arrays before using them. This will allow them to be transfered over AGP once per frame which will save you a LOT of time if you are doing multi-pass rendering.

      If you want to dive in to some new-ish NV and ATI tech:

      Read up on the Array Object extension.

      This will allow you to upload the various parallel arrays and index buffers to video card memory so you never need to transfer it over AGP again.

      This can push new cards up to the 60M to 80M tris/sec range.

      Also:

      Read up on vertex and pixel shaders. OpenGL 1.4 has finally approved ATI_fragment_program and ATI_vertex_program extensions.

      They make perfect per-pixel lighting far easier and faster than previous methods, although not nearly as easy as OpenGL 2.0 will make it next summer.

      With proper use of transformation matrices and vertex programs you should very rarely (hopefully never) have to actually change the verticies of your models, making extensions like the Array Objects absolutely wonderful.

      There so much more you can do; the list is nearly endless.

      The best of luck to you,

      Justin Dubs

    3. Re:Coming from a professional by composer777 · · Score: 1

      Right, how many of those languages have 3D accelerated API's, aren't bloated, and allow for aggressive optimization? Yes, I know Java has a 3D api, but it's too bloated. Ada?? Give me a break, and yes I have written many programs in Ada since it was my universities main langauge. And Simula/Smalltalk?? Yes, you are correct, I did mean object orientation, but I'm not sure if you're trying to make a point other than that you can list a bunch of object oriented languagues, congratulations. As far as premature optimization goes, I think you are only partially correct. You are only correct where it comes to hacking up code to make it run faster. Designing the structure of the program to facilitate optimization and to avoid doing any unneccessary computation inside the rendering loop is important from the outset. Like I said earlier, the slashdot crowd certainly is pedantic.

    4. Re:Coming from a professional by dvdeug · · Score: 2

      how many of those languages have 3D accelerated API's

      Every language in the last twenty years can bind to a C function. Many of them can handle C++ functions.

      aren't bloated

      Oh, yes, C++, a language so big that four years after it was standardized there's still no compilers that handle the whole language.

      allow for aggressive optimization?

      Almost any language will optimize that inner loop the same way.

      Ada?? Give me a break, and yes I have written many programs in Ada since it was my universities main langauge.

      So because you've written some toy programs in the language, that makes you the one and only true expert on the language.

      to avoid doing any unneccessary computation inside the rendering loop is important from the outset.

      There is a set of things that must be done in that rendering loop. Anything else can be moved out later just as easily as earlier.

    5. Re:Coming from a professional by composer777 · · Score: 1

      True, but the reason I referred to C++ is that he said that he wanted to write it in C++. If he had asked for a recommended langauge, then I think your point would be quite a bit stronger, and I would have stayed out of that discussion since I won't claim to be an expert on which langauge is best, focusing on writing 3D applications in C/C++ that work on both windows and UNIX(read Solaris, Irix, etc) is more than enough to keep me busy. I specialize in C/C++, with experience in Ada, Perl, Java, IBM 370 Assembly, Intel Assembly, and Basic(not to mention dabbling in Lisp, and others as a student). In my opinion C++ is good enough, it's well supported, and it is the langauge that most standalone 3D programs are written in. Are Lightwave, 3DS Max, or any of the other major 3D animation packages written in anything other than C/C++?? I'm not going to debate choice of langauge with you, you might be right, however, choice of langauge is outside of the original scope of his question, and I won't claim to be an expert on every langague out there, so it would be a waste of both our time. However, if you would like, you can make yourself useful and describe what you think the advantages of another langauge might be, this would actually be constructive.

    6. Re:Coming from a professional by Ieyasu · · Score: 1

      Pedantry indeed!

  94. Oops, caught my first error by composer777 · · Score: 1

    That first point was supposed to read:
    1. Keep all your rendering loops tight. Avoid doing any extraneous operations. Use arrays instead of linked lists(this keeps the data inside your cache). Avoid recursion unless you can be sure that your complier is not pushing and popping the function stack(some compilers are smart and will not create a stack unless you pass data as a parameter).

  95. You SlashdOtters by buswolley · · Score: 1
    ARE BEING THE MOST RUDE FUCK-HEADS, TO THE poster of this article.

    Have you ever thought that he is trying to get a team together from the slashdot crowd using slashdot's huge audience, and posed it as an ASKSLASHDOT just to get it on /.?

    Just because he hasn't told us of any specific design plans doesn't mean he has none.

    /. doesn't deserve to be an elitest crowd. It isn't good enough. So get off it.

    --

    A Good Troll is better than a Bad Human.

  96. Sorry Mr. Linus, writing an OS is a stupid idea... by Brian_Ellenberger · · Score: 5, Insightful

    Mr. Linus, it is my understanding that you intend to write your own operating system from scratch. I just want you to know your "Linux" kernel is a stupid idea. Why don't you just buy Unix from one of the many vendors out there? It is a waste of your time and resources to try and reinvent the wheel.

    There are many things I have written that have been "reinventing the wheel", from a merge sort to converting a Windows BMP to JPEG. But I learned a ton from doing it. Heck if he just wants to write something just to learn more about 3D modeling, more power to him. And you never know if in 5 years we will be raving about a new open source 3D modeler giving 3DSMax a run for its money...

    Brian Ellenberger

  97. Re:Scripting Language - try Lua by bdash · · Score: 1

    If you read the methodology of that performance comparison, you will notice that the author says:

    "All artificial language performance benchmarks, mine included, do not measure real-world performance." (authors emphasis).

    The performance of various languages varies greatly in different situations, and factors other than speed play a part in the choice of a scripting language for an application.

  98. My own dream by Tablizer · · Score: 1


    I want to build my own slashdot so that I can stuff my Karma. Any advice?

  99. sounds great! lemme lend a hand! by bbc22405 · · Score: 1
    I would like to write a full fledged 3d-Animation Software package from scratch. Yes, I know, a VERY daunting and time consuming task.

    Not at all, should be a snap, especially with guys like me helping you out! I'll be able to pitch in just as soon as my finish my own current little project, Creating World Peace, which should be done Any Day Now, right?

  100. You sound like a manager by pauljlucas · · Score: 2, Insightful
    I have all of the major concepts, and relationships in mind, but refuse to write one line of code until I have a good design plan.
    You sound like a manager who has just completed a software methodology course and now wants to force all of the staff to use what he's learned in class. Bah! At least I, and probably others, think in code and use an editor as a scratchpad to come up with a design.

    There are things you sometimes don't or can't see until you try to code it. Often, it's the case that it's difficult or impossible to do something a certain way due to constraints of the language.

    Iterative design and prototyping are, IMHO, much better than the old "design, then code" method.

    --
    If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
  101. C++ or Objective C by leandrod · · Score: 2

    Why go for C++ and all its complications? Objective C is cleaner, and if using the GNUStep framework easily portable to the Mac OS X.

    Obviously, if you want to Do The Right Thing you might want to use a really relational database and code in Lisp, but I do not know if that is practical already. At least the Lisp part is for sure, and one can always go to SQL as a second-best and stopgap to a real relational system.

    --
    Leandro Guimarães Faria Corcete DUTRA
    DA, DBA, SysAdmin, Data Modeller
    GNU Project, Debian GNU/Lin
    1. Re:C++ or Objective C by iggymanz · · Score: 1

      Having programmed CADD models for years with LISP (well, ok, AutoLISP for AutoCAD), I can say Python is a very "LISP"y scripting language (for sets, lists, tuples), with the added benefit of libraries already available for Open Source graphics work, integration with SQL databases, and ease of calling high speed routines in C/C++/Objective C.

    2. Re:C++ or Objective C by leandrod · · Score: 2
      > Python is a very "LISP"y scripting language

      That actually pisses me off, so many me too languages that do not quit get near Lisp capabilities, trying to have some feature or other without catching on the underlying concepts and power of the real thing. Granted they are useful enough on themselves, but mostly by being more procedural or OO, thus catering to our minds already spoiled by Basic, C and similars.

      Any sufficiently-complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp.

      Greenspun's Tenth Rule of Programming. And yes, Python qualifies as a C program... better to learn the real thing, IMNSHO.

      --
      Leandro Guimarães Faria Corcete DUTRA
      DA, DBA, SysAdmin, Data Modeller
      GNU Project, Debian GNU/Lin
  102. Know Your Audience by Anonymous Coward · · Score: 1, Informative

    The biggest problem with most 3d software is the
    developers are absolutely clueless about their
    target audience. Look at Lightwave, amazingly
    powerful renderer, most modern 3d features, but
    the interface is a joke. They improved it
    exceptionally with the release of 6.0, but it
    was mainly a Maya rip. The consequence of that
    is that the software is basically dead, in terms
    of future. Some really killer plugins are being
    released for it, but my point isn't to bash
    lightwave.

    A few ideas I would recommend to keep in mind.

    1. Most of your audience is not hard core, they
    dont want to script, they are smart, but
    want it to work out of the box. A button
    solution if you will.
    Now, the caveat of that is the power user.
    They will want the flexibility that i talk
    about later

    2. Dont go off and use obscure methods, the
    3d graphics industry is finally coming to
    using standard techniques for basic applications
    and Visual/Graphical concepts. Use those,
    it will make your program user friendly and
    successful.

    3. Flexibility
    One of the key things that make programs like
    maya and XSI (I guess 3ds but i havent used it
    seriously in years) is that the software is
    extremely frexible. The entire GUI of maya
    is manifested from script, this is a terrific
    feature that is one of the manly reasons it is
    so successful in the character animation
    industry.

    And finally, a personal request, allow usage of
    hdr images for textures/lighting/rendering!
    Thanks
    -div

  103. Dude, you crack me up... read on... by tcc · · Score: 2

    If you want to write something like 3DSMAX lightwave Maya or XSI, alone, you're either a genious or completely on crack. If you're a genious, and know how to make such an app, I don't understand where you could not have the intelligence or knowledge of coding it the right way with the right tools for the job.

    I don't want to sound like a flame but comments like this always crack me up, if you want to see the biggest success of a "little people's job" look at lightwave3D, 2 guys made that software in the beginning, one guy on the modeler, one guy on the layout, today, they have a lot of people working with them because at some point, if you want to have features, one person or 2 people can't cut it anymore. Even if you know your 3d your maths and all. You'll always end up not knowing that little thing and require some research and steal valuable time...

    Look at another example, project messiah, supposed to be the best thing out there, with the best renderer, the best animation software and all, all in one package... guess what? they are Late, they have a pissed off userbase, and while I have a lot of respect for that company and they did a lot in the 3d scene, they've hit a reality in the programming world that doesn't always apply in the 3D production world: you don't always meet your deadlines or objectives in time. So 1 year later than the "release announcement" they are still late, not because they suck or they have no talent, god, they got LOADS of talent there, and they've proven that they can do the work with the previous character animation plugin they've made for lightwave, but doing everything from scratch is more work than you can think of. Plus reinventing the wheel is kinda useless.

    If I were you, I'd use my skills to write a new breed of plugin, there's always things that people would like implemented, new paradigms, new concepts, this year, stuff like sub-surface scattering and 3d hair were the big hit, be in advance, read some theorical siggraph paper, do some plugins, get known, and probably a 3d software company will notice you and buy your stuff to integrate it to their package and there you will be able to make a difference. I can name you people that got millionnaire that way.

    Again, I'm wondering if this story isn't just a way to generate traffic and make people talk, Maya got an ARMY of developpers, Discreet (3dsmax) got a lot of people, Lightwave, less but still, it's NOT a one man's job. By the time you'll finish the basics, you'll have 10000s of features to catch up, and lots of debug too probably... anyways...

    --
    --- Metamoderating abusive downgraders since my 300th post.
    1. Re:Dude, you crack me up... read on... by composer777 · · Score: 1

      Nah, not on crack, my guess is that he's an idealistic college student. Basicly what I did was let him indulge his fantasy and gave him tips on writing a 3D rendering engine. It seems clear from his post that he hasn't even done any 3D programming. He never mentions it. So, let him get started, if he's ambitious he'll get a 3D engine finished, which is quite an accomplishment, and learn alot in the process. You know how it is, young, and in college, and everyone tells you that you can achieve anything, and that you're the smartest. What they forget to tell you is that you'll have to spend at least the next 5-10 years of your life working like a dog to achieve just one of those goals, so choose wisely, and try to make it original.

  104. RMS reminder by Billly+Gates · · Score: 2


    Thats GNUemacs you insenstive clout!

    1. Re:RMS reminder by Anonymous Coward · · Score: 0

      You suck rox billly.

  105. Practice by captaineo · · Score: 2

    My best advice for those developing 3D animation software: do 3D animation. Then write the tools you need to do it better.

    It may not be that difficult to reverse-engineer an existing program (in the sense of reverse-engineering its general architecture, not necessarily duplicating it bit for bit). I find that the public documentation on Maya and Lightwave is detailed enough to get a very good idea of how their internals are structured.

    1. Re:Practice by Chris+Johnson · · Score: 2
      +1,000,000 Damn straight!

      I think what this person needs to do, if he's serious about wanting to have an impact on the computer animation world, is: start doing some kind of groundbreaking computer animation and cobble together the software to do it.

      That, or just learn about all those APIs and train to be the code monkey that can put a software package together. I wish I could do that! I need a code monkey and I don't have one.

      It seems as though modern coding is tricky enough that it doesn't leave room for someone to really push the limits in another domain. It's like state of the art software will HAVE to be the product of teamwork and cooperation- which gives me hope for the Free Software model, that allows different people to bring their strengths to the table.

      Let me take a minute to just talk from my analogous perspective. I'm an audio geek who codes a bit. I've got arguably the highest performance dither/noiseshaper routines on the planet- very few people use them, because the software I built around them is pretty cheesy in some ways. It's not realtime, it understands virtually no APIs, can't even talk to sound hardware by itself. I don't understand that stuff. At the rate that it progresses, I may NEVER understand it in time to be doing current work on it. As long as my project relies solely on my own work, it will forever be incomplete- it does what I need, it absolutely wastes certain competing software like Pro Tools, but only by ignoring 90% of what Pro Tools actually does.

      I have choices. I can keep doing what I do, or I can stop and begin working purely on coding and APIs, teaching myself how to talk to sound hardware etc. ASIO? TDM Digidesign code? The new Apple APIs? I do know what's involved, it's just over my head. The people doing this stuff have it under control, at least the bits they do, but they have no idea what IIR noise shaping is. Some of the people focussing on the audio side have that as well mastered as I do, but they don't necessarily have algorithms as CPU-optimized as I've been forced to make mine, because I'm writing in a pig-slow compiled Basic language (REALbasic- worth investigating for people authoring userfriendly IDEs).

      So I'm turning more toward hardware now- got a nifty mic design using two different electret condenser mic elements inductively coupled and powered through a simple transformer. I've been experimenting with multiband compressed processing of the music I do. There are things I'd love to try with that, which I can't, because I haven't the coding skills. I have been able to half-speed master this multiband processing, using simple coding hacks- interpolate the samples to double the length, process (makes things bright, too), then average each pair of samples- sounds fantastic.

      Coders often seem to feel like the masters of whatever domain they deign to touch- certainly the story poster seems to feel that way. That's a problem, because it leads to coders writing 'wonderful software' that misses the point- hence the advice I replied to. BE DOING THE WORK. You can't design something in your head for other people and expect it to be worth much- start working with this tool and trying to do great things, and you'll soon find out what needs to be improved.

      Meanwhile- I continue to do my work out here in Vermont, without much connection to DAW software projects. I remember once, someone from one of the DAW software projects (Audacity?) wrote me asking what dither was. I tried to tell them (rather emphatically!) and offered any or all of my GPLed dither/noiseshaping code to use. I don't think they did, but they may have added dither to their 2-buss: hope so, as most professional sound engineers working with digital are familiar with the use of dithering in wordlength reduction, and to compete with the commercial software, the free software needs to perform as well.

      Or better- because some of the commercial apps show the SAME PROBLEM. Pro Tools didn't have a dithered 2-buss for ages. It still has peculiar internal bussing that causes sound degradation in subtle ways by use of features that shouldn't be causing a problem. Simple MONITORING in Pro Tools is inferior to playing a WAV or AIFF on the host system. It's the same problem- the commercial sphere isn't necessarily being coded by the people using the actual tools, and this can be crippling. Just because they're getting paid doesn't mean they're listening...

      If any DAW-coding linux geeks want to talk to me about making their software sound way richer and deeper than certain commercial competitors, I'm always willing to spend time tutoring people on this stuff. It's a specialized problem domain, is what it is. I can't do the coding for myself- that's another specialized domain. Who here has mastered ASIO drivers? Or even knows what they are? Right now I can't think of even ONE SIMPLE FREE AUDIO CAPTURE PROGRAM using ASIO recording at 24 bits and/or high sample rate. Without that, my code is blind and deaf to the outside world.

      So- decide. Do you want to be a software developer, or an animation guy? Even though it is frustrating, I'd suggest being the animation guy. Start trying to do things that push the state of the art, and don't be too easily sidetracked into the realms of 'writing a Maya-like interface' or extensible modular software subsystem. It sounds like you want to be the hero software developer. What good is that if there's nothing there behind all those APIs and extensible user-enhanced scripting engine paradigms?

      Target something other people AREN'T doing. And be very, very patient, because you WILL NOT be asked to participate- most coders won't see your expertise as relevant. But if you can code enough to tread water you can release- and if you do that you can get some other people who USE the software to be delighted. There's a wordlength reducer out there, POW-R, which is THE most highly rated proprietary dither- it's treated like the Coca-Cola formula and people worship it, it's a buzzword all to itself. I've beat its performance objectively in measurements- but I've also had people write me email just to say that they liked my 'Ten Nines' dither even better than POW-R 3. None of the DAW coders unaware of my existence even know what POW-R is (afaik), but what I did reached some people who were as familiar with the details of my little problem domain as I was, and no higher compliment could be paid- that was basically saying 'thank you for the software, thought you should know it beats the state of the art at any price'.

      Do THAT. It will be much more useful than writing yet another general purpose animation system to be a bigshot.

      And hint hint- if you write it as Free software, eventually someone WILL be able to put all the pieces together- and we'll all have software that on EVERY level absolutely wastes the expensive proprietary stuff. But the only way to do that is to become the obscure expert on some problem domain that people don't pay attention to.

      Just a suggestion....

  106. The easiest solution by Anonymous Coward · · Score: 0

    First create your own hardware platform, then write from scratch a new OS (I mean at least better than Windows + Linux together), then try if possible to provide enough drivers to support most of the other existing plateforms. And finally be sure to program a full email client, web browser and word processor (so you don't have to reboot for those tasks).

    After that, you'll see how easy is to develop a 3D modeler.

    Et voilà !

  107. Like all software, it's simple by splattertrousers · · Score: 3, Insightful

    1. Think of the most important feature that you can describe in one sentence and that you estimate will take a small amount of time (say, 4 hours).
    2. Write a test for it.
    3. Write the code to make the test pass.
    4. Refactor.

    Repeat steps 1-4 until finished.

    1. Re:Like all software, it's simple by Anonymous Coward · · Score: 0

      5. ???
      6. Profit!

  108. It's 'Genius' by Anonymous Coward · · Score: 0

    genius

  109. Bzzzzzzzzz.... by Anonymous Coward · · Score: 0

    That's called a wheel...
    You mean to say he wasn't talking about a vibrator? Guess I need to get my mind out of the gutter...

  110. Common Lisp by voodoo1man · · Score: 2, Interesting
    Before you mod me down, check out what these guys have done. (The site hasn't been updated in a while, due to company problems and one of the main coders being on hiatus or something (fyi, his name is Larry Malone, he has been doing this ever since he modelled the sailing ships in Tron using custom-developed software at III, and has been writing graphics Lisp software at Symbolics and since afterwards)). Well, enough of the history lesson.

    Common Lisp has a lot of benefits for this type of work. Since it is completely dynamic (ie - everything runs in an image with which you can interact, add code/compile and debug, all at run-time), the plug-in/scripting is taken care of from the start, and can have the full syntax of CL and access to any of the main program's features you choose to give it. CL will probably give you the most results per line/minute of code because of this dynamism.

    Most CL implementations have pretty good foreign function interfaces for C and C++ libraries (Franz's Allegro CL even provides support for run-time Java objects.)

    CL's performance is on par with C++ in general, and lags only in one major area - FP operations require "boxing" overhead when the symbol pointing to the numbers is dynamically typed (most compilers optimize statically typed declarations pretty well - which makes most of the overhead go away.)

    Of course, before you go off on your great quest, you should probably read what some of the other posters have suggested. Writing graphics software like the type you describe is an incredible amount of work (I gave up my uber-Scheme system after 100 lines and settled for writing smaller utilities and plugins), and many have tried and miserably failed before.

    --

    In the great CONS chain of life, you can either be the CAR or be in the CDR.

    1. Re:Common Lisp by n2kra · · Score: 1

      He did ask...

      "The question is, what is the best programming paradigm to use for such a project?"

      There are languages that supports them all.

      "I have all of the major concepts, and relationships in mind, but refuse to write one line of code until I have a good design plan."

      Have you investigated the suggestions of XP?

      Checked out tools such as Refactoring Browsers?

  111. Make it compatible with 3DWM by Anonymous Coward · · Score: 0

    Make it compatible with 3DWM

  112. look forward with the help of hindsight by Anonymous Coward · · Score: 0

    I'd ask professional (read:old) 3D coders of maya, blender, etc... about what they would do if they had to do it all over again. Yes these products are wonderful, but anything can be made better.

  113. Been there, done that by phorm · · Score: 2

    Actually, at one time I had a semi-working 3d modeller, based on Visual Basic and DirectX 5. One could create simple objects or design faces by vertex, and then create objects from the faces. I seem to remember in the end I had gotten a working gl modeller, although I think the texturing had issues.
    Direct3d is not incredibly difficult to work with. Although I swear that it was easier back in the days when one would import library functions from custom TLB's and there were a crapload of samples online, since the current Microsoft SDK examples suck.

    I don't know if openGL is any more difficult, I imaging skilled C++ programmer could probably come up with something quite a lot better that I did in about 3 months.

    My last recommendation, check for similar projects, and release your project as open source. It might net you more assistance, and it would probably make a lot of slashdotters happy as well.

    I'd give you code for the old VB modeller, but looking back at it, it's so bad that even I can barely figure out what I was doing. I figure that by the time you're 90% done you'll look back and say "wow, that first month of code is absolute shit, maybe I should rewrite it." :-)

  114. make your life easier by boinx · · Score: 1

    first of all, if youre going to do this, dont try to make it work on all platforms. it will be hard enough to make it work well on one platform. if you can do that, it'll be no problem to port it cuz you'll be rolling in $$$ and can pay someone else to do that.

    second, never tell anyone that you asked this question on slashdot.

  115. I had a similar experience when... by PotatoHead · · Score: 3, Insightful

    I decided that I was going to create a viewer for CAD models using OpenGL. Take my home page link to see what the end result was.

    You should set some realistic goals early on. I have read some good comments about planning. --Do this, they are telling you the right thing to do!

    I wrote the core of what I thought would be capable of becoming the viewer. Turns out that I was right, but I ended up with a viewer that will need heavy rework before it can be built upon. It actually works well and does the job it needs to do, but not in an elegant and extendable way. Better planning and research, on my part, would have helped out a lot. Of course, now I can comment on such things because I see the value --even if it was the hard way :)

    Take that plan and break it into a couple of realistic initial projects that both accomplish something and contribute to your end goal.

    I also read a couple of comments to the effect of "If you are asking on ./ you likely do not have the ability to complete the project." --Ignore these. If you have the time and interest, you will have a lot of fun and learn things that would be hard to do otherwise. This is worth doing IMHO.

    After putting my early revision of the viewer up on sourceforge, I have recieved comments and e-mail from people wanting to help me code better (thanks Thierry!) and from people letting me know how they use the program. One person, after some conversation, went through the code line by line with suggestions and advice that helped me improve the program quite a bit. This whole experience was good for me.

    I have some general comments about this sort of program as well based on a few years AE experience with them. (I have worked with MAYA, ProEngineer, I-DEAS, StudioTools.) Watching users learn and use these tools has shown me a lot. Spend some time with these users and watch them work. Consider what is done well and what could use improvement. This will help your planning more than you know.

    Go with OpenGL as the foundation for your display. It will keep your project cross platform. OpenGL is mature and very well documented so leverage that.

    Think long and hard about your interface. What actions will one need to accomplish at a particular time? Think about different workflows and allow for them. Some users like to free form draw, others draw then size then draw --that sort of thing is important. Consider MAYA, it presents both methods at all times.

    Part of the overall success of MAYA also lies in the fact that it is as much of a platform as it is an authoring tool. I believe this is key for this type of application. Since you really do not know how people will create with your tool, allow for that in the core design.

    Think about the command structure as well. Lets say you have a function that will sweep a curve along a path. (Which is a very common function.) Instead of creating many sweep commands, build one that handles sweeps in general. Every package gets feature creep, make sure yours puts it off as long as possible.

    Most of the programs I mentioned above have good workflow built in that is ruined by lots of odd commands that fill gaps in the feature set that a well developed core command set would have addressed if they better understood how people would be doing things.

    Get copies of these and learn them enough to understand how things are accomplished and build from there. Many of the common mistakes have already been made for you, take advantage of that.

    Build upon some of the more documented file formats out there. Your project will be used more if it is data friendly. While you are at it, make your file format a smart one. Document it well and be sure it can grow with your project in a sensable way. Given all the inexpensive storage today, do not be afraid to store lots of smart data that is easy to work from.

    The most difficult part of this project is likely to be the geometry kernel. There are kernels out there that you can build upon. Most of these have many man years invested in them. You would be wise to do your homework here and take advantage of one of these. This will also help greatly with the data elements I mentioned earlier. ACIS, Parasolid, Hoops and others like them are what you should be looking for.

    Invest a lot of time in good graphical feedback to the user when you get to that point. If things are modal, indicate that mode onscreen in a way that does not distract from the task at hand. Things like direction, spatial location, surface normals, control points and such should all be distinct and clear for easy manupulation.

    Go have a bunch of fun, learn stuff, live to tell the tale. --Remember to go outside once in a while though!

  116. Been there, done that... by Cryptnotic · · Score: 2

    We had to write a modeller and a raytracer for the 3D graphics class at UCSB. The modeller was just a single window with no pull-down menus or text or anything fancy like that. You would click the 'n' key to start a new polygon, then you would click around on the screen a few times to create the polygon. We only supported polygons. You could select polygons with the mouse and use 'r' to rotate them around. The drawing to the screen was via OpenGL.
    The modeller was simple, but it worked. If I recall, you hit 't' to do a raytrace of the current scene. It would pop up another window of a hard-coded size and do the raytrace for each pixel (i.e., traverse accross the data set figuring out what to draw). By the end of the quarter (it was a 10 week course), it did lighting with the blinn-hill ambient, specular, highlight model and it had different reflectivities and transparancy. Plus, in the modeller, you could save and load models and reparent objects to create a hierarchy.

    Anyway, it was a good way to learn a lot of 3D graphics stuff.

    --
    My other first post is car post.
  117. Extreme programming by Gerry+Gleason · · Score: 2
    You know, this is pretty close to what is being called extreme programming. The idea is to get something working quickly, and write lots of tests for each feature/function as you add it. Make the regression tests part of the build process so you are always keeping things in a working state as you go. Expect to throw stuff out and redo it instead of doing extensive rework.

    It's never apparent what the best final structure is when you start. Allow the design to evolve. I think you still want to do a fair amount of high level or top down design at the start, but don't worry about getting everything perfect. Part of this model is also working in pairs or teams.

  118. If it can... by Anonymous Coward · · Score: 0

    ...allow me to render a hot mamacita with a nice, bouncy 36DD rack, then by all means, code away...

  119. Easy on the pile-on by Kodi · · Score: 1

    A lot of people seem to like bashing this kid because of how unrealistic this is. I think it's unrealistic too, but I think he should do it anyway. Why? Because he'll learn a LOT in the process and it will make him a much better programmer. I know because I was this kid. I've started a number of projects in the past that were completely delusional in retrospect. However, this kept me coding, and it kept me learning. For some people, what keeps them inspired and motivated is working on the Next Big Thing, not fiddling around for the fun of it. Although none of those projects were completed, I was easily among the best, if not the best, programmer in my classes, and my teachers knew it. While he may not end up making the product he wants to make, what he will do is make himself a much better programmer with a lot of knowledge in this area, a lot more than the average coder coming out of college. It will serve him very well later on, since this is clearly the field he wants to work in.

    The only way this will backfire is if he puts so much faith in this project that he neglects his grades, his search for a real job, or worse, drops out of college to pursue this. I don't think he will, because he knows it's huge (if not how huge) and there will be plenty of time for reality to sink in.

  120. idea by pcxmac · · Score: 1

    i have been thinking of such a program myself for a while, and i agree waiting to start coding after having a solid conception of what the code should look like will save alot of time and wrong turns. its my belief that code should work with u, in that u should think about something really small which itterates and reitterates its self into a fully functional dynamic entity. i have been thinking about AI and neural networks, and how relationships beetween processes define their own value much as we humans define ourselfs keep ur avenues open and ur lights on! ull find ur goal quicker that way. dont lock into anyone way of doing something, thats why i suggest dynamic relationships.

  121. Nother useless idea by bobthevirus · · Score: 1

    Have you looked at the likes of openFX (www.openfx.org)?? Small open-source programs like that can show you a lot about the good and bad ways of doing things, and sometimes they contain useful ideas for greater problems

    --
    Who me? Crazy? Never.
  122. I did it this evening! by Anonymous Coward · · Score: 0
    After reading your fine analysis I was so enlightened that I wrote it up in PHP! I made an initial false start using OOF (object-oriented FORTRAN) but quickly recovered once I realized that IEEE floating-point formats aren't necessary.

    Sorry, maybe you can have the next one!

  123. Decide what you want to accomplish. by yeOldeSkeptic · · Score: 1

    I'm late to this discussion so you may not be able to read this but speaking as a professional programmer but not necessarily a graphics expert.

    1. Decide why you want to do this thing. Are you doing this primarily for (a) the challenge or (b) because you have an itch that cannot be scratched by what is available free or otherwise?
    2. If it is the second case then I suggest you start with what is available and working and extend or add more functionality to it. For example: A previous slashdot thread tackled the growing popularity of mouse gestures. Maybe you would like to add this capability to blender? How about making it faster? or how about adding some AI to blender in order to teach it physics or mechanics? What exactly is missing in blender that you would like to see?

      (I am using blender as an example here but I am sure there are other packages out there where source code is available and which you can extend or experiment with.) If you want to have something that you can and will use, you have to take this approach.

    3. If you want to create a Maya-like graphics package as a challenge, then that is an entirely different animal altogether. Remember that the packages you mentioned were created by teams of professionals that have spent years polishing and revising their code to get the finished product you are seeing today. It is highly unlikely you will be able to achieve the same alone.

      But then, what kind of a hacker does not like a challenge? I can only advise the following:

      • Study the source code of what is available, determine what paradigm they are using. Do you think their paradigm is the right thing(tm)? or do you think you have a better paradigm?
      • If you have a paradigm you want to prove, then how could that paradigm be achieved? Perhaps it could be achieved only by creating an entirely new language, and building your app with that language. Paradigm shifts are places where individuals can still make revolutionary contributions.
      • Get in touch with the people who are actively doing this thing. There should be mailing lists where you can get into the groove with your peers immediately. It helps if you can get yourself programmer friends within the company whose work you admire. Mine them for ideas.
      • Start programming right away! No need to put your ideas on paper first. Code is a more concrete expression of ideas.
  124. i don't retend to know what i'm talking about... by Anonymous Coward · · Score: 0

    but it seems to me that some of the best advice here to is to find out what people are already doing and either help make an existing project better (like the open source http://www.wings3d.com) or write your own plugin for an existing app.

    i don't know if anything exists like this but if i wanted to do a lot of modelling it would be great if i could put one of those gloves on that were all the rage a few years back and create models as if i was really modelling clay. that sort of hands on motion capture ability would be brilliant.

  125. Character Animation tools are a big missing piece by ikekrull · · Score: 3, Insightful

    Linux already has good tools for modelling, rendering, and reasonable tools for output.

    Also, trying to reinvent the wheel is a waste of time, there are a jillion different frameworks, engines, modellers, renderers out there for Linux, none of them complete enough to produce professional, day to day 3D animation work.

    Blender is the most complete of the free packages, and it really is an extremely good piece of software, despite the annoying lack of 'Undo'.

    Blender has some good animation facilities, but I really think it would be worthwhile to write a separate module that specialises in character animation. This would be a godsend to people who are trying to do complex animation with Linux, without paying for Maya etc.

    I suggest, you take Blender and build a module into/around Blender's workflow to bring professional-level character animation tools to Linux. Use Blender as a modeller, as a 3D format, and a scene-integration tool, and build us a set of professional non-linear character animation tools, that integrates well with the best (soon-to-be) open-source 3D package in the world.

    Look at Project:Messiah, a character-animation addon for Lightwave3D for a good example of how a great character animation tool works, and also at Hash's Animation Master, as those tools are really, really good too.

    This would fill an existing hole in the toolset available on Linux, reuse work already done by the community, stand a better chance of getting to a usable stage quickly, and probably give you a chance to think about doing a 'ground-up-rebuild' from the perpspective of the most 'demanding' end users of your software - the character animators.

    With Blender, you also have a huge community of artists who will thoroughly test your package, and provide suggestions and help to make it the best it can be.

    --
    I gots ta ding a ding dang my dang a long ling long
  126. You should use Java by master_p · · Score: 1

    Java is a good solution in my opinion for such a program. C++ will draw you into many design issues that have been solved with Java.

    It has nice 3d support which is getting nicer by the minute.
    It can easily handle run-time extensions.
    It runs on every O/S that has a JVM (almost).
    It is almost similar to C++ in syntactic aspects.
    It allows for faster coding. No more separate header and source files. It is a pain in the ass to update both files with comments etc.
    It provides automatic documentation through the use of metatags in comments.
    It has a nicer error catching model.
    It has some standard GUI libraries.

    I am not saying that you can't do it in C++, but it will save you lots of time if doing it in Java.

    C# is another good option but limited for the Microsoft operating systems.

  127. Re:Check out OGRE ...Accuracy. by Anonymous Coward · · Score: 0

    What about accuracy? If I remember in games the dimensions aren't as critical, as say in things like CAD, or object modeling in a Modeller. Game engines are geared more for speed than accuracy (or correctness).

  128. Plugins, etc. by lommer · · Score: 1

    I believe that this guy has made a crucial point but not emphasized it enough: PLUGINS PLUGINS PLUGINS!

    And when I say plugins, i don't neccesarily mean simple stuff. I'm talking about engineering your modeler modularly so that you can actually have a hope of finishing useful components on a reasonable timeline. A good example is a friend of mine who is really interested in modelling. So much so that he's coding his own rendering engine. While he's undertaken this project solely in his spare time, he's devoted quite a bit to it and has spent the last two years working on it. By now he's actually getting something that is working decently and it's really coming together.

    So, if you want to undertake a project like this, screw the framework at the beginning. Other than a REALLY rough sketch, get straight into the design and coding of the major components.

  129. First, by KillerKane · · Score: 1

    Get a mirrored ball and a chessboard....

    --
    There is a thin line between genius and insanity. I have erased that line. -- Oscar Levant
  130. If you are asking this question. by Anonymous Coward · · Score: 0

    The question you asked immediately tells me that you should probably try to tackle a smaller project 1st. Sharpen your programming, architecture, and management skills. When you are done with this and you think of your 3D program and you don't ask yourself the questions that you posed to slashdot then you are ready to lead a team at making it.

    I wouldn't suggest a program of that size alone though. Inexperienced programmers often filled with the power at their finger tips often bightoff more than they can chew. I even got drunk with the power of programming myself a few times and tried to make mammoth solo projects. Years of experience later I now know they would have taken me tens of thousands of man-hours to make.

    Do your project timelines 1st then caculate how long it will take you. Then realize the best planned projects usually take 3 time longer.

    A concerned Software Engineering Manager.

  131. Coming from another Slashdot lamer by Anonymous Coward · · Score: 0

    Why are you trying to teach the ABC of real-time 3D ?
    He has asked a completely different question. He wants to write a complex animation application, not an OpenGL screensaver.

    The fact that you got rated as Informative, shows how 3D graphics is such a mystery for the other lamers here on Slashdot.

    Professional my ass !

    1. Re:Coming from another Slashdot lamer by composer777 · · Score: 1

      The reason why I am giving him ABC's is because I am inferring from his original post that he has never written an Open GL engine or screensaver, period. If you had any reading comprehension whatsoever, you would have picked up on that too. Nowhere does he list any OpenGL or Direct3D programming in his experience. What he does list is every marketing guys wet dream, a feature list that is almost incomprehensable and so full of buzzwords that it's enough to make you choke. I think that starting with the basics is exactly what he needs. If a someone comes to me and asks me to teach them how to play lead guitar, and I can see that they've never played in their life, then I am doing them a disservice by going straight to the advanced stuff. Start people off on the level that you think they are coming from, not where they think they are. Just about every college student has ambitious ideas. I think that in this guys case, he would be well served by creating an extensible, fast engine, and then moving from there. And, furthermore, why you think timelines, keyframes, and scenegraphs are an important part of writing a screensaver is beyond me. Perhaps you could explain, or maybe give him some advice yourself. I'm not going to design the thing for the guy. I described basica ways to organize his data in a scenegraph, timelines and keyframes, which is really all he needs to get started. After this if he wants to write a scripting language he can use bison and lex, or XML as some others have suggested. Please explain why bison is necessary for a screensaver? Do you know what bison is?

    2. Re:Coming from another Slashdot lamer by Mox+[Pox] · · Score: 1

      Damn straight. Some people just wait to jump on a reasonable answer, in an attempt to 'one-up' the poster. Your points are all good commentary on thinking about internal organization etc.
      Of course I also agree with another poster that the guy is a fscking idiot to be asking this type of thing on /.

      Sigh, my comment to people when they ask these pie in the sky questions, is if you were going to do it, you would be doing it, not asking/daydreaming about how you should do it.

      As Yoda said, Do, or Do not. There is no try.

  132. everyone is using cobol by Anonymous Coward · · Score: 0

    get with it

  133. A good book. by e-moon · · Score: 1

    Not that long time ago I bought Large Scale C++ Software Sesign, its a really good book about how
    to structure and design your programs.

    The author himself work on a graphics program, so i think this book will be very good reading for you.

  134. comment on the Physics-part.... by danalien · · Score: 1

    ...wondered how you would do the physics part of you 3D Animation App.

    Are you going to gather all the physics laws and apply them to your vertices/polygons of your model(s)?

    I just thought if you were going to 1} do-it-your-self 2) from scratch, do something new :). Like instead of doing physics-to-polygons/vertices/splines/etcetc..; sratch that and built around molecule/"atoms". Let me explain myself a bit...

    If you read Chemistry/Physics, you know the whole world is based around atoms that fore molekyles, that eventually fore us and the rest of the world. Every 3D Animation Package out there are striving everyday to make 3D look more and more realystic. And just they'll ever get (if they continue to strive that way) "something that may look real, but isn't real" - other words - nonreal.

    I'm one of those, "if you do something, then at least do it rigth", whereby, "if you are going to do something realistic, at least make it real" :). And IMO (copying) mother natures structure is the only way to get to "realistic-real". To date I don't think I've seen a sceen where I haven't been able to spot where they've used 3D illusion(s)/didn't use (yepp, even ILM's fancy-smancy illusion are noticeable to the human eye).

    To got to my point; materials with a molecular structure are bound to become realistic-real, while material with a polygon/splines/vertecies/etcetc are bound to [just] become realistic how much one strives.

    Not to mention, that there are a lot of other things that are going to get hell of a lot diffrent. E.g, applying texutre, light, rendering :) hehe....
    But as an outcome you are bond for the future... where we (I) want things like a holodeck [try using polygons there.. hehe)


    [This just my opinion, so take it with a pinch of salt, my brain can output the oddest thing to mainkind, but but, "everything is possible", right??]

    --
    I don't claim I know more than I know, and if you know you know more than I know, then by all means, let me know.
  135. Mod parent up by NFW · · Score: 2
    I cannot believe that this was modded as Funny. I think insightful, or Informative would be better.

    Agreed.

    I cannot begin to think of the number of times I have gone back and rewrote something over just because it was just not right enough.

    But then again I am not a professional software developer and don't have a due date to meet.

    What, like that would make a difference? :-)

    --
    Build stuff. Stuff that walks, stuff that rolls, whatever.
  136. Fore == Forge by danalien · · Score: 1

    just wanted to clear a few misspellings.

    Fore == Forge
    And just they'll == And that's just they'll
    To got to my point == to get to my point
    bond == bound
    This just == This is just

    --
    I don't claim I know more than I know, and if you know you know more than I know, then by all means, let me know.
  137. My name is simon, and I like to do drawers by SeXy_Red · · Score: 1

    Are you looking at my bum, you cheaky monkey!

    --

    This sig was generated by a barrel of trained kittens for SeXy_Red (550409).

  138. Re:Cool idea, but... +1 Insightful by Backov · · Score: 1

    That was possibly the best, most helpful reply I have ever read on Slashdot.

    Kudos to you sir.

    Cheers,
    Backov

    --
    In the law there is no overlap between theft and copyright infringement whatsoever.
  139. Work with an artist by Anonymous Coward · · Score: 0



    Here's a radical idea...

    Team up with some artists that would ACTUALLY USE the software. The a programmer and developer works IS NOT the way a user works.

    You have to get with the users.

  140. separate ui/engine by KeggInKenny · · Score: 1
    Personally I'm a big fan of separating the UI and the rendering engine into two separate programs. *nix has been doing this forever, but I'm starting to see it more and more on Windows/Mac as well.

    The great advantage specifically for a 3D modeler/renderer is that you can do up the UI (and yeah, you get to have fun writing 3D routines for displaying the wireframe or solid modeled for display to the user) but you can then program to output in a known format (and take care of one of your "export" filters at the same time), and have a 3rd party renderer take care of the messiness for you. Once you're happy with how the UI works, you can write your own renderer if you still feel up to it.

    The disadvantage with writing it either all-at-once (or writing only the renderer first) is that you can't test things nearly as quickly. Let's say you hammer out 3M lines of code, open the UI window, model a sphere, assign a texture, click the "render" button, and you end up with a black window. Did the sphere not get modeled? Was there an issue passing it to the renderer? Did the renderer mess up with the texture? Does the UI for some reason pass all objects as coloured perfectly flat black?

    As for all those who say "why are you doing this, there are all ready free renderers", screw 'em. Sometimes it's fun to play areound and design/code a massive app just for the hell of it, right. Although, these massive apps rarely get completed...

    --

    "A dictatorship would be a heck of a lot easier, there's no question about it." -George W. Bush
  141. Waste of time by smeschini · · Score: 1

    Probably it would be a waste of time (if written from scratch)... I'd suggest you to take a look to www.sf.net and become a member of "similar" project(s). My 0.0001$ :-)

    --
    http://smeschini.altervista.org
  142. A paradigm is DEFINITELY Needed by MickLinux · · Score: 1
    I have the best computer animation program out there, XYZ-Anime, and it is the most anoying thing when I want to type a report, and it gets up and goes out for coffee.

    Unrealistically, what I'd really like to see would be a programming model that could take a general model, and then at will recalculate the general model based upon specifics. Of course, I too have some physics and math, and I'm not to sure one could really do this.

    But if I were going to do it, I would probably use Taylor function matrices everywhere, and use the Parker-Sochacki Picard iteration (better explanation here) to do the specific calculations as needed. My data would then be stored first in a lookup table, as spotty as it could be, and secondarily as a Taylor function, and on third order the Taylor function would be recalculated whenever there was time.

    --
    Correct Horse Battery Staple: 72 bits of entropy. Enter "Correct H" into google. When it generates the phrase, that's
  143. Re: Link repair by MickLinux · · Score: 1

    Sorry, there was a URL error in posting the " better explanation " , the second link. It didn't post, for some reason. Here it is, again, above, and below (in text), in case it still doesn't work. http://www.math.jmu.edu/~jim/full.ps The better explanation is actually intuitive, such that a normal person with a normal education in Differential Calculus would understand it. Shoot, even a person with just algebra could understand it if they understood *what* differential equations were.

    --
    Correct Horse Battery Staple: 72 bits of entropy. Enter "Correct H" into google. When it generates the phrase, that's
  144. build a better mousetrap, not a knockoff by Shadestalker · · Score: 1

    "this package will be similar to Maya, 3DS Max, etc... in many respects."

    But why? This is the part you didn't even put in your question, but it's arguably the most important.

    Your end users don't give a rotten tomato whether the rendering engine is DirectX, OpenGL, or something you put together with chewing gum and string. What they need to do is use the application in a way that makes sense to them. Given the opportunity to choose for themselves what widgets are where and how workflow is controlled by the application, do you really think they'd all vote for Maya, 3DS, or whatever? Think maybe the fact that the apps they used to learn this stuff in the first place would influence their decisions maybe a little?

    If you intend to create something genuinely new, consider making it more than a poor man's carbon copy of an already existing effort. Look at the following Blender has as an example of what can happen when you break the mold.

  145. If you have to ask this question on Slashdot... by EnglishTim · · Score: 2

    ... There's no way in hell you'll ever complete the project.

  146. crude step by step of how i did mine by fatgraham · · Score: 1

    start off with your 3d engine. make it cross platform/api as you would for a regular 3d engine.
    and have your editor as a new "game" on your engine

    render some test triangles.

    store those triangles

    translate input (2d) to model related input (3d) and use it for clicks/drags and manipluate your verts

    add "bones" as well as verts to create/drag around.

    link your verts to your bones, and make a timeline and add keyframes to the bones, and store the movement from the bones' original positions to the keyframes positions

    add functionality to save your file!

    worked for me :) ( http://fatgrah.am , merked )

  147. Modules, modules, modules, modules... by PhotoGuy · · Score: 2
    (Not developers, developers, developers, developers.)

    I'd highly recommend working *hard* to define an internal interface (API) that allows *every* functionl part of your program to be done as pluggable modules. It makes it very easy to isolate problems, it makes things more rebust, it makes things extensible. (3DS does a good job in many ways with modules.)

    By doing this, 95% of the system could be done as modules, and you can also keep all system-dependant stuff out of these modules, greatly enhancing portability. Thing of the core of the system as being a meta-operating system, a 3D animation operating system supporting these plugin modules.

    Another possibility with this approach, is that with proper definition of the interface between the core and the modules, you could even have language indepedence in the modules. (Probably not a biggie initially, but might be good for extensibility at some point; or even good initially for prototyping parts.)

    In almost every project I've seen go awry, taking additional time to properly define "internal interfaces," how the parts speak to each other, would have saved a lot of grief.

    Take a long hard look at 3D studio's transformation stack; being able to keep track of what took place to get where you are, and being able to apply that to other objects, modifying or branching as appropriate, is incredibly powerful. Being able to animate every parameter of these transformations is also key to a powerful package.

    Again, to summarize, modules, modules, modules, modules. :-)

    --
    Love many, trust a few, do harm to none.
    1. Re:Modules, modules, modules, modules... by Inthewire · · Score: 1

      Funny...I'm considering doing something like this for a database system. My "vision" is a pluggable box that talks datasets. SQL, sprocs, connect in to play with, but input is variables and authentication information and output is datasets. I'm sure it'll have huge holes in both the architecture and the implementation but I still think about it, refine my approach, consider things.
      Maybe it'll never get started. Maybe it'll never be finished. But it gives me a place to burn some energy.

      --


      Writers imply. Readers infer.
  148. Crabs, not lobsters. by Anonymous Coward · · Score: 0

    Crabs do this, not lobsters. GET YOUR CRUSTACEANS STRAIGHT before you post an allegorical story to Slashdot.

  149. You're GREAT. Here are my needs. by 3Ddgg · · Score: 1
    I hope this is useful. I am not a useful programmer yet. The best I can offer you is the absolute minimum that I would need from a 3D modelling package before I could use it.

    I am your 3D architectural design market. If you have any questions, I'd love to help.

    1. An efficient and easy to manage object/group heirachy, that would allow the inheritance of a wide range of object properties from the group. min: materiality, visibility, snapability (snapping funtions are assumed), selection and line type/colour. This is a core modelling interface for anything more complicated than a chair. I would spend as much time on designing this as the modelling window interface. Everything else will REALLY only be accessed using hotkeys. I like the Gimps easy hotkey modification. It doesn't take too long to change them to photoshop defaults.

    2. Object creation and editing at a range of geometry levels. Creation of solids, faces, lines and points in an intuitive way (an active plane and object snaps). Selection, deletion, translation, copying and insertion of geometry at all of these object levels.
    note: I don't use nurbs or patches much, so ask someone else about control points and such. I understand that Maya has one of the most intuitive models for this.

    3. Intuitive view creation, saving, switching and interpolation using a choice of cones of vision or camera to splines.

    4. Viewports should be separate from the active plains to allow the editing of the model in a perspectival wireframe interface instead of some archaic three pane orthographic design system.

    5. Easy creation, sharing and use of external objects or blocks.
    note: If these could be scriptable to take key dimensions and co-ordinates from objects in the model, then this could also be a great model for complex object insertion tools. The scriptable blocks could have an interface of required points, paths, or whatever.

    note: If these could be web accessible, it would be awesome for project development teams


    6. An amazing raytraced rendering engine, a shadow mapping engine, a shader (openGL) and wireframe/hide engines (hide with line weights to postscript would be devastating). I advise using a range of external rendering engines. If these renderings could be converted into a range of video formats on the fly, it would be great.
    note: Things like motion blur, super sampling, film grain and depth blur would be great too. Relating this to film cameras in the dialog boxes would be great too as these things are essentially imitating the clients past experiences of 2D AV to make it "real".


    7. Whilst this is clearly intended as a modelling project, I would need either an easy way to take plans, elevations and sections out of a model (If these could be dynamically updatable then great. Viewports with clipping planes on the cones of vision would be a great way to do this) or to export it to a package that is able to do this.
    note: If it's internal, then simple relational dimensioning (refer external object note above) and drafting tools (offset, bevel, clip to line/plane/extension etc) would be needed. This would allow the documentation to be a part of the model.

    note: If documentation is internal then additional FLEXIBLE object data would be usefull for engineering calculations of loads (density) bills of quantity (cost per meter squared/cubed)

    8. A practical note, a tool for making solid terrains from contours (or IGES points.)

    9. Really good boolean operators.

    With the exception of the external objects/blocks, projects like Blender do not have these features. I am a designer. I understand some programming principals, but I repeat, I am not a programmer. If you would find me useful in this capacity, then let me know.

    p.s. for me a simple xml based file format with an internal binary format for speed would be cool, and would allow a grunt CAD jockey like me to play with the code. Most of us undersand HTML as a basic professional skill. XML isn't a big jump at all. It would also make the file format strictly formatted, unlike dxf, dwg, 3ds, max, and others.

    --
    No warranty of any kind is offered as to the quality of this post.
  150. Its all about the users... by Anonymous Coward · · Score: 0

    First of all its not a bad idea to get some of the big name modelers (3ds, maya, xsi, lightwave, etc.). You can get demoes from most of the big name companies now so this isn't the problem it used to be. :-) Then look in the nooks and crannys for the better free modelers (Blender, Wings, Milkshape etc). Then interview the user communities of these applications and see what they love and what they hate about their particular app and where they feel their app is weak in comparison to other 3d modelers. You'll get some fanboys of that particular application but looks for the honest evaluations and esp look for the answers from people who have used other 3d modeling programs. Just using the applications yourself is all well and good but you'll never get to know all these program's warts (and nicer parts) like an artist would. No one person has the time for all that. :-)

    To me the ideal modeler would be a modeler which had the polygonal modeling capabilities of Wings, the nurbs editing and animation system of Animation Master and Maya, the booleans of Truespace and a scripting/plugin interface which uses Python. But that's just one person's opinion. Go out and get a bunch more!

    After you get all the user feedback try and figure out a way to squeeze all the best of breed features into one program (easier said than done lol!). Look at other modeler's design and source code that are available to you (Blender for one OpenFX is another). Then write a design document, begin coding and start recruiting people. If you've done your job right after your modeler starts to take shape you'll probably start attracting other developers. I'm sure I've missed a lot of things you should be doing but this will give you a nice start.

  151. Design Suggestion: Forget it. Join Blender. by Qbertino · · Score: 2

    Honestly, the 3D Market is Dog-eat-Dog competitive. Even Houdini had to drop pricing to something like 20%, and thats a really good package that costed $20K just 1,5 years ago.
    User interfaces that make long term sense are rare and there's one package out there that's just been GPLd (Blender) that does that part very well. And memorize:
    No fuckin' way are you gonna stink up against Cinema (Newbie friendly from the first minute on), Maya (ILMs favorite), Softimage (also ILMs favorite), Hash AnimMaster (best Price /anim performance ratio), Realsoft3D (also best price / performance ratio), Virtools (3D Realtime/Web IDE), Blender (kickass GPLd Package w. RT/Web) and all the rest that are fighting tooth and nail for a share of the next best thing since sliced bread.
    Honestly, man, just plain forget it . Blender has gone GPL just now and that a *very* cool package (I got the full version) that needs a good *team* to get on with weeding out and putting in some cool new features that can put it on par with the other ones I mentioned. Join them! If your are only half as good as Ton Roosendal (which I, mind you, don't think) you'll have more than enough to do with that.
    Anyhow, whatever you do, *don't* waste your time doing stuff from scratch that others have done 6,7,8 years in a row before you. Especially when one of the best is (for) free (as in speech).

    --
    We suffer more in our imagination than in reality. - Seneca
  152. Use the Source! by Anonymous Coward · · Score: 0

    If You want to do GPL Software just check out Blender and extend it. It will be released soon under the GPL. You have a large and active community to give You feedback and do the testing, You don't have to start from scratch and You can learn a lot just by trying to figure out what the hell those guys thought when they wrote the code You are trying to hack some additions too. Also You already have a user interface ...

    This all applys, when You want to do GPL. If You want to write closed source, well, then You are on Your own.

  153. NIH by Anonymous Coward · · Score: 0

    > The question is, what is the best programming paradigm to use for such a project?

    The best paradigm? "Not Invented Here". You appear to be well down that path already... seriously, look at Blender, Innovation 3D, K3D, Moonlight, or any of the existing and mature 3D editors rather than doing everything from scratch.

  154. Will it work on my Commodore 64? by Anonymous Coward · · Score: 0

    Hey, I have a 3.5 floppy AND a 512K memory expansion. Even a mouse! Please think of us 8 bitters. Rendering times will be a million times faster because there's only 16 colors. Think about it!

  155. The role of planning by WillWare · · Score: 2
    You mention that you want a thorough plan before you write any code. As another poster pointed out, it's easier to change a plan than it is to change code; a plan involving a dead-end approach can be scrapped with a smaller loss than a large body of code involving the same dead-end approach.

    So the first reason for "plan first, then code" is that coding is expensive. That expense represents a risk if you're pursuing an approach that doesn't work out. Throwing away a plan is quicker and less expensive.

    The second reason for "plan first, then code" is that a written plan is a clear expression of the ideas in the plan. Code is often not very readable or very obvious, and a large body of code may require weeks or months of study to get all the nuances at work.

    There is a hidden disadvantage to "plan first, then code". Remember that we're trying to manage the risk of choosing a dead-end approach, so we want to minimize the investment before the discovery that the approach is bogus. A non-executable plan won't catch all the design bugs. It will only catch the design bugs that you can recognize on inspection of a written plan; the screening process is limited by your own human cognitive faculties.

    What if we could write an executable plan, in a language that is clear and expressive, and in which writing the plan is inexpensive? This would be the best of all possible worlds! Luckily you're not the first person to face a daunting software design challenge, and people have been designing languages for exactly these constraints for many years (Python, Perl, Scheme, Ruby, Smalltalk, and others. These languages vary in the expressiveness of their syntax. If you're concerned about the mental expense of coding, you probably will want to avoid Perl (which looks a lot like C) and Scheme (which requires a mental paradigm shift). My off-the-cuff recommendation among these would be Python.

    Why not write your final product in one of these easy, inexpensive, readable, expressive languages? Alas, many of them don't have the performance of C or C++. If you're doing something computation-intensive, that matters. But wait! There is another saving grace, called SWIG, a program that lets you glue small bits of C or C++ code into your larger program written in one of the easy languages.

    In most computer programs, the performance is gated by a small number of small pieces of the code. Usually, the majority of the code does not have a big impact on performance. If you can identify those small performance-expensive bits, and translate them to C or C++ and glue them back into your program, you get the speed you want, and 95% of your code is still readable and expressive, and easy to change later. The trick to finding these performance-limiting bits is called profiling (see 1, 2, 3).

    So here's the advice (assuming Python):
    1. Spend a day learning Python, two days if you're busy. Python has lots of great libraries, skim the list of libraries as somebody may have contributed something you'll need.
    2. Write your entire program readably in Python. Don't worry about speed yet. Rewrite as required until you're sure you've got a good design.
    3. Use profiling to locate the few small pieces that slow down your program.
    4. Use SWIG and C/C++ to rewrite those pieces and connect them back into your program.

    --
    WWJD for a Klondike Bar?
  156. Planning IS essential.. by Anonymous Coward · · Score: 0

    Very true richie2000...

    While planning is not 100% necessary to the people writing the code it is ESSENTIAL to the people who are supervising the project.

    Since it didn't seem as though he's doing this for a company or a suit, he is wearing all the hats in this matter, working all (or mostly) alone.

    1) Design
    2) Management
    3) Development
    4) Testing
    5) Marketing (if he chooses to sell or publicize his findings)

    Why would he approach a potentially mammoth project like this from only one point of view? It is extremely ignorant to believe that you can create anything BUT bloatware by not planning the project! In fact, you are more likely to produce code that is only interpretable to you. It will be completely riddled with your bad programming habits (because who will tell you otherwise) and who else but you could actually look at the code and immediately say, "oh, that's what you're trying to do"?

    Sure, it requires patience and a lot of thought. Isn't that what's fun about programming? Churning out code immediately that you will just have to throw away may or may not be the answer. Who am I to convince someone else that has never planned a program they've written on anything more than a fleeting idea that they can be far more effective if they took the time to plan?

    Additionally, regarding the fact that planning alone will not help (i.e. Microsoft)... I disagree. You first have to have a good idea (everyone tends to believe that their own ideas fall into this category by default), then, if you're to use planning effectively, you have to have a clear goal. This is where Microsoft excels. Their planning is purely for economic gain (after all, they ARE a business, not a foundation). If their IT department was autonomous and not taking mandates from the marketing/total world dominance department, they would probably produce software as good as the next company.

    Do they fail in their current model? Microsoft is a multi-Billion dollar company so I think they are rampantly successful in their current model. Just imagine if they were able to put all those resources into developing what people actually NEED instead of what will sell. They'd be great purists who would run out of money after outperforming every other group of purists, producing a lot of really good stuff (eventually ending up on government funding, I imagine, to produce bloatware again).

    Microsoft is the most effective company of all time at what they do. If money is not your goal then there is no reason why you can't be just as effective in achieving your own goal. On the other hand, a great product idea to you may be a piece of junk to me. My advice would be that if you don't like planning, suck it up and like it. Ask this vast community of computer users what they want in a product (I'm a user of 3dsmax and AutoCAD and while they are great programs, they have some extremely poorly thought out (in my opinion) segments that would drive me to switch to a smarter product), not how they would make it if they were developing it!

    If you're coding alone, how to make it is YOUR job (I think you're off to a brilliant start by planning this thoroughly). If you want to make this program for anyone other than yourself, what they want is THEIR job.

    Best of luck to you!

  157. Get advice from somewhere else by perfessor+multigeek · · Score: 1

    Actually I think /. is a great place to get advice on how. The real problem is getting advice on what.
    Might I suggest two general approaches?
    First of all, talk to actual customers in fields where they spend money on this sort of thing. Use a group like the American Institute of Architects or the American Society of Mechanical Engineers to reach the people who actually *do* flythroughs and renderings and see what they want from such a product. You may also find that talking to folk at a second-string engineering school (Stevens or RPI rather than MIT or CMU) you'll be able to get plenty of eager beta testers as unlike the more famous places, they don't get as many offers but they've got plenty of brains.
    A variation on that would be to check out reviews of products in magazines like Architectural Record, and further, write to the relevant editors (not phone, you want to make it clear that you weren't just bored and calling on a lazy whim) and see what they've got to say.
    This page will give you a solid start on relevant organizations and variables.
    Secondly, the current situation of having to use five different programs to finish the job is a little silly. I continue to be amazed by the frequency with which I hear somebody say that they do the sketching on paper or with something like Illustrator, then do the technical work in something like AutoCAD, drop in some people from Poser, then export to something like Maya, fix the resulting problems and render there, and then do final changes in Photoshop. Meanwhile stereolithography outputting is moved to something like Lightyear or Buildstation.
    Might I suggest a rigorous NURBS implementation with an intuitive basic functionality such that an item can be rough generated with a PowerGlove/Glasstron UI and make it all the way through the process right to render, animation, and outputting of models. I know that it's a lot to ask but, hey, you *said* that you were ambitious. In fact, I suspect that if you can do a system such that you sell a $50 crippleware version through places like Download.com and the serious version elsewhere, you'ld be able to build your user set quickly and also get to market faster.
    A side note is that the ability to generate objects for systems like Adobe Atmospherewould finalize the build once-use many times paradigm that I'm talking about. After all, how much overlap is there between these communities? I'ld say considerable, and if gamers can then use the objects they created for one part of their lives in another, they'll be happy campers.
    Best of luck to you,
    Rustin (former techie for Sweets, Arch. Record, Design-Build, This Old House, Index, Woodworker, etc.)

    --
    Data is the lever, rigor the fulcrum, brains the force that drives it all.
  158. Bud? Hell no. by yerricde · · Score: 1

    or buy a 12 pack of Bud.

    Bud beer? Hell no. See my previous comment. Besides, not all people who are considering using Blender are of legal age for consuming alcoholic beverages.

    --
    Will I retire or break 10K?
  159. Free Programs Currently Out There by truk77 · · Score: 1

    Here are some open source initiatives that might be worth a look:

    Art of Illusion - Full 3d Modeller/Renderer/Animator suite written in Java
    www.artofillusion.org

    Wings3d - An excellent modeller. www.wings3d.com

    Pov-ray - An excellent free raytracer (perhaps a front-end is the way to go?) www.povray.org

    --

    *** Penguins are so sensitive to my needs. --Lyle Lovett
  160. Why not FOX? by Anonymous Coward · · Score: 0
    I've seen a few people post suggesting Qt, but why not try out the FOX toolkit. Even if you decide in the end to not use it, here are a few reasons why you should check it out:

    1. FOX supports Open GL out of the box. It contains custom objects for controlling Open GL structures, and comes with a couple of example programs (GLviewer and GLtest).
    2. FOX is cross platform. It runs on Windows and just about every Unix out there that has an X server. It was recently even built on MacOS X.
    3. FOX is a C++ toolkit, but has bindings to use it with scripting languages such as Python(FXPy) and Ruby(FXRuby).
    4. FOX implements things that make building a gui a snap, such as a unique target/message system and automatic gui updating.
    5. FOX is licenensed under the LGPL, with addendums that make it friendly for use in commercial applications on all platforms. Qt has different restrictions based on the platform you are running on.

    Hope this helps...
  161. poor kid by Anonymous Coward · · Score: 0

    I'd like to build a bridge to Hawaii with popsicle sticks, I feel I'm up to the task.

    1. Re:poor kid by vegetablespork · · Score: 1

      Perhaps his talent is in a higher order of magnitude than your own, and he thus can seriously contemplate a project that for you would be on the order of that popsicle stick bridge. Just a thought.

      --

      Call (206) 338-5780 COLLECT for information about a genuine BA, BS, MA, MS, MBA, or Ph.D.

  162. Designing Computer animation software... by joto · · Score: 2
    Yes, I know, a VERY daunting and time consuming task. But I have a very good understanding of 3D mathematics, physics, and computer graphics in general, plus a solid foundation in computer programming.

    Sure, if you are a genius, you can do some amazing things alone (e.g. Linus Thorvalds, Donald Knuth, Larry Wall, ....), but since you have to ask this question, you are obviously not demigod material.

    The question is, what is the best programming paradigm to use for such a project?

    I have no idea what you mean about programming paradigm here. In my normal everyday use of those two words following each other in sequence, it means things such as the logic programming paradigm, functional programming, object-oriented programming, etc... If you don't know which paradigm you would want to choose, you can't as you claim to, have a solid foundation in computer programming, because that would mean you'd picked a favourite already. It doesn't really matter, as long as you pick the right one :-)

    I have all of the major concepts, and relationships in mind, but refuse to write one line of code until I have a good design plan.

    Well, then you can just sit and wait, because by them time you will have a good design plan you will not only be dead, but also western civilisation will be dead, the earth gone into a new ice-age, then vaporized when the sun went nova, and eventually the universe will have undergone heat-death.

    The only way to come up with a good design plan, is to write it after you discover the errors in your last design plan. And the only way to discover the errors in your last design plan, is to try to use it to write some code. This sequence of analyse-design-write-test cycles is known as iterative project management. What you seem to want to do is the waterfall model, and any software engineer will be able to tell you that while it might sound like a good idea, in reality it has never actually worked for anyone...

    Plus, if you have all the major concepts and relationships in mind, why are you even asking this question? Seems to me it should just be a matter of coding left then?

    Ultimately I would like to be able to tie it into any number of different operating systems, graphics API's (OpenGL, DirectX, etc..), and so on. What are some good ways to do this?

    Ehh, just write the darn thing? It's not like it is especially hard to use an API, or what is your problem?

    My second question would be, why on earth do you want to tie it into everything? Just to have a list of buzzwords to spread around? Try to focus on functionality, not how much you can "tie it into"...

    [...feature...buzzword...feature...feature...featu re...feature...buzzword...feature...feature...buzz word...feature...feature] Any design suggestions?

    Yes. KISS.

  163. Mad soloist by mysterious_mark · · Score: 1

    Another mad soloist looking for a twisted project, good luck! hopefully you'll learn something. Check out Java3D, its very OO and easy to use, covers almost all platforms, also you can compile to native code for most platforms (Windows, Solaris), so you can get performance out of it. There are a bunch of loaders, and x-tra API's for free, also check out Jon Barrilleaux's 3D User Interface book and framework. MM

  164. Re:Scripting Language - try Lua by mhackarbie · · Score: 2, Insightful

    Yeah, I second that. I added lua as a scripting language to my 3D molecular modeling program and it totally rocks. Small, fast, easy to use and works as advertised.

    For me, one of the greatest benefits is that it allows for lots of design exploration and customization without having to muck up the core C++ code.

    mhack

    --
    Building a better ribosome since 1997
  165. You're missing the point completely by CrystalFalcon · · Score: 3, Insightful

    Yes, waterfall-style planning (actually, it's "Vattenfall"-style planning, as in the company "Vattenfall", but that's another story) has been abandoned for being too inflexible. When new requirements pop up, that kind of planning requires you to rewind to the requirements phase, which is Bad and not very much in line with how reality works.

    However, your arguing is equally out of touch with reality, but from the other side. Have you ever written a spec? Have you ever made a design? I have, on some projects, and I have not, on others. I have been a professional designer-coder for 18 years, and I've seen projects without management crash and burn. I think the best way to sum it up is the old military adage;

    "No battle is ever won according to plan, but no battle was ever won without a plan, either."

    Let's begin from the top. Code is emotional. You don't throw away code. You rewrite it, you re-encapsulate it, you tweak it. But you never throw away perfectly working code. It's your baby, damnit, and you're proud of it.

    So what if it doesn't solve the right problem? Well, that's what you find out after you've coded for some two weeks and start to see how things fit together. You're now stuck with two weeks' worth of coding that WILL make it into your final product, relevant or not.

    OR... you could plan for two days and discover that already. And you could make classes that fit better together from the start.

    It's true that you get started quicker if you don't plan ahead. It's pretty much like orienteering and running away in some direction (hey, it's about running, right?) without looking at the map and planning your route first.

    Wrong. Coding is not about programming. It is about solving a specific problem. Unless you understand the problem before you start coding, you are going to solve a different one.

    The statement "you'll be much smarter after just [one] week of codewriting" smells of elitism and being so out of touch that I don't know where to begin. Yes, you will know more about your product. You know why? Because YOU THINK ABOUT THE DESIGN as you code!

    Only you're producing code that you wrote before you knew which problem you're solving. Back to square 1.

    1. Re:You're missing the point completely by PingoSvin · · Score: 1

      Let's begin from the top. Code is emotional. You don't throw away code. You rewrite it, you re-encapsulate it, you tweak it. But you never throw away perfectly working code. It's your baby, damnit, and you're proud of it.
      In my professional career, I'm proud of my code if it satisfies the needs of the customer. As for 'throwing away' and 'rewriting' code I see but little difference.

      Wrong. Coding is not about programming. It is about solving a specific problem. Unless you understand the problem before you start coding, you are going to solve a different one.
      And this is where we disagree. I claim it is highly unlikely that you understand the problem upfront. We're not talking about implementing a textbook algorithm but rather a large complex system. Sure do spend the afternoon with your coworkers discussing the overall design. Agree on some tracerbullets and high risk areas and get going.

      The statement "you'll be much smarter after just [one] week of codewriting" smells of elitism and being so out of touch that I don't know where to begin. Yes, you will know more about your product. You know why? Because YOU THINK ABOUT THE DESIGN as you code!
      I don't know where you get elitism from? My point of view is quite the opposite. Yes I strongly doubt that the guy asking for advice on writing this 3d-system has the skill to do an upfront analysis and design of his system. But nor would I trust myself or anybody I've met in my 10 year professional career to have the divine systemdesign insight it would take.
      You're right that programming makes one think. I claim that the thinking you do when doing highrisk tracerbullets prototyping is much more rewarding than the thinking you do when toying around with diagrams in Rational Rose.

  166. Multiple inheritance by CrystalFalcon · · Score: 2

    Actually, you can accomplish what you used to accomplish in C++-style multiple inheritance by inheriting/implementing multiple interfaces instead.

    Interfaces were not a part of C++, so you were forced to use multiple inheritance if you wanted to combine the properties-capabilities of two objects. Not so anymore.

  167. Please don't forget your freedom. Remember GNU. by jbn-o · · Score: 1
    Is your intent commercial software, free software or other?

    This question is difficult to understand because commercial software and free software are not opposites. One can sell free software.

    If your intent is free software then are you thinking Open Source?

    Again, to those that know the difference between these two movements, this question doesn't parse.

    ...but for every Linus Torvalds who sits down and makes his own OS (and yes I have read the GNU/Linux FAQ)...

    It's unfortunate Torvalds encourages that lie by not correcting the idea that he somehow "makes his own OS" (a quote from your article, not the BBC interview). I think the GNU project is asking nicely for something they rightly deserve credit for making. Software freedom is another big contribution for which I am grateful to have the FSF and the GNU project. I appreciate the contribution of Torvalds and all the other contributors to the Linux kernal, but the kernal alone is not an operating system.

  168. Re:Please don't forget your freedom. Remember GNU. by Schnapple · · Score: 2
    commercial software and free software are not opposites
    Well I was kinda dividing the world between commercial and non-commercial software. I was thinking more "Photoshop vs. GIMP" than "Windows XP vs. Red Hat Linux".
    this question doesn't parse
    Well, lots of people write free utilites and then give them away but keep the source. He could be thinking of making the next Renderman, giving it away, but keeping the source to himself.
    I think the GNU project is asking nicely for something they rightly deserve credit for making
    They are and I consider myself a very astute computer user (and a professional programmer) and until I read that FAQ I never knew Linux was just a kernel - I always thought it was an OS unto itself. The only problem I see in calling it "GNU/Linux" in conversation is that it sounds like "New Linux", which requires more explanation, so people just say "Linux" or "Mandrake" or whatever. I say people should write it a certian way for a while and then perhaps the pronouncing of it will take off. Or perhaps we should say "guh-new"...
  169. I did this too, it worked out pretty well by Thagg · · Score: 2

    I was working on a movie, trying to do procedural animation in Alias Power Animator (the rediculously inferior predecessor to Maya) and decided that I could write my own animation system faster than I could get the animation done in PA. So I did.

    The z animation system is designed for a particular class of animation common to visual effects, animation where a procedural description (that is, a script or a program) is the best way to do describe the animation. This is distinctly different from "character animation", but we are an FX house and not an animation house.

    I chose to use a real programming language as the scripting language. I think that this is extremely important; for a number of reasons -- but the most important two in my experience is that every animation-language I've used has been terrible (slow, buggy, limiting, hard to debug, and slow); and standard languages have great IDEs, debuggers, compilers, and are instantly portable to a wide class of machines. I used C, and have been extremely happy with that choice.

    Now, one might complain that C is a programming language and not a scripting language; and that it's hard to learn. I don't feel that there is a difference between scripting and programming -- and C is really quite an easy language to learn, there are great books, good courses, and a tremendous amount of code out there to learn from.

    We use Pixar's RenderMan as our offline renderer, and use OpenGL as the real-time interactive renderer. These are really pretty similar in many ways, and with the combination of the C language, RenderMan, and OpenGL, the animation system is just glue holding these together; along with some spreadsheet and curve-editing libraries I already had lying around.

    We've been moderately successful. About 1/3 of the FX you saw in X-Men were done in z, as were the FX you didn't see in Blue Crush (you didn't see them because our animators did such a good job.) We've worked on some 40 other movies over the last five years, and while we have Maya we haven't felt the need to use it except in some very character-animation-like instances.

    One nice thing about the system that you are talking about is that you can do some core functionality pretty quickly, I would think, and then you can just add stuff as time goes on. Get polygons and spline surfaces working, then do subdivision surfaces down the road. Add sound when you need it. Texturing is free with current graphics boards, so that can go in at the beginning.

    I believe that we are on the brink of a true revolution in graphics technology; and that we will leave pure software renderers behind in the next couple of years; so having a system that evolves with the upcoming graphics hardware could be a very useful and unique thing.

    I also believe that Maya will probably be the last of the all-singing/all-dancing commercial animation systems. If you want to do everything that it does, you'll have to invest the 500 or so man-years that they put into it. To do that in a commercial system, with the frighteningly small size of the visual effects/animation market, is folly. I don't think it will be done again.

    thad

    --
    I love Mondays. On a Monday, anything is possible.
  170. Re:Biopace by perfessor+multigeek · · Score: 1

    Actually I used to know a guy who did 30+years of research on bike cadence (and unfortunately all of his files are sitting behind me at this very moment) and he concluded that Biopace gearing failed primarily because of a misunderstanding of the exertion patterns of most riders and so claimed that if you just mounted them 90 degrees off from the recommended pedal alignment they worked just fine.
    Which takes us right back to the main discussion. Yep, TANSTAAFL, so this guy will have to just put in the time to get things right and probably suffer through quite a lot of "wasted" time on the way to building something good. But please document what *went wrong*. That way at least the next poor schmuck won't have to make *all* of the same mistakes the next time around.
    So determine the metrics of "success", then (1) measure twice
    (2) cut once
    (3) test
    (4) analyze re metrics and document results, if not ready (5), if ready (7)
    (5) redesign
    (6) return to step (1)
    (7) move on to next problem and start the whole bloody thing over again.
    And maybe even eventually
    (n) profit ! ! ! !

    --
    Data is the lever, rigor the fulcrum, brains the force that drives it all.
  171. Re:Please don't forget your freedom. Remember GNU. by jbn-o · · Score: 1
    Well I was kinda dividing the world between commercial and non-commercial software. I was thinking more "Photoshop vs. GIMP" than "Windows XP vs. Red Hat Linux".

    It might be helpful to consider free software versus proprietary software. I'm talking about two different ends of the spectrum here, but these are useful terms to describe what I think you're after. A couple common combinations are a completely free software operating system (this is pretty easy to do with Debian GNU/Linux, for example, even though Debian's guidelines for what it considers free software are different from what the FSF defined years before) and a proprietary operating system on which they run some free software applications (using Mozilla on Microsoft Windows, for instance).

    Well, lots of people write free utilites and then give them away but keep the source.

    That software would be proprietary software. When one is talking about GNU, the Linux kernal, GIMP, etc., it is easy to think about free software where one is using the term "free" to mean freedom, not price ("logiciel libre", not "logiciel gratuit" if you speak French; free as in speech, not as in beer). This particular problem doesn't occur in other languages.

    The only problem I see in calling it "GNU/Linux" in conversation is that it sounds like "New Linux"...perhaps we should say "guh-new"

    That is what they say on the front page of the GNU website:

    (GNU is a recursive acronym for ``GNU's Not Unix''; it is pronounced "guh-NEW".)

    GNU project and FSF representatives also pronounce GNU as "guh-NEW" in their speeches. If you haven't already heard them give them a listen, they're interesting and worthwhile.

    In any event, thanks for remembering GNU and software freedom. Happy hacking.

  172. 3d software design by Anonymous Coward · · Score: 0

    the best thing to do is use existing rendering libraries and concentrate on design. Try to use cross platform libraries (a la OpenGL) where possible to minimize porting issues and remember that the best software is about 70% planning and 30% coding.

    Performance is important, but not at the expense of portability, unless of course, you plan to take on the SGI's of the world.

    In this case, find a hardware company that supports their hardware well, like nVidia (not that I would recommend nVidia for high end rendering!) and code for the platform.

    Linux is fast becoming more accepted in the professional world because of a lot of reasons... ILM is testing it right now. If you code for linux using opengl and qt, you can be assured of a portable product that will have a fairly large audience (windows and linux). If you are going for the highest performance possible, you may need to get into specialized hardware/rendering and forget about portability, unless you have a large team of course...

    Personally I would go for OpenGL and a cross platform widget library.

    Then again, I don't know a whole hell of a lot about 3d programming, I only know that OpenGL is pretty freaking fast from a user perspective, and is cross platform. On linux, it smokes with well written vendor drivers.

    Take a look at unreal tournament 2003, on linux, with a GeForce 4 or ATI Radian min 64MB (only seen the ATI on windows, personally)... It will knock your socks off.

    l8,
    AC

  173. Functional Reactive Programming by 4nNtt · · Score: 1

    For animation check out the research on reactive programming at yale and microsoft research. This is the modern version of ActiveVRML that was out around 1995. Haskells AFRP is the most recent version, that uses arrows (a concept derived from category theory), at http://www.haskell.org/afrp. There is more information at http://www.haskell.org/frp, http://research.microsoft.com/~conal/fran/, and http://research.microsoft.com/~conal/newfran/

  174. First post! by Anonymous Coward · · Score: 0

    maybe?

    1. Re:First post! by vegetablespork · · Score: 1

      A little late, I'm afraid.

      --

      Call (206) 338-5780 COLLECT for information about a genuine BA, BS, MA, MS, MBA, or Ph.D.

  175. Re:Please don't forget your freedom. Remember GNU. by Anonymous Coward · · Score: 0

    >> I think the GNU project is asking nicely for something they rightly deserve credit for making.

    In the docs on their website, they seem to be asking nicely. In person and in interviews, RMS in particular acts like a baby throwing a tantrum.

  176. The foundation by stokes · · Score: 1

    I'm a 3D animator by trade, and I worked for a 3D software company for years before that. From what I've seen, there are two big things I'd do:

    1) Base the whole design around plug-ins. That way, you can build as you go and replace parts that become outdated. Make every object, light, and renderer a plug-in.

    2) Implement a scripting language early on. Go with an existing OO scripting language and extend it to your application. A lot of the application's UI can be implemented in the scripting language. Later versions of 3DSMax use MAXscript for a lot of the UI, and Maya uses MEL all over the place.

  177. Re:Sorry Mr. Linus, writing an OS is a stupid idea by Anonymous Coward · · Score: 0

    Actually I would have preferred that there had never been a Linux. All this work SHOULD have gone into BSD. The Linux kernel is a bad hack and virtually everything on top of it is too. Too bad Linux didn't listen :(

  178. Great Idea! by Un+pobre+guey · · Score: 1
    I have a better idea! Let's invent a thing out of nothing. It will start from a point so small that most people will think there's nothing really there. Except, of course, that it's really hot. Really, really hot. In fact, it is so hot, that in no time it blows up. Well, actually after a very, very short time it blows up, and then gets incredibly big. It just keeps getting bigger and bigger, never slowing down. At least people will never be able to tell for sure if it's slowing down. One thing, though, it cools off fairly quickly.

    But that's not the best part. The best part is that everything is in it. Everything. Planets, dogs, food, galaxies, weird physical phenomena, you name it. Plus, it's set up so that whatever is not there eventually gets created from the things that are there. Cool, eh. Just the thing you would expect from a Truly Lazy Programmer.

    BTW, it also will have quite a few 3D animation packages, so perhaps you might think twice about writing another one, especially from scratch.