在窗口中绘制最简单的3D程序是什么? 我用C++、OpenGL和WxWIDGET编程。由于不太了解其他编程语言/框架中发生的情况,我遇到了以下问题:

在窗口中绘制最简单的3D程序是什么? 我用C++、OpenGL和WxWIDGET编程。由于不太了解其他编程语言/框架中发生的情况,我遇到了以下问题:,3d,3d,哪种编程语言或编程平台是当今初学3D程序员最简单的编程语言或编程平台?不一定是游戏程序员!通过显示该语言中最简单而不是最小的代码片段,在窗口中绘制正方形/立方体,来演示您的情况。代码应完整且可编译/解释 < C++ > OpenGL和GLUT,这里是红皮书的1-2页OpenGL程序指南: 正如您所看到的,它使用GLUT,这是一个古老的OpenGL窗口框架。我不知道您希望代码如何或为什么比它小 您确实需要明确指定很多内容 您的代码包括: 指定正方形 配置显示模式和投影 指定窗口大小和位置 除了指定

哪种编程语言或编程平台是当今初学3D程序员最简单的编程语言或编程平台?不一定是游戏程序员!通过显示该语言中最简单而不是最小的代码片段,在窗口中绘制正方形/立方体,来演示您的情况。代码应完整且可编译/解释

< C++ > OpenGL和GLUT,这里是红皮书的1-2页OpenGL程序指南:


正如您所看到的,它使用GLUT,这是一个古老的OpenGL窗口框架。

我不知道您希望代码如何或为什么比它小

您确实需要明确指定很多内容

您的代码包括:

指定正方形 配置显示模式和投影 指定窗口大小和位置
除了指定的信息之外,您没有更多的代码,这是高效表达式的一个很好的定义。如果代码更小,您将无法指定足够的信息来描述您想要做什么。

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

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

话虽如此,供过于求并没有什么特别过时的。有许多人供过于求。它的好处是,即使在配置奇怪的主机上,它也几乎肯定会出现,而任何其他解决方案都需要特定于平台的代码或跨平台兼容层。如果我想让一个只需要显示三维图形、只需要鼠标和键盘交互的程序保持简单,那么我可能会对GLUT非常满意


但是如果你想要比这更简单的话?好的,我可能会向您指出一个场景图库,它绑定到一些可解释的语言。

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


正如其他海报所指出的,守则的其余部分是必要的。你不必使用GLUT,尽管它没有什么问题——我有点喜欢。您还可以尝试,一组到GLUT、OpenGL、SDL、GLFW和更多的Mono/.Net绑定。两者都是跨平台的。

过剩可能是过时的,但我认为它没有得到足够的尊重。该框架是非常通用的,我不确定是否有其他语言或接口在保持其多功能性的同时胜过它。我认为这也是最好的3D图形语言,你可以学到很多其他语言可能隐藏在背后的东西,就像在java学习C++之前。
#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. */
}