Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业四得到这样的结果是否满足要求?

Tagged: 

Viewing 6 reply threads
  • Author
    Posts
    • #4485 Score: 1
      MrPhD
      Participant
      1 pt

      写了一下反走样的贝塞尔曲线,不知道这样行不行?

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

      老哥你用啥做的反走样

    • #4544 Score: 0
      Keneyr
      Participant
      7 pts

      +1

    • #4562 Score: 0
      xuyonglai
      Participant
      3 pts

      看着比没有反走样的要粗了很多

    • #4568 Score: 0
      xuyonglai
      Participant
      3 pts

      我得到的是这样

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

        老哥用的啥方法啊,能分享下不,菜鸡的我没思路。。。。

        • #4573 Score: 1
          xuyonglai
          Participant
          3 pts

          大致思路就是对包括这个像素在内的四个像素涂色,根据距离来计算相邻像素的颜色。其实作业要求上已经有了提示。

          This post has received 1 vote up.
          • #4578 Score: 0
            戴皓天
            Participant
            9 pts

            可以问几个问题吗,麻烦你了
            1.反走样是在画每个点的时候处理的吗?还是说先把曲线每个点记录下来,在后期处理反走样?
            2.用距离来涂色的方式是怎样的呢?我的做法是:
            颜色比例 =(计算出来的曲线上的点 到 像素中心的距离)/根号2
            像素颜色 = 像素颜色*比例 + 曲线颜色*(1-比例)
            我这里的像素指的是曲线上的点周围的四个像素中的其中一个像素,如果要填色的话肯定是对这四个像素做一个遍历,我上面提到的这个公式每个都计算一遍,根号2是因为前面提到的这个距离的最大值就是根号2,也就是四个像素中心点连线构成的正方形的对角线,但是效果非常差,主要是模糊效果没出来,我这样光是让曲线变粗了很多,模糊的话只有少部分像素有,现在不知道应该如何改进

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

            我发现问题所在了,我之前线条太粗是因为t每次的增量取得太小了,t的增量太小会导致计算出来的贝塞尔曲线上的点非常多,这就进一步导致了一个像素周围有非常多的贝塞尔曲线的点,这就导致了很多重复计算,因为我的算法是对每一个要曲线上的点做的,所以当一个像素周围有很多点时,会逐个计算每一个点以及其四周的颜色,这样就导致了线条很粗,模糊的话也会被覆盖
            如果t增量取小一点的话,最理想是一个像素里只有一个点,每个像素(除了曲线本身在的哪个像素)都只计算一次颜色
            我现在把t的增量改小一点,改到框架默认的0.001效果就出来了
            但是不知道这个“像素内或者像素周围有多个点会导致重复计算”的问题实质上应该怎么解决

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

            这是我同样的算法,改t的增量前后的效果

            Attachments:
            You must be logged in to view attached files.
            • #4588 Score: 0
              xuyonglai
              Participant
              3 pts

              我是按照t=0.0001计算的,对于重复计算的情况,我就索性取了最大值,感觉没啥道理。

            • #4589 Score: 1
              xuyonglai
              Participant
              3 pts

              我计算其它像素颜色时是这样计算的,但一开始得到的结果断断续续如图一,而且缩小了t值也没有效果,后来发现很多像素颜色重复计算被赋予了更小的颜色值,所以我就取了个最大值,就得到了图二。感觉效果也不太好。

              This post has received 1 vote up.
              Attachments:
              You must be logged in to view attached files.
              • #4599 Score: 0
                戴皓天
                Participant
                9 pts

                非常感谢你的解答!
                你这样计算颜色可能会比我好一点,我把分母固定作根号2会导致一些小问题
                不过你这样算的话我有几个疑问:
                1、始终取曲线点所在的像素作为基准点,向左侧和下侧取另外三个点做模糊,这样会不会导致模糊在方向上不均匀?因为始终是往左下角模糊,右上角永远是纯色(这一点是不是改成寻找曲线点所在的像素点四周的八个像素点构成总共3X3个像素点就行了?因为毕竟这样各个方向上都有做模糊处理)
                2、取最大值是个很不错的想法,但是如果背景不是黑色,或者在绿线之后有其他颜色是不是就没法处理了?比如先画一条红线再画绿线,那这样的话是不是就会有问题,因为颜色作为Vec3b拥有RGB三个通道,比大小的话就没有实际意义了

                • #4602 Score: 0
                  xuyonglai
                  Participant
                  3 pts

                  你好,针对第一个问题,我是以曲线点所在的像素作为基准点,但并不是总向左下角模糊,取决于这个曲线点靠哪四个像素近,也有可能模糊右上方,如下图。取3X3个像素点我一开始也考虑过,但这样会不会导致这个曲线变得比较宽(只是猜测)。

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

                    好的谢谢。
                    我刚才试了3X3的,效果不好,因为各个方向用同样的方式模糊的话反而不怎么理想

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

                      我也试了试 3×3, 感觉还是因为取周围像素多了以后线整体会显得很粗

                    • #4621 Score: 0
                      clarence
                      Participant
                      -2 pt

                      我也是用了3×3,发现效果不理想,蹲了这帖子几天,感谢大佬们分享思路。

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

                    你找临近点的方式我理解了,其实就是类似“四舍五入”找基准点吧,跟我的做法差不多

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

                    谢谢,我用你计算颜色的方法试了下,确实比我的效果要好,非常感谢提供思路
                    (第一幅是Δt取0.001,第二幅是Δt取0.0001
                    左右分别是用距离/根号2 和 两距离之比算相邻像素颜色的效果)

                    Attachments:
                    You must be logged in to view attached files.
    • #4571 Score: 1
      Lingqi Yan
      Keymaster
      26 pts

      两个结果都不错。第一个里面有一个地方存在断裂现象是为什么?t不够密集吗?

      This post has received 1 vote up.
    • #4628 Score: 2
      Yadi Cao
      Participant
      2 pts

      我引用了一下SPH里面计算一定距离r下,强度或者叫影响的概念
      weight(r)=(r/re)^n – 1.0, bounded in [0,1]
      这样子的话,给定了一个px,py时它四周(ajd)最近的四个渲染的像素点都可以计算出自己受到了“多少”颜色的影响
      color_adj = weight*color_p (如要考虑原始的背景颜色不是黑色,可以参考 @戴皓天 的办法去和背景已经存在的颜色再加权平均)

      在SPH计算里面,重复在同一个像素点上的影响最终是要累计加和平均的,但我在这里对重复计算的就是取了最大值,结果已经不错了,线的粗细没有变粗,而且没有改变初始的dt,也已经比较连续了。大家可以参考一下,附件是开启和不开启anti-aliasing的对比图

      This post has received 2 votes up.
      Attachments:
      You must be logged in to view attached files.
Viewing 6 reply threads
  • You must be logged in to reply to this topic.