Oolite
Loading...
Searching...
No Matches
OOSkyDrawable(OOPrivate) Category Reference
+ Inheritance diagram for OOSkyDrawable(OOPrivate):
+ Collaboration diagram for OOSkyDrawable(OOPrivate):

Instance Methods

(void) - setUpStarsWithColor1:color2:
 
(void) - setUpNebulaeWithColor1:color2:clusterFactor:nebulaHueFix:alpha:scale:
 
(void) - loadStarTextures
 
(void) - loadNebulaTextures
 
(void) - addQuads:count:
 
(void) - ensureTexturesLoaded
 
(void) - resetGraphicsState [implementation]
 

Detailed Description

Definition at line 110 of file OOSkyDrawable.m.

Method Documentation

◆ addQuads:count:

- (void) addQuads: (OOSkyQuadDesc *)  quads
count: (unsigned)  count 

Definition at line 83 of file OOSkyDrawable.m.

441 :(OOSkyQuadDesc *)quads count:(unsigned)count
442{
443 if (_quadSets == nil) _quadSets = [[NSMutableArray alloc] init];
444
445 [OOSkyQuadSet addQuads:quads count:count toArray:_quadSets];
446}
unsigned count
return nil
void addQuads:count:toArray:(OOSkyQuadDesc *quads,[count] unsigned count,[toArray] NSMutableArray *ioArray)

◆ ensureTexturesLoaded

- (void) ensureTexturesLoaded

Definition at line 83 of file OOSkyDrawable.m.

490{
491 [sStarTextures ensureTexturesLoaded];
492 [sNebulaTextures ensureTexturesLoaded];
493}

◆ loadNebulaTextures

- (void) loadNebulaTextures

Definition at line 83 of file OOSkyDrawable.m.

470{
471 if (sNebulaTextures == nil)
472 {
474 initWithPListName:@"nebulatextures.plist"
475 options:kOOTextureDefaultOptions | kOOTextureAlphaMask
476 anisotropy:0.0f
477 lodBias:0.0f];
478 if (sNebulaTextures == nil)
479 {
480 [NSException raise:OOLITE_EXCEPTION_DATA_NOT_FOUND format:@"No nebula textures could be loaded."];
481 }
482 }
483
484 [sNebulaTextures setSeed:RANROTGetFullSeed()];
485
486}
static OOProbabilisticTextureManager * sNebulaTextures

◆ loadStarTextures

- (void) loadStarTextures

Definition at line 83 of file OOSkyDrawable.m.

450{
451 if (sStarTextures == nil)
452 {
454 initWithPListName:@"startextures.plist"
455 options:kOOTextureMinFilterMipMap | kOOTextureMagFilterLinear | kOOTextureAlphaMask
456 anisotropy:0.0f
457 lodBias:-0.0f];
458 if (sStarTextures == nil)
459 {
460 [NSException raise:OOLITE_EXCEPTION_DATA_NOT_FOUND format:@"No star textures could be loaded."];
461 }
462 }
463
464 [sStarTextures setSeed:RANROTGetFullSeed()];
465
466}
static OOProbabilisticTextureManager * sStarTextures

◆ resetGraphicsState

- (void) resetGraphicsState
implementation

Definition at line 83 of file OOSkyDrawable.m.

497{
499
500 if (_displayListName != 0)
501 {
502 glDeleteLists(_displayListName, 1);
503 _displayListName = 0;
504 }
505}
#define OO_ENTER_OPENGL()

◆ setUpNebulaeWithColor1:color2:clusterFactor:nebulaHueFix:alpha:scale:

- (void) setUpNebulaeWithColor1: (OOColor *)  color1
color2: (OOColor *)  color2
clusterFactor: (float)  nebulaClusterFactor
nebulaHueFix: (BOOL)  nebulaHueFix
alpha: (float)  nebulaAlpha
scale: (float)  nebulaScale 

Definition at line 83 of file OOSkyDrawable.m.

349 :(OOColor *)color1
350 color2:(OOColor *)color2
351 clusterFactor:(float)nebulaClusterFactor
352 nebulaHueFix:(BOOL)nebulaHueFix
353 alpha:(float)nebulaAlpha
354 scale:(float)nebulaScale
355{
356 OOSkyQuadDesc *quads = NULL, *currQuad = NULL;
357 unsigned i, actualCount = 0;
358 OOColor *color;
359 Quaternion q;
360 Vector vi, vj, vk;
361 double size, r2;
362 Vector middle, offset;
363 int r1;
364
365 [self loadNebulaTextures];
366
367 quads = malloc(sizeof *quads * _nebulaCount);
368 if (quads == NULL) return;
369
370 currQuad = quads;
371 for (i = 0; i < _nebulaCount; ++i)
372 {
373 color = SaturatedColorInRange(color1, color2, nebulaHueFix);
374
375 // Select a direction and rotation.
376 q = OORandomQuaternion();
377
378 // Create a cluster of nebula quads.
379 while ((i < _nebulaCount) && (randf() < nebulaClusterFactor))
380 {
381 // Select size.
382 r1 = 1 + (ranrot_rand() & 15);
383 size = nebulaScale * r1 * SKY_ELEMENT_SCALE_FACTOR;
384
385 // Calculate centre position and offset to first corner.
386 basis_vectors_from_quaternion(q, &vi, &vj, &vk);
387
388 // Select colour and texture. Smaller nebula quads are dimmer.
389#if DEBUG_COLORS
390 currQuad->color = DebugColor(vk);
391#else
392 currQuad->color = [color colorWithBrightnessFactor:nebulaAlpha * (0.5f + (float)r1 / 32.0f)];
393#endif
394 currQuad->texture = [sNebulaTextures selectTexture]; // Not retained, since sStarTextures is never released.
395
396 middle = vector_multiply_scalar(vk, BILLBOARD_DEPTH);
397 offset = vector_multiply_scalar(vector_add(vi, vj), 0.5f * size);
398
399 // Rotate vi and vj by a random angle
400 r2 = randf() * M_PI * 2.0;
404
405 // Scale the "side" vectors.
406 vj = vector_multiply_scalar(vj, size);
407 vi = vector_multiply_scalar(vi, size);
408
409 // Set up corners.
410 currQuad->corners[0] = vector_subtract(middle, offset);
411 currQuad->corners[1] = vector_add(currQuad->corners[0], vj);
412 currQuad->corners[2] = vector_add(currQuad->corners[1], vi);
413 currQuad->corners[3] = vector_add(currQuad->corners[0], vi);
414
415 // Shuffle direction quat around a bit to spread the cluster out.
417 q.x += size * (randf() - 0.5);
418 q.y += size * (randf() - 0.5);
419 q.z += size * (randf() - 0.5);
420 q.w += size * (randf() - 0.5);
421 quaternion_normalize(&q);
422
423 ++i;
424 ++currQuad;
425 ++actualCount;
426 }
427 }
428
429 /* The above code generates less than _nebulaCount quads, because i is
430 incremented once in the outer loop as well as in the inner loop. To
431 keep skies looking the same, we leave the bug in and fill in the
432 actual generated count here.
433 */
434 _nebulaCount = actualCount;
435
436 [self addQuads:quads count:_nebulaCount];
437 free(quads);
438}
#define M_PI
Definition OOMaths.h:73
Vector vector_up_from_quaternion(Quaternion quat)
Vector vector_right_from_quaternion(Quaternion quat)
void basis_vectors_from_quaternion(Quaternion quat, Vector *outRight, Vector *outUp, Vector *outForward)
void quaternion_rotate_about_axis(Quaternion *quat, Vector axis, OOScalar angle)
#define SKY_ELEMENT_SCALE_FACTOR
#define NEBULA_SHUFFLE_FACTOR
static OOColor * SaturatedColorInRange(OOColor *color1, OOColor *color2, BOOL hueFix)
#define BILLBOARD_DEPTH
Definition Universe.h:163
OOColor * colorWithBrightnessFactor:(float factor)
Definition OOColor.m:502
voidpf void uLong size
Definition ioapi.h:134
voidpf uLong offset
Definition ioapi.h:140
float randf(void)
#define ranrot_rand()

◆ setUpStarsWithColor1:color2:

- (void) setUpStarsWithColor1: (OOColor *)  color1
color2: (OOColor *)  color2 

Definition at line 83 of file OOSkyDrawable.m.

297 :(OOColor *)color1 color2:(OOColor *)color2
298{
299 OOSkyQuadDesc *quads = NULL, *currQuad = NULL;
300 unsigned i;
301 Quaternion q;
302 Vector vi, vj, vk;
303 float size;
304 Vector middle, offset;
305
306 [self loadStarTextures];
307
308 quads = malloc(sizeof *quads * _starCount);
309 if (quads == NULL) return;
310
311 currQuad = quads;
312 for (i = 0; i != _starCount; ++i)
313 {
314 // Select a direction and rotation.
315 q = OORandomQuaternion();
316 basis_vectors_from_quaternion(q, &vi, &vj, &vk);
317
318 // Select colour and texture.
319#if DEBUG_COLORS
320 currQuad->color = DebugColor(vk);
321#else
322 currQuad->color = [color1 blendedColorWithFraction:randf() ofColor:color2];
323#endif
324 currQuad->texture = [sStarTextures selectTexture]; // Not retained, since sStarTextures is never released.
325
326 // Select scale; calculate centre position and offset to first corner.
327 size = (1 + (ranrot_rand() % 6)) * SKY_ELEMENT_SCALE_FACTOR;
328 middle = vector_multiply_scalar(vk, BILLBOARD_DEPTH);
329 offset = vector_multiply_scalar(vector_add(vi, vj), 0.5f * size);
330
331 // Scale the "side" vectors.
332 Vector vj2 = vector_multiply_scalar(vj, size);
333 Vector vi2 = vector_multiply_scalar(vi, size);
334
335 // Set up corners.
336 currQuad->corners[0] = vector_subtract(middle, offset);
337 currQuad->corners[1] = vector_add(currQuad->corners[0], vj2);
338 currQuad->corners[2] = vector_add(currQuad->corners[1], vi2);
339 currQuad->corners[3] = vector_add(currQuad->corners[0], vi2);
340
341 ++currQuad;
342 }
343
344 [self addQuads:quads count:_starCount];
345 free(quads);
346}
OOColor * blendedColorWithFraction:ofColor:(float fraction,[ofColor] OOColor *color)
Definition OOColor.m:328

The documentation for this category was generated from the following file: