OSDN Git Service

apply formatter
[qtgeoviewer/QtGeoViewer.git] / Lib / C2 / graph / Material.h
1 #pragma once
2
3 #include "Color.h"
4
5
6 namespace lgr
7 {
8
9
10 //! Phongのマテリアル
11 class Material
12 {
13 public:
14         Material(void) : m_Shininess( 0.0f ) {} 
15         Material
16                 (
17                         float ambient_r  , float ambient_g  , float ambient_b  , float ambient_a  ,
18                         float diffuse_r  , float diffuse_g  , float diffuse_b  , float diffuse_a  ,
19                         float specular_r , float specular_g , float specular_b , float specular_a ,
20                         float emission_r , float emission_g , float emission_b , float emission_a ,
21                         float shininess
22                 )
23                 : m_Ambient ( ambient_r  , ambient_g  , ambient_b  , ambient_a  ) ,
24                   m_Diffuse ( diffuse_r  , diffuse_g  , diffuse_b  , diffuse_a  ) ,
25                   m_Specular( specular_r , specular_g , specular_b , specular_a ) ,
26                   m_Emission( emission_r , emission_g , emission_b , emission_a ) ,
27                   m_Shininess( shininess )
28         {}
29         
30         Material
31                 (
32                         const float* i_ambient ,
33                         const float* i_diffuse ,
34                         const float* i_specular ,
35                         const float* i_emission ,
36                         float i_shininess 
37                 )
38                 : m_Ambient ( i_ambient[0]  , i_ambient[1]  , i_ambient[2]  , i_ambient[3]  ) ,
39                   m_Diffuse ( i_diffuse[0]  , i_diffuse[1]  , i_diffuse[2]  , i_diffuse[3]  ) ,
40                   m_Specular( i_specular[0] , i_specular[1] , i_specular[2] , i_specular[3] ) ,
41                   m_Emission( i_emission[0] , i_emission[1] , i_emission[2] , i_emission[3] ) ,
42                   m_Shininess( i_shininess )
43         {}
44
45         Material
46                 (
47                         float ambient_r  , float ambient_g  , float ambient_b  , float ambient_a  ,
48                         float diffuse_r  , float diffuse_g  , float diffuse_b  , float diffuse_a  ,
49                         float specular_r , float specular_g , float specular_b , float specular_a ,
50                         float shininess
51                 )
52                 : m_Ambient ( ambient_r  , ambient_g  , ambient_b  , ambient_a  ) ,
53                   m_Diffuse ( diffuse_r  , diffuse_g  , diffuse_b  , diffuse_a  ) ,
54                   m_Specular( specular_r , specular_g , specular_b , specular_a ) ,
55                   m_Emission( 0.0f       , 0.0f       , 0.0f       , 1.0f       ) ,
56                   m_Shininess( shininess )
57         {}
58         
59         Material
60                 (
61                         const float* i_ambient ,
62                         const float* i_diffuse ,
63                         const float* i_specular ,
64                         float i_shininess
65                 )
66                 : m_Ambient ( i_ambient[0]  , i_ambient[1]  , i_ambient[2]  , i_ambient[3]  ) ,
67                   m_Diffuse ( i_diffuse[0]  , i_diffuse[1]  , i_diffuse[2]  , i_diffuse[3]  ) ,
68                   m_Specular( i_specular[0] , i_specular[1] , i_specular[2] , i_specular[3] ) ,
69                   m_Emission( 0.0f          , 0.0f          , 0.0f          , 1.0f          ) ,
70                   m_Shininess( i_shininess )
71         {}
72
73         Material(const Material& m) :
74                 m_Ambient   ( m.m_Ambient   ),
75                 m_Diffuse   ( m.m_Diffuse   ),
76                 m_Specular  ( m.m_Specular  ),
77                 m_Emission  ( m.m_Emission  ),
78                 m_Shininess ( m.m_Shininess )
79         {}
80
81         //! 全要素のα成分に同じ値を設定する
82         void SetAlphaAll( float i_alpha )
83         {
84                 m_Ambient  .a() = i_alpha;
85                 m_Diffuse  .a() = i_alpha;
86                 m_Specular .a() = i_alpha;
87                 m_Emission .a() = i_alpha;
88         }
89
90
91 public:
92         color4f m_Ambient;
93         color4f m_Diffuse;
94         color4f m_Specular;
95         color4f m_Emission;
96         float   m_Shininess;
97 };
98
99
100 // ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
101 //! 両面マテリアルクラス
102 class DoublesideMaterial
103 {
104 public:
105         DoublesideMaterial(void) {}
106
107         DoublesideMaterial( const Material& i_material )
108                 : m_FrontMaterial( i_material )
109                 , m_BackMaterial( i_material )
110         {}
111
112         DoublesideMaterial( const Material& i_front_mat , const Material& i_back_mat )
113                 : m_FrontMaterial( i_front_mat )
114                 , m_BackMaterial( i_back_mat )
115         {}
116
117
118 public:
119         lgr::Material m_FrontMaterial;
120         lgr::Material m_BackMaterial;
121 };
122
123
124 }