일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Mathf.Clamp
- ML-Agents
- 유니티 리소스매니저
- c++
- 깊이 우선 탐색
- unity
- 유니티 ResourceManager
- InputManager
- LFS
- 유니티 InputManager
- git-lfs
- 유니티 시야 가림
- 소스코드 줄번호
- LayerMask
- 오브젝트 풀링
- Raycast
- Quaternion.Euler
- 유니티 Collision
- 너비 우선 탐색
- LookRotation
- 이진트리
- 유니티
- 유니티 Rotate
- c++ 문자열 자르기
- 알고스팟
- 코드블럭 테마
- 유니티 머신러닝
- eulerAngles
- 유니티 Vector3
- 유니티 오브젝트 풀링
- Today
- Total
무민은귀여워
0710 과제 본문
1. Gamma에 대해 조사해오세요.
우선 Gamma Correction 의 개념이 도입되는 첫번째 이유는 "모든 모니터들은 실제 모니터로 보내지는 영상 정보보다 어둡게 보여준다"는 데에서 출발합니다.
때문에 모니터로 보내는 영상의 값을 좀 더 높게 보내면 원래 보여주고자 하는 영상을 보여줄수 있습니다. 예를 들어, 0.8, 0.8, 0.8 을 모니터에 보여주려고 하면 눈으로 느껴지는 것은 0.5, 0.5, 0.5 가 된다는 것입니다.
계산 공식이 여러가지로 많이 있는데 일반적으로 다음과 같은 공식을 사용합니다.
(보여주고자 하는 값) ^ (1.0/2.2)
여기에서 2.2 라는 값을 흔히 Gamma 값 이라고 합니다. Gamma 값은 2.2 이 가장 근접한 값으로 알려져있는데, 그냥 2.0 을 사용하는 것이 연산 속도가 빠른 관계로 2.0 을 사용하는 경우도 많습니다.
sRGB 의 상대되는 용어는 Linear RGB 이고, Gamma Encoded 의 상대되는 용어는 Gamma Decoded 입니다. 그리고 Linear RGB 공간에 있는 이미지를 sRGB 공간으로 변환하는 과정을 Gamma 라고 부르기도 하고, 그 상대되는 과정을 De-Gamma 라고 부르기도 합니다.
Gamma Correction 을 어설프게 적용해서 어딘가 핀트가 맞지 않게 되면 Banding 현상이 발생하게 됩니다. 특히 어두운 색상들에 나타나게 되는데, 꼭 24bit 이미지가 아니라 16bit 색상을 사용하고 있는 것 처럼 계단이 발생하게 되는 것입니다.
http://egloos.zum.com/wrice/v/5388456
2. 설계도를 만들어봅시다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
|
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
class Car
{
private:
int carId; // 차 고유 아이디
string sort; // 차 종
int doorNum; // 차문 갯수
string roof; // 천장 유형 (high, low, normal)
public:
Car(int id)
{
carId = id;
}
void setCarId(int _carId)
{
carId = _carId;
}
int getCarId()
{
return carId;
}
void setDoorNum(int _doorNum)
{
doorNum = _doorNum;
}
int getDoorNum()
{
return doorNum;
}
void setSort(string _sort)
{
sort = _sort;
}
string getSort()
{
return sort;
}
void setRoof(string _roof)
{
roof = _roof;
}
string getRoof()
{
return roof;
}
virtual void Run()
{
cout << "차가 달립니다." << endl;
}
virtual void Stop()
{
cout << "차가 멈춥니다." << endl;
}
};
// 세단 : 문이 4개인 일반적인 자동차
class Sedan : public Car
{
private:
public:
Sedan(int id) : Car(id)
{
this->setDoorNum(4);
this->setSort("세단");
this->setRoof("normal");
}
void Run()
{
cout << this->getSort() << " 차가 달립니다.s" << endl;
}
virtual void Stop()
{
cout << this->getSort() << " 차가 멈춥니다.s" << endl;
}
};
// 쿠페 : 문이 2개이고 천장이 낮음
class Coupe : public Car
{
private:
public:
Coupe(int id) : Car(id)
{
this->setDoorNum(2);
this->setSort("쿠페");
this->setRoof("low");
}
void Run()
{
cout << this->getSort() << " 차가 달립니다.c" << endl;
}
virtual void Stop()
{
cout << this->getSort() << " 차가 멈춥니다.c" << endl;
}
};
class Factory
{
private:
int factoryId; // 공장 고유 아이디
vector<Car*> cars; // 소유 차
public:
Factory()
{
factoryId = 0;
}
void makeCar(int id, string sort)
{
if (sort == "세단")
{
Car* c = new Sedan(id);
cars.push_back(c);
}
else if (sort == "쿠페")
{
Car* c = new Coupe(id);
cars.push_back(c);
}
else
{
Car* c = new Car(id);
cars.push_back(c);
}
}
Car& getCar(int idx)
{
return *cars.at(idx);
}
vector<Car*> getCars()
{
return cars;
}
void printAll()
{
cout << factoryId << "번 공장은 자동차를 " << cars.size() << "개 가지고 있습니다." << endl;
for (int i = 0; i < cars.size(); i++)
{
cout << "car id : " << cars.at(i)->getCarId() << "\t sort : " << cars.at(i)->getSort() << "\t roof : " << cars.at(i)->getRoof() << "\t doornum : " << cars.at(i)->getDoorNum() << endl;
}
for (int i = 0; i < cars.size(); i++)
{
cars.at(i)->Run();
}
}
};
int main()
{
Factory f;
f.makeCar(1111, "세단");
f.makeCar(2222, "쿠페");
f.printAll();
f.getCar(0).Run();
f.getCar(1).Stop();
Sedan* c1 = (Sedan*)& f.getCar(0);
c1->Run();
f.getCars().at(0)->Run();
return 0;
}
|
cs |
'IT > 기타' 카테고리의 다른 글
메모) CFileFind - 파일 검색 (0) | 2019.07.17 |
---|---|
반사 벡터 ( reflection vector ) (0) | 2019.07.16 |
*.ini 파일 읽고 쓰기 (0) | 2019.07.10 |
0709 과제 (0) | 2019.07.09 |
0703 과제 (0) | 2019.07.03 |