• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] Nehe Lesson 12

본문

이번 강의에서는 출력 리스트를 이용하는 법을 배우겠습니다. 단순히 리스트를 만들어 빠르게 하는 것 뿐만 아니라 간단한 GL 씬을 만들어야 할 때 몇 줄로 나누어 따로 사용할 수 있습니다.

예를 들어서 각 판을 두 개의 운석으로부터 시작하는 asteroids 게임을 만든다고 합시다. 먼저 그래프지를 펼쳐서 어떻게 3D 운석을 만들지를 궁리하겠죠. 모든 준비가 끝나면 OpenGL의 사각형 혹은 다각형을 이용해서 운석을 만들기 시작할 것입니다. 만약 운석이 8각형이라고 해 봅시다. 현명하신 분들은 루프를 만들어서 한 번에 운석을 그리겠죠. 그러면 대강 18 줄 내외의 코드로 운석을 만들 수 있게 됩니다. 화면에 매번 운석을 그려내는 것은 컴퓨터를 혹사시키는 일입니다. 이런 복잡한 물체를 표현하게 될 때에 여러분은 제가 무슨 말을 하려고 하는지 알게 될 것입니다.

결론은 출력 리스트입니다. 이것을 사용하면 물체를 한 번에 그릴 수 있고, 텍스쳐를 입히거나 색상을 칠하는 등 뭐든지 할 수 있습니다. 출력 리스트에 이름을 부여해야 합니다. 운석 게임이기 때문에 ‘asteroid’라고 이름하겠습니다. 텍스쳐와 색상이 입혀진 운석을 화면에 출력할 때에는 glCallList(asteroid) 함수를 호출하기만 하면 미리 만들어진 운석이 화면에 즉시 출력될 것입니다. 이미 출력 리스트에 만들어져 메모리에 저장되어 있기 때문에 어떻게 만들어야 하는지 OpenGL이 알아야 할 필요가 없기 때문입니다. 이 방법은 프로세서의 부하를 줄이고 프로그램을 훨씬 빠르게 동작하게 해 줍니다.

준비가 되셨지요? 오늘 만들 프로그램은 Q-Bert 출력 리스트 데모입니다. 화면에 15개의 Q-Bert 같은 육면체가 출력될 것입니다. 각 육면체는 TOP과 BOX로 구성됩니다. TOP을 따로 만들어서 어두운 그림자 색상을 만들어줍니다. BOX는 뚜껑 없는 육면체입니다.

Lesson 6 에서 쓰던 코드의 거의 대부분을 새로 써 놓아서 이해하기 쉽게 하겠습니다. 다음의 코드들은 지금까지 했던 강의에서 쓰던 기본 코드입니다.


#include
#include
#include
#include
#include

HDC hDC=NULL;
HGLRC hRC=NULL;
HWND hWnd=NULL;
HINSTANCE hInstance;

bool keys[256];
bool active=TRUE;
bool fullscreen=TRUE;


이제 우리가 쓸 변수를 선언합니다. 먼저 텍스쳐 저장소를 선언합니다. 그리고 출력 리스트용으로 두 개의 변수를 선언합니다. 이것은 출력 리스트가 저장된 장소의 포인터를 저장하는 데 쓰입니다. 이것을 box와 top이라고 부르겠습니다.

그 다음 화면에서 육면체의 위치를 기록하는 xloop와 yloop를 선언하고 x축과 y축의 회전을 기록하는 xrot와 yrot를 선언하겠습니다.


GLuint texture[1];
GLuint box;
GLuint top;

GLuint xloop;
GLuint yloop;

GLfloat xrot;
GLfloat yrot;


다음에는 두 개의 색상 배열을 선언합니다. boxcol에는 밝은 색으로 빨간색, 오렌지, 노란색, 녹색, 파란색을 선언합니다. 각각의 대괄호 안의 값은 빨간색, 녹색, 파란색의 값입니다. 대괄호 한 묶음이 전체 한 색상을 뜻합니다.

두 번째 색상 배열은 어두운 색으로 빨간색, 오렌지, 노란색, 녹색, 파란색을 선언합니다. 이것은 상자의 뚜껑을 그리는 데 쓰일 색상입니다. 상자의 다른 부분보다 꼭데기를 어둡게 만들 것입니다.


static GLfloat boxcol[5][3]=
{
// 밝은색: 빨간색, 오렌지색, 노란색, 녹색, 파란색
{1.0f,0.0f,0.0f}, {1.0f,0.5f,0.0f}, {1.0f,1.0f,0.0f}, {0.0f,1.0f,0.0f}, {0.0f,1.0f,1.0f}
};

static GLfloat topcol[5][3]=
{
// 어두운색: 빨간색, 오렌지색, 노란색, 녹색, 파란색
{.5f,0.0f,0.0f}, {0.5f,0.25f,0.0f}, {0.5f,0.5f,0.0f}, {0.0f,0.5f,0.0f}, {0.0f,0.5f,0.5f}
};


이제 진짜로 출력 리스트를 만들겠습니다. box를 만드는 코드는 첫 번째 리스트에, top을 만드는 코드는 두 번째 리스트에 있습니다. 이 부분은 상세하게 설명하겠습니다.


GLvoid BuildLists()
{


먼저 OpenGL 에게 두 개의 리스트를 만들겠다는 의미로 glGenLists(2) 함수를 호출하여 두 개의 리스트를 위한 공간을 만들고 첫 번째 공간의 포인터를 받습니다. ‘box’ 변수가 첫 번재 리스트의 장소를 가지고 있습니다. Box를 호출하게 되면 첫 번째 리스트를 그릴 수 있습니다.


box=glGenLists(2); // 두 개의 리스트를 만든다


이제 첫 번재 리스트를 만들겠습니다. 이미 두 개의 장소를 할당해 두었고 box 변수가 첫 번째 리스트의 공간을 가지고 있다는 것을 알고 있습니다. 이제 OpenGL 에게 어디서부터 리스트가 시작되는지, 그리고 어떤 종류의 리스트를 만드는지 알려주면 됩니다.

이것을 위해서 glNewList() 함수를 이용합니다. Box를 첫 번째 인수로 넘겨줘서 OpenGL에게 box가 가리키는 메모리 공간에 리스트를 저장하도록 합니다. 두 번째 인수 GL_COMPILE은 메모리에 미리 만들어 두어서 OpenGL 이 매번 화면에 그릴 때마다 어떻게 만드는지를 확인하지 않도록 합니다.

GL_COMPILE은 프로그래밍과 비슷합니다. 어떤 소스코드가 있을 때 그것을 실행하기 위해서는 매번 컴파일하여 실행하여야 하는데, 만일 이것이 이미 컴파일되어 실행파일로 만들어져 있다면 더 이상 컴파일하지 않아도 실행파일을 클릭하기만 하면 실행할 수 있게 됩니다. OpenGL이 한 번 컴파일해 둔 리스트는 더 이상 컴파일하지 않아도 실행할 준비가 되어 있습니다. 이렇게 출력 리스트를 이용하면 속도 향상을 얻을 수 있습니다.


glNewList(box,GL_COMPILE); // 새로 컴파일하는 출력 리스트 box


이제 뚜껑을 뺀 나머지 상자를 그리기 시작합니다. 그렇지만 화면에 출력되는 것은 아니고 출력 리스트에만 저장될 것입니다.

glNewList()와 glEndList()함수 사이에는 색상을 선택하고 텍스쳐를 바꾸는 등 어떤 명령을 넣어도 좋습니다. 다만 그 사이에 출력 리스트를 실행중에 바꾸는 코드는 넣을 수 없습니다. 한 번 만들어진 출력 리스트는 바꿀 수 없습니다.

저 속에 glColor3ub(rand()%255,rand()%255,rand()%255)함수를 넣으면 매번 화면에 출력될 때마다 다른 색상이 출력될 것으로 기대하시겠습니다만, 리스트는 만들어진 것이기 때문에 화면에 출력될 때 색상이 바뀌지 않고, 무작위로 처음에 만들어진 그 색상이 계속해서 남아있게 됩니다.

만약에 출력 리스트의 색상을 바꾸고 싶을 때에는 화면에 출력 리스트를 그리기 전에 바꾸어야 합니다. 이후에 좀 더 자세히 설명하겠습니다.


glBegin(GL_QUADS); // 사각형 그리기 시작
// 밑면
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 오른쪽 위
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 왼쪽 위
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 왼쪽 아래
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 오른쪽 아래
// 앞면
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 왼쪽 아래
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 오른쪽 아래
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 오른쪽 위
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 왼쪽 위
// 뒷면
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 오른쪽 아래
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 오른쪽 위
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 왼쪽 위
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 왼쪽 아래
// 오른쪽면
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 오른쪽 아래
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 오른쪽 위
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 왼쪽 위
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 왼쪽 아래
// 왼쪽면
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 왼쪽 아래
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 오른쪽 아래
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 오른쪽 위
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 왼쪽 위
glEnd(); // 사각형 그리기 끝


glEndList()함수를 호출하면 OpenGL에게 이제 리스트 만들기가 끝났음을 알려주는 것입니다. glNewList()와 glEndList()사이에 있는 어떤 것이든 모두 출력 리스트에 포함되고 밖에 있는 것은 포함되지 않습니다.


glEndList(); // box 리스트 만들기 끝


이제 두 번째 출력 리스트를 만들겠습니다. 두 번째 리스트가 메모리의 어디에 저장되었는지를 찾아내려면 이전의 출력 리스트 (box) 를 구해서 거기에 하나를 더합니다. 아래의 코드에 있는 top 변수가 두 번재 출력 리스트의 장소를 가리킵니다.


top=box+1; // top 리스트 는 box 리스트 + 1


이제 두 번째 출력 리스트가 어디에 저장되는지 알았으니 만들어 보겠습니다. 처음 것을 만들 때와 동일한 방법인데 이것을 box 대신 top 이라는 리스트에 저장하는 것 뿐입니다.


glNewList(top,GL_COMPILE); // top 출력 리스트를 새로 컴파일한다


다음의 코드가 z 표면에 그려지는 간단한 사각형으로 만들어진 상자의 뚜껑입니다.


glBegin(GL_QUADS); // 사각형 그리기 시작
// 윗면
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 왼쪽 위
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 왼쪽 아래
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 오른쪽 아래
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 오른쪽 위
glEnd(); // 사각형 그리기 끝


glEndList()함수를 호출하면 OpenGL은 두 번재 리스트를 만드는 것을 그치게 됩니다. 이제 다 되었습니다. 두 번재 출력 리스트를 무사히 만들었습니다.


glEndList(); // 뚜껑 출력 리스트를 다 만들었다
}


비트맵/텍스쳐 만드는 코드는 지난 강의에서 이용한 것과 동일한 코드입니다. 육면체 모든 면에 대입할 수 있는 텍스쳐를 이용합니다. 저는 여기서 mipmapping을 이용해서 텍스쳐를 아주 부드럽게 만들어 보려고 합니다. 픽셀을 보는 것이 싫거든요. :) 여기서 불러들일 텍스쳐의 이름은 ‘cube.bmp’이고 data 디렉토리에 저장되어 있습니다. LoadBMP()함수를 찾아서 이름을 다음과 같이 고쳐 주십시오.


if (TextureImage[0]=LoadBMP("Data/Cube.bmp"))


크기 조정 함수는 tutorial 6 의 것과 동일합니다.

초기화 함수에 몇 가지 변동이 있습니다. BuildList()함수를 추가하여 출력 리스트를 만드는 루틴을 호출합니다. BuildList()함수는 LoadGLTextures()함수 뒤에 호출을 하는 순서가 중요합니다. 먼저 텍스쳐를 만든 다음 출력 리스트를 만들어야 육면체에 대입할 텍스쳐가 정확히 만들어집니다.


int InitGL(GLvoid)
{
if (!LoadGLTextures())
{
return FALSE;
}
BuildLists(); // 출력 리스트를 만드는 코드로 점프
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);


다음의 세 줄은 간편하게 광원을 만드는 방법입니다. Light0은 대부분의 비디오 카드에 이미 설정되어 있고, 우리가 따로 광원을 만들어주는 수고를 덜게 됩니다. light0을 초기화하고 나면 광원을 사용할 수 있습니다. 만약에 여러분 비디오 카드에서 light0이 작동하지 않으면 그냥 광원 설정을 지워 주십시오.

마지막 줄의 GL_COLOR_MATERIAL 은 텍스쳐 맵에 색상을 첨가할 수 있도록 합니다. 만약 material coloring 을 활성화하지 않으면 텍스쳐는 원래 색상에서 변하지 않게 되어 glColor3f(r,g,b) 함수의 효과가 없게 됩니다. 반드시 활성화해 주어야 합니다.


glEnable(GL_LIGHT0); // 간편한 광원 설정
glEnable(GL_LIGHTING); // 빛을 활성화
glEnable(GL_COLOR_MATERIAL); // Material Coloring 활성화


마지막으로 시도법을 선택하여 화면을 보기 좋게 하고 TRUE를 리턴하여 모든 초기화 과정이 올바르게 끝났음을 알립니다.


glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 끝내주는 투시도법
return TRUE; // 초기화가 다 잘 되었다


이제 그림을 그리는 코드입니다. 저는 약간 산수에 미쳐 있습니다. 삼각함수는 아니지만 약간 이상할 것입니다. 먼저 화면과 depth buffer를 초기화하는 것으로 시작합니다.

그 다음 텍스쳐를 육면체에 대입합니다. 이 과정을 출력 리스트 내에서 할 수도 있었지만 이것을 밖에서 해 줌으로써 텍스쳐를 마음대로 바꿀 수 있습니다 만일 glBindTexture(GL_TEXTURE_2D,texture[0])함수를 출력 리스트 코드 안에 첨가했다면 출력 리스트는 영원히 선택한 텍스쳐로 입혀지게 됩니다.


int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texture[0]);


이제 재미있는 부분입니다. yloop라는 루프가 있는데 이것은 육면체의 y축 (위아래) 위치를 결정하는데 쓰입니다. 위아래로 다섯 줄을 만들 것이기 때문에 루프는 1부터 6까지 (다섯 번)을 돌립니다.


for (yloop=1;yloop<6;yloop++) // y 평면으로 루프
{


xloop라는 루프는 육면체의 x축 (왼쪽부터 오른쪽) 위치를 지정합니다. 왼쪽부터 오른쪽으로 그려지는 육면체의 갯수는 몇 번째 줄을 그리느냐에 따라 달라집니다. 만약에 맨 윗줄을 그린다면 xloop는 0부터 1까지 (육면체 한 개) 돌게 되고, 다음 줄은 0부터 2까지 (육면체 두 개), 이렇게 돌게 됩니다.


for (xloop=0;xloop {


glLoadIdentity()함수로 뷰를 초기화합니다.


glLoadIdentity(); // 뷰를 초기화


다음 줄에서는 화면의 특정 위치로 이동합니다. 복잡하게 보이지만 사실 그렇지 않습니다. X 축 상에서는 다음의 일들이 일어납니다.

오른쪽으로 1.4유닛 이동하여 피라밋이 화면 중간에 위치하도록 합니다. 그 다음 xloop에 2.8을 곱하고 1.4를 더합니다. 2.8을 곱함으로써 육면체가 서로 엇갈리게 배치합니다. 2.8은 육면체를 45도 각도로 기울였을 때 대략 넓이가 됩니다. 마지막으로 yloop * 1.4 를 뺍니다. 이렇게 하면 육면체가 몇 번째 줄에 있느냐에 따라서 왼쪽으로 이동하게 됩니다. 왼쪽으로 움직여주지 않으면 피라밋은 왼쪽으로 배열될 것이고, 피라밋이 피라밋처럼 보이지 않게 됩니다.

Y 축에서는 6에서 yloop 을 뺍니다. 그렇지 않으면 피라밋이 뒤집어집니다. 그 다음 2.4를 곱하여 육면체들이 y 축에서 엇갈리게 배치되도록 합니다. 2.4는 대략 육면체의 높이입니다. 그 다음 7을 빼서 피라밋이 밑에서부터 위로 지어져 올라가게 합니다.

마지막으로 Z 축으로는 화면 안쪽으로 20유닛 이동시킵니다. 그렇게 하면 화면 크기와 피라밋이 잘 맞게 됩니다.


// 화면에서 육면체의 위치
glTranslatef(1.4f+(float(xloop)*2.8f)-(float(yloop)*1.4f),((6.0f-float(yloop))*2.4f)-7.0f,-20.0f);


이제 x 축으로 회전시킵니다. 우리는 육면체를 카메라 쪽으로 45 도에서 yloop에 2를 곱한 값을 뺀 만큼 기울일 것입니다. 투시도법은 육면체를 자동적으로 기울이게 되므로 기울어진 만큼 보상할 수 있도록 값을 빼 줍니다. 별로 좋은 방법은 아니지만 효과는 있습니다. :)

마지막으로 xrot를 더합니다. 이것은 키보드 입력으로 각도를 조절할 수 있게끔 합니다. 갖고 놀기 재밌겠죠.

x축으로 회전한 다음 y축으로 45도 회전시키고 yrot를 더하여 y축에 키보드 입력을 구현합니다.


glRotatef(45.0f-(2.0f*yloop)+xrot,1.0f,0.0f,0.0f); // 육면체를 위아래로 기울인다
glRotatef(45.0f+yrot,0.0f,1.0f,0.0f); // 육면체를 좌우로 회전시킨다


다음에는 box를 육면체 위치에 그리기 전에 색상(밝은색)을 선택합니다. 우리는 glColor3fv()함수를 쓰고 있습니다. 이것은 색상값을 대괄호 안에 있는 값으로 한 번에 읽어들입니다. 3fv는 3개의 값, 부동 소숫점, 배열의 포인터라는 뜻입니다. 선택하는 색상은 yloop-1이기 때문에 각 줄의 육면체는 각각 다른 색상을 갖게 됩니다. 만약에 xloop-1을 넣으면 우리는 위아래 한 줄씩 다른 색상을 보게 될 것입니다.


glColor3fv(boxcol[yloop-1]); // box의 색상을 지정한다


이제 색상은 선택되었고, box를 그릴 차례입니다. Box를 그리는 코드를 써 주는 대신에 만들어 둔 출력 리스트를 호출합니다. glCallList(box)함수입니다. OpenGL에게 그려야 할 출력 리스트 box를 알려줍니다. 출력 리스트 box는 뚜껑 없는 육면체입니다.

이제 앞에서 이동한 지점에 glColor3fv()함수로 선택한 색상에 따라 box가 그려질 것입니다.


glCallList(box); // box를 그린다


이제 상자의 뚜껑을 그리기 전에 색상(어두운색)을 선택합니다. 정말로 Q-Bert 게임을 만들고 싶으시면 Q-Bert가 점프한 상자의 색상을 바꾸어 주어야 합니다. 색상은 yloop-1 값에 따라 달라집니다.


glColor3fv(topcol[yloop-1]); // 뚜껑의 색상 선택


마지막으로 출력 리스트 top을 그리는 일만 남았습니다. 이것은 상자의 어두운색 뚜껑을 더해줄 것입니다. 다 되었습니다. 쉽죠?


glCallList(top); // top을 그린다
}
}
return TRUE;
}


남은것은 WinMain()함수를 변경하는 일입니다. SwapBuffer(hDC) 줄 바로 밑에 추가하시면 됩니다. 이 코드는 키보드의 왼쪽, 오른쪽, 위, 아래 화살표가 눌렸는지를 확인하고 그 방향에 따라 육면체를 움직이는 역할을 합니다.


SwapBuffers(hDC);
if (keys[VK_LEFT])
{
yrot-=0.2f;
}
if (keys[VK_RIGHT])
{
yrot+=0.2f;
}
if (keys[VK_UP])
{
xrot-=0.2f;
}
if (keys[VK_DOWN])
{
xrot+=0.2f;
}
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 228,692
가입일 :
2003-02-18 14:12:30
서명 :
미입력
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 1

김영환님의 댓글

리스트가 정말 유용하네요...

전체 91,688 건 - 32 페이지
2007.10
18

[기타질문] 바코드 사이즈가요..

바코드가 읽어질수 있는 최소 사이즈가 어느정도 일까요 작은 박스를 만드는데.. 바코드를 넣어야해서여...

2009.09
15

[OS X] 외장하드 부팅 방법 상세하게좀 ㅠㅠ

외장하드로 부팅하는 법좀 알려주세요 ㅠㅠ 디스크 유틸리로 어떻게 하라는건지 .... 잘모르겠어요 ㅠㅠ

2004.02
25

[OS X] 새하드를 달고 기존의 아이튠즈보관함을 모조리 옮길때!

음악이 많아지다보니 기존의 하드로 부족해 새로 120기가 하드를 구입 장착하였습니다. 이제 기존하드에 있던 보관함을 이 새하드로 옮기고 싶은데 기존의 라이브러리 정보를 그대로 가져가면서 옮기는 방법이 어떤것일까요. 과거 경험에 의하면 폴더를 옮기…

2011.04
12

[디자인] 인디자인에서 글씨 하얀 테두리 할 때..

지도 위에 지명을 올렸는데 잘 안보여서 쿽에서 하는 것처럼 글씨에 하얀 테두리를 두르고 싶습니다. 일단 글씨를 아웃라인까지 해서 선을 흰선으로 설정했는데 글씨 안쪽으로 선이 들어가서 원래 두껍기보다 얇아집니다. 쿽…

2014.06
17

[디자인] 인디자인 그림 반드시 eps로 저장해야하나요?

pdf로 변환해서 몇번이나 출력을 보내봤지만 출력소에서 인디 작업할때 그림을 반드시 eps로 저장하라는 말은 들은적이 없습니다만 이번 거래를 하려고 하는 출력소는 반드시 eps로 저장하지않으면 분판이 잘안되는 경우가 있다고 하는데요. 제가 알기로는 …

2003.05
12

[디자인] 일러에서 이미지 잘라내기...

일러에서 이미지 잘라내기 어떻게 하죠 포토샵에선 crop툴을 쓰는데 일러는 통 모르겠어요

2007.03
08

[App 개발] XCode를 사용한 C 프로그래밍하기

맥을 사용한지 얼마 안된 사용자 입니다. 전에 리눅스를 쓸때는 C는 그냥 VI에서 코딩하고 gcc 로 컴파일 시켰는데... 맥에는 Xcode라는 IDE툴이 있다고 해서 설치해봤는데 -_-;; C 프로그래밍...-_-.. 커맨드 라인...이…

2010.06
11

[OS X] 일러스트 흰색 투명 그라데이션

안녕하세요 일러스에서 투명 그라데이션을 넣을때 투명에서 다른색이 들어가있는경우는 투명도에서 곱하기(multiply)를 하면 되던데 투명에서 흰색으로 빠질경우는 어떻게 해야하나요

2005.01
02

[App 개발] 프로그래밍 공부하는 방법

-------------------------------------------------------------------------------- 그냥 나름대로 정리해봄.. ----------------------------------------…

2006.05
02

[BootCamp] 맥북 프로의 윈도우 XP상에서 LCD품질 문제

맥초보인 제가 맥북 프로를 몇 일전에 구입하여 지금 사용중입니다. 근데... 맥 OS상에서는 애플 시네마와 연결하여 듀얼로 구성해도 맥북과 시네마 사이의 색감 등의 차이가 많이 생기지 않는데, 맥북에 부트캠프를 이용하여 XP를 설치하고,…

2011.12
02

[OS X] 인디자인 표 안의 글자 크기 및 글자체 조정

인디자인에서 표를 만들잖아요. 근데 그 표 안에서 글자의 크기랑 글자체를 한꺼번에 조정하고 싶은데 그렇게 되면 자꾸 표의 크기가 바뀌더라구요ㅜㅜ 아직 행간이나 기타 다른 것등은 아닌 것 같은데.. 미치겠어요..ㅠㅠ 글자가 장난이 아니라서 이거 …

2007.06
11

[OS X] 맥에서 프로그램 제거는 어떻게 하는거죠?

윈도우XP는 프로그램설치/삭제 들어가면 되는데 ㅡㅡ; 맥은 그런거 비슷한게 어딧는지 모르겠네요 흐미 ㅠㅠ; 그냥 폴더를 날리면 안될꺼 같은데.. 방법좀 부탁드립니다. 에프터애펙에 플러그인을 한방에 여러개 넣었더니 맛이 갔네요 ㅋ

2003.03
10

[OS X] 텐(10.204)에서 토스트(5.2)를 사용해서 시스템 부팅CD를 만들기...

텐(10.204)에서 토스트(5.2)를 사용해서 시스템 부팅CD를 만들기...를 알고 싶습니다. 시스템CD로 만들려는 시스템은 867용(9.2.2)입니다.. 그냥 구우면 부팅이 안되는데...우째우째하면 부팅CD로 된다는데...몬지 알고 싶습…

2010.01
29

[OS X] 동영상 + 자막 인코더 어플 추천!!

영상 편집을하다보니 자막이 따로 있는게 문제더군요 ㅜㅜ avi를 mov로 인코더하는것도 귀찮았는데 자막까지 일일이 넣기 불편해서 동영상에 자막을 일치시키는 어플을 추천받고싶습니다~ avi 와 smi지원되었으면 좋겠구요~ …

2010.12
28

[OS X] 아이맥 화면밝기 조절

안녕하세요 한가지 더 궁금한 사항 질문드립니다. 아이맥 27인치를 사용하고있습니다. 맥 환경에서는 조절이 셋팅이되어 재시동시에도 변화가 없습니다. 그런데 PC 환경에서 부츠캠프로 조절(이곳에서 알았습니다^^)하고 재시동시에는 원위치인 최대 …

2009.12
04

[OS X] 아이폰과 구글 캘린더 직접 동기화 방법

1. 구글 캘린더와 iCal과의 동기화는 아주 잘됩니다. but 구글캘린더 → iCal 일방적으로만 전송되네요.. 양방향이 되었으면 하는데.. 2. 아이폰에 있는 iCal은 iTunes로 동기화해야 iCal과 동기화 되는건가요! 제가 하고…

2016.08
24

[디자인] 포토샵 jpg 저장시 용량이 너무 큽니다;

파일 첨부한 것처럼 사이즈가 그리 크지 않습니다. 보통 이정도 사이즈라면 jpg 저장했을시 5메가도 안나와야하는데 용량이 30메가 가까이 나옵니다. 이 파일뿐 아니라 다른 파일들도 jpg저장시 용량이 커집니다. 그래서 인디자인에 앉혀서 다시 j…

2010.09
11

[BootCamp] 부트캠프에 윈도우7설치시 파티션이 안보여요

윈도우에서는 맥 파티션이 보이는데 맥에서는 윈도우 파티션이 안보입니다 부트캠프로 설치전에 윈도우 설치시에 파티션새로 만들고 포멧하고 모든게 정상적으로 설치되었는데 ㅡ.ㅡ 질문게시판에 멀 검색해야하는지 .... 고수님들의…

2009.02
03

[OS X] 머리카락 누끼..?

포토샵 CS에서 머리카락 누끼 따는법좀 부탁드려요

2007.12
14

[OS X] mp3전환 프로그램 있나요?

wav나 cd에서 추출된걸 mp3로 전환되는 프로그램이 있나요 아님 mp3 를 wav로 바꿔주거나.. 음악 작업하는데, 어떤걸 써야할지 모르겠네요. 윈도에 보냈다 받았다 하긴 너무 번거롭고... 컨버팅 프로그램 있으면 소…

2003.04
11

[OS X] OS X에 포토샵 7.0을 설치하고 필터 아이캔디를 어떻게 해야할지.....

재규어에 설치한 포토샵 7.0은 아이캔디필터를 사용할 수 없나요 9.2에서는 7.0에도 아이캔디를 사용할 수 있는데.... 혹시 어떤 다른 방법으로 사용하는지 궁금해서 질문올립니다..

2008.05
29

[OS X] 토렌트 다운이 아예 안되요...ㅠ.ㅠ.

미국에 있을때는 토렌트 다운이 잘되었었는데요. 한국에 오니 해외 토렌트와 국내 토렌트 다운이 아예 안되네요. 왜 이런가요 인터넷 설정은 문제 없는거 같구..그런데...희안하네요. 알아보니 지금 사용하는 제 맥에서 transmission이…

2007.09
18

[OS X] 네트워크 공유 비밀번호

맥북끼리 무선공유기를 통해서 네트워크로 파일을 보내려고 하는데요 하다보니 이화면까지는 갔는데 비밀번호를 입력하라그래서 컴퓨터에서 쓰는(프로그램깔고 지울땠는 비밀번호) 비밀번호를 입력하니 아니라고 하네요. 네트워크용 비밀번호는 따로 있는 건…

2011.04
22

[OS X] 한글2007에서 PDF만들때 재단선 넣는거 가능한가요?

한글2007에서 1도짜리 책자를 작업하는데 16절 변형사이즈인데 아무리해도 재단선을 넣어서 프린트할수가 없네요 레이저 프린트인데 그래서 한글에서 PDF만들때 A4사이즈로 만들어서 재단선을 넣고싶은데 가능한지 궁금합니다

2007.02
23

[OS X] 포토샵에서 EPS 파일저장시 크기를 줄이려면?

쿽에서 작업한후 eps로 페이지 저장하면 포토샵에서 작업한 사진파일eps 때문에 크가가 엄청나게커집니다. 파일크기가 보통 70~120메가 정도에 달합니다. 포토샵 작업은 pc에서 합니다. 포토샵에서 EPS 파일 사이즈를 줄이기 위해 저장…

2013.11
05

[디자인] 인디자인에서 그림상자 한꺼번에 줄일수 있나요?

인디자인에서 이미지를 여러개 불러서 배치했는데 생각보다 너무 크게 불러왔어요. 그림상자와 그림상자속의 이미지도 같이 줄일수는 없나요

2003.01
09

[OS X] 핫라인..-_-

어케 하다가 서버도 찾고 딱.. 데이터 있는데 들가서 다운받을라고함.. 안되더군요 먼가;; 다운 허락을 받아서 해야 되는거 같은데 흠냐리;; 궁금해요;; 핫라인.. 당나귀를 구해씀될라나;; 9x용은 없져 ;; 당나귀 맥용

2009.08
19

[디자인] 인디자인 표안에 그림넣기 질문이요...

인디자인 표안에 그림을 넣으려고 하는데 워드프로세서에서는 그림을 넣은후에 셀을 이리저리 움직이면 사진쪽에 셀이 걸렸을때 더이상 셀이 움직이지 않는다던가 하는 기능이 있고 사진을 늘렸을때 셀크기를 초과할정도로 늘리면 셀도 그림크기에 맞게…

2014.04
15

[디자인] 인디자인 텍스트 박스 질문

정리해서 다시 질문 합니다...ㅜ 이미지에 있는 텍스트와 박스 크기는 두개 다 똑같습니다. 그런데 왼쪽은 띄어쓰기가 있는 곳에서 줄이 변경됩니다. 자간은 일정하지 않죠 오른쪽은 띄어쓰기 상관없이 자간에 맞춰서 줄이 변경되죠~ 인…

2011.01
20

[OS X] 윈도우 설치시 키보드 먹통현상..

안녕하세요..윈도우 포멧후 재 설치하는데 cd넣고 하거든요 바이오스 들어가서 cd1순위로 지정하고 재부팅하면 "cd를 부팅하기위해 아무키나 눌러라" 이런문구 뜨면 엔터를 눌러야 하는데 키보드가 먹통입니다..-_- 바이오스 들어가서도 …

2009.01
21

[Mac OS 9] 서체 정품 단속 관련 문의

안녕하세요. 한 6개월 전에 윤서체때문에 법률사무소에서 와서 서체정품 확인 요청서를 주고 가서 예전에 번들로 받은 시리얼 번호를 적어 보내주었었어요. (포맷이나 하드교체시 재사용 불가능하다고해서 인스톨이나 등록은 하지않았음) 한6개월 지났는…

2004.01
05

[OS X] [질문]XCode 사용법 관련 메뉴얼

Xcode를 설치하고 보니 관련 메뉴얼이 없어 source code를 저장하지도 못하겠습니다 쩝....당나귀에서 Xcode를 받아서 설치까지는 하였는데 정작 IDE는 있지만 관련 메뉴얼이 없네요 해서 이게 C++ , java, 컴파일러는…

2010.01
24

[BootCamp] 윈도우7 설치후 붓캠3.1까지 설치했는데 스피커에서 소리가 안나요

아이맥입니다 내장스피커에선 소리가 나는데 따로 외장에 연결한 스피커에서 소리가 안나네요 내장스피커 말고 외장스피커로 소리가 나오게 할려면 어떻게 해야될까요

2008.11
13

[OS X] 맥에서의 프로그램 제거문의~

거의 3년이 넘는 시간동안 아이북과 맥북프로를 사용중인 유저입니다 그런데 무심코 지나가게 되는 프로그램 삭제에 대해서 질문입니다 지금까지 맥에선 어플리케이션에서 프로그램 아이콘만 지우던가 정품인스트롤 시디에서 언인스트롤 시키거나 했습…

2005.12
19

[App 개발] Xcode 2.2 에서 카본 프로그램 만들자 (3)

이번에는 본격적으로 Quartz 의 Core Graphics 를 이용해서 그림을 그려 보겠습니다. 참고 자료로는 애플 홈페이지에서 다운로드 받으실 수 있는 Quartz 2D Programming Guide 입니다. 프로그램의 기본 구조는 이…

2008.02
23

[OS X] X용 한글무료폰트

한글학교 교복상의 디자인에 쓰려고 하는데.. 훈민정은 창제 당시와 비슷한 서체없나요 아래아 를 쓸 수 있는 서체를 구하는중입니다.

2008.12
22

[OS X] 맥용 당나귀 프로그램은 어떤걸 많이 쓰세요?

맥용 당나귀 프로그램은 어떤게 괜찮을까요 edonkey, xdonkey, amule, nagui 등등... 종류가 몇 가지는 되는 것 같은데 비교적 사용자가 많고 안정된 어플은어떤 건가요

2004.01
15

열람중 [App 개발] Nehe Lesson 12

이번 강의에서는 출력 리스트를 이용하는 법을 배우겠습니다. 단순히 리스트를 만들어 빠르게 하는 것 뿐만 아니라 간단한 GL 씬을 만들어야 할 때 몇 줄로 나누어 따로 사용할 수 있습니다. 예를 들어서 각 판을 두 개의 운석으로부터 시작하는 ast…

2006.07
21

[BootCamp] bootcamp로 윈도우XP를 깔때요.

인스톨을 fat포멧이랑 nf 머시기랑 있쟌아요. 둘의 차이점과 장단점이 씌여있던데요. 이해가 살짝 안가거든요. 좀 자세히 알려줄 분 안계신가요

2006.04
19

[BootCamp] [부트캠프] 윈도우로 디폴트 부팅 됩니다.

이거 불편합니다. 윈도우가 아니라, 맥으로 부팅되도록 하는 방법 없나요 음.... 그리고....질문 하나더.... 윈도로 부팅시, 애플 키보드에서 숫자 키패드가 커서로만 작동되는데.... 이걸 숫자 키패드로 쓸수있는 방법은 …

2009.07
26

[Mac OS 9] 강제종료 단축키

안냐세요- 맥os9를 삿는데요.. 쿽을 하다가 잠시 자리를 비우면 꼭 다운이 되네요. 마우스는 움직이는데, 강제종료 단축키 좀 알려주세용. 그리고 이거 자주해도 갠찮은가요

2008.02
03

[BootCamp] Bootcamp 파티션 복제/복원-Winclone

안녕하세요 평소에 도움만 받다가 저도 도움을 드릴수 있기를 바라며 Winclone(http://www.twocanoes.com/winclone )이라는 프로그램을 소개하려 합니다. 이미 고수님들께서는 잘 알고 계실 수도 있습니다만... 1. 부…

2014.03
07

[디자인] 인디자인 CS6의 PANTONE 질문 (Lab과 CMYK)

인디자인 고수님들께 질문 드릴게요. 이번에 인디자인 CS6로 바꿔서 사용중입니다. 별색 사용을 위해 스와치 라이브러리에서 PANTONE+ Solid Coated를 사용하니 색상 정보값이 Lab 수치로 나오더군요. (기존에 사용하던 CS4에선 CM…

2010.08
06

[OS X] 유투브에서 다운로드한 동영상 파일을 음악파일(mp3 or wav)로 바꾸는 프로그램 추천좀..

뒤져보니 거의 윈도우 용이어서.. 무료로 쓸만한 프로그램좀 추천부탁드립니다. 노래를 녹음해야 하는데 엠알들이 유투브에 많이 있더군요. 로직에서 작업할건데 음악파일로 불러와야 해서요. 부탁드립니다.

2009.12
12

[BootCamp] window 7 에서 블루투스 마이티 마우스 인식문제

부트캠프로 윈도우 7설치 이후엔 잘인식이 되었습니다. 부트캠프를 설치하고 나서 인식이 안됩니다. 해결방안이 없을까요 처음에 기기 찾기까진 인식이 되는데 그 이후에 인식이 안되네요 ,,

2003.03
14

[OS X] avi 파일을 볼수있지만 소리가 안들려요?

소리를 듣기 위해서는 smi파일이 필요하나요 빠른 답변을 주시면 감사 하겠읍니다...

2010.09
28

[BootCamp] 부트캠프로 USB 외장 하드에 윈7을 설치할 수 있나요?

대단히 간단한 질문 하나 올립니다. 맥북프로 사용하고 있고 Snow Leopard입니다. 맥 OS만 쓰고 있었는데 부득불 윈7을 써야 할 일이 생겼는데 단지 기본 디스크의 파티션을 나누기 싫다는 이유 하나만으로 외장 하드 디스크에 윈7을 설치하려…

2009.03
26

[OS X] 맥용 인터넷 브라우저 추천~~~!!!!!!!!

맥용 인터넷 브라우저 괜찮은것 추천좀 해주세요~~~ 사파리는 가벼운대신에 에러가 좀 많구, 화이어폭스는 사파리보다 무거운감이 있고 홈페이지편집을 해야하는데 특수문자나 기호등 텍스트관련 에러가 발생해서 못쓸것같구요... 그래서 오페라를 깔…

2008.11
20

[OS X] little Snitch 라는 프로그램

안녕하세요.. little Snitch라는 프로그램을 받아서 실행했는데요.. 대충 어플리케이션의 인터넷 연결을 컨트롤 하는 프로그램이라는것 정도 알고 있습니다. 그런데 이게 뭐만 했다하면 계속 뜨는겁니다.. 심지어 네이트온으로 누가 말만 시켜도…