| The silib FAQ (Frequently Asked Questions) |
|||||
| Q: Is silib really a software renderer? Like all the way down the the rasterizer? A: Yep. Almost everything is written in software. The library uses DirectDraw to change the display mode, gain exclusive access to the display, and get a pointer to video memory for drawing. Everything else is done is software. Q: Why is silib a software renderer? Don't you know how to use OpenGL or D3D? What do you mean silib kinda (barely) uses DirectX? Are you some kind of idiot? Nobody writes software renderers anymore! Man, get with the times! I'm surprised silib isn't a DOS app! A: In my humble opinion, there is a difference between being proficient in the fundamental concepts of a particular topic, and being proficient in an abstract representation. You can start with fundamentals and derive the abstract, but not the other way around. You don't need to know how to rotate a point to use GlRotate(), but knowing how to do your own matrix math gives you insights on how to use functions like GlRotate() more efficiently. As a professional programmer, part of my job is to interview potential new hires. Many people come in calling themselves "graphics programmers" having written a few OpenGL/D3D programs, but most of them stare at us blankly when we ask them to show us how to draw a line, or how to backface cull. Sure, it may seem at first to be unfair, but it's important that people we hire understand fundamental concepts. If you don't know what GlRotate() does exactly, how are you going to be able to figure out which Playstation call does the same thing? So to sum up, you never can know too much. Sure, time spent on silib now is time that could have been spent learning real-world APIs, but the long term gain is a better intuitive response to solving 3d graphics problems when I do operate on the abstract level. That said, I actually am very comfortable using DirectX and OpenGL, and to some degree Direct3D IM (even more so than before I started silib!). I've been using DirectX for all of my personal demos and games since version 1.0, and I do have professional PC products under my belt as well. So the decision to write a software renderer was out of choice, not necessity. On a side note, silib is being designed to easily facilitate OpenGL/D3D integration should I ever have the desire to do so. Q: But you missed the point of the question. There are many more relevant problems to solve in the area of 3D graphics these days, like scene complexity reduction. Why waste time reinventing the wheel? A: Again, I consider silib a short term loss in return for a long term gain. When I get to the point where scene complexity reduction is a relevant problem to me, I'm hoping my experience writing silib will come in handy at some point. Like Abrash once said, it's like asking "Why should I as a programmer know what's going on?". Seems silly to ask when put that way. Besides, "relevant" is a relative term :) What if later on I decide I want to write device drivers for ATI or something? Q: Why doesn't silib support XYZ features? A: Hello... I just told you I work for a game company. That's not exactly a nine-to-five job. There are a lot of things I need to do to silib before I'll be completely happy with it, but finding the time is tough. However, steady progress is constantly being made. Q: Why does silib only support triangles? A: There are a few reasons for this. First of all, it simplifies rendering immensely. Supporting n-gons pretty much requires the use of an edge list, which is an overhead and an additional layer of complexity. Triangles don't require an edge list since all triangles either contain only two edges or can be divided into two triangles that contain only two edges. And when you are only dealing with two edges, scanline fills are fast and easy. Second, all n-gons can be broken up into triangles. So in a way triangles can be considered the lowest common denominator, and by supporting them you are assured that every base is covered. Third, vertices in a triangle are always guaranteed to be coplanar. While this is usually not an issue, it's nice to not have to worry about it. Another thing to consider is that most commercial rendering systems operate on the triangle level. If it works for SGI, it works for me! Q: Why does silib only support Lightwave 3D model objects? A: Because I wanted to support a model format that I actually had the software for, so I could make my own models and test them out. Lightwave 3D is practically given away for free at schools, while software like 3D Studio Max is a bit expensive. And I don't pirate software (you thieving bastards!). If at some point I get a copy of 3DSMax, I will definitely be adding support for it's model format. Q: What does "silib" stand for? A: Well, the "lib" portion stands for "library", and the "si" stands for... Well... Nevermind. It's hard to explain. By the way, "silib" is pronounced SIGH-lib. |
|||||
| Back To silib Page | |||||