• entries
17
21
• views
17397

## Yesterday sucked

Went to do the driving license test, failed without even sitting on the driver's seat because one emergency triangle was seemingly missing (it wasn't, we just didn't look hard), and then a series of events unfolded that ended with my cell phone being stolen, long story sort, I was scammed by some people who claimed they could get me a passing on the test, yeah, yeah, I should have known better, but no use crying over spilt milk, and know I know and knowing is half the battle [smile].

The worst thing is that between bureaucracy, corruption, stupid laws and poor infrastructure, these kind things become too common around here.

Oh, and yeah, still looking for work.

## Looking for Work

So, I find myself looking for work again, and well, I can't help but compare how looking for work online is a lot like meeting women online, something I am very familiar with.

You begin by posting your information in some website, then, of course you don't get any unsolicited offers, or the ones that you do never get past the original message, so you have to get out there and try to make the first contact yourself.

That's when you begin posting to the prospects that interest you, and then most never get back to you, eventually, you do get to arrange meeting which could be either awkward or a hit... either way, chances are you won't be getting a call, not even to tell you that the position has been filled by someone else, and that is when the process starts all over.

Anyway, I have the option to move to the US thanks to the green card lottery, so if you know of any company willing to take me for Game Programming, anywhere in the US (NY, Chicago, Miami preferred, but would move anywhere really) by September/October 2009, let me know.

## Can I has PS3?

YES! I finally got a PS3, I can't really say what I think of it right now as I got to hook it up at about midnight, and didn't have time to play anything, I just saw the MGS4 intro and then upgraded the firmware, but so far, I remembered why I am a Sony fanboy, and got a geekgasm.

Having to install the game... odd for a console, but the line is beginning to fade, I'll be trying to get Gentoo running on it over the weekend, if I get the time.

Anyway, just rambling here due to overjoy [smile].

## So far, I love Blender.

Ok, so in a nutshell I got pissed off at Softimage for pulling fast ones at indies with their "pay the cost of a PS3 for a version of XSI thats just an advertisement to upgrade to the higher end versions every year" policy, you may remember that, if not, you can read the Journal Archives [smile].

So, anyway I decided to force myself to learn the Blender UI, the UI itself is not so great or as intuitive as you may think, but once you find what you're looking for its easier to find it next time you need it.

From a programmer's perspective, the program feels made by programmers for programmers,for example you don't "Freeze" transformations, you instead "apply" rotations, translations and scales, which makes sense when you realize that programatically, what its done behind the scenes is to apply a transformation matrix.

The armatures system for animation is great, I think it DOES beat the one in XSI in most aspects, for example you can use and manipulate individual bone envelopes to set influences, which you can't in XSI, there you apply an envelope for the whole rig and then you weight paint the problem areas, which usually are not a few.
You can also move, scale and rotate an armature and the mesh it deforms independently in object mode without it causing annoying side effects later like when you realize you had your mesh object rotated 90 degrees relative to your skeleton and then to fix it you have to re-envelope your mesh, which, if you had to do too much weight painting to fix, you'll have to do again.

But right now the reason I am rejoicing on Blender is the Python API, its a bit rough, true, but when you manage to rewrite an exporter that gave you nightmares for (still ongoing) months in 2 weeks without any mayor pitfalls, I can only say "BRAVO!", in contrast, my exported animations from XSI refuse to work properly.

And of course is always good to know that if you find yourself in need of a feature or find a problem with the software, you can go and fix it yourself. [smile]

## C# Annoyances Issue 1: No Macros

C# has no macros, this was made on purpose, however, I found a place where I could really use them.

I am writing a "Settings" class that uses XML Serialization, I need to use System.Drawing.Color variables which apparently do not serialize "out of the box", so a proxy string setter/getter needs to be made, and so the class is written (this is for a level editor):

public class Settings
{
private System.Drawing.Color gridPrimaryColor;
private System.Drawing.Color gridSecondaryColor;
private System.Drawing.Color gridTertiaryColor;
private System.Drawing.Color viewBackgroundColor;
[XmlIgnoreAttribute()]
public System.Drawing.Color GridPrimaryColor
{
set
{
gridPrimaryColor = value;
}
get
{
return gridPrimaryColor;
}
}
[XmlIgnoreAttribute()]
public System.Drawing.Color GridSecondaryColor
{
set
{
gridSecondaryColor = value;
}
get
{
return gridSecondaryColor;
}
}
[XmlIgnoreAttribute()]
public System.Drawing.Color GridTertiaryColor
{
set
{
gridTertiaryColor = value;
}
get
{
return gridTertiaryColor;
}
}
[XmlIgnoreAttribute()]
public System.Drawing.Color ViewBackgroundColor
{
set
{
viewBackgroundColor = value;
}
get
{
return viewBackgroundColor;
}
}
[XmlElement("GridPrimaryColor")]
public string HTMLGridPrimaryColor
{
set
{
gridPrimaryColor = ColorTranslator.FromHtml(value);
}
get
{
return ColorTranslator.ToHtml(gridPrimaryColor);
}
}
[XmlElement("GridSecondaryColor")]
public string HTMLGridSecondaryColor
{
set
{
gridSecondaryColor = ColorTranslator.FromHtml(value);
}
get
{
return gridSecondaryColor;
}
}
[XmlElement("GridTertiaryColor")]
public string HTMLGridTertiaryColor
{
set
{
gridTertiaryColor = ColorTranslator.FromHtml(value);
}
get
{
return gridTertiaryColor;
}
}
[XmlElement("ViewBackgroundColor")]
public string HTMLViewBackgroundColor
{
set
{
viewBackgroundColor = ColorTranslator.FromHtml(value);
}
get
{
return viewBackgroundColor;
}
}
}

Now thats a lot of code!, its there just to make a point, which is "there will be a lot of identically defined variables differing in name only".

Lets extract the code for a single variable:

private System.Drawing.Color viewBackgroundColor;
[XmlIgnoreAttribute()]
public System.Drawing.Color ViewBackgroundColor
{
set
{
viewBackgroundColor = value;
}
get
{
return viewBackgroundColor;
}
}
[XmlElement("ViewBackgroundColor")]
public string HTMLViewBackgroundColor
{
set
{
viewBackgroundColor = ColorTranslator.FromHtml(value);
}
get
{
return viewBackgroundColor;
}
}

Now, thats what it takes to define a single property variable thats serializable, wouldn't you just love to have the power of macros and do this (backslashes removed because of formating):

#define XMLITEM(INTERNAL,EXTERNAL)
private System.Drawing.Color INTERNAL;
[XmlIgnoreAttribute()]
public System.Drawing.Color EXTERNAL
{
set
{
INTERNAL = value;
}
get
{
return INTERNAL;
}
}
[XmlElement("EXTERNAL")]
public string HTMLEXTERNAL
{
set
{
INTERNAL = ColorTranslator.FromHtml(value);
}
get
{
return INTERNAL;
}
}

and then just

public class Settings
{
XMLITEM(gridPrimaryColor)
XMLITEM(gridSecondaryColor)
XMLITEM(gridTertiaryColor)
XMLITEM(viewBackgroundColor)
}

I would.

Macros are prone to abuse, but they do have their uses.

## You dont buy Softimage XSI, you rent it

I've been thinking for a while as to how should I word my discontent with the tactics used by Softimage to what I can only guess is keep XSI profitable, but anger and the thought that maybe when I cool off I might see things on a different light have kept me from it, no more.

I was suckered into buying XSI Foundation twice, so thats the version I am discontent with, its the version this entry is about.

My main gripe with them is resumed by the title of this entry, they don't sell you the software, they rent it to you.

Each year, you have to buy it again if you want any bug fixes and new features, but even this rental scheme is probably not their intended approach.

No, it seems that the real purpose of having a low budget version of XSI is to hook their customers into buying the next tier in their product line as it has been shown by the recent announcement of XSI 6.5.

6.5 is a paid minor upgrade, announced merely 8 months after the release of version 6.0, so higher tier customers are also renting the software.

The thing is, there is no XSI Foundation 6.5, I guess the new features wouldn't have made it into Foundation, so no need for the upgrade to cover it... but what about the bugs?

Oh yes, there is plenty of bugs, and more are introduced when a feature thats included in Fnd depends on a part of a feature thats not in there (for example in 4.2 removing a bone from a character guide would render it useless for creating a rig, but this was never taken care of), so this new version, to me, sounds like Fnd users will get even more neglected, at least until about January or February when they release XSI 7.0, and I'll be asked to fork another $400. I really had it this time, and unfortunately, there are no low budget versions of 3DSMax or Maya (probably a good thing though), so I guess I am going to Blender, its interface may suck (seriously, SHIFT+MMB to pan the view? who though of such uncomfortable combination for such a common action? I am referring to the fact that most mice nowadays have a wheel for MMB, and those aren't really a joy to click, much less keep pressed while holding a key and dragging the mouse, ALT+SHIFT+LMB is no better either), but at least I could fix the bugs myself if the owners dragged their asses. ## Wherein the mistery of why I have so little Journa Yes I am Lazy, I am, but the reason I don't post journal entries is a different one, I really don't feel like a lot of stuff I do (developing wise) is worth a journal entry, and this shouldn't be a blog... if it was, I think it would be a very boring one at that. Did you know that the lower leg is actually called "Cnemis", I didn't. I got XSI Foundation Upgrade from 4.2 to 6.0, this past December, but I wasn't able to use it until about now because the license server wasn't able to retrieve my MAC address, turned out I don't have a C drive (long story involving Linux on my primary IDE drive, and Windows on the SATA one), and the program required one. I hex edited the exe to change c:\ to g:\ and now works. I didn't upgrade from 4.2 to 5.0 because I didn't have the money and missed the deadline for the upgrade (you'll notice there is no upgrade price for Fnd), I had some grief with SoftImage and decided not to upgrade at FULL price, but did now. One of the things I noticed is that when upgrading, you don't get a new box and manual, so maybe next time I'll just buy a new License, depends on whether or not I feel the extra$100 are worth it.

Anyway, I do like the program, and since I just finished wrestling with my model exporter, I decided to work on an old character model I have and see if I can get it (her) into the engine, which brought me to find a name for the part of the leg thats not the thigh, and thats how I came across the word:

Cnemis. [smile]

I've been toying with the Tao code so I can make a mono-winforms Simple OpenGL control, so far, I am just gritting the wrapper for GLX functions... not fun.

## Blizzard, the new Origin?

On March 20 I made this post, for reference here, the note is what I am trying to bring back

Well, today I found out that in March 24 the announcement that StarCraft Ghost has been put on hold indefinitelly was made, there are no references about the game ever existing at Blizzard's site, so must be true.

You may notice the fact that the ONLY project Blizzard has in its hands is WoW, which brings me to another post I made on the same thread abobe:

Now, this may be my super powers of prescience (or rather my developed skill to infer future events from past ones), but I really can see Blizzard turning into the next Origin Systems, and I am really sad for that, BUT lets hope it doesn't happen and we DO get to see StarCraft 2.

## Random Babbling

Ahhh, its been a while yes...

So, still working on my engine on my spare time, its gone thru so many changes, I wouldnt be surpriced if I finish it at the same time Duke Nukem is released, stupid real life work wont let me code the engine as much as I want [sad], nor can I work on The Mapper much either, which is why it is lagging, but NOT dead!.

I saw the trailer for Silent Hill, one of my top five favorite franchises of all time, of course, having been ripped off too many times I am skeptical about whether it will be good or not, nowadays, I just asume a game movie or a movie game are not work watching, BUT the trailer for this one looks good enought.

No idea why Harry had a sex change though, and no idea where the 1/2 a second flock of zombies in the open street seen in the trailer comes from, but well, we'll see if they get my \$3.20 (going to the movies is cheap here!).

Anyway, go back to coding!

## More on SSE

Well, even though I said I was not going to convert my CVector3 class to hold a float[3] array instead of separate x,y,z variables, I did. It wasnt so much of an issue in the end, but unlike what I though, you DO need to use float[4] even if you're not using the whole 4 variables, plus, you should use movups instead of movaps when moving data from memory to a MMX register, yes, even if you declared the data as ALIGN16.

For some reason using movaps randomly threw segfault exceptions on me, even though the adress%16=0;

You learn something new every day [smile]

also, although it is valid to use the memory as one of the parameters for the parallel instructions, you're better off movups'ing the values to a MMX register instead of using the memory location directly because of the same reason to favor movups over movaps.

DONT SAY I DIDNT WARNED YOU!

## Found How to use member references today =)

I was looking into adding more SSE support to my engine today, and finally found how to have Member Variable References.

You see, my CVector3 class is defined with float x,y,z member variables, and x,y,z is the way I like to use when manipulating Vectors, however some stuff can be optimized by having the variables defines as float v[3].

I dont want to use a union because that cluters the class too much, (I mean who wants code that looks like: Normal.u.v[2]), so I have been looking to use references for a while.

Turns out it is NOT hard at all, all you need to do is set the references on the constructor Initialization list, without further ado I give you the dual vector3 class:

#ifndef ALIGN16
#ifdef __GNUC__
#define ALIGN16 __attribute__ ((aligned (16)))
#elif _MSC_VER
#define ALIGN16 __declspec(align(16))
#else
#define ALIGN16
#endif
#endif

class vector3
{
vector3() : x(v[0]),y(v[1]),z(v[2]) {};
public:
ALIGN16 float v[3];
float &x;
float &y;
float &z;
};

Now you can amaze your friends by accessing the vector by its x,y,z references or by using the powerfull SSE MOVAPS instruction to load your vector back and forth to a SSE register

__asm__
(
"movaps %0,%%xmm0\n\t"
"movaps %1,%%xmm1\n\t"
"mulps %%xmm1,%%xmm0\n\t"
"movaps %%xmm0,%2\n\t"
:
: "m" (vector1.v),"m" (vector2.v),"m" (vector3.v)
: "%xmm0","%xmm1"
);

That Multiplies vector1 and vector2 and saves the result into vector3 (I Think [smile])

Edit: This will add at least 12 bytes to each object, so may not be a good idea memory wise [sad], if you can live with that, go for it.

More Edit:

Well What do you know, this approach gives you a 32 byte vector object, whereas if you just omit the references and use ALIGN16 float x,y,z, you get a 48 byte object, the ALIGN16 float[3] would probably give you the best size for doing SSE stuff though.

I am not losing my time converting over now, but I might later.

## When will my problems with collision end?

Well, static Ellipsoid-triangle collision wasnt enought, I need Sweep Ellipsoid, static triangle collision stuff now, after a while trying to get one completelly on my own, I decided to just wait for the Real Time Collision Detection Book I ordered in may 12. Should be here tomorrow hopefully, this week most likelly.

Last week I didnt posted a new entry (like anyone would notice [smile]), it was because I was still strugling with the ellipsoid thing.

After giving up on that (momentarily) I found some Axis aligned cylinder collision detection stuff that, although didnt had the best implementation, gave me some ideas, and so, I am taking the concept and implementing the solution all by myself.

The Static Ellipsoid thing was not an entire failure, but more often than not, my character runs thru diagonal walls, and penetrates a bit on horizontal ones.

Anyway, here is a Picture:

## Finally, it works!

I finally got my ellipsoid-triangle collision code to work perfectly (at least on my testbed application), it was pretty hard getting rotation into consideration and all that but finally works as I wanted to.

In the way I learned a couple of things about barycentric coordinates and quaternions, its great to actually see how you've improved over time [smile]

notice how the blue point under the ellipsoid is positioned exactly where the ellipsoid and the triangle touch.

Finally, I may actually advance the Aeon Engine.

## I got feed up with ODE!

Well, after a couple of days (weeks?) trying to add ellipsoids to the primitives supported by ODE, I gave up today.

This (450k) is the closest I got, and to be honest I think I am still a bit green on doing physic simulations... or rather, I haven't taken the time to learn about how it works under the hood, I asked for help on the ODE mailing list and got no replies (something rather normal there to be honest), and well, I figured it's just not worth it.

I came to ODE looking for a solution for my collision detection problems, and I learned a lot about it while doing so, and I am gratefull for that, so, I am moving the couple of functions I wrote into FreeSOLID and maybe later I will consider finally adding FreeSOLID support into ODE.

For now, I am just Ranting, oh and I found FATE, a very interesting free tabletop RPG I am sort of implementing for my engine, that oughta keep me busy for a while [smile].

Cheers! (only one week and a day left!)

## Working with ODE

So, I have been incorporating ODE into my engine, I even contributed some autotools code to the project, and I am reviving the FreeSOLID library for collision detection in hopes to incorporate it into ODE.

My motives for adding ODE were simple, I just couldn't get my collision responce code to work as I wanted, after adding ODE, it got better, but movement was really messy, no matter what, my player entity slipped, and some other stuff.

I didn't like the options presented, they all sounded like a kludge, and then I found this.

The bright light of enlightment is right on the first paragraph. Basically, use a dGeom, but dont use a dBody, and handle movement and collision reaction yourself, this way you get the benefits of the physical sim without dealing with hacks and approximations in order to get your character to move right, hey! if it works for BloodRayne 2, probably works for my engine too.

Anyway, the way ODE works, there is a dCollide function that returns a collection of collision points that contain a normal and a depth , if you move your object along that the "normal" by the amount of "depth", you no longer have have a collision, so, I am thinking, acumulate all those for a single step, add them once there are no more comming in, then divide by the amount of collision points, use that to move the object, wash, rinse repeat.

I'll do it and then post my results. [smile]

## I got my Episode III ticket!

That's right! I get to see Episode III 2 days before everyone else [grin]

## Hello All!

Well, this is my first entry to my journal, and since it is the first one I figured I should just say hi and somehow do a little introduction instead of just straight flooding the journal with programming rants and anecdotes.

Anyway I am, as many others around here working on a game engine, I have to say, this is taking more time than the time it takes 3dRealms to release Duke Nukem Forever, in my case is probably due to the drifting nature of the goals I set for my engine, one week I want to do something, the next another, on the case of 3dRealms... well its probably the same issue [smile]

I am an Open Source supporter, I like the idea to an extent, but I also believe in making some money on the side, which is why I have some projects which are Open Source, such as my MD5 model and game GUI libraries and some that are closed commercial projects, such as my Mapper Level exporter plug-in for gameSpace/trueSpace, and once complete, my game engine and its derivatives.

So,... yeah, that's me [smile].