Open fing9 opened 7 months ago
주변광에 대해 번쩍이는 아이디어가 떠올랐습니다. 프로그래머는 코드로 말합니다.
typedef struct s_ambient
{
test a;
} t_ambient;
이거 물체의 반사율도 있어야 할까요? 과제 요구사항만 따지면 필요 없을 거 같은데
이거 물체의 반사율도 있어야 할까요? 과제 요구사항만 따지면 필요 없을 거 같은데
제 생각에는 그부분은 만약에 필요하면 Phong lighting 구현할 때 추가하면 될 것 같아서 일단은 빼고 구조체 만들어도 될 것 같습니다.
일단 물체들은 추가로 더 필요한건 생각 안나는데 일단 기본대로 할까요? 이거 외에 추가적으로 필요해지면 그 때 넣어도 될 거 같은데
앰비언트 조명: A 0.2 255,255,255 식별자: A 앰비언트 조명 비율 [0.0,1.0] 범위: 0.2 R,G,B 색상 [0-255] 범위: 255, 255, 255
typedef struct s_ambient
{
t_color3 color; // 조명색 (RGB)
double ratio; // 조명빛의 세기 비율 ([0, 1]범위의 값)
} t_ambient;
위와같이 주변광은 넣으면 될 것 같습니다. 그런데 주변광이 여러개 있을 수 있으니 secen 구조체에서 주변광을 여러개 가지고 있어야할 것 같은데 이거는 조금 더 생각해봐야지 알 것 같습니다.
일단 물체들은 추가로 더 필요한건 생각 안나는데 일단 기본대로 할까요? 이거 외에 추가적으로 필요해지면 그 때 넣어도 될 거 같은데
튜토리얼 참고해서 필요할만한거 뽑으셔도 되고 말씀하신대로 기본대로 해도 될 것 같습니다.
카메라: C -50.0,0,20 0,0,1 70
식별자: C 시점의 x,y,z 좌표: -50.0,0,20 3차원 정규화 방향 벡터. 각 x,y,z 축에 대해 [-1,1] 범위: 0.0,0.0,1.0 FOV: 수평 시야각 (도) [0,180] 범위: 70
typedef struct s_camera
{
t_point3 origin; // 카메라의 좌표(카메라의 원점)
t_vec3 ov; // orientation vector (카메라가 바라보고 있는 방향을 나타내는 단위벡터)
double fov; // Field of view (시야각)
} t_camera;
흠 이 구조체는 좀 더 정보가 들어가야할 듯 한데 아직 좀 더 써보겠슴다
원기둥: cy 50.0,0.0,20.6 0.0,0.0,1.0 14.2 21.42 10,0,255 식별자: cy 원기둥 중심의 x,y,z 좌표: 50.0,0.0,20.6 원기둥의 축의 3차원 정규화 벡터. 각 x,y,z 축에 대해 [-1,1] 범위: 0.0,0.0,1.0 원기둥의 지름: 14.2 원기둥의 높이: 21.42 R,G,B 색상 [0,255] 범위: 10, 0, 255
typedef struct s_cylinder
{
t_point3 center; // 원기둥의 중심 좌표
t_vec3 axis; // 원기둥의 방향 벡터 [-1,1]
double diameter; // 반지름
double height; // 높이
t_color3 color; // RGB 색상 [0-1]
} t_cylinder;
기본에 충실했습니다.
RGB속성 t_color로 하나요?
평면: pl 0.0,0.0,-10.0 0.0,1.0,0.0 0,0,225 식별자: pl 평면 상의 한 점의 x,y,z 좌표: 0.0,0.0,-10.0 3차원 정규화 법선 벡터. 각 x,y,z 축에 대해 [-1,1] 범위: 0.0,1.0,0.0 R,G,B 색상 [0-255] 범위: 0,0,225
typedef struct s_plane
{
t_point3 center; // 평면의 중심 좌표
t_vec3 axis; // 평면의 방향 벡터
t_color3 color; // RGB 색상 [0-1]
} t_plane;
구: sp 0.0,0.0,20.6 12.6 10,0,255 식별자: sp 구의 중심의 x,y,z 좌표: 0.0,0.0,20.6 구의 지름: 12.6 R,G,B 색상 [0-255] 범위: 10, 0, 255
typedef struct s_sphere
{
t_point3 center; // 구의 중심 좌표
double diameter; // 구의 반지름
t_color3 color; // RGB 색상 [0-1]
} t_sphere;
저 일단 치킨와서 치킨 좀 먹을게요
치킨 맛나게 드세요 저도 조금있다가 리뷰하겠습니다.
그 t_rgb
는 RGB로 출력시에만 쓰는거고 내부에서는 색을 0~1사이의 값으로 다룰거라 t_color3
구조체로 써주시면 됩니다.
라이트: L -40.0,50.0,0.0 0.6 10,0,255 식별자: L 광원의 x,y,z 좌표: -40.0,50.0,0.0 광원 밝기 비율 [0.0,1.0] 범위: 0.6
typedef struct s_light
{
t_point3 point; // 빛의 좌표
double ratio; // 빛의 밝기 비율 [0.0, 1.0]
} t_light;
현재 장면에 대한 전체 데이터를 들고있고 보관하는 scene 구조체입니다.
typedef struct s_scene
{
int width;
int height;
double aspect_ratio; // 종횡비 (스크린 가로 길이 / 세로 길이)
t_ambient ambient; // 주변광
t_camera camera; // 카메라
t_list *light_list; // 라이트 리스트
t_list *object_list; // 오브젝트 리스트
} t_scene;
상세
현재 Parsing과 RayTracing으로 나눠서 코드를 짜고 있습니다. 그 과정에서 6개의 오브젝트에 대한 구조체를 결정해야 분업이 가능한 상황에 처했습니다. 주변광, 카메라, 빛, 구, 평면, 원기둥에 대한 구조체를 이 이슈에서 토론으로 정하도록 하겠습니다.
오브젝트
오브젝트 상세
(확정된다면 여기에 적어주세요)