GAMES 101 现代计算机图形学 作业3 双线性插值

其他的都没什么好说的,这里记录一下 双线性插值的应用过程

代码是学习这位大佬的 :https://blog.csdn.net/qq_36242312/article/details/105888669

在Texture.hpp中 添加一个函数

Eigen::Vector3f getColorBilinear(float u,float v)
    {
        if(u<0) u=0;
        if(u>1) u=1;
        if(v<0) v=0;
        if(v>1) v=1;

        auto u_img = u * width;
        auto v_img = (1 - v) * height;

        float u_min=std::floor(u_img);
        float u_max=std::min((float)width,std::ceil(u_img));

        float v_min=std::floor(v_img);
        float v_max=std::min((float)height,std::ceil(v_img));

        auto Q11=image_data.at<cv::Vec3b> (v_max,u_min);
        auto Q12=image_data.at<cv::Vec3b> (v_max,u_max);

        auto Q21=image_data.at<cv::Vec3b> (v_min,u_min);
        auto Q22=image_data.at<cv::Vec3b> (v_min,u_max);

        float rs=(u_img-u_min)/(u_max- u_min);
        float rt=(v_img-v_max)/(v_min-v_max);

        auto cBot = (1-rs)*Q11+ rs* Q12;
        auto cTop = (1-rs)*Q21+ rs* Q22;
       
        auto p=(1-rt)*cBot+rt*cTop;

        return Eigen::Vector3f(P[0],P[1],P[2]);
    }

(1-rs)Q11+ rs Q12;就等价于 rs*(Q12-Q11) +Q11…不过我发现他们都喜欢这样写

然后在main.cpp的 texture_fragment_shader 里面使用它

 if (payload.texture)
    {
        // TODO: Get the texture value at the texture coordinates of the current fragment
       // return_color=payload.texture->getColor(payload.tex_coords.x(),payload.tex_coords.y());

        return_color=payload.texture->getColorBilinear(payload.tex_coords.x(),payload.tex_coords.y());
    }

在main函数里面修改
在这里插入图片描述

这个texture.png是我自己缩小的400X400的纹理,作业框架里面的SVG不知道为啥用不了

使用插值前
在这里插入图片描述

使用插值后
在这里插入图片描述

课程解决的问题: 作为游戏行业或者图形学从业者,你是否面临以下问题: 到底openGL底层如何实现的? 到底矩阵操作变换是怎么做到的? 到底光栅化的算法以及原理是什么? 到底如何才能从3D世界投射到2D屏幕呢? 图形学有这么多的矩阵操作,到底如何推导如何应用呢? 学完这门课程,你应该就可以从底层了解一个初级的openGL图形接口如何实现,图形学最底层的封装到底面临哪些挑战;跟随我们一行一行写完代码,你就会得到一个迷你版本的openGL图形库,你可以深度体会图形从模型变换,观察矩阵变换,投影矩阵变换一直到光栅化纹理操作的全套模拟流程。 课程介绍: 本课程将带领学员不使用任何图形库,实现从0到1的图形学接口封装以及算法讲解,并且带领大家手敲代码,一行一行进行实现。 涵盖了(环境搭建,绘制点,Bresenham算法绘制完美直线,三角形拆分绘制算法,颜色插值算法,图片操作,图片二次插值放缩算法,纹理系统接口搭建及封装,矩阵操作理论以及实践,openGL类似接口封装,3D世界的图形学理论及接口封装等) 最终将带领大家通过C++实现一个3D世界的图形接口,方便所有人入门图形学,进行接下来的openGL接口以及GPU编程的学习   本课程为系列课程的第一步入门,且带领所有人进行实现,更加实用,可以让大家打牢图形学的基础知识及编程技能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值