在窗口中绘制的最简单的3D程序是什么?

时间:2009-07-17 03:19:46

标签: 3d

我使用C ++,OpenGL和wxWidgets进行3D编程。我不太了解其他编程语言/框架中发生的事情,我得到了这个问题:

对于今天开始的3D程序员来说,哪种编程语言(或编程平台)是最简单的? (必然是游戏程序员!)通过显示该语言中最简单的( not 最小)代码片段来展示您的案例在窗口中的正方形/立方体。代码应该是完整的,可编译/可解释的。

对于C ++,OpenGL和GLUT的情况,这里是红皮书中的first example(1-2)( 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窗口框架。

4 个答案:

答案 0 :(得分:2)

我不确定您希望代码如何或为什么要小于......

你真的需要明确指定。

您的代码包含:

  • 指定正方形
  • 配置显示模式和投影
  • 指定窗口大小和位置

您没有比您指定的信息更多的代码,这是有效表达的一个很好的定义。如果代码更小,则不会指定足够的信息来描述您想要做的事情。

答案 1 :(得分:1)

如果你想要除GLUT之外的东西,那么你需要使用操作系统提供的OpenGL上下文控件。这在不同平台之间差异很大。 NeHe Productions在他们的网站上提供了许多OpenGL教程,并且首先他们向您展示了如何在多个操作系统上创建OpenGL上下文。

如果您仍然渴望跨平台兼容性,那么您最好的选择可能是SDL,这与GLUT非常相似,因为它在底层抽象上是一个相当薄的层,但它提供了稍微丰富的事件系统,以及与硬件交互的更多机会,例如声音和操纵杆。

话虽如此,关于GLUT并没有什么特别的陈旧。 GLUT有很多implementations个。它的好处在于它几乎肯定会出现在奇怪配置的主机上,而任何其他解决方案都需要特定于平台的代码或某些跨平台兼容层的存在。如果我想为一个只需要显示三维图形的程序保持简单,并且只用鼠标和键盘进行交互,那么我可能对GLUT非常满意。


但如果你想比这更容易?好吧,我可能会指向一个场景图库,其中绑定了一些可解释的语言。

答案 2 :(得分:1)

如果您想使这个和其他红皮书示例更小,请不要硬编码颜色,顶点,光线等信息。确定格式并从文件中读取模型信息。它将使示例更容易理解,最终您不希望这种东西被硬编码。

正如其他海报所指出的那样,其余的代码是必要的。你不必使用GLUT,虽然它没有任何问题 - 我有点像GLFW。您还可以尝试Tao Framework,一组Mono / .Net绑定到GLUT,OpenGL,SDL,GLFW等等。两者都是跨平台的。

答案 3 :(得分:1)

GLUT可能过时,但我认为没有给予足够的尊重。该框架非常通用,我不确定任何其他语言或界面是否能够击败它,同时保持其多功能性。我认为它也是最好的3D图形语言 - 你学到很多其他语言可能隐藏在幕后的东西,就像在Java之前学习C ++一样。