Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 【踩坑】更换贴图时的报错以及解决方案

Viewing 2 reply threads
  • Author
    Posts
    • #4256 Score: 1
      戴皓天
      Participant
      9 pts

      因为双线性插值要用小贴图,于是我用了spot文件夹里自带的svg矢量图(612×612),但是报错了(见附件图1)。有可能是我哪里实现出问题了,但是暂时没看出来。。

      上网搜了一下,姑且是参考了一个大佬的方法然后完美解决了:换格式

      原贴图是png格式,小贴图是svg格式,但是同样的代码原贴图就没问题,小贴图就会出问题,所以有这个问题的可以考虑换个文件格式,和原图一样换成png就行(附在附件里,图2,需要的可以直接取走)

      然后附件里的第2、3张图是双线性插值的实现效果

      This post has received 1 vote up.
      Attachments:
      You must be logged in to view attached files.
    • #4303 Score: 0
      Bear
      Participant
      -11 pt

      。。。我都是直接把 1024 那张转成 512*512的,见附件

      Attachments:
      You must be logged in to view attached files.
    • #4496 Score: 0
      Bear
      Participant
      -11 pt

      老哥你作业 4 反走样(抗锯齿)准备用啥做?我咋没啥思路。。。(太菜了我)

      • #4574 Score: 0
        戴皓天
        Participant
        9 pts

        啊啊抱歉前几天太忙了,没看到帖子!
        我刚才也正好在做。。但是效果出不来:(
        具体见附件吧,虽然边缘有一些地方确实有一点模糊,但是总体上来说模糊的地方还是太少了,大部分地方都是满满的绿色,导致线条很粗,而且锯齿仍然存在,效果很差
        我目前的思路是每次对点画颜色之前,找到当前点的周围的四个像素,

        for(对于周围四个像素中的每个像素p)
        {
        比例 = 当前点到像素p的中心的距离/根号2;//除以根号2是因为当前点到周围任何一个像素中心的距离肯定是小于根号2的,想象一下,四个像素,它们的中心点的连线,最长就是对角线,也就是根号2,当前点肯定是在这四个中心点连线形成的正方形内,所以距离一定会小于这个对角线
        像素p的颜色 = 像素p的颜色*比例 + 当前点需写入的颜色*(1-比例);//当前点需写入的颜色也就是绿色
        }

        但是效果也就这样了。。我再思考一下吧。。

        ps:还有个疑问,就是贝塞尔曲线计算出的点可能比较密集,或许会出现很多点在同一个像素内部的情况,或者出现某些像素周围聚集了很多曲线上的点的情况,如果按照我这个思路的话,对于每个曲线上的点都要做一次计算,这样是不是会导致很多像素点被重复计算,因此导致了很多地方颜色太深而显得线条很粗且没有什么模糊?

        • This reply was modified 4 years, 1 month ago by 戴皓天.
        Attachments:
        You must be logged in to view attached files.
      • #4582 Score: 0
        戴皓天
        Participant
        9 pts

        果然是重复计算的问题
        因为我在做反走样之前为了增强反走样之前线条的连续性,我把t的增量改小了很多,我改回0.001就好了,就有效果了,但是这个问题暂时没能得到根本解决,还有待思考

        附件是我改了t增量之后的效果

        Attachments:
        You must be logged in to view attached files.
        • #4595 Score: 0
          Bear
          Participant
          -11 pt

          我的问题实际上还是咱们上次讨论的像素位置的问题(我太菜了)

          比如我现在得到曲线上的一点 point, 假设该点没有落在像素中心上,那怎么能拿到该点所在像素的中心的位置?(point 的两个值都是 int, 也没法通过 round 之类的方法找中心啊)

          • #4596 Score: 0
            xuyonglai
            Participant
            3 pts

            你可以改一下函数的返回值 point就不是int了

            • #4597 Score: 0
              Bear
              Participant
              -11 pt

              。。。有道理,我死板了,多谢

              • This reply was modified 4 years, 1 month ago by Bear.
Viewing 2 reply threads
  • You must be logged in to reply to this topic.