OpenGLを使用したプログラミングについて解説します。
プリミティブの頂点を設定するときの、開始と終了を宣言します。
void glBegin( GLenum mode );glBegin function (Windows) | MSDN
void glEnd( void );
The glOrtho function multiplies the current matrix by an orthographic matrix.
void glOrtho(
    GLdouble left,
    GLdouble right,
    GLdouble bottom,
    GLdouble top,
    GLdouble near,
    GLdouble far
    );
		
		
void gluCylinder(
    GLUquadricObj *qobj,
    GLdouble baseRadius,
    GLdouble topRadius,
    GLdouble height,
    GLint slices,
    GLint stacks
    );
			gluCylinder function (Windows) | MSDN
		変換行列に透視変換の行列を乗じます。
void gluPerspective(
    GLdouble fovy,   // カメラの画角
    GLdouble aspect, // 画面のアスペクト比
    GLdouble zNear,  // 奥行き方向の範囲
    GLdouble zFar    //
    );
		
void gluLookAt(
    GLdouble eyex,    // 視点の位置
    GLdouble eyey,
    GLdouble eyez,
    GLdouble centerx, // 目標の位置
    GLdouble centery,
    GLdouble centerz,
    GLdouble upx,     // ウィンドウに表示される画像の「上」の方向
    GLdouble upy,
    GLdouble upz
    );
		デバッグ時だけエラーが出力されるようにするには、次のようなマクロを用意すると便利です。
#ifdef _DEBUG
    #define CHECK_OPENGL_ERROR(cmd)\
        cmd;\
        {\
            GLenum error;\
            if((error = glGetError()) != GL_NO_ERROR)\
            {\
                TRACE("%s:%d[%s] OpenGL Error. %s\n",\
                 __FILE__, __LINE__, #cmd, gluErrorString(error));\
            }\
        }
#else
    #define CHECK_OPENGL_ERROR(cmd) cmd;
#endif
			Performance OpenGL: Platform Independent Techniques| 関数 | 説明 | 
|---|---|
| auxWireSphere | 球の描画 (ワイヤー) | 
| auxSolidSphere | 球 | 
| auxWireCube | 立方体 | 
| auxSolidCube | 
Nate Robins - OpenGL - GLUT for Win32
ソリッド キューブを描画します。
void glutSolidCube(GLdouble size);
ワイヤーフレーム キューブを描画します。
void glutWireCube(GLdouble size);
OpenGLのピクセル フォーマットを設定します。
BOOL WINAPI SetPixelFormat(
    HDC hdc,
    int iPixelFormat,
    const PIXELFORMATDESCRIPTOR *ppfd
    );
			SetPixelFormat function (Windows) | MSDN
		
		OpenGLでは3Dモデルを定義する標準的なフォーマットが定義されていないため、他で定義されているフォーマットを流用することになります。
DXFとは、CADで使用される標準的なファイル形式です。
Xファイルとは、DirectXでサポートされるファイル形式です。
OpenGLを、C#などの.NET言語から呼び出せるようにするラッパーです。
メタセコイアのオブジェクトを読み込めます。
HGLRC m_hRC; // void Init( const HDC &hDC ) throw(const DWORD) { // ピクセル フォーマットを初期化する InitPixelFormat( hDC ); // カラーパレットを設定する CreateRGBPalette( hDC ); // レンダリングコンテキストを生成する if( ( m_hRC = ::wglCreateContext( hDC ) ) == NULL ) throw GetLastError(); // レンダリングコンテキストをカレントにする if( !::wglMakeCurrent( hDC, m_hRC ) ) throw GetLastError(); ::glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); // 画面をクリアする色の設定 ::glClearDepth( 1.0f ); // Depthバッファの指定 ::glEnable( GL_DEPTH_TEST ); // デプステストを有効 // ::glEnable( GL_CULL_FACE ); // 片面表示を有効 ::glCullFace( GL_BACK ); // 裏面を非表示 ::glEnable( GL_LIGHTING ); // 陰影付けを有効 ::glEnable( GL_LIGHT0 ); // 光源を有効 ::glShadeModel( GL_SMOOTH ); // スムーズシェーディングモデル // ::glPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); // ワイヤーフレームモデル // レンダリングコンテキストを解放する if( !::wglMakeCurrent( hDC, NULL ) ) throw GetLastError(); } // ピクセルフォーマットの初期化 void InitPixelFormat( const HDC &hDC ) throw(const DWORD) { // ウィンドウのピクセルフォーマットの設定 PIXELFORMATDESCRIPTOR pfd = { sizeof( PIXELFORMATDESCRIPTOR ), // 構造体のサイズ 1, // 構造体のバージョン番号 PFD_DRAW_TO_WINDOW // 特性フラグ(アプリケーションがメモリDCのビットマップに描画可能) | PFD_SUPPORT_OPENGL // (バッファがOpenGLをサポートする) | PFD_DOUBLEBUFFER, // (ダブルバッファを使う) PFD_TYPE_RGBA, // ピクセルのカラーデータ (RGBAモード) 24, // カラービット数 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, // デプスバッファのピクセル当りのビット数 0, 0, PFD_MAIN_PLANE, // レイヤタイプ (Win32ではPFD_MAIN_PLANE) 0, 0, 0, 0 }; // デバイス コンテキストに最も適合するピクセルフォーマットの選択 int pixelFormat = ::ChoosePixelFormat( hDC, &pfd ); if( !pixelFormat) throw GetLastError(); // これをデバイスコンテキストのピクセルフォーマットとする if( !::SetPixelFormat( hDC, pixelFormat, &pfd ) ) throw GetLastError(); } // カラーパレットの設定 void CreateRGBPalette( const HDC &hDC ) throw(const DWORD, OpenGLError) { // ピクセルフォーマットのインデックスの取得 int n = ::GetPixelFormat( hDC ); if(!n) throw GetLastError(); // ピクセルファーマットのリストの取得 PIXELFORMATDESCRIPTOR pfd; if( !::DescribePixelFormat( hDC, n, sizeof( PIXELFORMATDESCRIPTOR ), &pfd ) ) throw GetLastError(); if( pfd.dwFlags & PFD_NEED_PALETTE) throw InvalidDisplayMode; }