vector<int> values;
for each( const int value in values )
{
cout << value;
}

같은 코드가 가능해졌다
감동-.ㅜ

표준이 아니라고 하면 할말은 없으삼-.-

'게임개발 > ' 카테고리의 다른 글

mutable  (0) 2005.11.22
콤보박스 드롭박스 부분 크기 조절하기  (0) 2005.11.22
VS에서 lua의 syntax coloring을 해보쟈  (0) 2005.10.14
파일포맷 png  (0) 2005.09.07
Cubemap을 이용한 SkyBox  (4) 2005.07.11

원래는 이따위로 성의 없이 나온다

Tools->Options->Text Editor->File Extension에가서 lua확장자를 Script Editor로 선택해서 Add해준다.
그리고, 다시 lua파일을 열어준다.

제대로 나오는건지는 모르겠지만 어쨋건 훨 낫다


'게임개발 > ' 카테고리의 다른 글

콤보박스 드롭박스 부분 크기 조절하기  (0) 2005.11.22
vs 2005의 for each  (0) 2005.11.07
파일포맷 png  (0) 2005.09.07
Cubemap을 이용한 SkyBox  (4) 2005.07.11
Increase, Decrease Macro  (0) 2005.07.08

사실 여태까지 png를 어따가 쓰는건지 몰랐다-_-;
그냥 파일포맷중 하나이겠거니... 했었는데..
알고보니 무손실압축에 알파채널을 지원하는 포맷이었다.

여태까지는 dxt포맷은 손실압축이라 퀄리티 저하가 되서 UI에 사용하지 못하고 tga파일을 사용하고 있었는데
tga의 경우는 이미지 자체의 투명도(transperent background - 투명 배경, 일명 격자 배경-_-)을 사용하는게 아니라 alpha채널을 뽑아내는 방식이라
디자이너가 마스크를 씌워서 투명도를 구워?내서 알파채널에 넣고 tga를 뽑는 번거로운 방식을 사용해야 했었는데
png는 투명도를 그대로 뽑아낼 수 있어서 디자이너의 편의성이 상당히 올라간다.

게다가, 512*512이미지가 tga는 1,025KB였는데 동일한 png이미지는(물론 tga의 알파채널을 다시 투명도로 바꾸는 법을 몰라서 대충-_- 투명도를 칠하고 테스트 했다.) 38KB밖에 안한다.
오오오! 무려 1/27의 사이즈!!!
투명도를 제대로 사용한다고 해도 1/10은 건질 수 있다는 얘기다 오호호
물론 UI가 심플한 디자인이라 압축률이 높은 거 같기는 하지만.

정확한 파일포맷스펙을 보지 않아서 어떨지는 모르겠는데
로딩할때 압축푸느라 시간이 꽤 걸린다는 풍문-_-이 있다.
복잡한 1024*1024짜리 이미지-_-a로 체감테스트-_-를 해봤는데 실제로 꽤 걸리는거 같다.
현재의 심플한 디자인의 이미지로 테스트 해보니 별 차이가 느껴지지 않았다~ 잇힝~
UI디자인은 보통 심플한 형태고, 실제 UI창이 뜨거나 할 때 좀 느리게 떠도 큰 상관없으므로
png로 가는게 좋을 것 같다.

속도상의 손해보다는 용량의 이득이 너무 크다-.ㅜ
용량이 줄면 풀버전의 용량도 적어지고 패치파일의 용량도 적어지고 설치시간과 패치시간도 적어진다.
풀버전과 패치파일의 용량이 적어지면 유저가 다운로드 받는 양이 적어진다는거고 CDN의 트래픽이 줄어들어 결국은 돈을 번다는 얘기다-_-;

물론 dxt를 쓸 수 있는곳은 dxt를 써야 겠지만 dds를 사용하지 못하고 이미지가 복잡하지 않은 UI의 경우는 딱 제격이다.

일찍 알았으면 좋았을걸 이라는 생각도 들지만 이제라도 알아서 다행이다. 아직 배포는 안됐으니까-_-;

낼 디자이너분한테 얘기해서 이번버전부턴 png로 가야겠다~ 잇힝~

PS1. 역시 클라이언트 프로그래머는 잡다한걸 많이 배워둬야 한다.
PS2. 클라이언트 프로그래머는 디자이너와 친해두는게 좋다.

'게임개발 > ' 카테고리의 다른 글

vs 2005의 for each  (0) 2005.11.07
VS에서 lua의 syntax coloring을 해보쟈  (0) 2005.10.14
Cubemap을 이용한 SkyBox  (4) 2005.07.11
Increase, Decrease Macro  (0) 2005.07.08
Two-Sided Polygons  (0) 2005.05.20

나중에나중에나~중에 하려고 했던 SkyBox를 어쩌다가 하게되서
Cubemap을 이용해서 찍어보게 되었는데
일단 SetTexture한방에 렌더링 한방.. 이라는 매력적인 내용외에도 또 다른 숨겨진 내용이 있는걸 알게 되었다.

굳이 6면을 월드시점으로 구성해서 그릴 필요가 없다..라는 것인데.
스카이박스는 어차피 화면에 보이는 부분만이 전부이고 6면이라지만 어차피 텍스쳐는 한장인 관계로 화면 좌표를 가지고 슥슥슥 해서 3D텍스쳐 좌표를 구해버리면 화면을 가득 채우는 플랜 한장으로 렌더링이 가능하다! 라는 내용이다.

오호..이런게 가능할줄은..
dx예제의 스카이박스들이 다 이렇게 그리고 있었는데 왜 모르고 있었을까나.. ( 스카이박스를 고민해 본 적이 없었으니 모르지-_-; )
어쨋건 스카이박스가 속도를 많이 잡아먹는 부분은 아니었지만
그래도 퍼포먼스 향상이 기대됨. 잇힝-

'게임개발 > ' 카테고리의 다른 글

VS에서 lua의 syntax coloring을 해보쟈  (0) 2005.10.14
파일포맷 png  (0) 2005.09.07
Increase, Decrease Macro  (0) 2005.07.08
Two-Sided Polygons  (0) 2005.05.20
nVidia 2005년 4월 뉴스레터 팁  (0) 2005.05.19

   Sub IncreaseNumber()
       Dim objTextSelection As TextSelection
       objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
       objTextSelection.Text = objTextSelection.Text + 1
   End Sub

   Sub DecreaseNumber()
       Dim objTextSelection As TextSelection
       objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
       objTextSelection.Text = objTextSelection.Text - 1
   End Sub


의외로 종종 필요한 경우가 있다

Control +, - 에 세팅해 놓고 쓰면 좋다


'게임개발 > ' 카테고리의 다른 글

파일포맷 png  (0) 2005.09.07
Cubemap을 이용한 SkyBox  (4) 2005.07.11
Two-Sided Polygons  (0) 2005.05.20
nVidia 2005년 4월 뉴스레터 팁  (0) 2005.05.19
루프내에서 여러번 호출되는 함수의 First Time구분하기.  (0) 2005.04.11

nVidia 샘플을 보다보니 저런 제목이있다.
대충보니 폴리곤을 양면으로 만든게 아니라 한면으로 만들고 백페이스 컬링을 끄고 찍을때
노멀이 하나밖에 없는지라 라이팅이 뒷면에도 앞면과 같게 먹는걸 버텍스 쉐이더에서 싸바싸바 해서 정상적으로 먹게 해준다....라는 내용이다.

그럼 뒷면인가는 어떻게 알 수 있는가 라는 부분이 포인트인데.
View를 이용해서 안다..라고 되어있다.

쉐이더 코드는 어셈-_-으로 되있어서 안봤다.

대충 카메라 노멀이랑 내적을 때려봐서 판단해서 노멀을 뒤집어 준다...라는 내용인것 같다.

자원 할당 순서는 그래픽 성능에서 대단히 중요한 문제입니다. 모든 렌더 타겟을 먼저 할당하고, 할당 순서를 피치(즉, 픽셀당 폭*바이트)별로 정렬한 후, 사용빈도에 근거해 차이나는 피치 그룹을 정렬합니다. 가장 자주 렌더링되는 표면에 먼저 할당합니다.
그리고 나서 버텍스와 픽셀 쉐이더를 생성하고, 마지막으로 모든 텍스처와 버텍스, 인덱스 버퍼를 생성합니다. 이대로 하지 않을 경우 프레임 단가의 30%에서 100%까지 소요될 수 있습니다.

가장 쉽게 생각할 수 있는 기본적인 방법으로는
bool로 플래그를 두고
함수에 들어가면 true로 세팅하고
매 루프마다 clear를 해주는 방법이 있다.

그러나 이게 영 비효율적으로 보이는지라.
timeGetTime()으로 시간을 기억해두고 ( 물론 매번 호출하진 않고 루프마다 한번 호출해서 전역에 저장해둔다 )
시간이 다르면 first time이므로 멤버 변수로 현재의 time값을 저장해둔다..
라는 생각이었는데

api에서는 잘돌아가는게 mfc에선 정상적이지 않는 현상이 발견되었다.
timeGetTime()의 한계-_-(실제로 timeGetTime은 밀리세컨드 단위이기때문에 1000프레임 이상의 수치는 처리할 수 없다.. 그 이하의 수치 일때 도 같은 Time이 들어올 수 있다. )일수도 있겠지만 IDLE메세지가 들어왔을때 함수 호출을 하게 해놔서 idle이 한번의 메세지루프에 여러번 들어올수 있다(라는 생각은 전혀 안해봤었는데-ㅅ-)

어쨋건 그런 연유로 그냥 DWORD로 매 루프마다 1씩 올려주는 카운터를 만들고 카운터를 기억하게 했다.

애매한 time보다야 확실하긴 하다만
왠지 쓸데없는 전역변수가 늘어난거같은 느낌은 지울 수 없다-ㅅ-;;

'게임개발 > ' 카테고리의 다른 글

Cubemap을 이용한 SkyBox  (4) 2005.07.11
Increase, Decrease Macro  (0) 2005.07.08
Two-Sided Polygons  (0) 2005.05.20
nVidia 2005년 4월 뉴스레터 팁  (0) 2005.05.19
부스트의 shared_ptr을 hash컨테이너의 인자로 쓰기  (0) 2005.03.15

shared_ptr.hpp 한 구석에

operator size_t() const { return (size_t)px; }

를 넣어준다-ㅅ-;

'게임개발 > ' 카테고리의 다른 글

Cubemap을 이용한 SkyBox  (4) 2005.07.11
Increase, Decrease Macro  (0) 2005.07.08
Two-Sided Polygons  (0) 2005.05.20
nVidia 2005년 4월 뉴스레터 팁  (0) 2005.05.19
루프내에서 여러번 호출되는 함수의 First Time구분하기.  (0) 2005.04.11

+ Recent posts