2009-07-17 16 views
2

私はC++、OpenGL、wxWidgetsを使って3Dでプログラムを作成します。ウィンドウで描画する最も簡単な3Dプログラムは何ですか?

今日、初心者の3Dプログラマにとって、今日最も簡単なプログラミング言語(またはプログラミングプラットフォーム)はどれですか? (ではありません)ゲームプログラマー!)その中で最も単純な(ではなくではない)コードをその言語で表示して、四角形/立方体をウィンドウに描くことで、コードは完全でコンパイル可能/解釈可能でなければなりません。

#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. */ 
} 

することができますように非常によく:C++、OpenGLとGLUTの場合には

は、ここに レッドブックOpenGLのプログラミングガイド)から first example(1-2)でありますGLUTを使用しています。GLUTは、OpenGLのための古典的なウィンドウフレームワークです。

答えて

2

私はあなたのコードがそれよりも小さくなるようにしたいだろうかか、なぜわからないんだけど...

あなたが本当に明示的に指定する必要が多大にあります。あなたのコードは、から構成さ

:表示モードと投影の設定平方

  • を指定

    • windowsizeと位置

    を指定あなたはそのあなたの情報よりも多くのコードを持っていません指定します。これは、効率的な表現のための大きな定義です。コードがそれより小さい場合は、実行したいことを記述するのに十分な情報を指定しないでください。

  • 1

    GLUTのほかに何かが必要な場合は、オペレーティングシステムで提供されているOpenGLコンテキストコントロールを使用する必要があります。これはプラットフォームによって大きく異なります。 NeHe Productionsは、自分のサイトで数十のOpenGLチュートリアルを提供しています。まず、いくつかのオペレーティングシステムでOpenGLコンテキストを作成する方法を紹介します。

    プラットフォーム間の互換性がまだまだ長い場合は、SDLである可能性があります。GLUTには、基盤となる抽象概念よりかなり薄い層であるという点が非常に似ていますが、サウンドやジョイスティックなど、ハードウェアとやり取りする機会が増えます。

    言われているように、GLUTには特に古風なことはありません。 GLUTの多くはimplementationsです。それは、奇妙に構成されたホストであっても、プラットフォーム固有のコードまたはクロスプラットフォームの互換性レイヤーが必要になることはほぼ確実です。 3-Dグラフィックスを表示し、マウスとキーボードだけで対話する必要のあるプログラムでは単純なものにしたいと思ったら、おそらくGLUTには満足しているでしょう。


    しかし、それよりもさらに簡単にしたい場合は、まあ、私はおそらく、解釈可能な言語へのバインディングを持つシーングラフライブラリを指しています。

    1

    これと他のRed Bookの例を小さくする場合は、色、頂点、光などの情報をハードコードしないでください。フォーマットを決定し、ファイルからモデル情報を読み込みます。例を理解しやすくし、最終的にはこの種のものをハードコーディングしたくないでしょう。

    残りのコードは、他のポスターが指摘しているように、必要です。 GLUTを使う必要はありませんが、それには何も問題はありません - 私はGLFWのようなものです。また、Tao Framework、GLUT、OpenGL、SDL、GLFWなどのMono/.Netバインディングのセットを試すこともできます。どちらもクロスプラットフォームです。

    1

    GLUTは古風かもしれないが、私はそれが十分な尊敬を与えられているとは思わない。このフレームワークは非常に多用途であり、その多用途性を維持しながら、他の言語やインタフェースがそれを賞賛しているかどうかはわかりません。私はそれがまた最高の3Dグラフィックス言語であると考えています。他の言語がJavaの前にC++を学ぶのと同じくらいたくさんのことを学びます。

    関連する問題