• [object Object]@lemmy.ca
    link
    fedilink
    arrow-up
    16
    ·
    7 days ago

    This is a nice simple blog post, really enjoyed it

    Despite knowing a lot of algebra it was nice to walk through a clear application in such a clean way

  • Ad4mWayn3@sh.itjust.works
    link
    fedilink
    arrow-up
    9
    arrow-down
    1
    ·
    6 days ago

    Perspective projection formulas are a walk in the park until you need to rotate things and compose rigid transformations, you better know how to build those quaternions and matrices ;)

  • Unpigged@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    9
    ·
    7 days ago

    Recommended read for everyone into computer graphics: David F. Rogers, Mathematical elements for computer graphics.

  • Scrath@lemmy.dbzer0.com
    link
    fedilink
    arrow-up
    5
    arrow-down
    1
    ·
    edit-2
    7 days ago

    This is great and I wished I found it a week ago.

    I have spent the last week building a basic 3D rendering engine in C, though I restricted myself to isometric rendering which I considered the simplest form to implement. Especially since trying to talk shop with ChatGPT on the topic usually lead to very complicated design recommendations that far exceeded the amount of features I actually cared about in my proof of concept (e.g. variable camera position, adjustable field of view and more)

    Now I only need to figure out how to cull unwanted triangles from my loaded .obj files

    • Valmond@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      6
      ·
      6 days ago

      Check out cross product & dot product, basic stepping stones for 3D rendering (and culling). Then quaternions & lerp for rotations (you don’t want gimbal lock).

      Good luck, it’s loads of fun (IMO)!

    • Unpigged@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      1
      ·
      6 days ago

      Writing rasterizer by hand is an incredible fun exercise. Get some basic reading on the graphics, don’t do gpt first. You will never see games as you had before.

      Culling faces is simple: you have geometry in camera space. Take a dot product between a surface normal and view direction vector and if it’s negative then the normal is pointing away from you and the face is invisible.

      Proper techniques with occlusion and stuff are more complicated, such as painter algorithm or z-budgeting or others

      • Scrath@lemmy.dbzer0.com
        link
        fedilink
        arrow-up
        1
        ·
        5 days ago

        Thanks for the tip. I’ll have to try that out later when I have time.

        After noticing that ChatGPT had quite a different vision than I did, I’ve mostly been brute forcing the projection math by drawing a cube on paper and seeing how the 3D coordinates are transformed to 2D space. The only useful thing it actually helped me with was figuring out which 3D file format was most compatible for parsing into my objects. It tried writing a parser for that format, which I looked at and then decided to do it myself with less lines of code ;D

      • Scrath@lemmy.dbzer0.com
        link
        fedilink
        arrow-up
        3
        ·
        6 days ago

        Just simple CPU calculations. I’m basically just mapping my points from 3D space to my 2D screen and drawing lines between them. Not sure if rendering engine is actually the correct term for what I am doing. The word engine kind of implies a larger scope than I am going for.

        Of course, I had to massively complicate this for myself by setting out to use this for displaying basic wireframe graphics on embedded systems… Basically I currently need to figure out how to reduce my triangle based objects to ones that only have the silhouette lines or that only show triangles which are actually visible, except my line drawing setup does not allow for partially obscured faces as is.

        • KeenFlame@feddit.nu
          link
          fedilink
          arrow-up
          1
          ·
          4 days ago

          It’s called projection, and culling, in that order if you want to search for help. But I would have built a ray marcher instead as that is more fun and useful if you are doing it to learn

        • AngryPancake@sh.itjust.works
          link
          fedilink
          arrow-up
          1
          ·
          6 days ago

          Sounds great! I would still call it a rendering engine, I don’t think it matters how large the scope is. It looks like you’re on a good path forward, I’m sure you’ll get it soon! Don’t go too crazy on the optimizations is my only recommendation.