But when I view them in the iPad retina display, the hills seem smaller (as if the calculation was for a smaller display),
That's indeed what happens. In High-DPI mode the OS reports a smaller physical display resolution so that applications using the Cocos2D API can use the same pixel distances and positions as on non-Retina displays. Cocos2D then internally scales everything appropriately.
For OpenGL this fails, of course.
Here's a tutorial on how to deal with the subject: http://www.david-amador.com/2010/09/setting-opengl-view-for-iphone-4-retina-hi-resolution/
The relevant code is this:
int w = 320;
int h = 480;
float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
// You can't detect screen resolutions in pre 3.2 devices, but they are all 320x480
if (ver >= 3.2f)
{
UIScreen* mainscr = [UIScreen mainScreen];
w = mainscr.currentMode.size.width;
h = mainscr.currentMode.size.height;
}
if (w == 640 && h == 960) // Retina display detected
{
// Set contentScale Factor to 2
self.contentScaleFactor = 2.0;
// Also set our glLayer contentScale Factor to 2
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.contentsScale=2; //new line
}