Writing a raytracer is not a difficult task, the most time consuming part in C++ (std only) is probably the implementation of the vector mathematics, which is a tedious task*, for which you should use a extern library. Some of the students at my university currently have to write a simple raytracer in Java in a time frame of about two weeks. Maybe this gives you a vague idea.
= especially if you decide to use operator overloading
I wrote one with a simple direct lighting kernel.
Theory is really easy, you should know your way around in linear algebra and if you want to optimize your code also in algorithmic and big o-notation.
For a basic direct lighting kernel also the vector math is easy, even with overloading, the question is if you want to do it or use a library. There´s not much purpose in reinventing the wheel. I wrote it myself out of interest.
ompf.org is a place to check out if you plan to write a raytracer and if you want to take it further you should get access to the ACM digital library for the various papers on raytracing, pathtracing, photonmapping, ambient occlusion, realtime methods, algorithmic approaches and so on.
As indicator, it took me a week to write a simple raytracer with photon mapping and wonky gathering, just wrote it freely from scratch, a complete mess codewise.
The next version was actually structrured and had a full object oriented approach, got myself in some dead ends and stopped at transparent refraction. Made a mistake somewhere and another project came along so I haven´t had time do to anything on that anymore. Took also around a week, and by week I mean coding a few hours in the evenings - not full workdays.
If you plan to write a pathtracer, I suggest you take a look at “smallpt” its a 90 codeline pathtracer with OpenMP support, there´s also a GPU accelerated port of it.
If you plan to write a direct lighting raytracer, you should keep your eyes open for Jacco Bikkers Raytracer and tutorial.
Pixelmachine is also nice source to study.
I mainly want to do it out of interest, and as a learning tool in some way as well…
My final plans are to use MPI or OpenMP later on as well. Try to make it work parallel (after competing sequential one and getting somewhat acquainted with ray tracing math)…
It´s really a matter of preference and skill IMO.
You can do all in both. C++ is just more comfortable when it comes to working with dynamic memory allocation and arrays. The vector class is just grand. Error handling is also easier to achieve.
For ANSI-C you need to be the pointerbender, for C++ you need somewhat of a plan before you start coding, else the whole OOP idea is lead ad absurdum having one header and one main.cpp with everything in it. It´s cumbersome to make serperate classes and headers lateron from one big codesnake.
I wrote the first raytracer pretty much in C syntax although i used C++ and once I knew what it is about, I used a UML tool to create the basic layout and coded by that. I recommend ArgoUML, or if you use KDE, Umbrello.
I had a license for Visual Paradigm, which is very powerful and can also deploy the basic code skeleton.
If you want to do it out of interest, just grab any IDE and start coding and trailing. Once you see what it is all about you can make a better plan. It´s a pretty iterative and often redundant process to code a raytracer unless you work after someone elses code, or spend some months planning ahead, requiring you to know all the raytracer theory already.