CeBIT 2011

ASUS Tablet (Foto von Patrick H~)

So, nun gibt es ihn doch, meinen CeBIT-Bericht. Wie erhofft war ich wieder mit meinem Clan dort.

Letztes Jahr wurde das Business anscheinend noch nicht genug gepusht, so war das Motto der diesjährigen CeBIT das selbe. Immerhin gab es dieses Jahr das ein oder andere Neue, wenn auch auf einem noch kleiner geschrumpften Messegelände, zu begutachten. Somit waren 3D-Bildschirme für die man keine Brille brauchte und iPad Konkurrenz-Tablets mit von der Partie.

Während der 3D Effekte der neuen Bildschirme nur aus einem bestimmten Abstand ein korrektes Bild lieferte, boten die neuen Tablets volle Funktionalität, angeblich sogar mehr als das iPad; so wurden ein SD-Kartenslot und ein USB-Anschluss ohne Spezialstecker bei ASUS als die Innovationen angepriesen, welche dem iPad fehlen.

Im CeBIT Sound war dieses Jahr auch “CeBIT Sports & Health” untergebracht, wo man Tischtennis auf verschieden großen Tischtennistischen gegen andere Messebesucher spielen, Virtuelle Berge mit dem Ergometer bezwingen und Ruderduelle bestreiten durfte. Dazu gab es schlechte Unterhaltung von einem Entertainer, welcher meinte allemöglichen Hits der letzten 30 Jahre Karaoke singen zu müssen.

Auf der eigentlichen CeBIT Sound bühne gab es diesmal keine Geräte mehr, sondern nurnoch “debile Debatten” über z.B. die Zukunft des Webradios auf Mobilgeräten, ummalt von Scheinwerfern. Vielleicht war hier unter der Woche mehr los. Gejamt und gerockt wurde dafür gegenüber des Sound-Bühne bei einem Austeller, welcher Messebesuchern auf digitalen Instumenten erlaubte mit einander zu Spielen. Als sich einige talentierte Musiker gefunden hatten, wurde ein  20 minütiger Jam aufgenommen, welcher sich durchaus hören ließ.

In der “Golden Mall”, den asiatischen Herstellerhallen, gab es kaum noch Ware zu bestaunen. Alles war und wurde an zahlungskräftige Messebesucher verkauft. Ob das Überleben der jeweiligen Firma von diesen Einkünften abhing, kann man nur mutmaßen, so oder so schade, dass es dort kaum Produkte mehr zu sehen gab. Wenigstens die teilweise luxuriöse Möblirung durfte zum Rasten und Reden genutzt werden.

Den echten “GLONASS-K” Navi-Satelliten gab es wirklich, allerdings in eine dicke angemalte Schutzhülle eingepackt und mit zusätzlichen Verhüterli um Antennen und andere sensible Punkte. Somit war von der Technologie die darin steckte nichts mehr zu sehen und das erlaubte Anfassen machte auch wenig Sinn.

Werbegeschenke waren nach ca 5 Stunden CeBIT ein halfsize Kugelschreiber, eine kleine Plastikbüchse Pfefferminzbonbons und ein Gutschein für ein Bluetooth-Headset von Pearl (diese Gutscheine verdreckten das gesamte Messegelände und wurden an jeder Ecke verteilt). Drei mal so viel wie letztes Jahr, wo Ich nur ein einziges Werbegeschenk erhielt.

Nächstes Jahr wird es dann warscheinlich nicht mehr die CeBIT sondern die GamesCom auf der wir (mein Clan und Ich) uns treffen. Schade dass eine einst atemberaubende Messe mit etlichen Neuerungen und Innovationen so abgesackt ist.

Jeder Leser ist natürlich herzlichst dazu eingeladen, seine eigenen Erfahrungen und Erlebnisse in einem Kommentar mit zu teilen.

ASUS M51Ta Grafik mit Windows 7

ATi Mobility Radeon HD3650

Für alle die auch das Problem haben, dass sie die eingebaute ATi Mobility Radeon HD3650 ihres ASUS M51Ta Laptops nicht mit Windows 7 installiert bekommen habe ich hier vielleicht eine Lösung!

Das Problem besteht entweder im sog. “Black screen of death”, bei welchem sich der eingebaute Bildschirm nach dem booten nicht mehr einschaltet oder ein Freeze des Bootscreens anzeigt. Oder aber in fehlender Hardwarebeschleunigung von OpenGL oder Videowiedergaben.

Der Treiber der auf support.asus.com für Windows Vista angeboten wird funktioniert nach der zweiten Installation hier auch mit Windows 7! Allerdings muss die erste Installation des Treibers wieder komplett deinstalliert werden, sollte sie nicht funktionieren.

OpenGL Bloom Shader

Habe gestern für Galaxy War Commander einen bloom shader geschrieben und wollte den hier nochmal explizit vorstellen. Zu beachten ist das der Shader auf eine Framebuffer-Textur angewendet wird.

Vertexshader Source:

varying vec2 texcoord;
 
void main(void)
{
    gl_Position = ftransform();
    texcoord = vec2(ftransform() * 0.5 + 0.5);
}

Der Vertexshader transformiert die position und gibt diese zur weiteren Verarbeitung an den Fragmentshader weiter.

Fragmentshader Source:

uniform sampler2D rscene;
varying vec2 texcoord;
 
void main()
{
    vec4 pxl = texture2D(rscene, texcoord);
    float avg = ((pxl.r + pxl.g + pxl.b) / 3.0);
 
    // bloom
    {
        vec4 sum = vec4(0.0);
        for (int i = -5; i <= 5; i++)
        {
            for (int j = -5; j <= 5; j++)
            {
             sum += texture2D(rscene, (texcoord + vec2(i, j)
                   * 0.0018)) * 0.015;
            }
        }
 
        if (avg < 0.025)
        {
            gl_FragColor = pxl + sum * 0.335;
        }
        else if (avg < 0.10)
        {
            gl_FragColor = pxl + (sum * sum) * 0.5;
        }
        else if (avg < 0.88)
        {
            gl_FragColor = pxl + ((sum * sum) * 0.333);
        }
        else if (avg >= 0.88)
        {
            gl_FragColor = pxl + sum;
        }
        else
        {
            gl_FragColor = pxl;
        }
    }
}

Hier wird das gerenderte Bild zunächst weichgezeichnet und dann je nach Intensität des darunterliegenden Pixels über den Render gelegt. Die Werte (Weichzeichengröße- und Auflösung, Intensität) können je nach Geschmack angepasst werden.

Das Resultat (rechts) kann sich allemale sehen lassen!

Viel Spaß!

Trigonometrie und Projektion mit C#

Bei meinem aktuellen und umfangreichen Projekt “Galaxy War Commander” sind zahlreiche Trigonometrieverfahren unverzichtbar. So sind das errechnen von Himmelsrichtungen, Objektverschiebungen, Objektüberschneidungen, Projezieren sowie Unprojezieren zwischen 3D und 2D essenzielle bestandteile des Spiels.

public static bool Intersect
(Vector2f Pos1, float Rad1, Vector2f Pos2, float Rad2)
{
    float D = (float)(
        Math.Sqrt(((Pos1.X - Pos2.X) * (Pos1.X - Pos2.X))
        + ((Pos1.Y - Pos2.Y) * (Pos1.Y - Pos2.Y))));
    if (D <= (Rad1 + Rad2)) return true;
    return false;
}

Zeigt den Code, welcher verwendet wird um heraus zu finden ob zwei Kreise sich überschneiden. Durch vergleichen von Entfernung der beiden Kreismittelpunkte und der Summe der Radi ergibt sich ein eindeutiges Ergebnis.

public static Vector2f Reposition
(Vector2f Pos, float Ang, float Hyp)
{
    float r = Ang * (float)Math.PI / 180.0f;
    float a = (float)(Math.Sin(r)) * Hyp;
    float b = (float)(Math.Cos(r)) * Hyp;
    return new Vector2f((Pos.X + b), (Pos.Y + a));
}

Verschiebt einen Punkt in die gegebene Himmelsrichtung Ang mit der Entfernung Hyp. Hier bediene ich mich dem rechtwinkligen Dreieck in dem ich durch die Katethenfunktionen die X sowie Y Verschiebung errechnen kann.

private Vector3f unproject2Dto3D(Vector3 Pos2D)
{
    Matrix4 finalMatrix;
    Vector4 _in = new Vector4(Pos2D, 2.0f);
    Vector4 _out;
    float[] view = new float[4];
    GL.GetFloat(GetPName.Viewport, view);
 
    Matrix4 modelMatrix = this.ModelView;
    Matrix4 projMatrix = this.Projection;
    Matrix4.Transpose(ref modelMatrix, out modelMatrix);
    Matrix4.Transpose(ref projMatrix, out projMatrix);
 
    finalMatrix = Matrix4.Mult(modelMatrix, projMatrix);
    finalMatrix.Invert();
 
    _in.X = (_in.X - view[0]) / view[2];
    _in.Y = (_in.Y - view[1]) / view[3];
 
    _in.X = _in.X * 2.0f - 1.0f;
    _in.Y = _in.Y * 2.0f - 1.0f;
    _in.Z = _in.Z * 2.0f - 1.0f;
 
    _out = Vector4.Transform(_in, finalMatrix);
    if (_out.W == 0.0)
        throw new InvalidOperationException("_out.W went 0!");
 
    Vector3f Out = new Vector3f(
        (_out.X / _out.W),
        (_out.Y / _out.W),
        (_out.Z / _out.W)
    );
 
    return Out;
}

Dieser Code unprojeziert Bildschirmkoordinaten auf 3D Koordinaten ohne auf eine spezielle Y oder Z ebene zu Zielen. Dabei wird, entgegen der Projektion, der Bildschirmpunkt anhand der invertierten Ergebnismatrix aus der multiplikation der ModelView- sowie Projektions-Matrix transformiert. Zu beachten ist auch das die per GL.GetFloat() ausgelesenen Matritzen in die Row-Major form umgewandelt werden müssen.
Um den unprojezierten Punkt nun auf eine Ebene zu versetzen auf der er verwendet werden kann unprojezieren wir die gleichen Bildschirmkoordinaten zwei mal mit unterschiedlicher virtueller Tiefe, was uns zwei Punkte gibt durch welche wir eine dreidimensionale Linie ziehen können. Anhand dieser Linie ist es dann möglich den unprojezierten Punkt auf der gewünschten Ebene zu errechnen.

private Vector3 unproject2Dto3D
(Vector2f Pos2D, float TargetY)
{
    Vector3f near = unproject2Dto3D(
        new Vector3(Pos2D.X, Pos2D.Y, 0.0f));
    Vector3f far = unproject2Dto3D(
        new Vector3(Pos2D.X, Pos2D.Y, 10.0f));
 
    float dist = VectorHelper.Distance(near, far);
 
    float u = -near.Y / (far.Y - near.Y);
 
    float ex = near.X + (far.X - near.X) * u;
    float ez = near.Z + (far.Z - near.Z) * u;
 
    return new Vector3(ex, TargetY, ez);
}

Bei den gezeigten Beispielen wurden Klassen und Funktionen des OpenToolkit zur hilfe genommen um die Masse an Daten effizienter speichern zu können.

Bundesvision Song Contest 2010

Auch wenn ich kein Bremer bin finde ich Bremen schon wieder am besten, genau wie letztes Jahr als Flowin IMMO et les Freaqz für Bremen angetreten sind.
Diesmal gibts die Kleinstadthelden mit ihrem Track “Indie Boys”.

Need for Speed World Online Beta – Erster Eindruck

Need for Speed World Beta Gameplay Screenshot

Spielansicht

Habe mir heute die aktuelle Beta von NfSW runtergeladen und angespielt.

An und für sich ist es ein normales Rollenspiel wo man fährt anstatt zu laufen. Quests gibt es nicht, aber Rennen die man so oft man will wiederholen kann (so ähnlich wie Dauerquests) und so seine Erfahrungspunkte sammeln kann für Levelup. Carbon und Most Wanted Spieler werden sich im World Online Straßennetz sicherlich schnell zurecht finden da ganze Stadtteile scheinbar unverändert übernommen wurden.

Das Spiel ruckelt und muckelt wegen der permanenten Internetnutzung ununterbrochen vor sich her und man kann sich somit mit etwas Glück durch Hindernisse “hindurchlaggen”.

Auch die Polizei ist wie in den Vorgängerspielen noch vorhanden, wird aber erst bei viel zu schnellem Fahren und energischen Rammen der Polizeifahrzeuge aktiv. Während der Polizeiverfolgung werden die MMO-Features ausgeschaltet und man kann ruckelfrei und ungehindert der Poliezi davonfahren.

Kollisionen gibt es nur bei Objekten und KI-Autos (welche übrigens zufällig spawnen und verschwinden, manchmal auch direkt vor einem). Durch Online-Mitspieler fährt man in der freien Fahrt einfach hindurch, nicht allerdings bei Rennen.

Neu eingeführt sind die Powerups die einem helfen sollen der Polizei zu entkommen oder Renngegner aus dem Weg zu schaffen. Leider kann man diese nur begrenzt oft ausführen und muss jedes weitere Mal prepaid vorkaufen.

Die Grafik sieht soweit ganz gut aus, lediglich Filter wie Antialiasing und Tiefenschärfe fehlen noch und zwischen den einzelnen Detailstufen erkennt man nicht viel Unterschiede.

Eigentlich wollte ich hier noch ein Demovideo posten, was sich aber durch einen BSoD beim Aufnehmen erledigt hat.

Musikprojekt goes YouTube

Seit geraumer Zeit schon beschäftige ich mich gerne mit Musik und hab auch schon den ein oder anderen Track selber kreirt. Nun habe ich einen YouTube Channel eingerichtet auf dem ich Tracks, die es würdig sind veröffentlicht zu werden, veröffentliche und alles zum freien anhören zugänglich mache.

Hier geht’s los: youtube.com/endoriazel

EA Customer Support FAIL

Heute wollte ich mal die FIFA Online Beta ausprobieren, was natürlich schief ging. In guten Absichten hinterlies ich bei Electronic Arts einen Bugreport auf der dafür vorgesehenen Seite.

Aber allem Anschein nach werden Bugreports von EA nicht ganz ernst genommen, denn ich erhielt eine Antwort ohne jeglichen Bezug zu meinem Report … Anscheinend eine standardisierte Nachricht …

Customer Support EPIC FAIL

And now especially for our friends from EA in english :)

Could you please at least read the reports, beta participants post to you, instead of givin’ a sh*t!? Damn, that s*cks!