Gelangweilt von Werbung 1

22 July 2009 — 10:57 PM

Sorry, this post is not available in English

Von Werbung möchte sich heutzutage ja niemand mehr beeinflussen lassen. Doch Werbung geht heute ein Stückchen weiter als in alten Zeiten und ist intelligenter geworden, denn keine Firma sollte und möchte mehr offensichtlich ihre Produkte verkaufen, denn das würde den potenziellen Konsumenten eher abschrecken. Die neuste Werbestrategie nennt sich Neuromarketing und zielt darauf ab potenzielle Konsumenten unterbewusst zum Kauf eines bestimmten Produktes zu verleiten.

Waschmaschine spannender als Werbung

„Das sagt mir mein Bauchgefühl“ ist oftmals der erste Schritt etwas zu tun ohne genau zu wissen warum man es tut. Man muss es einfach tun. Und manchmal ist die Intuitive Handelnsweise nicht die schlechteste. Und genau das nutzen die neusten Marketingstrategien. Dem Kunden wird durch intelligente Werbung ein bestimmtes Produkt schmackhaft gemacht und er wird sich im Geschäft eher für das unterbewusst gemerkte als ein anderes entscheiden. Diesen Effekt erreicht man Sie z.B. indem in Werbespots der Namen der Marke gleich zu Beginn einblendet wird. Das Problem heutzutage für die Hersteller: Die potenziellen Kunden schalten bei Werbung ihr TV-Gerät lautlos oder gar um, weil sie sich genervt fühlen. Außerdem kommt hinzu, dass Fernsehen immer unpopulärer wird. Dafür gewinnen in den Haushalten Videospiele und Mobile Geräte wie zmb PSP oder iPod/iPhone immer mehr an Bedeutung. An diesem Punkt stelt sich für uns die Frage warum man nicht geziehlt kostenlose Spiele anbittet. Diese wiederum beinhalten indirekte Werbung.

Im zweiten Teil mehr zu den Zahlen aus dem Bereich “in game advertising”

1 comment » | Allgemein

iPhone SDK mesh COLLADA import

19 July 2009 — 5:46 PM

Software: Maya2008 COLLADA version 1. 4

COLLADA schema supports all the features that modern 3D interactive applications need, including programmable shader effects, animation and physic simulation.

Step 1.

Install and load COLLADA plug in for maya

Step 2.

Change all face of model into triangles: Mesh -> Triangulate. (OpenGL ES 1.x do not support QUADE draw).

Step 3.

Export model with mayaCollada, so I have a dae(digital asset exchange) file. In fact dae file is extended from XML file.

Step 4.

Go back to Xcode and import this .dae file into project, Open it with editor, we can find all information about 3D Model, like materials, effects, geometries… I focus my attention on tag ” library geometries” which include a sub tag “mesh”. The first line in this block define name of geometry <geometry id=”pCubeShape1″ name=”pCubeShape1″> then is the important tag <mesh>, in it there are 3 “source” and a “triangles” blocks, each of them include an array: <float_array id=”pCubeShape1-positions-array” count=”24″> (position of each vertex), <float_array id=”pCubeShape1-normals-array” count=”72″>, <source id=”pCubeShape1-map1″ name=”pCubeShape1-map1″>  (texture coordinats) and <p> ( please look at to Ps). They are all what we need to a simple model to iPhone SDK import.

Step 5.

Then I can parse this file with class NSXMLParser from SDK. In this example I draw model shape without texture, so I read out only positions array and the indices array from <p>.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if(qName) {
elementName = qName;
}

if([elementName isEqualToString:@"accessor"]) {
NSString *accessorAtt = [attributeDict valueForKey:@"source"];
if([accessorAtt isEqualToString:@"#pCubeShape1-positions-array"]) {
NSString *sVertextCount = [attributeDict valueForKey:@"count"];
vertexCount = [sVertextCount intValue];
return;
}

else if([accessorAtt isEqualToString:@"#pCubeShape1-map1-array"]) {
NSString *sMapCount = [attributeDict valueForKey:@"count"];
mapCount = [sMapCount intValue];
return;
}
}

else if([elementName isEqualToString:@"triangles"]) {
NSString *sFaceCount = [attributeDict valueForKey:@"count"];
faceCount = [sFaceCount intValue];
return;
}

else if ([elementName isEqualToString:@"float_array"]) {
NSString *relAtt = [attributeDict valueForKey:@"id"];
if([relAtt isEqualToString:@"pCubeShape1-positions-array"]) {
contentProperty = [NSMutableString string];
array_id = id_positions;
NSLog(@”get positions”);

}

else if([relAtt isEqualToString:@"pCubeShape1-normals-array"]) {
contentProperty = [NSMutableString string];
array_id = id_normals;
NSLog(@”get normals”);
}

else if([relAtt isEqualToString:@"pCubeShape1-map1-array"]) {
contentProperty = [NSMutableString string];
array_id = id_maps;
NSLog(@”get maps”);
}
}

else if ([elementName isEqualToString:@"p"]) {
contentProperty = [NSMutableString string];
NSLog(@”get vertex”);
}

else {
contentProperty = nil;
}
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (qName) {
elementName = qName;
}

if ([elementName isEqualToString:@"float_array"]) {
if(array_id == id_positions) {
msd.sPosition = contentProperty;
NSLog(@”set postion”);
array_id = -1;
}

if(array_id == id_normals) {
msd.sNormal = contentProperty;
NSLog(@”set normals”);
array_id = -1;
}

if(array_id == id_maps) {
msd.sMap = contentProperty;
NSLog(@”set maps”);
array_id = -1;
}
}

else if ([elementName isEqualToString:@"p"]) {
msd.sIndices = contentProperty;
NSLog(@”set vertex”);
}

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (contentProperty) {
[contentProperty appendString:string];
}
}

Step 6.

At last we can draw our model with OpenGL ES.

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, mVertices);

glDrawArrays(GL_TRIANGLES, 0, faceCount*3);

glDisableClientState(GL_VERTEX_ARRAY);

Ps:
The <p> contains indices that describe the vertex attributes for a number of triangles. The indices in a <p> element refer to different inputs depending on their order. The first index in a <p> element refers to all inputs with an offset of 0. The second index refers to all inputs with an offset of 1.
Each vertex of the triangle is made up of one index into each input. After each input is used, the next index again refers to the inputs with offset of 0 and begins a new vertex.
The winding order of vertices produced is counterclockwise and describes the front side of each triangle.
If the primitives are assembled without vertex normals then the application may generate per-primitive
normals to enable lighting.

Here is an example of a <triangles> element that describes two triangles. There are two <source> elements that contain the position and normal data, according to the <input> element semantics. The <p> element index values indicate the order in which the input values are used:

<mesh>
<source id=”position”/>
<source id=”normal”/>
<vertices id=”verts”>
<input semantic=”POSITION” source=”#position”/>
</vertices>
<triangles count=”2″ material=”Bricks”>
<input semantic=”VERTEX” source=”#verts” offset=”0″/>
<input semantic=”NORMAL” source=”#normal” offset=”1″/>
<p>
0 0 1 3 2 1
0 0 2 1 3 2
</p>
</triangles>
</mesh>

Comment » | Allgemein

IPhone 4.0 Patente

13 July 2009 — 1:40 PM

Sorry this post is currently unavailable in English

Noch nicht lange ist das iPhone 3Gs auf dem Markt schon wird über Neuerungen nachgedacht.

Das iPhone ist ja schon seit Erscheinen Vorreiter der neuesten Funktionen. Und die ersten neuen Patente für das iPhone 4 sind bereits angemeldet. Diesmal geht es um Haptik, Fingererkennung und einen RFID-Leser.
Bei der haptischen Rückmeldung geht es darum, dass das iPhone auch taktil erkundet wird. Der Screen wird an verschiedenen Stellen vibrieren was eine fast schon blinde Bedienung verspricht.
Die Fingererkennung dient, wie es erst den Anschein hat, weniger der Sicherheit, sondern eher nur um die Erkennung der Nutzer-Fingers. Dadurch wird versprochen, dass einzelne Finger unterschiedliche Funktionen nutzen. So erkennt das Gerät, dass z.B. der Zeigefinger für Play und Stopp bedient, der Mittelfinger fürs Vorspulen und der Ringfinger fürs Zurückspulen.

finger_recognition1
RFID-Tags werden mit Informationen zu Preis oder Art des jeweiligen Artikels in Waren gefüttert. Da RFID immer mehr im Alltag eingesetzt werden, könnte diese Funktion eine sehr gute Ergänzung darstellen.

Weitere neue Patente sollen die “Eventbasierte Modi“ sein. Sie sorgt dafür, dass das iPhone sich beim bedienen speziellen Events anpasst. Seien es Wettereinflüsse, Kalendereinträge, Wochentage, bestimmte News oder einfach laute Umgebungspegel. Z.B. wenn man in einer Theatervorstellung sitzt, sollte das Handy nicht klingeln. Im Prinzip erkennt das iPhone diese Situation und wählt das richtige Profil.

iphone-40-event-based-modes
Eine andere neue Möglichkeit wäre die „Userprogrammierte Kommunikationen”. Sie soll automatisch Glückwünsche zur richtigen Zeit an die Person die man eingestellt hat versenden (z.B. Geburtstage).

Ein weiteres Patent liegt auf dem “Systems and methods for intelligent and customizable communications between devices”. Mit ihm kann man bestimmte Leute wissen lassen wann man von Terminen wieder da und erreichbar ist.

Aber wie auch immer das zukünftige iPhone auch aussehen mag: Bis Apple mit allen Neuerungen betriebsbereit ist, dürfte es noch ein Weilchen dauern.

Mehr Informationen:

Next in your iPhone OS: live object identification, face recognition, text filtering, smarter messaging, voice alteration

iPhone 4.0 OS: event based modes, intellingent and scheduled communications

1 comment » | News

Mecca Application for iPhone 3Gs

29 June 2009 — 10:36 PM

Update

After i period of time, Apple finally approved our new app called iMecca. iMecca is an Islamic App that shows you the correct direction of Mecca, Kaaba.
This technology works only with iPhone 3Gs. Because of integrated compass and GPS function. Check it out at the App Store.
Link to App Store

imecca_icon_5121

We develop an application for iPhone 3gs. It calls „iMecca“. This App show you the right direction of Mecca. This technical works only with iPhone 3Gs. This Application is in Review from Apple.

3 comments » | Products

Mac crashed during coding on iPhone

12 June 2009 — 6:52 PM

At the moment we work on our next production drop. During the coding one of our MACs crashed. It got a grey screen. It was not blue like at Windows. But the result was the same :-)

grey / blue screen on mac

grey / blue screen on mac


blue / gray screen on mac

blue / gray screen on mac

Comment » | Allgemein

Guerilla-Marketing not accepted in Germany

10 June 2009 — 9:02 PM

Guerilla-Marketing is very popular in America. Our Guerilla-Campaign with the slogan “Your Idea in our Vein” on the “marketing+services” exhibition at Frankfurt ended bad for us.

dsc00106

2 comments » | Allgemein

Boring Company Presentations

4 June 2009 — 10:04 PM

(Version 0.8)

The goal of the presentation is to show yourself at one’s best. You try to communicate the experience of the team. Every nice project explains your skills.

The traditional way is a Powerpoint (Ppt) full of text with nice blend effects and a showreal. The Ppt has a lot of numerals and facts. And after the showreal everyone forgot the information and thing only about the video :-P

So we try to put all the information into an comic. This comic will content all main facts and some videos. And here is the preview of the first screen:

forblogpost

Comment » | Project management

Propertys for accessors

3 June 2009 — 10:32 AM

Encapsulation is one of the most important concepts in object-oriented programming. To ensure Encapsulation, setter and getter methods (accessors) have to be written for every instance-variable. This could be very time-consuming and boring, because the most accessors are quite the same, except the instance-variable name. Therefore the decision is obvious to let the compiler generate accessors for us. This proceeding is called synthesize and was implemented with Objective-C 2.0 with so called properties.

Propertys generel syntax:

header
@property (attribute1, attribute2, attribute3, attribute4) datatype variablename;

implementation
@syntesize variablename;

If the instance-variable is synthesized, the access is:

standard-syntax
[Obj setVariablename:value]
printf(„The Value: %i“, [Obj variablename]);

point-syntax
Obj.variablename = value;
printf(„The Value:  %i“, Obj.variablename);

Annotation:
The Dot-Syntax exists without dependence on properties. Its possible to write accessors without properties and access them via Dot-Syntax.

The 4 attributes define following:
-access-type (readonly, readwrite)
-setter-semantik (assign, retain, copy)
-atomicity
-setter- and getter-name

Access-type

In case of readonly only the getter is synthesized. With readwrite both, getter and setter, are synthesized.

Setter-semantic

Assign

Assign is the standard setter-semantic. If you leave the setter-sematic attribute empty, the compiler choose automatically the assign semantic.Assign is the simplest setter-semantic. The new value is simply assigned to the instance-variable, nothing else. The reference-counter is not increased and thereby there is no need to decrease an older increasement. The consequence is, that the receiver-class isnt an object-owner. If the sender-class decrease the reference-counter, the object will be deleted and the receiver-class no longer has access to it. Offcourse this could happen inversely, too. Because of this, propertys with assign-semantic shouldnt be released in the dealloc-method (because its never been retained).

Example (compiler-generated code)
-(void)setVariablenname:(id)senderValue
{
 instanceValue = senderValue;
}

assign

Retain

Retain solves the problem of the assign-semantik. First the instance-variable is released, because it maybe points already to an other object. Then the new value is assigned to the instance-variable. In the last step the instance-variable is retained. This means that the receiver-class is now an object-owner. The sender-class is now free to release the object and it still stays alive and accessible to the receiver-class. As the retain-semantic retains the instance-variable, it has to be released in the dealloc-method. Both classes (receiver and sender) point to the same object. If one of the classes change the object it is also changed to the other class.

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

retain

Copy

Copy allows a class to be the only owner of an object. The submitted object is first copied and then assigned to the instace-variable. The advantage is the independance of the object. If the sender-class changes the object, it has no consequences to the copied object from the receiver-class.

Example (compiler-generated code)
-(void)setVariablenname:(id)senderValue
{
if(instanceValue != senderValue)
  {
   [instanceValue release];
   instanceValue = [senderValue copy];
}
}

copy

Atomicity

Atomicity assure safe access of multiple threads. Only one thread is allowed to access the accessors at the same time.To avoid this the attribute „nonatomic“ has to be named. More at friday.com

Setter- and getter-names

As described above the standard names are „setVariablename:“ (setter) and „variablename (getter). This can be changed. As example, in case of boolean-variables, its nice to have a getter like „isInitial“. To manage this the attribute „getter = isInitial“ have to be named in the property definition. Thereby the boolean-variable can be accessed like this:

[Object isInitial];
Object.isInitial;

If the access-type is „readwrite“,  its also possible to change the standardame for the setter-method with the attribute „setter = otherName“.

Source
developer.apple.com

3 comments » | ObjC

I am working on my tutorials

2 June 2009 — 6:24 PM

Yesterday I released a tutorial about V-Ray RT but it doesn’t be like I wont. The logical flow of the text doesn’t make a sense :-D The german Version was updated fromV0.8 to   V0.95.  I started to refine it.

Comment » | statement

Ray tracing unleashed “V-ray realtime”

1 June 2009 — 1:36 AM

(version 0.95)

V-ray is one of the best render engines on the market with leading global illumination algorithm.

The workflow is all the time the same. First of all you need to adjust your geometry. You import it and made it clean. And than you started to adjust your materials and lights. In between of adjusting you made a lot of test renderings. To setup a nice scene takes about few days :-(

Now, this workflow is not uptodate with v-ray realtime! The test renderings will be made at real time . Every setting from light, materials or geometry will be updated at realtime. A beginner user save about 60 - 80 procent of time.

3 minutes rendering with v-ray realtime:

vray_realtime_3_min1

20 minutes low res rendering with v-ray

vray_rendering_20_min

Tutorial.

For this tutorial you must be confirm with 3ds max rendering. Some v-ray skills are welcome.

I used a simple scene with some v-ray lights, an object, and of course a v-ray camera.

1  go to the render settings (F10) and switch the render engines.

3ds_max_assign_render_vray_realtime

2 start the activeshade

3ds_max_use_activeshade

(One window will be appear. It will take some seconds to see the scene. The network rendering will take some seconds more. After the starting it’s updating very fast :-)

3ds_max_ui_vray_realtime

Now you can work on your scene and everything will be updated in the activeshade window.

Settings

vray_realtime_render_settings

Trace depth: maximal bounce for reflection and refraction.

GI depth: bounces of indirect illumination

Ray bundle size: the numbers of rays on which the renderer will work

Rays per pixel: this is the sampling / antialising value for each render path per pixel

more information for the settings here.

Tips:

  • The performance of this software is awesome, but try to work with rational resolution.
  • Use the vray camera because it makes more sense at the whole workflow.
  • Don’t wory about your viewport performance. Scenes with more than one million polys works fine.
  • Refracted/ transparent materials needs more trace depth.
  • The network rendering is faster with lower Ray bundle size value.
  • Trace depth and GI depth limit the render time.

special thx to: weltenbauer

2 comments » | 3d Tutorials

Back to top