Рисование тетраэдра в openGL + SDL 2.0

0

Поэтому я довольно новичок в программировании openGL, и сейчас я просто перехожу к основам. Я знаю, что должен использовать VBOs и прочее, но сначала хотел получить небольшой фундамент. Я не представляю вам весь код, просто тот, который рисует и устанавливает сцену.

Вот маленький код для настройки моей камеры:

glClearColor(0.0f, 0.0f, 0.0f, 0.5f);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, width / height, 1, 1000);
glEnable(GL_DEPTH_TEST);

// Move the camera back to view the scene
glTranslatef(0.0f, 0.0f, -5.0f);

Я попытался создать его вокруг источника так же (также я никогда не рисую нижнюю грань):

void drawtetrahedron(GLfloat angle)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glRotatef(angle, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);

glColor3f(1.0f, 0.0f, 0.0f); //FRONT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);

glColor3f(0.0f, 1.0f, 0.0f); //RIGHT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);

glColor3f(0.0f, 0.0f, 1.0f); //LEFT
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(0.0f, -1.0f, -1.0f);

glEnd();

}

Когда мое окно впервые появляется, красный треугольник выглядит отлично, но когда я поворачиваю его, форма выглядит немного искаженной. Если я повернусь полностью (где я вообще не вижу красное лицо), это выглядит нормально... Что мне здесь не хватает?

Heres, где он начинает выглядеть странно Изображение 174551

Также приветствуются любые указатели на материалы openGL, которые я делаю неправильно (или вообще)! : D

  • 2
    Не переводите матрицу проекции. Матрица ModelView - это то, что определяет ваше преобразование просмотра.
  • 0
    Спасибо за отзыв, сэр :)
Теги:
opengl
sdl
geometry

1 ответ

1
Лучший ответ

Я не знаю, является ли это то, что вы считаете какой-то странной формой, но ваша фигура не кажется обычным Tetrahedron: у 3 углов основания нет одинакового расстояния до верхнего угла (два фронта углы имеют расстояние sqrt (6) до верхнего угла, а задний угол имеет расстояние sqrt (5)). расстояние от основания также выключено: передние углы имеют расстояние sqrt (2), а расстояние между любым передним углом и задним углом составляет sqrt (3).

Примером для обычного тетраэдра будет:

(Обратите внимание, что эти координаты не имеют базы, параллельной плоскости xz)

(1,1,1) (1, -1, -1) (-1, 1, -1) (-1, -1, 1)

Сам код выглядит нормально. (За исключением перевода проекционной матрицы) Я сам предпочитаю создавать блоки кода после push/popmatrix и glbegin/end (эти вещи {...}), но это просто для того, чтобы мой код был легко читаемым.

Кроме того, как правило, в opengl вы не перемещаете камеру: вы перемещаете все остальное. (То, что перевод отрицательных z перемещает объекты от вас, перевод положительного x заставляет их двигаться вправо и так далее...)

  • 0
    Вы правы ... Я думаю, что мне нужно вернуться к простой геометрии, ха-ха ... Изменение z-координаты переднего факта на .5 помогло ... Также сделал один из вершин, которые вы дали, сделал хороший тоже! Спасибо за помощь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню