У меня есть растровая карта, созданная из файла dted. Я хочу использовать это растровое изображение и создать 3D-рендеринг местности. Я пытаюсь сделать это с векторами вершин, но вообще не смог достичь своей цели. Вот мой код paintGL:
void render::paintGL(){
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0,0,-100);
for(int z=0;z<dted.width()-1;z++){
glBegin(GL_TRIANGLE_STRIP);
for(int x = 0; x<dted.height()-1; x++){
glColor3f(matrix[x][z], matrix[x][z], matrix[x][z]);
glVertex3f(x, matrix[x][z], -z);
//vertex0 ends here
glColor3f(matrix[x+1][z], matrix[x+1][z], matrix[x+1][z]);
glVertex3f(x+1, matrix[x+1][z], -z);
//vertex1 ends here
glColor3f(matrix[x][z+1], matrix[x][z+1], matrix[x][z+1]);
glVertex3f(x, matrix[x][z+1], -z-1);
//vertex2 ends here
glColor3f(matrix[x+1][z+1], matrix[x+1][z+1], matrix[x+1][z+1]);
glVertex3f(x+1, matrix[x+1][z+1], -z-1);
//vertex3 ends here
}
glEnd();
}}
Мне пришлось писать код вместо копирования-вставки из-за проблем с интернетом. Так что могут быть вещи, которые я забыл, но я сделал все возможное. Позвольте мне объяснить переменные и другие вещи выше:
dted — это созданное мной изображение dted, и я устанавливаю границы из значений ширины и высоты этих изображений. матрица представляет собой двумерную матрицу, которая содержит значения высоты, которые я получаю из предварительно созданных пикселей изображения dted.
После всего кода выше мне не удалось отрендерить ландшафт. Я не знаю, рендерит ли он ландшафт, но он просто не показывает меня или вообще не рендерит. Если вы объясните, в чем моя ошибка, и предложите ее решение, было бы здорово.
Извините за грамматические ошибки, если я их сделал, и я надеюсь, что хорошо объяснил свою проблему. Если предоставленного кода недостаточно, не стесняйтесь упоминать об этом, и я могу записать и другие части.
Хорошего дня.
Редактировать: Хорошо, у меня здесь свежие новости. Мне удалось нарисовать равнину после того, как я немного справился с проблемами с мышью. Однако, когда я пытаюсь получить амплитуду, она ничего не показывает. Я думаю, это из-за слишком большой амплитуды, но когда я делю ее на константу вроде 15, снова появляется та же самая равнина. Это из-за того, что я использовал GL_TRIANGLE_STRIP
?
matrix
находятся в диапазоне от 0 до 1? Они должны, если вы введете их вglColor3f
. Не могли бы вы проверить это? - person Sga   schedule 12.06.2015GL_POINTS
с помощьюglPointSize(50)
- person Sga   schedule 12.06.2015matrix[][]
? - person Sga   schedule 12.06.2015