Я пытаюсь создать проект в OpenGL C++, который имеет три стороны куба, отображаемые во время выполнения. Нет вращения, необходимого для просмотра трех сторон. Я очень новичок в OpenGL, мой план атаки теперь меняет значения x, y и z. Я отлично работаю в 2d, но добавление z для смешивания - это то, что, как мне кажется, отключает меня. Я знаю, что использование отрицательного значения приблизит изображение ближе к камере и положит дальше, но в моем коде ниже, когда я изменяю значение Z, он ничего не делает для объекта.Создание 3D-куба с тремя сторонами, отображаемыми во время выполнения, без вращения, чтобы увидеть все 3 стороны
У меня только передняя и правая стороны показаны (работают), чтобы попытаться получить эти 2 в правильном положении в окне перед тем, как весь куб будет нарисован. Первоначально я рисовал их в терминах 0,5 или -0,5, но это только создает прямоугольник на экране.
Итак, мой главный вопрос: существует ли более простой способ предсказать поведение каждой из вершин? Да, я знаю, что работаю в графическом пространстве, но почему некоторые из моих моментов не двигаются, когда значение изменяется?
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <stdlib.h> //For exit function
void exit(int); //To Exit Program
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 1.0);
glColor3f(1.0, 1.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}
void cube()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1.0, 0.0, 0.0); glVertex3f( 0.2, -0.3, -0.5); // P1 is red lb
glColor3f(0.0, 1.0, 0.0); glVertex3f( 0.3, 0.2, -0.5); // P2 is green lt
glColor3f(0.0, 0.0, 1.0); glVertex3f(-0.2, 0.3, -0.5); // P3 is blue tt
glColor3f(1.0, 0.0, 1.0); glVertex3f(-0.3, -0.2, -0.5); // P4 is purple tb
glEnd();
// Green side - LEFT
glBegin(GL_QUADS);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(-0.2, -0.3, 0.5);
glVertex3f(-0.3, 0.2, 0.5);
glVertex3f(-0.2, 0.3, -0.5);
glVertex3f(-0.3, -0.2, -0.5);
glEnd();
glFlush();
}
void myKeyboard(unsigned char theKey, int mouseX, int mouseY)
{
switch(theKey)
{
case 'Q':
case 'q':
exit(-1); //terminate the program
default:
break; // do nothing
}
}
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("Shapes: Q or q to quit");
glutDisplayFunc(cube);
glutKeyboardFunc(myKeyboard);
init();
glEnable(GL_DEPTH_TEST);
glutMainLoop();
}
Это отличный способ выразить это, что вызывающе помогает мне понять это больше. К сожалению, пока это школьное задание, и мой профессор только позволяет нам использовать glOrtho для задания. В исследовании, чтобы найти помощь, я обнаружил, что большинство людей используют массивы для создания своих кубов. Наверное, поэтому у меня так много проблем с поиском помощи, потому что никто не использует устаревшую версию – csm60
Да, немедленный режим был заменен массивами вершин назад, когда - например, 1995 или около того. Позор, что большинство классов компьютерной графики все равно научат этому. –
Если это назначение, которое может быть выполнено только через glOrtho, возможно, что-то еще вам не хватает. По умолчанию будут отображены образы вершин. Фреймы определяются порядком, в котором указаны вершины, по часовой стрелке или против часовой стрелки. Вы можете отключить отбраковку, переключить лицевую сторону на другое направление или убедиться, что все ваши квадратики указаны в правильном порядке. Еще несколько деталей: https://www.khronos.org/opengl/wiki/Face_Culling –