4 ms·
I'd be curious to hear others chime in, but I feel like the situation is very similar to this article talking about games. Do you want to get pixels to the scre
by pfranz 5y ago
I'd be curious to hear others chime in, but I feel like the situation is very similar to this article talking about games. Do you want to get pixels to the screen/file? Shaders and materials (authoring or implementing)? How commercial renderers are organized? My job is mostly using commercial tools, but a lot of us have made toy renderers, read books, and taken classes to reimplement the fundamentals.
It's been awhile, but a few common, imho approachable, sources are:
https://github.com/ssloy/tinyrenderer/wiki https://github.com/ssloy/tinyrenderer/wiki - a rasterizer that starts with drawing a line
https://raytracing.github.io/ https://raytracing.github.io/ - a basic raytracer that incrementally adds features
https://www.pbrt.org/ https://www.pbrt.org/ - I've heard good things from people who have gone through the whole book. I haven't taken the dive, but thumbed through it and jumped around.
I wouldn't dismiss realtime stuff, either. Often, the concepts are similar but the feedback loop is much faster. I liked the UE4 docs on shaders talking about pbrt and the simplifications they chose when implementing it. There's a bunch of resources out there. I don't think single source is comprehensive. I say, start with something simple and find resources on specific things you want to know more about.
- i45_n5 5y agoLet's just say that I want to create text file with 3d coordinates of an object (cube or sphere), and my software renderer shoould read this file and display it on the screen. And I can zoom in/out, change coordinates of vertecies with a mouse, rotate and move it. This cube can be wired or colored and if it wired I want to see which edges are visible and which are not. And to render this cube I want to use only setpixel/drawline functions from win api or sdl. Thanks for the links.
- pfranz 5y agoThat sounds like a fun challenge. If you're constraining yourself to use as few libraries as possible, I'd go with OBJ [1] for the 3d mesh and PPM [2] for writing images. It's easy to implement a bare bones reader/writer and some OSes (like macOS) can show them in the file browser. Raytracing in One Weekend goes over PPM. There are a bunch of header-only libraries that handle different file formats like stb_image [3]. I usually end up using those when I start dealing with textures or UI elements. I don't use Windows so I haven't used their APIs for projects like this. I'd usually go for imgui or SDL (like you mentioned). tinyracaster, a sibling project of tinyrenderer, touches on those [4]. I liked LazyFoo's SDL tutorial [5]. Good luck! [1] https://en.wikipedia.org/wiki/Wavefront_.obj_file https://en.wikipedia.org/wiki/Wavefront_.obj_file [2] https://en.wikipedia.org/wiki/Netpbm#PPM_example https://en.wikipedia.org/wiki/Netpbm#PPM_example [3] https://github.com/nothings/stb https://github.com/nothings/stb [4] https://github.com/ssloy/tinyraycaster/wiki/Part-4:-SDL https://github.com/ssloy/tinyraycaster/wiki/Part-4:-SDL [5] https://lazyfoo.net/tutorials/SDL/index.php https://lazyfoo.net/tutorials/SDL/index.php
- i45_n5 5y agoYeah, I know about ppm but I didn't know about .obj files. That's great. And sdl is a good crossplatform choice because linux doesn't have similar to win api GDI. Thanks for the links.