I think it depends on what you are looking for and what you like to do. The northern part of OBX (Kitty Hawk, Nags Head, etc) has all the tourist stuff. There are some campgrounds there, but to be honest I can't tell you much about them. We like to drive onto the beach to surf fish, so head down to Hatteras Island. If you like to "rough it", there are four federal campgrounds at or southwest of Oregon Inlet. None have hookups, but water and dump stations are available. All have beach access - but it can be a good walk sometimes. Oregon Inlet Campground (actually on the north side of the inlet), Hatteras by the lighthouse, Frisco by the Airport (this one has some nice sites in the dunes with ocean views), and a free ferry ride away on Ocracroke Island.
We prefer full hookups, and there are lots of private campgrounds. The two big ones in Rodanthe/Waves area- Camp Hatteras and the KOA - are in the busiest section of Hatteras Island, and adjacent to the beach, and there are plenty of tourist activities nearby. Both of these were pretty much rebuilt after the last hurricane, and a lot of people love them. There are a couple of smaller campgrounds also in that area including Ocean Waves.
We prefer to head further west down to Frisco Woods Campground - full service, with decent rest rooms, pool, laundry, and ship store, and within walking distance of nice restaurant/bar. The best part is you have a sound side view with terrific sunsets every night. There is a truck beach access less than a mile away near the airport, and that section of beach is almost always open regardless of what the turtles or piping plovers are doing. You do have to buy a permit to drive on the beach, but for us it is well worth it. There are plenty of shops and restaurants in the villages of Buxton, Frisco, and Hatteras, but not as much tourist stuff as up in Rodanthe. You are also near the fishing port at Hatteras and the ferry to Okacroke.
There are other smaller private campgrounds in Buxton/Hatters/Ocracroke that look pretty decent, but we do not have experience with them.