【GAMES 101】作业3的实现和思考


本文为闫令琪老师的GAMES 101课程的作业3的个人实现与一些简单的思考,文中如有错漏欢迎指出。

作业要求

  1. 修改函数rasterize_triangle(const Triangle& t) in rasterizer.cpp:在此处实现与作业2类似的插值算法,实现法向量、颜色、纹理颜色的插值。

  2. 实现4个shader:phong_fragment_shader()texture_fragment_shader()bump_fragment_shader()displacement_fragment_shader()

代码实现

rasterize_triangle

对每个属性进行插值,传入fragment_shader

// TODO: Interpolate the attributes:
auto interpolated_color = interpolate(alpha, beta, gamma, t.color[0], t.color[1], t.color[2], 1);
auto interpolated_normal = interpolate(alpha, beta, gamma, t.normal[0], t.normal[1], t.normal[2], 1);
auto interpolated_texcoords = interpolate(alpha, beta, gamma, t.tex_coords[0], t.tex_coords[1], t.tex_coords[2], 1);
// view space pos
auto interpolated_shadingcoords = interpolate(alpha, beta, gamma, view_pos[0], view_pos[1], view_pos[2], 1);
fragment_shader_payload payload( interpolated_color, interpolated_normal.normalized(), interpolated_texcoords, texture ? &*texture : nullptr);
payload.view_pos = interpolated_shadingcoords;
// Instead of passing the triangle's color directly to the frame buffer, pass the color to the shaders first to get the final color;
auto pixel_color = fragment_shader(payload);

phong_fragment_shader

在这里插入图片描述

Eigen::Vector3f phong_fragment_shader(const fragment_shader_payload& payload)
{
   
    Eigen::Vector3f ka = Eigen::Vector3f(0.005, 0.005, 0.005);
    Eigen::Vector3f kd = payload.color;
    Eigen::Vector3f ks = Eigen::Vector3f(0.7937, 0.7937, 0.7937);

    auto l1 = light{
   {
   20, 20, 20}, {
   500, 500, 500}};     // position, intensity
    auto l2 = light{
   {
   -20, 20, 0}, {
   500, 500, 500}};

    std::vector<light> lights = {
   l1, l2};
    Eigen::Vector3f amb_light_intensity{
   10, 10, 10};
    Eigen::Vector3f eye_pos{
   0, 0, 10};

    float p = 150;  // 控制高光的范围

    Eigen::Vector3f color = payload.color;
    Eigen::Vector3f point
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过参与Games101作业3的学习和实践,我可以提供以下几点来提高自己的能力。 首先,通过完成作业任务,我可以更全面地了解游戏开发的流程和技术原理。在作业过程中,我需要学习和掌握各种游戏开发所需的基础知识,如图形学、物理模拟、算法等。这些知识将对我今后的游戏开发之路起到坚实的基础作用。 其次,通过作业中的编程实践,我可以提高自己的编程能力。在完成作业任务时,我需要运用所学的编程知识和技巧来实现游戏中的各种功能和效果。这样的实践将帮助我熟悉编程语言和工具的使用,提高我的编程能力和解决问题的能力。 此外,作业3还包括了一些团队协作的要素,如合作完成多人游戏开发任务。通过与他人的合作,我可以学习团队合作的重要性以及如何与他人有效地进行沟通和协作。这对我今后的职场发展将非常有帮助。 最后,通过作业3的学习和实践,我可以培养自己的创造力和创新能力。在游戏开发过程中,我将接触到各种不同的游戏设计思路和创意。这将激发我的自主思考和创造力,帮助我培养独立思考和解决问题的能力。 总之,通过参与Games101作业3的学习和实践,我将在游戏开发知识、编程能力、团队合作和创造力等方面得到提高。这将为我今后的游戏开发之路和职业生涯打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值