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 ۸¦ ¼³Á¤Çß½À´Ï´Ù.