Where to start with BIG projects?


#41

(1) Java is fast enough to capture mouse movements, display button, display tables, and to manage OpenGL Display Lists.

(2) Use Display Lists carefully and the High Level language binding C vs Java just does not matter at all. Period.

(3) If you have some kind of memory intensive call that really needs to be done natively … then use Dirty java. Code the stuff in C and bind it to java. It’s easy and worth learning.

(4) Check out the speed of Manifold Lab. It’s written in Java. I compared it to many other C and Java apps … and it runs like a Native app. It should … it’s about the display lists.

Don’t cave in and use some second rate GUI builder. Java/Netbeans rules. Or use Java Eclipse.

I never spend any time on GUIs … they just “fall out” of My Java NetBeans as should be the case with any good GUI builder.


#42

Originally posted by Apoclypse
[B]I know you are set on doing the GUI in OpenGL, but I really don’t see it as a viable solution. What Happens to those user ( since your software will be free this will be more than likeley) who don’t happen to have a graphics card or are using an old ATI Rage Pro for their graphics card ( which if I’m not mistaken only does DirectX) how will they be able to use the program. Performance on these machines will probably already be slow, so having the gui ( which in this case will be handled through the software) will be way too slow.

You have to realize that when a program like yours is free odds are there is some guy with a 233 mhz computer and a 6 gig hardrive who wants to run your program becuase it is in his price range ( free). [/B]

I read the whole thread some time ago, and if I remember correclty it’s not planed to be free?

And if you are programing a 3d animation program you can’t take care of guys with an 233mhz computer…they should better play tetris than making 3d animations.


#43

Oh god! Stop with the Java stuff! Enough programming religion. Please. You’re right, using Java to manipulate OpenGL is just fine. However, Oasis is going to have to do a lot more then that. Yes, you can easily bind C to Java to C and C to Python and Lua and Io, etc, etc. However like I said, I made a decision a while ago that I wasn’t going to mess around with that just yet. Maybe latter I’ll add a way to bind in scripting languages.

“I never spend any time on GUIs … they just “fall out” of My Java NetBeans as should be the case with any good GUI builder.”

If you go back and read the rest of this thread, you’ll see that GUI programming is what I like doing the most. I have very specific ideas about UI design.

Apoclypse,
About lowest common denominator:
That’s a very good point and something I hadn’t thought of until you mentioned it. I know you’re absolutely right but there’s a part of me that’s really just writing this program for myself. Also, I don’t see anything wrong with defining the minimum system requirements. Just as long as you do so up front.

The other thing is that Oasis is actually going to be aimed at a higher end user. I have no intention of “teaching” people who don’t know anything about computer animation. In other words, to use Oasis you’re going to have to know what a skeleton is used for, what deformers are, what collision detection, particles and dynamics are and all that stuff. That doesn’t mean that I’m just going to ignore low end users or that’s is some kind of excuse for making a non-intuitive UI. It’s just that I have to draw the line somewhere. For instance, I’ve already had people ask me if it will support NURBS. The answer is simply no, because I don’t like working with them.

By the way, The plan is to release the first version for free and then have a high-end version for money.

Thanks,

-=GB=-

P.S.: I still need some advice concerning the issues I mentioned above.


#44

Originally posted by ngrava
[B]Maybe latter I’ll add a way to bind in scripting languages.

The other thing is that Oasis is actually going to be aimed at a higher end user.[/B]

I don’t know what you would characterize as the target high-end user you had in mind… but the concept of binding in (a) scripting language(s) later is something you shouldn’t underestimate since it easily affects the entire architecture and foundation of a product.

I’ve worked on CGI software since the early days where scripting things were ‘tucked on’ at later stages and I’ve worked on 3D software where it was part of the architectural design itself. I’ve also worked extensively on a 3D product that claims to be the #1 in sales which also had its scripting system added in later. Let me tell you upfront… if there is any plan at all, even just remotely a rouch hope, wish, or desire to implement any decent scripting you’re better off making it part of your design and architecture from the start. Your users will thank you for it and you will have less of a touch time tying up all the ends of a scripting engine that gets tucked on later which will require a whole lot more effort on your part (the kind of effort where the sudden requirement for scripting capabilities can easily lead to something turning into an effort that is disproportional or unfeasible).

If your idea of high-end users is the same as the one I’m thinking of right now then you can’t escape the need for having scripting or API extension capabilities. Not taking those into consideration from the inception of the architecture has already proven to be a lot of trouble… for entire teams and each individual within them both on the developer end as well as the user end.

Plan, plan, plan… ahead, preferably. Plan for things that aren’t even part of an initial release. You’ll thank me later for it. :slight_smile:


#45

“RE: culling
yes, binary space partitioning (the tree structure would come in handy then) and field of view. They are not opengl based, for efficiency I highly recommend implementing your own!”

I don’t think you need to mess with BSPs to get speed. OpenGL does very nicely with all that’s built in for culling.


#46

Rolling your own Event handlers and Widgets …

Would be a huge waste of time unless you really like that sort of thing.

I’ve researched just about every cross platform widget kit under the sun over the last 4 years and was paid for some of the research, as it was part of my regular 9-5 at www.on2.com.

In particular I looked at GUI toolkits based on OpenGL like GTK and FLTK. Lots of pitfalls and almost good enoughs. None of the drag and drop designers were any good. I guess if you like scripting GUI layouts with programs … then there are going to be toolkits for you. I just think all the layout managers for OpenGL programmer are gross.

I wrote a button panel manager for SDL recently and wrote a bitmapfont manager for OpenGL … but these kinds of things are really not that much fun.

I’d advise against using anything less than using a world class GUI builder of some sort. This would allow you to use the screen mock-up prototyping paradigm at least some of the times.


#47

StefanDidak

About scripting in Oasis:

Thanks for you views. I agree with you whole heartedly for the most part. So far, I have a plane to build things in two parts: one is the Core and the other is a set of .dll/.so files that I’m calling the modules. The Core holds all of base classes for GUI, File and memory management, node architecture, animation handlers and scene graph. All the other features are written in dynamically linked modules (plugins, essentially). The modules will consist of things like geometry structures, animation interpolation schemes, IK solvers, skeleton tools and so on. Basically what you might think of as the ‘tools’. I’m sure your familiar with the concept. It’s far from “new” but it has an excellent feature where, as you develop the base, you are essentially developing the plugin API. This also makes it much easer to add features one by one and thus allows other developers to build onto Oasis by simply sub-classing a node type and filling in the data structures and actions. This way, it allows me to treat everything in the scene graph as a node who’s connections can be altered.

Anyway, I’m getting a little off track (sorry). The scripting API thus becomes a simple translation layer to the built in base Oasis classes with some abstraction surgar thrown in to make it easer to digest. sort of like how you can call C++ classes in Python. Also, this allows Oasis to be language neutral.

This is all in theory right now but my experiments have been very encouraging. I’d love to talk to anyone who has worked on and application that works like this… Hint… Hint… :slight_smile:

Markyjerky,

About BSPs:

Interesting. I think I might just do an oct-tree anyway though. I can foresee a few uses for it in other ways. Maybe I’ll just leave it as an option incase scenes get to big.

About GL and GUI kits:

Yep, all of the tool kits I’ve seen based on OpenGL are pretty gross to me too. :wink: That’s why I’m having to write my own. :stuck_out_tongue: Basically, the mockup of the GUI that I did a few pages back is an exact replica of what I want it to look like. There a four things about it that prevent me from using another GUI tool kit:

  1. Transparency across platforms: Almost all the platforms I intend Oasis to run on include some sort of transparency attributes in there api but nothing that’s standard across platforms. And to make things worse none of the app tool kits that I looked at provide for it. Making Transparent widgets in OpenGL will allow me more flexibility and portability.
  2. smoothed fonts: again, none of the gui tool kits provide for this. By the way, I’d love to see the bitmap font manager you wrote. Is it a rasterizer or texture map based?
  3. Moving panels: OpenGL can easily animate any aspect of the UI and that’s one of the features I’ve been working on
  4. I have a lot of very specific ideas about custom controls and menus that I just can’t do any other way then building my own. Doing them on GL will mean that I can make sure that they work exactly the way “I” want them to.

Where things get difficult is trying to build things like standard menus and file dialogs. For that I think I’ll eventually end up coding OS specific panels. That might also keep people from feeling too freaked out about the fact that the UI is so different.

If you look at the UI mock up and think you know of a GUI kit that can make an app that looks “exactly” like that, then please let me know.

-=GB=-


#48

just a few thoughts on the particle-spring idea. it would be really important, for me at least, that what i pose at the current frame, will be exactly in that state if i keyframe the active particle, and later get back to that frame.

this would imply that any real-time dynamics would be out of the question, like secondary motion in the hieararchy depending on how you move around the particle. ( like styling hair in xsi, bad example maybe :slight_smile: )

the dynamic simulation would have to only include “stable” simulations, only dependent on where the particle is currently at.

it´s a damn difficult question, since i can easily see that you´d want to apply dynamics on a tail for example, and have it swing automatically. but intuitively i feel that any dynamics that happen outside of timeline time (game style dynamics) could get me a pose that would not be recreatable without keyframing the entire hierarchy. to get the exact state of your character or whatever, would require you to simulate from frame 0 to current.

make sense? there is probably a good way of achieving dynamic interaction, getting the best of both worlds. haven´t really tried animanium, but mirai had something like this, albeit it seemed hardcoded for a biped rig (bio-mechanical animation it was called if i remember correctly). cinema 4d & lw 8 seems to have some form of simpler dynamics too, i´d like to know how they handle the posing/frame consistency problem i talked about earlier.

rant rant
jens.
ps. i´ve dropped the C toolkit project :wink: ds.


#49

The problem I see when you are using no libraries is, that you have to write all the little details by yourself. No mouse or keyboard input detection (for example glut provides you with mouse motion detection etc.)


#50

Originally posted by ngrava

2. smoothed fonts: again, none of the gui tool kits provide for this. By the way, I’d love to see the bitmap font manager you wrote. Is it a rasterizer or texture map based?

maybe this helps:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43

Edit:
not sure about your selection problem (don’t really understand what you mean with a ortho over a perspective).
but here is very basic opengl selection example…maybe it helps
http://www.codeproject.com/opengl/openglselectobject.asp


#51

The Bitmap font “manager” is in Manifold.

The only thing it will really show is how very little code it takes to get started. Calling it a “manager” is probably misleading.

It’s fairly hard-coded. But it does implement a DrawString that draws a new wide but not very tall bitmap (an image of the string) that coud them be compositied. So it does not speak to compositing the image string.

But it is written in Java … in a fairly generic fashion. It just renders String(s) Into TARGAs.


#52

Jens,

Hey Man! Yep, that all makes sense Hmm… Take a look at this and tell me what you think:

This is a really fast and simple solution that actually could be made a bit slower and thus more accurate. And, we’re not solving for gravity during manipulation. It’s actually not really a spring system like I mentioned before but it’s based on some of the same principals. I’ll have to see how it looks when it’s running to really be able to tell for sure, but it looks super simple.

Now that I think about it… I used to work at Hash inc. (makers of Animation:Master) back in 95’ and I seem to remember Bob croutcher using springs to make their IK system… I wonder if it’s still that way. It would explain situation like - how you can manipulate the elbow separate from the wrist in a chain and it pulls the wrist.

Anyway, That’s actually great that you gave up on the tool kit cuz now you can help me out. ;D

iC4-,
About GLUT: I’m afraid I don’t really enough about GLUT to know what it has to offer. I just know that it’s an OS abstraction layer. I’ve held off getting too into it because it seems like most people claim it’s really old and eventually will loose support. But, I would love it if you can give me some more examples of it’s advantages over straight Win32.

About Links: YES! I’ve need looking for that picking tutorial. I knew I wasn’t just imagining it. :wink: Thanks a mil IC4- . Did you notice that below that tutorial there is a link to another one that uses raycasting? Man, I’m telling you guys, it’s all out there on the net. I’ve barely had to write any code of my own so far. ;D I’m starting to bad about that…

Oh, and about the ortho over the perspective; all I meant by that was that you draw the scene using GL Perspective and then swtich to orthographic mode and draw the 2D elements right on top of that using alpha blending without clearing the screen. It’s kind of clunky but the main advantage to it is that you can use screen coordinates to place your 2D elements. Also you can make them stick to a position that’s relative to the size of the window or other elements. That’s just what I’m trying to do too. The other way to do it is just to have a bunch of flat plains parented to your camera. That sounds even more clunky to me… There’s probably a better way then what I’m doing right now. Does anyone know?

Thanks for all the help guys!! I’m getting closer…

-=GB=-


#53

iC4-,
About GLUT: I’m afraid I don’t really enough about GLUT to know what it has to offer. I just know that it’s an OS abstraction layer. I’ve held off getting too into it because it seems like most people claim it’s really old and eventually will loose support. But, I would love it if you can give me some more examples of it’s advantages over straight Win32.

well…the only advantage I see is that your app will work for linux too (and if I remember correctly thats what you want)…otherwise the win api has much more to offer and will make your life easier (if you know what you are doing :wink: )
And yes glut is really old…there are some others which would do the job fine - since you will make your UI opengl based - you won’t need that much…but just think on the basic stuff…load/save windows…maybe progress bars…QT would properply do the job.
I think I will go with the win32 api with my application…than you don’t have to care about these problems.

Thanks a mil IC4-

glad I could help :thumbsup:

and the ortho/perspective stuff makes really sense…I think I will try this too - thx!


#54

How’s it all going? Haven’t heard anything for a while…


#55

I second Hugh’s call for an update: ngrava, how are things going? You’ve whetted my appetite–I’m really enjoying this thread and I’d love to see it keep moving.

ngrava wrote:
Man, I’m telling you guys, it’s all out there on the net. I’ve barely had to write any code of my own so far. ;D I’m starting to bad about that…

While all these code samples are great, you need to be very careful about the licenses of the code samples if you ever integrate them into your app. Unless accompanied by an explicit license agreement, I believe that the original author retains all the copyrights for the code published. This could pose problems for your code down the line…

Also, regarding GPL: the “code” of the GPL is ‘share and share alike’ so that if you do copy-paste GPL code from other apps to make yours you are BOUND by the GPL to release your modifications to the code. Again, this could cause you to expose code that you were not planning on (ie: your “Complete” package).

So be very careful what code and ideas you incorporate–I’m not a lawyer, but simply changing variable names in a sample is not enough…

I would have to vote for making this GPL from the get-go:

  1. You’ll have a cast of thousands and thousands on hand to help with development
  2. You’ll be able to freely use any-and-all GPL code without fear
  3. You can host your project on sourceforge and get all of their goodies for free

Forget about making money selling it–you’ll be able to hire yourself out as an Oasis expert. You can do contract work for oodles of money with big firms who want you to write custom plug-ins or may simply pay you to extend features already in Oasis.

Really… for a project like this I think GPL is the way to go. Everyone wins.


#56

If you had a core element of the program that didn’t use any GPLd code and you didn’t want to release the source code to, is it allowable to release your central package as non-GPL and then the functionality of the package as lots of plugins, some of which (if they use GPLd code) are GPL and some of which aren’t?

Not sure of the legality of this…


#57

Update:

I’ve been a little slow going lately. I’ve been really busy at work with some bids. That’s all done now so I should have some time to code more this week. Anyway, I wouldn’t worry to much about the code I’ve been using from the net. I’ve had to rewrite most of it just to get it to work. I was mostly using it as a way learn more about the particular subject. You know, when you’re starting out, it can be difficult to truly get a clear picture of how things should fit together. Here’s an example: http://www.hinjang.com/gfx/gfx04.html contains some great code for doing subdivision surfaces. However, it’s not the speediest code. Nor is it very flexible. But, it’s still very good to look over to see how things might be structured. I also found this: http://www.multires.caltech.edu/software/fastsubd/index.html which is some really great code. What I’ve been doing is combining different aspects of these two and some others with some of my own ideas to create my own. I’m not done with it yet and it’s probably going to take a little while to get it to the point where it’s usable but the whole concept of how subdivision surfaces work is a lot clearer in my head.

Mostly what I’ve been working on is all the mundane stuff (well, what others might consider mundane, I actually love this part). Things like how the buttons are drawn on the screen, keeping them in the same place relative to the window size, making the menus (Man, that’s been a real difficult issue), and figuring out how to do picking and highlighting.

By the way, does anyone who actually has been able to draw anti-aliased text on screen have some insight? What I’m using right now is straight from the NeHe tutorials and it’s kind of funky. What I’d like to do is figure out how to create those 16x16 images of the fonts. So, if there’s anyone who knows, please speak up.

I’ve spent a lot more time with Glut and have decided to use it full time now. I’ve already got the core of the app using all the callbacks I need and it’s working like a charm. The main thing that convinced me to use it is that all the examples in the OpenGL Red book are written in it. Once you become familiar with Glut it becomes a lot more clear how to use those examples. Plus, I’ve been able to compile my core in Linux with very little modifications.

I’ve really been enjoying OpenGL programming. Which is great because it’s always good to have fun while your programming. :wink: There are so many funny little ways of doing things with things like the Stencil buffer, Z buffer and so on. Little tweaky things like moving in and out of view modes and select mode. It’s really fascinating when you do something right and things just work and you’re like, “Wow, it really works?!” :smiley:

One last thing, I’m definitely not going to do GPL. This has less to do with making money and more to do with that fact that I’m a really crappie programmer and would really embarrassed to show my code to the general public. If there are people who want to look at it I’ll eventually post it but for now, it’s really junky and doesn’t have much to offer anyone anyway. If I do include other developers (which I would love once I get the core done) I’ll just host my own CVS somewhere.


#58

I agree with spinlock though GPl’ing the project is the way to go. Like I said a while back selling an app that uses gpl code in it is bad form, and you would have to guarantee that you software does not use gpl code ( which if you are getting your code from the internet I doubt). Again no one can force you to do anything but I do know that if you use other peoples source in your app you can not release any of the software commercially unless, 1 you have permission from the original author or, 2. you remove all the code ( frankly, this is your first BIG project I don’t think you want to write everything from scratch, especially without any help) If you want to write all the source yourself i suggest you start with something smaller until you are sure you can do it without any GPL code in it.

GPL is the way to go if you really want to go ahead with the project now.


#59

I think he isn’t using code from the internet, he just looks on it to get the first ideas on who to get the things done.

if you are reading a nehe tutorial about how to texture a cube and then write your own code there is no copying…

and I think that is what he is doing.


#60

Man, so many opinions about GPL. Oh well. Please read my last post and you’ll see that I’m not using other people’s code (well, maybe a little), just ‘looking’ at it like iC4- said. I wasn’t really serious when I said I hadn’t written any code of my own. I was just commenting on the wealth of examples there are out there on the net and how easly that part is. Think of it like this: There are about 6 different ways that I’ve come across to select objects in the 3d view. All of them are illustrated in great tutorials on the net. After viewing all of them, you pick and choose the bits you like from all of them and make you’re own. Actaully, the stuff I really need help with (building a GUI) is not at all documented on the net.

I think just about everyone has chimed in on this so thanks for the insights but enough about that for now please.

What I would love is if people would get more involved in answering some of my actual questions. Don’t worry about what may never come. I’m just starting out. GPL is for latter. Spring systems, real-time physics, interpolation schemes and deformations are so much more interesting. Don’t you think? huh?

:wink:

-=GB=-