我正在研究光线追踪器,并开始向场景中添加圆柱体。我遇到的问题是找到光线击中点的表面法向量。我需要这个才能进行漫射照明。此时我所拥有的是相机光线撞击圆柱体的 3d 点,以及由中心轴上的点定义的实际圆柱体,向量代表轴的方向和半径。所以总结一下我的问题,如何找到具有圆柱体撞击点、半径、其轴上的点和轴的方向向量的点的法线向量?
码
while (1)
{
keycode = key_hook();
if (keycode == SPACE || keycode == BKSPACE)
{
render_again = 1;
}
if (keycode == ESC)
break;
if (render_again)
{
render_again = 0;
render(all);
}
dprintf(1, ""); //I have no idea why this prevents the program from freezing
}
int key_hook()
{
char buffer[4];
read(0, buffer, 4);
return (*(unsigned int *)buffer);
}
Run Code Online (Sandbox Code Playgroud)
好吧,所以这段代码处理重绘屏幕上的文本.某些文本行使用下划线或突出显示termcaps (tputs(tgetstr("us, NULL")......).一切都打印得很好,但在第一次重新绘制文本后,显然会冻结,除非dprintf/printf存在.该key_hook函数只是读取4 bytes距离stdin,并将其转换为int.