Errata

Leider hat sich im CFXTextureManager (und allen Beispielen welche Texturen nutzen) ein kleiner Speicherfehler eingeschlichen. In der Methode
NSBitmapImageRep *LoadImage(NSString *path, int shouldFlipVertical)
wird das Objekt
bitmapimagerep
nicht wieder gelöscht, hier fehlt ein
autorelease
Richtig muss die Methode so aussehen:
NSBitmapImageRep *LoadImage(NSString *path, int shouldFlipVertical)
{
	NSBitmapImageRep *bitmapimagerep;
	NSImage *image;
	image = [[[NSImage alloc] initWithContentsOfFile: path] autorelease];
	bitmapimagerep = [[NSBitmapImageRep alloc] initWithData:[image TIFFRepresentation]];
	
	if (shouldFlipVertical)
	{
		int bytesPerRow, lowRow, highRow;
		unsigned char *pixelData, *swapRow;
		
		bytesPerRow = [bitmapimagerep bytesPerRow];
		pixelData = [bitmapimagerep bitmapData];
		
		swapRow = (unsigned char *)malloc(bytesPerRow);
		for (lowRow = 0, highRow = [bitmapimagerep pixelsHigh]-1; lowRow < highRow; lowRow++, highRow--)
		{
			memcpy(swapRow, &pixelData[lowRow*bytesPerRow], bytesPerRow);
			memcpy(&pixelData[lowRow*bytesPerRow], &pixelData[highRow*bytesPerRow], bytesPerRow);
			memcpy(&pixelData[highRow*bytesPerRow], swapRow, bytesPerRow);
		}
		free(swapRow);
	}
	
	return [bitmapimagerep autorelease];
}

Vielen Dank an Heiko Kautzor für den Hinweis.


Zu Kapitel 12 fehlte das Beispiel Shader_02.zip.

Im Beispiel Vertex Light 02 ist im Vertex-Shader ein kleiner Fehler.
Hier wurde vergessen den Wert für "Specular" zu initialisieren.
Richtig muss es so aussehen
.
.
.
// Ambient Wert berechnen
		ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
		ambient+= gl_LightModel.ambient * gl_FrontMaterial.ambient;
		
		specular = vec4(0.0, 0.0, 0.0, 0.0);
		// Wenn der Winkel zwischen Licht und Normale groesser Null, dann Glanzanteil berechnen
		if (NdotL > 0.0) 
		{
			NdotHV = max(dot(normal, normalize(gl_LightSource[0].halfVector.xyz)),0.0);
			specular = gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess);
			
		}
	
		// finale Farbe
		gl_FrontColor = NdotL * diffuse + ambient + specular;
		
		// Vertices trannsformieren
		gl_Position = ftransform();


Vielen Dank an Romeo Giezendanner.