posted by 쑥갓 2005.07.08 14:14


2005.06.06 : 생성
2005.06.07 : lib에서 사용할 때의 버그 수정
2005.07.07 : 직접 스트링을 지정할 수 있도록 추가
2005.07.08 : type명 제외하고 사용하도록 수정
2005.07.08 : 버그 수정및 검증 루틴 추가

enum을 스트링으로 바꾸거나 스트링을 enum으로 바꾸는 문제에 대해서 계속 고민해왔는데.
결론은 내부에 map이 필요하다..였다.

map에 enum과 스트링을 연결시켜주는건 직접 해주는 방식으로 사용했었는데..
흐음..어쨋건 정리된 소스를 받아보시라

사용방법은 두가지 인데.

1번째 방법은 매크로 함수의 특성상 127개의 인자밖에 못받는다.
100개까지 받도록 정의해 놓았다.
2번째 방법의 개수의 제한이 없지만 1번째 방법이 기존의 enum에서 약간만 바꾸면 되는 반면
2번째 방법은 좀 더-_- 바꿔야 한다.

아래와 같이 사용할 수 있다.

// solution 1 limit size 100
SENUM_3( MODE, 1, 2, 3 );
// solution 2 no limit
#define ENUM_BODY_MODE( value ) ENUM_BODY( MODE, value )
#define SENUM_ADD_MODE( value ) SENUM_ADD( MODE, value )

#define MODE_ENUM_LIST( _ ) \
_( 1 )  \
_( 2 )  \
_( 3 )
DEFINE_ENUM( MODE, MODE_ENUM_LIST );

// use
auto define MODE_MAX : 3 not match string
const tstring& str1 = MODE_CONVERTER( MODE_1 );  // return "1"
MODE m = MODE_CONVERTER( _T( "1" ) );   // return MODE_1 : 0

// solition 3 is same soulution 2 but can use special string

#define ENUM_BODY_MODE( value, str ) ENUM_BODY_PAIR( MODE, value, str )
#define SENUM_ADD_MODE( value, str ) SENUM_ADD_PAIR( MODE, value, str )

#define MODE_ENUM_LIST( _ ) \
_( A, a )  \
_( B, b )  \
_( C, c )
DEFINE_ENUM( MODE, MODE_ENUM_LIST );

// use
auto define MODE_MAX : 3 not match string
const tstring& str1 = MODE_CONVERTER( MODE_A );  // return "a"
MODE m = MODE_CONVERTER( _T( "a" ) );   // return MODE_A : 0

ps. 자료를 함께 찾아주신 박대중 과장님께 감사의 말씀을 :)

신고

'자료 > 내자료' 카테고리의 다른 글

is_template  (0) 2006.05.10
분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16
Alkanoid프로젝트 완료  (0) 2004.12.23
DX에서 쓰는 텍스쳐 썸네일 만들기  (0) 2004.10.02
posted by 쑥갓 2005.06.21 20:30

원본글 : http://www.gosu.net/GosuWeb/Article-detail.aspx?ArticleCode=345

int main(int argc, char* argv[])

{

 std::locale::global( std::locale( "kor" ) );

 std::wstring wideString=L"테스트 문자열 - 유니코드";

 std::wcout<<wideString<<std::endl;

 return 0;

}

위와 같이 처리하면 화면에 "테스트 문자열 - 유니코드" 라고 찍히는 것을 볼 수 있습니다.핵심은 볼드체 처리한 부분의 코드입니다.

std::wcin.imbue( std::locale( "korean" ) );

std::wcout.imbue( std::locale( "korean" ) );

다음과 같이 지정하면 현재 쓰고 있는 wcin과 wcout 에만 영향을 미치게 됩니다. 따라서 위와 같이 골치 아픈 문제는 일단 피할 수 있겠죠?

그리고 이에 대한 자료가 더 필요하시면 http://www.cantrip.org/locale.html 여기 가서 더 읽어보시거나 Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference 또는 C++ Standard Library 라는 책을 참고하시길 바랍니다.

--------------------------------------------

오늘의 교훈

책을 사면 좀 읽쟈

신고
posted by 쑥갓 2005.05.26 15:06

탐색기에서 오른쪽 마우스 버튼 클릭시 도스 프롬프트 뜨게 만들기

1. 레지스트리 편집기를 실행합니다.(시작 > 실행 > regedit)
2. HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory 로 이동하여 Shell에서 마우스 오른쪽버튼 클릭하여 [새로 만들기 - 키]를 클릭. 키 이름에 'Dos Prompt'를 입력합니다.


3. 'Dos Prompt'키를 클릭하여, 오른쪽에서 (기본값)을 더블 클릭하여, "문자열 편집" 대화상자에서 '값 데이터'란에 오른쪽 버튼을 클릭하였을 때 나타날 문구를 입력합니다.

4. Dos Prompt 키에서 다시 오른쪽 버튼을 클릭하여, [새로 만들기 - 키]를 통해 Command라는 키를 생성합니다. 생성된 Comand 키를 클릭하여, 오른쪽 (기본값)을 더블클릭합니다. "문자열 편집"대화상자에서 '값 데이터'란에 "cmd.exe /k"를 입력합니다.

5. 이제 탐색기에서 원하는 폴더에서 오른쪽 버튼을 클릭하면, 위에서 3번에 입력한(본 예에서는 '도스프롬프트') 문구가 나오고, 이를 클릭하면 해당 디렉토리를 경로로 하는 도스 프롬프트가 실행된다.
신고
posted by 쑥갓 2005.05.16 05:57

LPD3DXBUFFER pBuffer = NULL;

if( D3DXSaveTextureToFileInMemory( &pBuffer, D3DXIFF_TGA, pTexture, NULL ) == D3D_OK )
{
SAFE_RELEASE( pTexture );

D3DXCreateTextureFromFileInMemoryEx( pd3dDevice, pBuffer->GetBufferPointer(), pBuffer->GetBufferSize(), D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_DXT5, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, 0, 0, &pTexture );
ASSERT( m_pLightMap != NULL );

SAFE_RELEASE( pBuffer );

D3DXSaveTextureToFile( pFilename, D3DXIFF_DDS, pTexture, NULL );
}


용문씨 가져가~

신고

'자료 > 내자료' 카테고리의 다른 글

분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16
Alkanoid프로젝트 완료  (0) 2004.12.23
DX에서 쓰는 텍스쳐 썸네일 만들기  (0) 2004.10.02
크래시 리포트를 만들어 보쟈  (0) 2004.09.02
TAG
posted by 쑥갓 2005.05.15 12:41

파일 형태

fopen의 두 번째 인수 mode에는 오픈 모드외에도 파일의 형태를 지정하는 플래그를 추가로 지정할 수 있다. 열고자 하는 파일이 텍스트 파일이면 t를 붙이고 이진 파일이면 b를 붙인다. 파일 형태에 아무런 지정이 없으면 전역 변수 _fnmode의 값이 사용된다. 이진 파일은 아무런 변환없이 읽혀지지만 텍스트 파일 모드로 파일을 열면 다음 두 가지 변환을 한다.
① 개행 코드를 의미하는 CR/LF 조합은 LF로 변환되어 읽혀지며 LF를 기록하면 CR/LF가 출력된다. 이런 변환을 해 주는 이유는 C 문자열 출력 함수들은 개행을 위해 확장열 LF(\n)를 사용하기 때문이다.
② 파일의 끝을 나타내는 Ctrl+Z(0x1A)는 EOF(-1)로 변환되어 읽혀진다. 단 "a+" 모드로 열었을 때는 끝부분에 데이터를 추가할 수 있도록 Ctrl+Z를 제거한다.
오픈 모드와 파일 형태가 mode 인수에 같이 기록되는데 오픈 모드가 먼저 오고 파일 형태가 뒤에 오는 형식으로 써야 한다. 단, +문자는 파일 형태 다음에 와도 상관없다. 다음이 mode인수의 예인데 문자열이므로 반드시 겹따옴표를 싸 주어야 한다.
"rt" : 텍스트 파일을 읽기 전용으로 연다.
"wb" : 이진 파일을 쓰기 전용으로 연다.
"r+b" : 이진 파일을 읽기, 쓰기 가능하도록 연다. "rb+"로 쓸 수도 있다.
이외에 mode 인수에는 캐시를 관리하는 방법과 임시 파일 생성에 대한 몇가지 플래그를 더 지정할 수 있다.
신고
posted by 쑥갓 2005.03.16 12:22

출처 : http://blog.naver.com/sharbong/100011099628


오랜만에 개발 관련 글을 쓰는 것 같다... 그동안 디자인 관련 글들만 써왔는데.. 이번엔 본업인 플밍 관련 글을 쓸까 한다.. 사실 디자인적인 얘기는 비전문가라 해도 쉽게 이해할 수 있지만 프로그래밍은 그러지를 못해서 잘 쓰지 않기로 했지만, 이번에는 그다지 어려운 것도 아니고, 포토샵을 다루는 사람이라면 재미있게 볼 수 도 있을 것 같아 쓰게 되었다.

이 글은 DirectX로 포토샵 블랜딩 모드를 구현하는 것을 보여주며, 본인도 정리하는 입장으로 쓰고 있는지라.. 약간 모자를 수도 있다. 그럴때는 과감히 리플~! 달기 바란다.  % --> .

PhotoShop BlendMode with DX
DirectX로 포토샵 블랜딩 모드 구현하기
사실 DX로 포토샵의 모든 블랜딩 모드를 구현할 수는 없으며, 일부만이지만 실무에서 자주 쓰는 블랜딩 모드를 구현하게 될 것이다. 블랜딩 모드를 설명하기 위해 2가지 이미지를 준비했다.

hDziHcy.jpg (200×150)

ZHwybDf.jpg (200×150)

Background ImageLayer Image
Multiply
설명(Description):
대상색과 원본색을 곱한다.

수식(Formula):
Result = SC * DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ZERO );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR );

uMtUy4d.jpg (200×150)

Screen
설명(Description):
Mulitiply 모드랑 반대되는 모드가 바로 Screen 모드다. 원본, 대상 색의 반전시킨다음 곱한다.

수식(Formula):
Result = 1 - ( 1 - SC ) * ( 1 - DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

RV9yM7z.jpg (200×150)

Darken
설명(Description):
원본, 대상 색을 비교해 어두운 색만 표현한다.

수식(Formula):
Result = MIN( SC, DC )

DX 블랜딩 모드(DX Blending Mode):

SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MIN );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

CKcvRoG.jpg (200×150)

Lighten
설명(Description):
원본, 대상 색을 비교해 밝은 색만 표현한다.

수식(Formula):
Result = MAX( SC, DC )

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_MAX );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

JyaTqum.jpg (200×150)

Additive
설명(Description):
원본, 대상 색을 더한다. 기본적인 블랜딩 모드다.

수식(Formula):
Result = SC + DC

DX 블랜딩 모드(DX Blending Mode):
SetRenderState( D3DRS_BLENDOP, D3DBLENDOP_ADD );
SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

TaIbbJe.jpg (200×150)


신고
posted by 쑥갓 2004.12.23 03:23

건빵군의 말을 빌리자면 알카노이드따위-_-에 서버씩이나-_-와 DB씩이나-_-를 붙이느라고 삽질 꽤 했다-_-;

머 어찌됐건 간만에 캐주얼-_-;;; 게임 하나 완성(은 아니지만 더이상 하기는 귀찮으니 대충 완성)했다-_-;

게임에 대한 개선요청은 쌩까도록 하겠습니다-ㅅ-;

사실은 게임 내용은 그렇다 쳐도 사운드는 넣고 싶었는데-.ㅜ

sqlite를 하는데 많은 도움을 주신 한민훈군께 감사의 말씀을 전합니다-ㅅ-;

실행파일 및 소스가 포함된 파일을 올리니 혹시나 설마 소스가 궁금하신분은....으음... 엔간하면 안보시는 편이-_-;;;;
어지간히 대충 만들어놔서-ㅅ-;;


아래는 안에 들어가는 readme.txt파일

--------------------------------------------------------

제작자 : 숭실대학교 컴퓨터학부 9844199 지성욱

본 프로그램은 DirectX 9.0c이상을 필요로 합니다.

1. bin폴더 아래의 Server.exe를 실행합니다.
Rank.db에서 랭킹 데이터를 읽도록 되어 있으며 DB가 존재하지 않는경우 새로 생성하여 디폴트 데이터를 삽입하도록 되어 있습니다.
DB로의 쿼리 및 데이터 추가 삭제, 클라이언트와 주고받는 소켓이 왼쪽의 LogList에 보입니다.
Log는 기본으로 50개까지 볼 수 있고, 50개가 넘어가면 오래된 순서로 삭제합니다.

2. bin폴더 아래의 alkanoid.exe를 실행합니다.
기본적으로 localhost에 접속하도록 되어 있습니다.
서버에 접속이 실패하는 경우에는 클라이언트로만 돌아가도록 되어 있으며,  실행동안에는 랭킹 데이터가 갱신되나 저장되지는 않습니다.
서버에 접속하게 되면 서버에서 랭킹데이터를 받아오도록 되어 있습니다.
타이틀 화면에서 SpaceBar를 누르면 게임 화면으로 넘어갑니다.
게임화면에서 SpaceBar를 누르면 게임이 시작되며 이때부터 시간을 기록하게 됩니다.
왼쪽 방향키와 오른쪽 방향키로 바를 움직일 수 있습니다.
5번의 기회가 있으며 왼쪽위에 하트표시로 남은 기회를 표시합니다.
게임을 클리어 하게 되면 이름을 입력하는 입력창이 뜨고, 이름을 입력한 후 엔터키를 누르면 서버에 접속되어 있는 경우는 서버에 자신의 기록을 보내게 됩니다.
그 후 다시 타이틀 화면이 나오며, 새로운 랭킹과 방금 자신이 플레이한 스코어를 표시해줍니다.

신고

'자료 > 내자료' 카테고리의 다른 글

분절 모델의 접합부위 Normal값 수정  (0) 2006.02.23
enum string  (0) 2005.07.08
텍스쳐 포맷 변경해서 저장하기  (0) 2005.05.16
Alkanoid프로젝트 완료  (0) 2004.12.23
DX에서 쓰는 텍스쳐 썸네일 만들기  (0) 2004.10.02
크래시 리포트를 만들어 보쟈  (0) 2004.09.02

티스토리 툴바