- Frontend Developer.
- Team member at NextUI.
- X(Twitter): @ryo_manba
- LinkedIn: ryo-manba
ryo-manba / minirt Goto Github PK
View Code? Open in Web Editor NEWA Raytracer written in C and MiniLibX.
License: MIT License
A Raytracer written in C and MiniLibX.
License: MIT License
現状、ビューポートの高さは2.0で固定されており、幅は縦横比に応じて変わるようになっています。
ですが、カメラのパラメータFOV
は「水平方向」の視野角になっています。
そのため、ビューポートの幅の方を固定した方が良いような気がしています。
検討をお願いします。
ランバート反射の計算をするのに、光源の強度が必要です。
Lightの引数(座標、RGB、輝度比)から求めることは可能ですか?
// main.c
// ray_color()
while (i < scene->n_objects)
{
if (rt_hit_object(scene->objects[i], r, &recs[i]))
printf("t = %f\n", recs[i].t); // infになっている
}
原因調査中です。
今までライトL
は複数あることを想定していましたが、課題PDFをよく読むとライトも1つっぽいです。
今ライトは複数あることを前提にしていますが、複数対応しているとMandatoryのレビューで落とされる可能性がなくもないと思います。
これについて対応を協議したいです。
色ベクトルt_rgb
は各要素がint
になってますが、できればdouble
に変えたいです。不都合ありますでしょうか?
また、FOVもint
になっていますが、これもdouble
にしたいです。
(というかオブジェクトの数値はすべてdouble
にしたい。)
rtfileの読み込みが正しく動作するかを確認するテスターを作成します。
正常終了とエラーとが交互に起きるっぽい。
なぜこうなる?
bash-3.2$ make -C rd re && make
rm -f -rf rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
rm -f libread.a
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_file.o rd_file.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_error.o rd_error.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene.o rd_scene.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_read.o rd_after_read.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene_destroyer.o rd_scene_destroyer.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector.o rd_vector.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_predicate.o rd_element_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scalar_predicate.o rd_scalar_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector_predicate.o rd_vector_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_double.o rd_double.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_extractor.o rd_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_slot.o rd_element_slot.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_field_extractor.o rd_field_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_attach_attribute.o rd_attach_attribute.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_extraction.o rd_after_extraction.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_debug.o rd_debug.c
ar rcs libread.a rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -Llibft -Lminilibx-linux -Lrd -lmlx -L//usr/X11/include/../lib -lXext -lX11 -lm -lread -lft -o miniRT
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [miniRT] Error 1
bash-3.2$ make -C rd re && make
rm -f -rf rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
rm -f libread.a
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_file.o rd_file.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_error.o rd_error.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene.o rd_scene.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_read.o rd_after_read.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene_destroyer.o rd_scene_destroyer.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector.o rd_vector.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_predicate.o rd_element_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scalar_predicate.o rd_scalar_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector_predicate.o rd_vector_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_double.o rd_double.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_extractor.o rd_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_slot.o rd_element_slot.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_field_extractor.o rd_field_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_attach_attribute.o rd_attach_attribute.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_extraction.o rd_after_extraction.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_debug.o rd_debug.c
ar rcs libread.a rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
mkdir -p ./objs/
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/debug.o srcs/debug.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/main.o srcs/main.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_mlx_utils.o srcs/mr_mlx_utils.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_mlx_hooks.o srcs/mr_mlx_hooks.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_vec3_utils.o srcs/mr_vec3_utils.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_vec3_operator.o srcs/mr_vec3_operator.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_vec3_operator2.o srcs/mr_vec3_operator2.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_vec3_operator_composit.o srcs/mr_vec3_operator_composit.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_reading_imagefile.o srcs/mr_reading_imagefile.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/mr_error.o srcs/mr_error.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_raytracer.o srcs/rt_raytracer.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_color.o srcs/rt_color.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_reflection.o srcs/rt_reflection.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_tangent.o srcs/rt_tangent.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_object_sphere.o srcs/rt_object_sphere.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_object_plane.o srcs/rt_object_plane.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_object_cylinder.o srcs/rt_object_cylinder.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_object_paraboloid.o srcs/rt_object_paraboloid.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_object_cone.o srcs/rt_object_cone.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_hit_util.o srcs/rt_hit_util.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_vector_rotation.o srcs/rt_vector_rotation.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_is_shadow.o srcs/rt_is_shadow.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_texture_plane.o srcs/rt_texture_plane.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_texture_sphere.o srcs/rt_texture_sphere.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_texture_cylinder.o srcs/rt_texture_cylinder.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_texture_paraboloid.o srcs/rt_texture_paraboloid.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_texture_cone.o srcs/rt_texture_cone.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_ambient.o srcs/rt_ambient.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_diffuse.o srcs/rt_diffuse.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_specular.o srcs/rt_specular.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_coord_util.o srcs/rt_coord_util.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_equation.o srcs/rt_equation.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_bumpfunc.o srcs/rt_bumpfunc.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -c -o objs/rt_fmath.o srcs/rt_fmath.c
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g ./objs/debug.o ./objs/main.o ./objs/mr_mlx_utils.o ./objs/mr_mlx_hooks.o ./objs/mr_vec3_utils.o ./objs/mr_vec3_operator.o ./objs/mr_vec3_operator2.o ./objs/mr_vec3_operator_composit.o ./objs/mr_reading_imagefile.o ./objs/mr_error.o ./objs/rt_raytracer.o ./objs/rt_color.o ./objs/rt_reflection.o ./objs/rt_tangent.o ./objs/rt_object_sphere.o ./objs/rt_object_plane.o ./objs/rt_object_cylinder.o ./objs/rt_object_paraboloid.o ./objs/rt_object_cone.o ./objs/rt_hit_util.o ./objs/rt_vector_rotation.o ./objs/rt_is_shadow.o ./objs/rt_texture_plane.o ./objs/rt_texture_sphere.o ./objs/rt_texture_cylinder.o ./objs/rt_texture_paraboloid.o ./objs/rt_texture_cone.o ./objs/rt_ambient.o ./objs/rt_diffuse.o ./objs/rt_specular.o ./objs/rt_coord_util.o ./objs/rt_equation.o ./objs/rt_bumpfunc.o ./objs/rt_fmath.o -Llibft -Lminilibx-linux -Lrd -lmlx -L//usr/X11/include/../lib -lXext -lX11 -lm -lread -lft -o miniRT
bash-3.2$ make -C rd re && make
rm -f -rf rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
rm -f libread.a
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_file.o rd_file.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_error.o rd_error.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene.o rd_scene.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_read.o rd_after_read.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scene_destroyer.o rd_scene_destroyer.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector.o rd_vector.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_predicate.o rd_element_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_scalar_predicate.o rd_scalar_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_vector_predicate.o rd_vector_predicate.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_double.o rd_double.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_extractor.o rd_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_element_slot.o rd_element_slot.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_field_extractor.o rd_field_extractor.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_attach_attribute.o rd_attach_attribute.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_after_extraction.o rd_after_extraction.c
gcc -Wall -Wextra -Werror -g -I/usr/X11/include -I../minilibx-linux -I../includes -I../common -I../libft -c -o rd_debug.o rd_debug.c
ar rcs libread.a rd_file.o rd_error.o rd_scene.o rd_after_read.o rd_scene_destroyer.o rd_vector.o rd_element_predicate.o rd_scalar_predicate.o rd_vector_predicate.o rd_double.o rd_extractor.o rd_element_slot.o rd_field_extractor.o rd_attach_attribute.o rd_after_extraction.o rd_debug.o
gcc -Werror -Wall -Wextra -I/usr/X11/include -Iminilibx-linux -Ilibft -Iincludes -Icommon -Ird -g -Llibft -Lminilibx-linux -Lrd -lmlx -L//usr/X11/include/../lib -lXext -lX11 -lm -lread -lft -o miniRT
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [miniRT] Error 1
bash-3.2$
以上3点です。回答お願いします。
theta, phi
とは何か?これは、それぞれ方位角・仰角と呼ばれる角度です。
半径が分かっている場合、方位角・仰角が分かれば、球面上の位置を特定することができます。
theta = atan2(x, z);
は、X軸を横軸、Z軸を縦軸に取った時の、横軸から測った角度を表します。
atan2
は-πから+πまでの値を取るので、theta
もそうなります。phi = acos(y);
は、Y軸を縦軸に取った時の、縦軸から測った角度を表します。
acos
は0からπまでの値を取るので、phi
もそうなります。※thetaを仰角、phiを方位角とするのが一般的です。
u,v
とは何か?theta, phi
はラジアン単位の角度なので、-πから+πまでの値を取ります。
これを、-1から+1までの値を取るように補正したものがu, v
と考えられます。
u = 1 - (theta / (2 * M_PI) + 0.5)
theta
は-πから+πまでの値を取るので、u
は1から0までの値を取ります。v = 1 - (phi / M_PI)
phi
は0から+πまでの値を取るので、v
は0から1までの値を取ります。y = +1
の時phi = 0
, y = 0
の時 phi = π/2
, y = -1
の時phi = π
となります。v
はそれぞれ1, 1/2, 0
となります。u, v
の「意味」を考えるために、原点(0, 0, 0)
を中心とする半径1の球面を考えます。
この球の「南極」(0, -1, 0)
から「北極」(0, +1, 0)
に向かって、球面上に線を描きます。
これはいわゆる「経線」となります。
この時、パラメータv
は「経線上の長さ」に相当します。南極から出発した直後ではv = 0
,
「赤道」上ではv = 1/2
, 北極についた時点でv = 1
となります。
また、球面上にyを一定とする線を描くと、これは「緯線」に相当します。
パラメータu
は「緯線上の長さ」に相当します。
double sines = sin(m_freq * u) * sin(m_freq * v);
の意味サイン関数sin(x)
は、0 <= x <= π
ならば0以上、π <= x <= 2π
なら0以下の値を取ります。
それ以外の範囲では、たとえば-π <= x <= 0
ならば0以下の値を取る、という風に、
0以下の値、0以上の値、0以下の値・・・・という風にπごとに繰り返します。
そして、掛け算により
という風に変化します。
表にすると、
0以上の値 | 0以下の値 | 0以上の値 | 0以下の値 | |
---|---|---|---|---|
0以上の値 | 0以上の値 | 0以下の値 | 0以上の値 | 0以下の値 |
0以下の値 | 0以下の値 | 0以上の値 | 0以下の値 | 0以上の値 |
0以上の値 | 0以上の値 | 0以下の値 | 0以上の値 | 0以下の値 |
0以下の値 | 0以下の値 | 0以上の値 | 0以下の値 | 0以上の値 |
という風に、0以上と0以下がチェッカーボード状に変化します。
サイン関数を、定数a
を使ってsin(ax)
に書き直すと、値の変化は
0 <= x <= π/a
ならば0以上、π/a <= x <= 2π/a
ならば0以下、となります。
さらにa = πb
とすると、
0 <= x <= 1/b
ならば0以上、1/b <= x <= 2/b
ならば0以下、となります。
よって、例えばa = 4πとすると、
0 <= x <= 1/4
ならば0以上、1/4 <= x <= 1/2
ならば0以下、となります。
つまり、一周当たり4回変化することになります。
double sines = sin(m_freq * u * M_PI) * sin(m_freq * v * M_PI);
if (sines > 0)
{ ... }
else
{ ... }
は、
int sines = (int)(floor(m_freq * u) + floor(m_freq * v));
if (sines % 2 == 0)
{ ... }
else
{ ... }
とほぼ同じになります。
Line 43 in 69559f9
M_PI
で割っているのはなぜでしょう?
Line 72 in 69559f9
sinf
(float返すバージョンのsin)を使ってるのはなぜでしょう?
(sin
で良い気がします)
Line 72 in 69559f9
最後の * sin(m_freq * -10)
はなぜ必要なのでしょうか?
(定数なので別にいらないような)
nm -u
で使用可能関数確認シーン、つまりRTファイルに書かれたオブジェクトの配置を表現する構造体として、次のようなものを提案します:
typedef struct s_element
{
t_element_type etype;
t_vec3 position;
t_vec3 direction;
t_vec3 color;
double ratio;
double radius;
double diameter;
double height;
double fov;
struct s_element *next;
} t_element;
typedef struct s_scene
{
t_element *ambient; // 絶対にNULLにならない
t_element *camera; // 絶対にNULLにならない
size_t n_lights; // 配列の長さ
size_t n_objects; // 配列の長さ
t_element **lights; // ポインタの配列
t_element **objects; // ポインタの配列
} t_scene;
A 0.3 100,100,200
L 0,2000,0 0.8 255,0,0
C 0,0,-2 0,0,+1 90
co 0,0,10 0,0,-1 90 200,200,200
シャドウの判定をしない状態で、上のRTファイルから、次の画像が得られる:
状況を説明しておくと、
この状態では、円錐内にはライトの光は侵入しないはずだが、画像では赤い色がついている。
これは明らかに正しくない。
鏡面反射をカットすると赤色は消えたので、鏡面反射にバグがあると考えられる。
Submit直前に二人でやるチェックリスト。
make norm
make nm_grep
Mandatory
Bonus
##他にあれば追記お願いします!##
./miniRT rtfiles/invalid_rtfiles/no_ambient.rt
==75734==ERROR: AddressSanitizer: heap-use-after-free on address 0x6110000005d0 at pc 0x000106098128 bp 0x7ff7b9e8ae80 sp 0x7ff7b9e8ae78
READ of size 8 at 0x6110000005d0 thread T0
#0 0x106098127 in free_elemlist+0x47 (miniRT:x86_64+0x100024127)
#1 0x106098088 in rd_destroy_temp_scene_fail+0x138 (miniRT:x86_64+0x100024088)
#2 0x1060960e5 in rd_print_error rd_error.c:19
#3 0x10609763d in rd_after_read rd_after_read.c:44
#4 0x10609698a in rd_read_scene rd_scene.c:109
#5 0x10607841c in setup main.c:47
#6 0x106078c25 in main main.c:70
#7 0x10630b4fd in start+0x1cd (dyld:x86_64+0x54fd)
rd_scene_destroyer.c
rd_destroy_temp_scene_fail()でfree_elemlist(temp_scene->object_list);を呼ぶとアボートしてます。
rd_scene_destroyer.c
free_elemlist()でrd_destroy_element()を2回呼び出しており、
178行目 free(el)終わってるみたいです。
各ディレクトリ構成
srcs : .c
objs : .o (make時に作成する)
includes : .h
こんな構成に変更しました。
確認お願いします。
rd/ のmakefileもpathをちょっといじりました。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.