⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorops.h

📁 java实现的简单的分形树。简单易学!是学习分形知识的很好的例子。其java语法简单
💻 H
字号:
#ifndef __COLOR_OPS_H
#define __COLOR_OPS_H

#include <dingus/math/Vector3.h>

/**
 *  Convert RGB to HSV.
 *  @param rgb RGB color (0..1 range).
 *  @return HSV color (all 0..1 range, including hue).
 */
inline SVector3 gRGB2HSV( SVector3 rgb )
{
	float h, s, v;
	float mn = rgb.x,mx=rgb.x;
	int maxVal=0; 
	if (rgb.y > mx){ mx=rgb.y;maxVal=1;}
	if (rgb.z > mx){ mx=rgb.z;maxVal=2;}
	if (rgb.y < mn) mn=rgb.y; 
	if (rgb.z < mn) mn=rgb.z;  
	
	float  delta = mx - mn; 
	
	v = mx;
	if( mx != 0 )
		s = delta / mx;  
	else {
		s = 0; 
		h = 0; 
		return SVector3( h, s, v );
	}
	if( s==0.0f ) {
		h = 0;
		return SVector3( h, s, v );
	} else {  
		switch( maxVal ) { 
		case 0: h = ( rgb.y - rgb.z ) / delta;break;		  // yel < h < mag 
		case 1: h = 2 + ( rgb.z - rgb.x ) / delta;break;	  // cyan < h < yel 
		case 2: h = 4 + ( rgb.x - rgb.y ) / delta;break;	  // mag < h < cyan 
		} 
	} 
	
	// NOTE: we use 0..1 range, not 0..360
	h *= 1.0f/6.0f; // was: 60
	if( h < 0 ) h += 1.0f; // was: 360

	return SVector3(h,s,v);
};

/**
 *  Convert HSV to RGB.
 *  @param hsv HSV color (all 0..1 range, including hue).
 *  @return RGB color (0..1 range).
 */
inline SVector3 gHSV2RGB( SVector3 hsv )
{
	int i;
	float h = hsv.x, s = hsv.y, v = hsv.z;
	float f, p, q, t, hTemp; 
	float r, g, b;
	
	if( s == 0.0 ) { // s==0? Totally unsaturated = grey so R,G and B all equal value
		r = g = b = v; 
		return SVector3(r,g,b);
	} 
	// NOTE: we use 0..1 range, not 0..360
	hTemp = h*6.0f; // was: /60.0f
	i = (int)floor( hTemp );				 // which sector 
	f = hTemp - i;						// how far through sector 
	p = v * ( 1 - s );
	q = v * ( 1 - s * f );
	t = v * ( 1 - s * ( 1 - f ) );
	
	switch( i ) { 
	case 0:{r = v;g = t;b = p;break;} 
	case 1:{r = q;g = v;b = p;break;} 
	case 2:{r = p;g = v;b = t;break;} 
	case 3:{r = p;g = q;b = v;break;}  
	case 4:{r = t;g = p;b = v;break;} 
	case 5:{r = v;g = p;b = q;break;} 
	}
	return SVector3(r,g,b);
};

static void WINAPI gVolumeFillerRGB2HSV( D3DXVECTOR4* out, const D3DXVECTOR3* uvw, const D3DXVECTOR3* texelSize, void* data )
{
	SVector3 c = gRGB2HSV( *uvw );
	c.x -= fmodf( c.x, 0.05f ) - 0.025f;
	c.y -= fmodf( c.y, 0.19f ) - 0.095f;
	c.z -= fmodf( c.z, 0.08f ) - 0.040f;
	*out = D3DXVECTOR4( c.x, c.y, c.z, 1.0f );
}

static void WINAPI gVolumeFillerHSV2RGB( D3DXVECTOR4* out, const D3DXVECTOR3* uvw, const D3DXVECTOR3* texelSize, void* data )
{
	SVector3 c = gHSV2RGB( *uvw );
	*out = D3DXVECTOR4( c.x, c.y, c.z, 1.0f );
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -