2014-01-15 4 views
0

У меня проблема, потому что я хочу нарисовать точки на сфере, но я не знал, как правильно их масштабировать.OpenGL рисование земли как набрать точки

R = 6400km <- R of earth 
r = 6400m <- r of earth in my program 
w = r/R; 

Каждая точка имеет hight h. x = ширина, y = долгота

Моя проблема с высотой. Не могли бы вы рассказать мне, в чем я ошибаюсь.

x = (r+h*w) * cos(x * PI/180.0) * cos(y * PI/180.0) 
y = (r+h*w)* cos(x * PI/180.0) * sin(y * PI/180.0) 
z = (r+h*w) *sin(x * PI/180.0) 

Это то, что когда я устанавливаю w = 0,01. Когда я установить ш = г/R я видеть только артефакты img

+0

Что такое «не так»? Если это то, что ваши горы могут быть невидимыми, это потому, что даже Mt. Эверест, на его 8800 м, только на 0,1% выше, чем ваша средняя окружность Земли. Попытайтесь преувеличить свои высоты. – usr2564301

+0

Я не думаю, что это неправильно ... Земля из космоса не ухабистая, но если вы пролетете ближе, то увидите горы. Я думаю, что это скорее вопрос освещения, а затем моделирование преувеличения. Добавить нормали и направленный диффузный свет – Spektre

ответ

3

это должно быть так:

x=scale*(re+h)*cos(a)*cos(b); 
y=scale*(re+h)*cos(a)*sin(b); 
z=scale*(rp+h)*sin(a); 
  • повторно - радиус экватора
  • гр - полярный радиус
  • ч - высота
  • a < -0,5 * PI, + 0,5 * PI>
  • b < 0, 2.0 * PI>

ваше масштабирование высоты кажется хорошо, может быть, проблема

  • отсутствие скобок (некоторые компиляторы напутать без надлежащего брекет)
  • неправильно PI ... обычно математика определяет: M_PI
  • cos, sin handle обычно радианы, но я также видел градусы в некоторых библиотеках. Убедитесь, что подходит вам
  • неправильные интервалы угла

Что именно не так? Изображение или более подробная информация будет полезна

0

Глядя на то, что у вас есть, оказывается, что вектор находится в правильном направлении. Я не уверен, почему вы умножаетесь на w, вам просто не нужно

x = (r+h) * cos(latitude * PI/180.0) * cos(longitude * PI/180.0) 
y = (r+h) * cos(latitude * PI/180.0) * sin(longitude * PI/180.0) 
z = (r+h) * sin(latitude * PI/180.0) 
Смежные вопросы