решил попробывать сделать программу, которая рисует ландшафт по данным из .raw файла. Но возникла проблема. При поворотах камеры дальние участки карты иногда оказываются перед ближними. Объясняю:
Вот карта с пронумерованными углами:
1-----------------------------------------------------------------2
| |
| |
| |
| 0 |
| |
| |
| |
3-----------------------------------------------------------------4
Рисую из углов номер 1 и 2 до углов 3 и 4. Камера смотрит в центр - в 0.
Так вот, если камера находится над углами 3 и 4, то всё нормально. А если над углами 1 и 2, то на первый план выходят "дальние" участки, а на задний - "ближние".
Примечание:
Вот код рисующей функции:
for (x = 0; x < MAP_SIZE; x += STEP_SIZE)
{
for (y = 0; y < MAP_SIZE; y += STEP_SIZE)
{
glBegin(GL_TRIANGLE_STRIP);
z = Height(pHeightMap, x, y) * HEIGHT_RATIO;
igHeightColor(z);
glVertex3f(x - (MAP_SIZE / 2), y - (MAP_SIZE / 2), z);
z = Height(pHeightMap, x + STEP_SIZE, y) * HEIGHT_RATIO;
igHeightColor(z);
glVertex3f(x + STEP_SIZE - (MAP_SIZE / 2), y - (MAP_SIZE / 2), z);
z = Height(pHeightMap, x, y + STEP_SIZE) * HEIGHT_RATIO;
igHeightColor(z);
glVertex3f(x - (MAP_SIZE / 2), y + STEP_SIZE - (MAP_SIZE / 2), z);
z = Height(pHeightMap, x + STEP_SIZE, y + STEP_SIZE) * HEIGHT_RATIO;
igHeightColor(z);
glVertex3f(x + STEP_SIZE - (MAP_SIZE / 2), y + STEP_SIZE - (MAP_SIZE / 2), z);
glEnd();
}
}
Примечание:
Вот фото проблемы:
http://picso.ru/photos/medium/11871-r8m84.jpg
Примечание:
При добавлении этих строк вся отрисовка исчезает и остаются только чёрный экран(((
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
Примечание:
А подскажите пожалуйста, как это сделать))
Примечание:
вот main:
LoadRawFile("Terrain.raw", MAP_SIZE * MAP_SIZE, g_HeightMap);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600, 400);
glutInitWindowPosition(200, 110);
glutCreateWindow("OpenGl 3D HD Terrain");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-100, 100, -100, 100, 100, 2000);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glClearColor(0, 0, 0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glTranslatef(0, 0, -800);
glRotatef(120, 1, 0, 0);
glutMouseFunc(mouseButton);
glutMotionFunc(mouseMotion);
glutKeyboardFunc(Keyboard);
glutSpecialFunc(SpecialKeys);
glutDisplayFunc(display);
timer();
glutMainLoop();
Примечание:
Ни в какую не хочет воспринимать GL_LEQUAL... только GL_GEQUAL или GL_ALWAYS.
Примечание:
Спасибо, разобрался!!!
Забыл одну вешь:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.