2009-07-17 2 views
2

Я программирую в 3D с использованием C++, OpenGL и wxWidgets. Не зная о том, что происходит на другом языке программирования/каркасе, у меня возник вопрос:Что такое простейшая 3D-программа для рисования в окне?

Какой язык программирования (или платформа программирования) сегодня самый простой для начинающего 3D-программиста? (Не обязательно программист игры!) Демонстрируйте ваш случай, показывая простейший (не наименьший) фрагмент кода на том языке, который будет рисовать квадрат/куб в окне. Код должен быть полным и компилируемым/интерпретируемым.

Для случая C++, OpenGL и GLUT, вот first example (1-2) из ​​Красной книги (The OpenGL Руководство по программированию):

#include <GL/gl.h> 
#include <GL/glut.h> 

void display(void) 
{ 
/* clear all pixels */ 
    glClear (GL_COLOR_BUFFER_BIT); 

/* draw white polygon (rectangle) with corners at 
* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) 
*/ 
    glColor3f (1.0, 1.0, 1.0); 
    glBegin(GL_POLYGON); 
     glVertex3f (0.25, 0.25, 0.0); 
     glVertex3f (0.75, 0.25, 0.0); 
     glVertex3f (0.75, 0.75, 0.0); 
     glVertex3f (0.25, 0.75, 0.0); 
    glEnd(); 

/* don't wait! 
* start processing buffered OpenGL routines 
*/ 
    glFlush(); 
} 

void init (void) 
{ 
/* select clearing (background) color  */ 
    glClearColor (0.0, 0.0, 0.0, 0.0); 

/* initialize viewing values */ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
} 

/* 
* Declare initial window size, position, and display mode 
* (single buffer and RGBA). Open window with "hello" 
* in its title bar. Call initialization routines. 
* Register callback function to display graphics. 
* Enter main loop and process events. 
*/ 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize (250, 250); 
    glutInitWindowPosition (100, 100); 
    glutCreateWindow ("hello"); 
    init(); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; /* ISO C requires main to return int. */ 
} 

Как вы можете очень хорошо см., он использует GLUT, который представляет собой архаичную структуру окон для OpenGL.

ответ

2

Я не знаю, как и почему вы хотите, чтобы код был любой меньше, чем ...

Там очень много, что вам действительно нужно явно указать.

Ваш код состоит из:

  • Определение площади
  • Настройка режима отображения и проекции
  • Указание windowsize и положение

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

1

Если вы хотите что-то помимо GLUT, вам нужно использовать элементы управления OpenGL, предоставляемые вашей операционной системой. Это значительно варьируется от платформы к платформе. NeHe Productions предоставляет десятки учебных руководств OpenGL на своем сайте, и в самом начале они показывают вам, как создать контекст OpenGL в нескольких операционных системах.

Если вы по-прежнему готовы к кросс-платформенной совместимости, то ваш лучший выбор, скорее всего, SDL, который очень похож на GLUT, поскольку он довольно тонкий слой над базовыми абстракциями, но он обеспечивает немного более богатую систему событий и больше возможностей для взаимодействия с оборудованием, таких как звук и джойстики.

Это, как говорится, нет ничего особенно архаичного в отношении GLUT. Есть много implementations GLUT. Самое приятное в том, что он почти наверняка присутствует на даже странно настроенных хостах, тогда как для любого другого решения потребуется либо конкретный код платформы, либо наличие некоторого уровня совместимости между платформами. Если бы я хотел, чтобы все было просто для программы, которая нужна только для отображения трехмерной графики и взаимодействовать только с помощью мыши и клавиатуры, тогда я, вероятно, был бы полностью доволен GLUT.


Но если вы хотите еще проще, чем это? ну, я бы, наверное, указал вам на графическую библиотеку сцены с привязками к некоторому интерпретируемому языку.

1

Если вы хотите, чтобы это и другие примеры Красной книги были меньше, не печатайте информацию о цвете, вершине, свете и т. Д. Определите формат и прочитайте информацию о модели из файла. Это облегчит понимание примеров и, в конце концов, вы не захотите, чтобы этот материал был жестко закодирован.

Остальная часть кода, как указывали другие плакаты, необходима. Вам не нужно использовать GLUT, хотя в этом нет ничего плохого - я вроде как GLFW. Вы также можете попробовать Tao Framework, набор привязок Mono/.Net к GLUT, OpenGL, SDL, GLFW и многое другое. Оба являются кросс-платформенными.

1

GLUT может быть архаичным, но я не думаю, что он получил достаточное уважение. Структура чрезвычайно универсальна, и я не уверен, что какой-либо другой язык или интерфейс превзошли ее, сохраняя при этом ее универсальность. Я думаю, что это также лучший 3D-графический язык для начала - вы узнаете много вещей, которые могут скрывать другие языки за кулисами, так же, как изучение C++ перед Java.

Смежные вопросы