Поэтому я довольно новичок в программировании 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, где он начинает выглядеть странно
Также приветствуются любые указатели на материалы openGL, которые я делаю неправильно (или вообще)! : D
Я не знаю, является ли это то, что вы считаете какой-то странной формой, но ваша фигура не кажется обычным 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 заставляет их двигаться вправо и так далее...)