<<Previous Archive | Next Archive>>

Editor Development - .NET 1.1 and shortcuts

Yesterday I finally made the exam which I did not risk to take for the last 3 years. Hope I managed to get a positive mark. So time for developing the editor a bit further, and I just stumbled about a small .NET problem with shortcuts. If you are using shortcuts in your applications, but also text boxes, you may run into a problem. Just like here:

As you can see, I'm using some of the general shortcuts like Ctrl+C, Ctrl+V and Delete. These shortcuts are used in textboxes too, to copy, paste and delete text. So, if you are editing a text box below in the property window and pressing 'delete', what do you think would happen? Would the text box delete a character or would the 'delete' shortcut be invoked, deleting the whole object? Sure, you would expect the character to be deleted. But not in .NET. Here, the shortcut comes first. There are ways to work around this problem, and they improved the workaround in .NET 2, but it's not nice. Or maybe I've overseen something.
I am thinking about stopping this project in .NET anyway, maybe this is a good time to do this. Writing applications in .NET has several advantages and I really like it, but it is quite horrible when you are wrapping a library written in native C++ (exteme slow debugging, random crashes while debugging, ugly gc() artifacts, ...). Also, the editor wouldn't be cross platform in this way anyway, Mono is still not supporting managed C++.
Someone knows a good cross platform UI library for C++? With docking windows? And not with QT in the name? ;) Thought about wxWidgets, but I'm not sure yet.

Internet free local zones with automatic rule enforcement

By turning my notebook on in accumulator mode (not connecting the notebook to the power point) and enabling WLAN, I can simply make my WLAN router crash. Reliably 3-4 minutes after turning the notebook on the router would freeze or crash or whatever, so that it doesn't route any traffic anymore, not to other connected PCs either. Funnily it doesn't happen when the notebook is connected to a power point.
A bit impratical. I think'll simply define all places in the appartment where there are no power sockets as internet free zones. Then it looks like I intended to let it work like that.


Someone please kill me. An alarm clock is beeping since about an hour in an appartment somewhere above me.

Prey portals

Did you already watch the Prey Trailer? It's nice, although I don't really see why the developers say that it is such a different and innovative game - it's a simple shooter after all. One interesting feature - although already seen in other games - is its portal technique. In several scenes you can see portals into other rooms - gates through which you can walk and see into other places far away. Looks like this:

The monster is coming out of this portal which is embedded in that box, wich funnily is falling down and moving. Looking into the box doesn't show an empty inner box but another huge room.

Santostefano Giovanni reimplemented this technique for Irrlicht. Looks like this:

You can also walk into the portal, and come out in the displayed room, look back and see the place where you started at, pretty impressive

It lacks the nice 3d art as in prey (which is a common problem for programmers doing graphics) but it works. He even provides the source code, a video and the executables. He implemented it using the stencil buffer and Irrlichts capability of directly invoking d3d or opengl commands. I would have done it in a bit different way - using the RTT feature, not because it looks like prey is doing it this way too but it would have been a bit more portable with irrlicht and some other nice additional effects would have been possible too. But who cares at all, it really is nice and great work. Cool that lots people are making their work available like that.

Fuzzy Logic Meeting Points

In Austria, more than 87% of all inhabitants own a mobile phone. That's really a lot. And there are 5 mobile phone providers (I think) which– considering that Austria is pretty small - causes a heavy price war between them, making the phone prices and the call-charges pretty cheap. And this in turn has some heavy implications on everything, it totally changes the way we speak, organize ourselves, think, and communicate. One thing about this really stretches my nerves: Sometimes I think nobody today is able to arrange a meeting point and time anymore. Before mobile phones became popular, it went like this:

A: "Hey, let's meet again, at the subway station just there at that entrance, ok?"
B: "Ok, 6 o'clock?"
A: "Fine."

And this worked. Believe me or not, A usually really would meet B at 6 o'clock at the subway station. Today, this is totally different and doesn't work anymore. Nearly nobody is negotiating meeting times and places making it impossible to organize anything. But even worse, if you define some meeting point, nobody is keeping that appointment. Instead, people are coming too late (half an hour is not unusual) and as an excuse calling the other party after half of that time with something like "Are you there already? I'm on the way already, just 2 minutes…". But maybe this is also part of the Austrian tradition that everybody has to come 10 minutes after the negotiated appointment and I'm just blaming mobile phones here. I refuse to estimate how much time of my life I already wasted while waiting for people beeing late.
Maybe I'm simply always arriving on time and should change that. Maybe I simply should be delayed 10 minutes by default, perverting the system, beating it with its own rules.

DXSDK April 2006


Looks like Microsoft really wants me to learn for the exam for the next 5 hours. Oh well.

Editor Progress Week 4

Wow, thanks for all the very positive comments in my last blog entry. Must be a record for this blog, also if you consider the fact that at maximum only about 1% of all readers are posting comments at all on this blog (I think this can be generalized for most blogs, btw). For the weekend, here's a new shot of the editor I'm working on:

I have improved the interface a lot since the last update. It is now really easy to move the camera, select objects and move, rotate and scale them. I had to try out different approaches and also looked at how other editors are solving this. I wanted a solution which would be easy for people not familiar with 3d editors and which they would be able to use without having to study a manual or help page. So everything is now possible by using menu/toolbar commands. But for the more advanced users, there are shortcuts, of course. I think the interface of these very basic commands is very important, so I invested much time into this to find the best possible solution, and I think it is now really ok.
Update: The editor has been released already, download the Irrlicht Editor here.

Irrlicht 1.0

I released Irrlicht 1.0 just some minutes ago. This release may come unexpected for some people, especially its version number, "1.0", indicating that it is a stable, usable, finished product. I'm writing down this short article to summarize the last years of Irrlicht development, to take a look into the future of Irrlicht and to answer the maybe arising question, why version 1.0, why now.

I started to develop Irrlicht as small Direct3D framework in my spare time when I was working for an Austrian game development company 4 years ago. We were creating only 2D games there and I had become interested in hardware accelerated 3d graphics, so it was a nice hobby project. After I posted a screenshot of it on the flipcode.com IOTD (rest in peace) together with a small demo, I received a lot of positive feedback and thought about making the code open source.

Now, 4 years later, a lot has changed. There have been nearly 20 releases until now, we've got a huge community of more than 3000 registered forum users, Irrlicht now consists of maybe more than 400 classes, runs on several operation systems and platforms and has a lot of impressive features. But still it is a small, compact and easy to use framework for creating realtime 3D applications. And maybe this is why it has become one of the most popular open source 3D engines today. Scary somehow. If you take a look into a forum today and open a thread where someone is asking for recommendations for a 3d engine to create a game or similar, you can almost be sure that someone will name Irrlicht as possible candidate. And that's really exciting. When I started Irrlicht I never thought it would become that successful.

Unfortunately, as Irrlicht is only a hobby project, and the team members including me have a job and a private life, we are sometimes not able to fulfill all feature requests of the huge community. And that's a bit sad; I wished the day had 48 hours. Sometimes it is not even possible to merge code with some users code contribution, or to include one of the various bug fixes. Of course the reasons for this are not solely lack of time, but I am also trying not to break compatibility to previous versions. And here comes Irrlicht 1.0. It's just a point where we can say that's it, from here we can start and head towards a new, better version of Irrlicht, whatever it will look like. (Presumably it will be something fitting better the new 3D technologies with buzzwords like shader driven architecture, D3D10 hardware and similar on its feature list.) And we could still maintain and improve the Irrlicht 1.0 branch. Maybe this is also a good time to implement all those user contributions and patches (e.g. here). Let's see, I think we are looking into an exciting future.

And no – it is definitely not too early to tag Irrlicht with a version numbered 1.0. Irrlicht has more features than lots of other products asserting that they are 1.0. The community and we've tested Irrlicht very intensive during the last years. Lots of small games and other neat projects using Irrlicht already have been released. Irrlicht is stable. There are no major bugs. Some things are still missing, right, for example some mesh importers don't produce 100% accurate results, but there exists almost always a simple workaround. Software is never finished, you can work on it forever. But sometime you'll have to stop and declare that you've achieved what you originally intended too. And I think I've done this now.

So, what will the future of Irrlicht look like? I have no idea, and no plan. As always. During the last weeks, I've started to create an editor for Irrlicht, and I think this will be a useful addition as soon as I implemented a XML based format for serializing the whole 3d scene. And then it might be a good idea to move to a subversion server, to add all those contributions, improve the material system, rewrite and clean up the character animation system, and add some of that neat stuff today's 3D hardware is able to do: Better realtime shadows, HDR, whatever comes into mind. Ahh, it will be fun. And I hope you'll have some too. And before this text gets too long and you are bored by my crappy English: A lot of thanks to the Irrlicht team and to all people for contributing code, patches and doing suggestions, and to all users. Please don't stop. :-)

Reworked SpecialFX example

Besides some bugfixing with Irrlicht materials, I reworked the specialFX example today. With the next release, it will look like this:

irrlicht character animation and selfshadows

I think that's some big improvement to the old version. It also shows nicely the self shadows. The artist made this dwarf model available for free, but I sent him a mail and asked him for permission to include it in the SDK, just in case. I hope he'll answer.

Lightfeather homepage hacked

The lightfeather 3D engine homepage has been hacked (defaced) by a turkish hacker. The page says (if you are not using opera at least, then it is quite black)

"You keep abusing, Islam\'s almighty Prophet with disgusting and disgraceful cartoons using excuses of freedom of speech."
Quite stupid explanation for hacking a german open source 3d graphics website.
Now the funny part: Besides the fact that this 'hacker' doesn't know how to spell really a lot of stuff correctly, he also doesn't know how to create html webpages. Maybe I spotted the reason:

<meta name=ProgId content=FrontPage.Editor.Document>
<meta name=Generator content=\"Microsoft FrontPage 5.0\">
<meta name=Originator content=\"Microsoft Word 10\">
<link rel=Edit-Time-Data href=\"pratikler/indexler/index_dosyalar/editdata.mso\">
<title>HaCKeD By Turkhackerler </title>

*rotfl* Sorry for the lightfeather guys, btw.


Pfew, finally weekend. During the last hours at work I felt a bit like a zombie, so I think I really need this weekend now. (Unfairly, this friday is no official holiday as in lots of other countries and almost everyone here had to work). But it doesn't look like it will be boring or too much relaxing. Things I'm going to do:
Ok, and I think now I'm going to work off the task list. Starting with the last item.

I'm popular. Erm.

There are some more pictures from the igda meeting I was already blogging about. And I'm visible on two of the pictures, after all this is 18% of all pictures! :) Via rarebyte devblog.

Sunday shopping hell and Monsterkills

In Austria there are fixed opening hours for shops, enforced by law. I don't know the exact times, but usually shops only are open from about 9:00am until 7:00pm, and 9:00am until 5:00pm on saturdays, everything is closed on sundays. When I was on holiday in one of the lucky countries where such an over-regulation doesn't exist and was happy about being able to buy stuff at night and on sunday, a girl was surprised to hear this, was wondering how it would be to live like that and asked if we would need to take a day off to be able to go shopping. I remembered this conversation yesterday (sunday), when we were sqeezed together with about 1000 other people in a shop, trying to buy food:

(The picture doesn't show this very well, but there are really really loooots of people. And - well, ok - we are not looking really scared of being squeezed to death soon because we thought it would be a good idea to look friendly on the last picture taken before our cruel and sudden exitus.)

There are exceptions to this opening hours regulation, and some few shops are allowed to be open, for example when they are in the vicinity of train stations. So for the whole city of vienna, there are about 5 or 6 shops open on sundays, and everybody will go there. The Billa shop shown above is one of these, and - thinking of Unreal: If you would drop a redeemer missle in there, you would easily get a few MoMoMooonsterKILLs. :)

My blog software is running mad

Sorry. Testing.
edit: Corrected. Thanks.

Editor Progress Week 3

Again an updated shot from the editor I'm working on:

A good example of what I usually do when I should learn for an exam. Added a (not working yet) property window, made the tree window useful and working now (had to hack into the window messages of that control to make it stop flickering like mad), and added commands for mesh loading. That shot also demonstrates nicely Irrlichts capability of importing DirectX .X files. Ok, but now off to start learning. And maybe taking a shower before that. And eat something. And surf the web a bit. And.. Hm.


Ahh, nice that the sourceforge CVS server is back. Not that I am committing stuff that often. But when I want to, the server is down, as usual. :)

Tomb Raider: Legend

I just tried out the Tomb Raider: Legend Demo. It's not an outstanding game (I never thought the TombRaider games have been that great), but nice to play anyway, the puzzles with the physics are ok and Lara is looking sweet as always.

I took the screenshot above right out of the game, it was rendered in realtime. It is not using the latest 3D techniques and - as far as I can tell with my poor programmer eyes - maybe not the greatest artists created the models, but this game is now looking better in realtime than the prerendered movie sequences of the first TombRaider games.

Why companies should make available their modified open source code

Sometimes I think about why I create open source projects at all. Sometimes it is a bit ungrateful. If you think about it - in most cases other people profit from it. Just think about how much gpl violations there must be for example. GPL Violations is spotting some of them, but I think 99% of all hidden copyright violations will never be discovered. Companies really only look at their profit - that's why they exist. If they find some free code on the web and they can turn it into money they'll do it. Ok, why not. But most of them will never think about contributing anything back again. Too bad. Especially if you think about the fact that they would profit from this. Their enhanced code would be merged with the development version of the open source project they used, and become even better in this way, so they can create even better software from it again. Otherwise they will always have to stick with the version of the sourcecode they used when they started their project. But I think most companies don't even think about it.

Some progress

I did some progress with the small editor I started last week:

It is already possible to create, select, and move nodes. Not that much, but it's a beginning. And it really helps me improving Irrlicht. Especially the .NET version, I introduced at least 5-6 new features to make it easier to create windowed applications and to work with orthogonal 3d projections.

Returning an Array in Managed C++

/// <summary> 
/// Returns list of children.
/// </summary>
ISceneNode* GetChildren() []
That's how to return an array of pointers to ISceneNodes. Yes, that's right, there are square brackets at the end of the function declaration.

BRDFs and Java vs. C#

When I moved to the new server, I forgot to upload some papers (or whatever you would like to call them) I once wrote. Interestingly, three people (!) already asked for them during the last weeks. Wow. But I still think this is quite boring stuff. Both in german language:

Einige BRDF Modelle. (BRDF Models explained, with lots of examples, pictures and formulas)

Vergleich der objektorientierten Programmiersprachen Java und C# (Java vs. CSharp, compared)

Have fun reading/citing/ignoring/whatever them.