3DS ·Îµù ·çƾ

¿ì¼± ÀÌ ±ÛÀº ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 97³â 2¿ù, 4¿ù, 5¿ùÈ£¿¡ ½Ç¸° 'OpenGL·Î 3D ¼¼»óÀ» ¿¬´Ù' ¶ó´Â ±ÛÀ» ÂüÁ¶ÇÑ °ÍÀÓÀ» ¹àÈû´Ï´Ù.

¼Ò½ºÆÄÀÏÀÔ´Ï´Ù. ->      Load3ds.zip (128 KB)   : sample.3ds ¿Í load3ds.dll, load3ds.lib Æ÷ÇÔ.    
(VC++6.0 »ç¿ë)          Load3ds[dll].zip (47 KB)
                         

´ÙÀ½Àº Àû¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼³¸íÀÔ´Ï´Ù.

1. ¾Õ¿¡¼­ ¼³¸íÇß´ø ´ë·Î Custom Wizard·Î ¸¸µç »õ·Î¿î OpenGL À§Àúµå·Î »õ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù. Viewer·Î À̸§À» Áþµµ·Ï ÇսôÙ.
opengl32.lib glu32.lib glaux.lib¸¦ Æ÷ÇÔ½ÃŰ´Â °ÍÀ» ÀØÁö ¸»¾Æ¾ßÁÒ.

2. load3ds[dll].zip ÆÄÀÏÀ» Àû´çÇÑ Æú´õ¿¡ ¾ÐÃàÀ» Ǭ ÈÄ¿¡ ÄÄÆÄÀÏÇÕ´Ï´Ù.
ÄÄÆÄÀÏ ÈÄ Load3ds.lib¿Í Load3ds.dll ÀÌ »ý±æ °Ì´Ï´Ù. ÀÌ ÆÄÀϵéÀ» 1¹ø¿¡¼­ ¸¸µç »õ ÇÁ·ÎÁ§Æ® Æú´õ·Î º¹»çÇÕ´Ï´Ù. ±×¸®°í Àû´çÇÑ 3dsÆÄÀÏÀ» sample.3ds ¶ó°í À̸§À» ¹Ù²Û ÈÄ ¿ª½Ã °°Àº Æú´õ¿¡ º¹»çÇØ ³Ö½À´Ï´Ù.

3. opengl32.lib glu32.lib glaux.lib µÚ¿¡ Load3ds.lib¸¦ Ãß°¡Çؼ­ Æ÷ÇÔ½Ãŵ´Ï´Ù. DLLÀÇ ¹¬½ÃÀû ¿¬°á¹æ¹ýÀ» »ç¿ëÇÒ °Ì´Ï´Ù.

4. load3ds.zip ÆÄÀÏ¿¡¼­ loader3ds.h ÆÄÀÏÀ» º¹»çÇØ¼­ include ÇÕ´Ï´Ù. ÀÌÁ¦ºÎÅÍ ¼Õ º¼ ÄÚµå´Â ¸ðµÎ ºä Ŭ·¡½ºÀÔ´Ï´Ù. ´Ù¸¥°Ç °Çµå¸®Áöµµ ¾Ê½À´Ï´Ù.

5. ViewerView.h ÆÄÀÏÀ» ¿­°í ´ÙÀ½°ú °°ÀÌ Çì´õÆÄÀÏ 2°³¸¦ Ãß°¡ÇÕ´Ï´Ù. 1¹ø¿¡ ¾²Àδë·Î Çß´Ù¸é OpenGL¿¡ °ü·ÃµÈ 3°³ÀÇ Çì´õÆÄÀÏÀº ÀÌ¹Ì Æ÷ÇԵǾî ÀÖÀ» °Ì´Ï´Ù.

#include "gl/gl.h" 
#include "gl/glu.h" 
#include "gl/glaux.h" 
#include "loader3ds.h"     // <- Ãß°¡ 
#include "math.h"          // <- Ãß°¡ 

6. ´ÙÀ½ÀÇ ¸â¹ö º¯¼ö¿Í ¸â¹ö ÇÔ¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù. Ŭ·¡½º À§Àúµå¸¦ ¾²´ø ¸»´ø ¸¶À½´ë·ÎÀÔ´Ï´Ù. Àüü ÄÚµå´Â ¼Ò½º¸¦ Âü°íÇϼ¼¿ä. ±×¸®°í ¿ø·¡ ÀÖ´ø Äڵ忡¼­ DrawScene() ÇÔ¼ö¸¦ ¸ðµÎ Áö¿ö¾ß ÇÕ´Ï´Ù. Á¤ÀÇºÎ¿Í ¼±¾ðºÎ, OnDraw()¿¡ ¾²ÀÎ ºÎºÐ±îÁö ½Ï ´Ù Áö¿ó´Ï´Ù. ¾²ÀÌ´Â ÇÔ¼öÀ̸§ÀÌ ´Þ¶ó ¿©±â¼± Çʿ䰡 ¾ø°Åµç¿ä.

protected: 
        OBJECT Object_HEAD; 
        MATERIAL Material_HEAD;
        PERSPECTIVE_CAMERA Cam_HEAD; 
        float bck_r, bck_g, bck_b; 
        float m_xRotate, m_yRotate, m_zRotate; 
        float m_xTranslate, m_yTranslate, m_zTranslate; 
        float m_scene_center_x, m_scene_center_y, m_scene_center_z; 
        float m_scene_max_x, m_scene_min_x, m_scene_max_y, m_scene_min_y; 
        float m_scene_max_z, m_scene_min_z; 
 
        void DrawWithOpenGL(); 
        void BuildObject(); 
        void Draw_object_with_OpenGL(P_OBJECT); 
        void set_material(float ambient[], float diffuse[], float specular[], 
                         float emissive[], float *shininess, float *transparency, int index ); 
        void calculate_face_normal(float x1, float y1, float z1, 
                                  float x2, float y2, float z2, 
                                       float x3, float y3, float z3,  
                                  float *normal_x, float *normal_y, float *normal_z); 

7. Ŭ·¡½º À§Àúµå¿¡¼­ WM_KEYDOWN ¸Þ½ÃÁö¸¦ ¼±ÅÃÇØ¼­ OnKeyDown() ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵ùÇÕ´Ï´Ù.

8. SetupPixelFormat()¿¡¼­ PFD_DOUBLEBUFFER ¸¦ Ãß°¡Çϰí, z-buffer¸¦ 32ºñÆ®·Î ¹Ù²ß´Ï´Ù.

// Çȼ¿ Æ÷¸Ë ¼³Á¤Çϱâ 
BOOL CViewerView::SetupPixelFormat(PIXELFORMATDESCRIPTOR * pPFD) 
{ 
        PIXELFORMATDESCRIPTOR pfd = 
        { 
                sizeof(PIXELFORMATDESCRIPTOR),   // PIXELFORMATDESCRIPTORÀÇ Å©±â 
                1,                                                       // ¹öÀü 
                PFD_DRAW_TO_WINDOW |                 // support window 
                PFD_SUPPORT_OPENGL|                   // support OpenGL 
      PFD_DOUBLEBUFFER,         //  <- Ãß°¡ÇÑ ºÎºÐ 
                PFD_TYPE_RGBA,                              // RGBA type 
                24,                                                      // 24-bit color depth 
                0, 0, 0, 0, 0, 0,                                     // color bits ignored 
                0,                                                        // no alpha buffer 
                0,                                                        // shift bit ingored 
                0,                                                        // no accumulation buffer 
                0, 0, 0, 0,                                             // accum bits ingored
      32,                        //<-¹Ù²Û ºÎºÐ   // 32-bit z-buffer 
                0,                                                        // no stencil buffer 
                0,                                                       // no auxiliary buffer 
                PFD_MAIN_PLANE,                            // main layer 
                0,                                                       // reserved 
                0, 0, 0                                                // layer masks ignored 
        };
   ................ 

9. ´ÙÀ½ÀÇ ÇÔ¼öµéÀº Æ÷ÇÔµÈ ¼Ò½º¸¦ º¸°í ½ÇÇàÄڵ带 Ãß°¡ÇÑ´Ù.

Ãß°¡µÈ ÇÔ¼öµé :   DrawWithOpenGL(), 
                         BuildObject(), 
                         Draw_object_with_OpenGL(), 
                         Set_material(), 
                         calculate_face_normal(), 
                         OnKeyDown() 
Äڵ尡 º¯°æµÈ ÇÔ¼öµé :    CViewerView(), 
                                      PreCreateWindow(), 
                                      OnDraw(), 
                                      OnSize(), 

OnKeyDown() ÇÔ¼ö´Â ºÒ·¯µéÀÎ 3ds °´Ã¼¸¦ ȸÀü½ÃŰ°Å³ª À̵¿½Ã۱â À§ÇØ Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù. ÀÌ ¼Ò½ºÄڵ忡¼­´Â x, y, z ÃàÀÇ È¸ÀüÀ» À§ÇØ »óÇÏÄ¿¼­Å°, Á¿ìÄ¿¼­Å°, insert/delete ۸¦ »ç¿ëÇϰí, zÃàÀ¸·ÎÀÇ À̵¿À» À§ÇØ Home/End ۸¦ ¼³Á¤Çß½À´Ï´Ù.