Archiv für 29 June 2009


Mekka Anwendung für iPhone 3Gs

29 June 2009 — 22:36

Update

Endlich hat Apple unsere neue Anwendung iMecca freigegeben. iMecca ist eine Anwendung für Muslime. Mit dieser Anwendung wird die Richtung nach Mekka bzw Kaaba gezeigt. Muslime richten sich beim beten nach Kaaba aus. Beim halten des iPhone 3Gs werden die GPS Koordinaten mit der Nord Richtung verrechnet. Das iPhone 3Gs berechnet die Richtung von Mekka bzw Kaaba.
Link zum App Store

imecca_icon_5121

Die letzten paar Tage haben wir die Anwendung “iMecca“ für iPhone 3Gs entwickelt. Diese App Zeigt die korrekte Richtung von Mekka an. Wir warten ab, bis die Anwendung von Apple überprüft wird. Sobald iMecca in App Store verfügbar ist werden wir berichten.

5 Kommentare » | Products

Mac abgestürzt während der Programmierung am iPhone

12 June 2009 — 18:52

Im Moment arbeiten wir an unserem nächsten Production Drop. Während des Codieren ist uns ein Mac abgestürzt. Es hat ein grauen Screen angezeigt, kein Blauen wie bei Windows :-)

grey / blue screen on mac

grey / blue screen on mac


blue / gray screen on mac

blue / gray screen on mac

Kommentar » | Allgemein

Guerilla-Marketing hat keine Akzeptanz in Deutschland

10 June 2009 — 21:02

Guerilla-Marketing erfreut sich in Amerika größter Beliebtheit. Unsere Guerilla-Aktion mit dem Slogan “Your Idea in our Vein” hat uns  auf der “marketing+services” Messe in Frankfurt den Rauswurf gekostet.

dsc00106

2 Kommentare » | Allgemein

Langweilige Firmenpräsentationen

4 June 2009 — 22:04

(Version 0.8)

Jeder Präsentation soll das eigene Unternehmen von der besten Seite zeigen. Man versucht sich erfahren darzustellen und begründet alles mit Projekten.

Der traditionelle Weg ist ein Ppt (Powerpoint) voll mit Text und schönen Überblendungen. Ein Video wird entweder davor oder danach abgespielt. Und nach der ganzen Präsentation erinnert man sich nur an das Video.

Also werden wir versuchen alle unsere Inhalte in ein Comic zupacken. Die Videos werden Bestandteil des Comics. Wir wollen damit sinnige Trennungen innerhalb der Präsentation vermeiden.

forblogpost

Kommentar » | Project management

Properties für Accessoren

3 June 2009 — 10:32

Datenkapselung ist einer der wichtigsten Konzepte in der objektorientierten Programmierung. Um Datenkapselung zu gewährleisten, müssen Setter- und Getter-Methoden (Accessoren) für jede Instanzvariable geschrieben werden. Dies kann unter Umständen sehr zeitaufwendig sein. Die meisten Accessoren haben den gleichen Aufbau und unterscheiden sich lediglich durch die Instanzvariable. Da liegt die Idee nahe, diese Accessoren automatisch generieren zu lassen. Dieses vorgehen nennt man synthetisieren und wurde in Objektive-C 2.0 mit den sogenannten Properties eingeführt.

Propertys haben die allgemeine Syntax:

header
@property (attribut1, attribut2, attribut3, attribut4) datentyp variablenname;

implementation
@syntesize variablenname;

Hat man eine Instanzvariable synthetisiert kann wie folgt darauf zugegriffen werden:

Standard-Syntax
[Obj setVariablenname:wert]
printf(„Der wert lautet %i“, [Obj variablenname]);

Punkt-Syntax
Obj.variblenname = wert;
printf(„Der wert lautet %i“, Obj.variablenname);

Anmerkung:
Die Punkt-Syntax ist unabhängig von den Properties. Es ist möglich die Accessoren selbst zu schreiben (ohne Properties) und über die Punkt Syntax darauf zuzugreifen.

Die 4 Attribute beschreiben folgendes:
-Zugriffsart (readonly, readwrite)
-Setter-Semantik (assign, retain, copy
-Atomicity
-Setter- und Getter-Namen

Zugriffsart

Es gibt 2 Zugriffsarten. Entweder nur lesen (readonly) oder schreiben und lesen (readwrite).
Bei readwrite werden beide Accessoren synthetisiert (vom compiler geschrieben). Im Falle von read wird nur der Getter synthetisiert und somit ist nur ein lesender Zugriff möglich.

Setter-Semantik

Assign

Assign ist die standard Setter-Semantik. Falls man also nichts angibt wird vom Compiler   automatisch assign genommen. Der neue Wert wird der Instanzvariable einfach nur zugewiesen, sonst nichts. Der Referenzcounter wird nicht erhöht. Dadurch ist eine ältere Erhöhung des Referenzcounters ausgeschlossen und er wird somit auch nicht erniedrigt. Dies hat zur Folge, dass die Empfänger -Klasse kein Besitzer des Objektes ist. Wird der Referenzcounter des Objekts von der Sender-Klasse erniedrigt, wird das Objekt gelöscht und ist somit auch nicht mehr für die Empfänger-Klasse erreichbar. Natürlich ist es auch umgekehrt möglich. Deswegen sollte man Propertys mit der assign-Semantik in der dealloc-Methode nicht releasen (den es wurde auch nirgends retained).

Beispiel (vom Compiler generierter Code für den Setter)
-(void)setVariablenname:(id)senderValue
{
   instanceValue = senderValue;
}

 assign

Retain

Retain löst die Problematik der Assign-Semantik. Die Instanzvariable wird zunächst released, da es vielleicht schon auf ein Objekt zeigt. Danach wird der neue Wert zugewiesen und dann wird die Instanzvariable retained. Dies bedeutet nun dass die Empfänger-Klasse ein Besitzer des Objektes ist. Die Sender-Klasse kann das Objekt nun löschen und es ist für die Empfänger-Klasse immernoch  erreichbar. Da man in der Retain-Semantik die Instanzvariable retained, muss sie in der dealloc-Methode auch released werden. Beide Klassen (Sender und Empfänger) zeigen nun auf dasselbe Objekt. Ändert eine Klasse das Objekt ist es auch für die andere geändert.

Beispiel  (vom Compiler generierter Code für den Setter)

-(void)setVariablenname:(id)senderValue
if(instanceValue != senderValue)
  {
    [instanceValue release];
    instanceValue = senderValue;
   [instanceValue retain];
}
}

retain

Copy

Copy erlaubt es einer Klasse der alleinige Beitzer eines Objektes zu werden. Das übergebene Objekt wird kopiert und danach erst zugewiesen. Dies hat den Vorteil dass Empfänger- und Sender-Klasse nicht mehr auf dasselbe Objekt zeigen und somit eine Änderung des Objekts der einen Klasse nicht für das Objekt der Anderen gilt. Die Klasse des übergebenen Objekts muss das NSCopying Protocol implementieren.

Beispiel (vom Compiler generierter Code für den Setter)
-(void)setVariablenname:(id)senderValue
{
if(instanceValue != senderValue)
  {
    [instanceValue release];
    instanceValue = [senderValue copy];
}
}

copy

Atomicity

Atomicity gewährleistet den sicheren Zugriff von mehreren Threads auf die Accessoren. Zu einer bestimmten Zeit darf nur ein Thread auf die Accessoren  zugreifen. Möchte man dies vermeiden gibt man einfach das  Attribut „nonatomic“ an. Mehr dazu auf friday.com

Setter- und Getter-Namen

Wie weiter oben beschrieben sind die Standard-Namen: „setVariablenname:“ (Setter) und „variablenname“ (Getter). Dies kann geändert werden. Um zum Beispiel im Falle von Boolean-Werten für den Getter einen Namen wie „isInitial“ zu erzeugen, kann man als Attribut „getter = isInitial“ angeben. Dadurch kann man auf den Boolwert wie folgt zugreifen:

[Object isInitial];
Object.isInitial;

Natürlich kann auch der Settername durch „setter=andererName“ geändert werden.
Außer man hat als Zugriffsart „read“ definiert, dann gibt es nähmlich einen Compilerfehler, da der Setter nicht existiert.

Quelle
developer.apple.com

5 Kommentare » | ObjC

Ich arbeite an meinen Tutorials

2 June 2009 — 18:24

Mein V-Ray RT Tutorial überzeugte mich nicht, den es fählte eine klare Struktur.  Ich habe es von der V0.8 auf die V0.95 aktualisiert. Weitere Verbesserungen folgen.

Kommentar » | statement

Entfesseltes Ray Tracing “V-ray realtime“

1 June 2009 — 1:36

(Version 0.95)

Die Vorteile von V-Ray RT lassen sich eines typischen Rendering Arbeitsablaufes beschreiben. Üblicherweise wir die Szene aufgesetzt indem zunächst Geometrie erzeugt (Modeling) oder importiert wird, die Beleuchtung gesetzt und anschliessend die Materialien bzw. Shader definiert werden.

Dabei ist die Lichtsetzung besonders aufwendig. In Test Renderings (Preview) werden Lichter in zeitraubenden Korrekturläufen immer wieder angepasst. Ähnlich aufwendig ist die Definition von Materialien. Eigenschaften wie z.B. Reflektionindex, Diffuse und Spekular Farbe müssen entsprechend der Beleuchtung optimal gesetzt werden um ein gewünschtes Rendering Ergebnis zu erzielen. Genau hier setzt V-Ray RT (Realtime) an.

Gleichzeitig kann an Beleuchtung und Shading gearbeitet werden – da sofort ein visuelles Feedback zu sehen ist. Zeitaufwendige Testrenderings werden so auf ein Minimum beschränkt.

Echtzeitberechnung nach 3 Minuten

vray_realtime_3_min1

Testrendering nach 20 Minuten

vray_rendering_20_min

Einführung.

Für dieses kleine Tutorium ist grundlegendes Wissen in 3ds Max erforderlich. Ein paar V-ray Kenntnisse sind von Vorteil, um das gesamt Konzept besser zu verstehen. Ich benutze in meiner Szene eine einfache Geometrie, ein paar V-ray Lichter und eine V-ray Kamera.

1 wir aktivieren die Render engine.

3ds_max_assign_render_vray_realtime

2 wir starten den activeshade

3ds_max_use_activeshade

Ein Fenster geht auf, welches später uns die Szene vorrechnet. Es dauert ein paar Sekunden bis es soweit ist. Bei Netzwerkrendering kann es paar Sekunden länger dauern. So bald die Anwendung läuft updatet sie sehr schnell :-)

3ds_max_ui_vray_realtime

Jetzt können wir an der Szene arbeiten und alles wird direkt aktualisiert.

Einstellungen

vray_realtime_render_settings

Trace depth: Die maximale Anzahl der Licht, Reflektionen und Refraktionen

GI depth: Maximale tiefe der indirekten Illumination

Ray bundle size: Die Anzahl der verarbeiteten Strahlen.

Rays per Pixel: Das ist die antialasing Qualität bzw. die Unterteilung eines Pixels.

Mehr Informationen findet man hier.

Tipps:

  • Die Performance von V-ray realtime ist bestens, kleiner Auflösung macht aber mehr Sinn.
  • Benutze die V-ray Kamera es macht mehr Sinn im gesamt Konzept von V-ray.
  • Szenen mit über eine Million Polygone machen keine Probleme.
  • Spiegelende und Lichtdurchlässige Materialien brauchen mehr Trace depth.
  • Das Netzwerk rendering ist schneller mit kleinen Ray bundle size Werten.

vielen dank an: weltenbauer.

3 Kommentare » | 3d Tutorials

Zurück nach oben