컴퓨터 프로그래밍2009. 12. 17. 11:37
시험도 끝나고.. 간단한것을 하나 만들기로 했습니다..
리눅스용 프로그램중에 KDE의 AmaroK이 있는데요, 여기에 보면 노래 목록중에서 여러곡을 예약해서 순차/랜덤 재생과는 상관없이 현재 재생되는 곡이 끝나면 예약된 곡들이 순서대로 나오고 그 뒤에 원래 재생방식으로 돌아갑니다. 리눅스를 지우고 윈도우로 들어오면서 미디어 플레이어를 쓰게 됐는데 기능 중에 아쉬운 점이 있다면 이게 그 중 하나지요.. 또 하나라면 폴더별로 분류가 안된다는 점..
어찌됐든 그 기능을 직접 만들고자 SDK를 찾았습니다. WMP(Windows Media Player) SDK는 Windows SDK안에 속해 있고, 저는 윈도우7을 쓰기 때문에 WMP 11을 쓰고 WMP 11 SDK는 Windows SDK for Vista 이상에 포함됐다고 하네요..

윈도우7용 Windows SDK 입니다.. 원래 SDK는 최신유지해야하는법

설치를 할때 꼭 Samples를 포함해서 설치해야합니다.. 그 안에 프로젝트 템플릿이 들어있어요
설치가 완료 됐으면 프로젝트 템플릿을 설치합시다.
C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\WMP\Wizards\wmpwiz\wmpwiz.vsz
파일을 엽니다.
Wizard=VsWizard.VsWizardEngine.9.0
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\WMP\Wizards\wmpwiz"
해당하는 두줄을 위처럼 수정합니다..  vs2005일경우 8.0 으로 하고,  ABSOLUTE_PATH는 이 파일이 들어있는 경로로 sdk가 다른 곳에 설치됐다면 그 주소로 적으면 됩니다.
수정이 다됐다면 이 폴더안의 wmpwiz.ico, wmpwiz.vsdir, wmpwiz.vsz 세파일을 선택하고, visual studio가 설치된 곳에서 vc\vcprojects 를 따라들어가서 세 파일을 복사해오면 끝입니다.

이렇게 뜬다면 성공

Posted by orange code
컴퓨터 프로그래밍2009. 12. 14. 20:19

바탕화면이나, 유저 홈디렉터리, 내음악, 내비디오, 내사진, 쿠키, 인터넷캐쉬 등..
여러 잡다한 시스템 폴더의 주소를 가져올 수 있습니다..

c++로 하시려면
shlobj.h 를 추가하시고
SHGetSpecialFolderPath 를 쓰심 됩니다

c#으로 쉽게 쓰시려면
밑의 소스 참고

Posted by orange code

사실 이 프로그램 명칭을 잘 모르겠다

사람의 눈으로는 보이는 물체와의 거리에 따라 크기가 작고 크게 보이게 된다. Direct3D 도 그렇게 처리하리라 생각하고 있었는데 좀 다른 것 같다.. 예를 들어 카메라가 있고 그 카메라가 보는 방향에 수직인 평면이 있어서, 공간상의 한 물체는 카메라와 어떤 거리만큼 떨어진 평면 위에 위치하게 된다.. 그리고 그 물체는 카메라와 그 물체가 포함된 평면 사이의 거리에 의해 크기가 변형된다. 이게 얼마나 사람이 보는 영상과 차이가 있고 내가 구현한 방식이 사람의 눈과 더 가까운지는 모르겠다.. 오히려 지금 Direct3D의 방식이 더 자연스러워 보일 수 있다.
어찌됐든 카메라로 영상을 찍으면서 생기는 굴곡을 따라 하기 위해 구현한 프로그램이다.

'컴퓨터 프로그래밍 > Direct3D' 카테고리의 다른 글

[C# + MDX 프로그래밍] HLSL  (0) 2008.12.17
3DS Viewer 만들기 (미완성)  (0) 2008.10.30
Posted by orange code
컴퓨터 프로그래밍2009. 11. 17. 19:52

image

최근 간단한 3D 프로그램을 제작하면서 마우스 휠로 확대/축소 할 수 있는 기능을 넣으려 했다.

……
case WM_LBUTTONUP:
    ReleaseCapture();
    bPressed = false;
    break;

case WM_MOUSEWHEEL:
    break;             (** 여기에 브레이크 포인트 **)
……

기능을 넣기 전에 메시지 파라미터 값을 확인하기 위해 대충 코드를 넣고 브레이크 포인트를 걸어놨는데 휠을 아무리 굴려도 비주얼스튜디오는 반응이 없다. 디버그 모드라 최적화는 안 됐을 테고 디어셈블리로 봐도 분명히 코드가 있는데..  구글에서 WM_MOUSEWHEEL 메시지를 받을 수 없다는 질문들과 답변을 봐도 해결책이 안 보인다. 이상하다 싶어 스파이로 확인해보니.. 메시지가 잘 가네?.. 혹시 하고 메시지박스 하나 넣어보니.. 잘만 뜬다  아씨

Posted by orange code

참 별거 없음.. 대충 오늘 한 거 사인 음파 출력하기~

일단 DirectSound는.. DirectX의 한 요소이고 사운드 입력 출력을 담당합니다..

DirectX는 요새 11버전까지 나왔지만 DirectSound는 8이 최신이네요

XAudio라든가 다른 것들이 있는 듯 하지만 전 잘 모르기 때문에.. 패스

과정은 매우 쉽습니다..DirectSound객체를 만들고 사운드버퍼를 쓸 만큼 만들어서

원하는 시간에 재생시켜주면 끝입니다..

소스

Posted by orange code

1. JDBC를 설치한다..
jdbc는 자바 디비 커넥터 약자로... 자바에서 해당 디비 프로그램에 연결하려면 필요하다
mssql용 jdbc는 http://msdn.microsoft.com/en-us/data/aa937724.aspx 여기에서 받을수 있다..
압축을 푼후 폴더를 열어보면 sqljdbc.jar 와 sqljdbc4.jar 가 나오는데
본인이 jre6.0이상이면 sqljdbc4.jar 를.. 그 이하이면 sqljdbc.jar 를 사용하면 되는데
해당 파일을 jre폴더\lib\ext 에 복사해주면 아주 잘 작동한다.. 둘다 복사하지 말고 자신에 맞는것만 복사하자..

2. 자바 코딩
모든 jdbc 커넥터가 그렇듯.. 일단 드라이버 클래스를 읽어야한다.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
이 한줄이면 클래스를 찾은후에 드라이버 리스트에 자동등록되게 된다..
원하는 디비에 연결하려면
DriverManager.getConnection("jdbc:sqlserver://서버이름[:포트][;옵션=값[;추가옵션=값]]")
이런 형식을 따르게 된다..
예를 들어 자신컴퓨터에 윈도우계정인증으로 접속할경우
jdbc:sqlserver://localhost;intergratedSecurity=true
자신컴퓨터에 지정된 계정과 비번을 쓸 경우
jdbc:sqlserver://localhost;user=아이디;password=암호
포트가 다를경우
jdbc:sqlserver://localhost:1234;user=아이디;password=암호
대강 이런식으로 하면된다..

이 다음부턴 다른 자바 디비 프로그래밍과 동일하다..

3. 접속이 안될경우.. http://msdn.microsoft.com/ko-kr/library/ms378845(SQL.90).aspx
나의 경우 sql서버 기본포트 1433으로 접속되지 않아 삽질을 했는데
일단 sql서버 설정 관리자에서
SQLServer네트워크구성 -> 프로토콜 -> TCP/IP 를 사용으로 변경해 주고
IP 주소 탭에서, IPALL부분의 TCP포트를 1433으로 직접 적어주어야 sql서버에서 잘 대기하게 된다..
1433가 기본값이라곤 하는데 Visual Stduio 2008을 깔면서 자동으로 같이 깔리면서 설정이 마음대로 바뀌어서 설치된듯하다..

4. SQL Server Management Studio Express
만약 visual studio 2008 설치하면서 sqlserver2005가 깔렸다면 따로 db관리 프로그램이 설치되지 않았을것이다..
이 프로그램으로 편하게 관리하길 http://go.microsoft.com/fwlink/?LinkId=65110
Posted by orange code
컴퓨터 프로그래밍2008. 12. 25. 18:14
class Data
{
  public int Item;
  public override string ToString()
  {
    return item.ToString();
  }
}

Data data = new Data();
data.Item = 10;
listBox1.Items.Add(data);
위와 같은 코드를 실행하면 리스트에 10이 잘 나오지만.. 후에 data의 item을 변경해도 리스트에서는 변하지 않는 것을 볼수 있습니다.. 이 것을 해결하려면

속성창에서 DrawMode를 OwnerDrawFixed로 변경하고, DrawItem 이벤트에 대한 함수를 만들고
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
  e.DrawBackground();
  e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font,
    new SolidBrush(e.ForeColor), e.Bounds);
  e.DrawFocusRectangle();
}
이렇게 하면 변경된 값을 제대로 보여주게 됩니다..
주의할점은 리스트가 자동으로 다시 그려지지 않기 때문에.. 아이템의 값이 변경된후에 listBox1.Invalidate()를 호출하여서 다시 그리게 하여야합니다..

'컴퓨터 프로그래밍' 카테고리의 다른 글

C#, 윈도우 시스템 폴더 주소 가져오기  (1) 2009.12.14
WM_MOUSEWHEEL 메시지 받기  (0) 2009.11.17
.NET의 Type Reflection  (0) 2008.10.30
Posted by orange code

버텍스,픽셀 쉐이더에 입문하기 위해서 .fx파일을 작성하는데.. 이걸 C#+MDX에서 읽으려는데 방법을 몰라 그냥 무작정 해봤습니다....

.fx로 작성된 파일은 Effect.FromFile 메서드로 읽어올수 있습니다.. 그러면 Effect 객체를 얻을수 있는데.. 이놈으로 그 효과를 볼수있습니다.. 그런데 이 메서드가 좀 이상한게 주소에 한글이 들어가 있으면 파일을 제대로 찾지를 못합니다.. 그래서 저는 StreamReader.ReadToEnd로 모조리 읽은 다음에 Effect.FromString으로 해결했습니다.. 이건 잘되네요..
string source = new StreamReader("파일이름").ReadToEnd();
Effect effect = Effect.FromString(device, source, null, null, ShaderFlags.None, null);
옵션은 그냥 전부 기본값으로 채웠습니다..

이렇게 읽어온 이펙트는 이렇게 씁니다..
effect.Technique = "technique1"; // 테크닉 이름을 선택합니다..
int passes = effect.Begin(FX.None);
for (int pass = 0; pass < passes; pass++)
{
    effect.BeginPass(pass);
    // 여기에 이펙트가 적용될 놈들 그리기
    effect.EndPass();
}
effect.End();

사실 쓰는데는 큰 어려운건 없는데 검색하려니까 잘 안나와서.. 직접해보고 간단히 정리해봅니다..

'컴퓨터 프로그래밍 > Direct3D' 카테고리의 다른 글

Direct3D projection Effect  (0) 2009.12.02
3DS Viewer 만들기 (미완성)  (0) 2008.10.30
Posted by orange code

3D는 매번 시작할때마다 바로 좌절해버리는데 이번에도 마찬가지..
이번에는 3DS 뷰어를 만들겠다하고 검색하다가 이런곳을 발견..
http://archive3d.net/ 
3ds파일이 꽤 많아 테스트하기에 좋다고 생각하고, 자동차 하나를 받았습니다..


이런 자동차..

ase는 예전에 해봤는데 3ds포맷은 처음 해보는거라 일단 구글검색하여 페이지를 찾았습니다...
http://www.the-labs.com/Blender/3dsspec.html
http://www.martinreddy.net/gfx/3d/MLI.spec
3ds파일안에 material정보가 있는데 그 부분은 .mli 파일과 동일하다고 안적어놔서.. 따로 찾았네요.. (두번째 링크)

개발환경은 win xp, vs2008, c#, direct3d 입니다.. 
c++은 쓸데업는 코딩이 많고, opengl은 쓰려면 여기저기 찾아봐야되기 때문에... c#과 direct3d 가 된거죠..-_-;
어쨌든 결과적으로 미완성입니다... 왜냐면 정점들을 읽어서 출력하는건 알겠는데...
material이라든지 lighting 관련된건 하나도 모르겠거든요...

채우기로 하면 그냥 다 하얗게 나오기 때문에 와이어프레임으로 해놨습니다..
텍스쳐를 붙이면 좀 나아지겠지만 그 다음부터가 진도나가기 쉽지 않네요..
어쨌든 결과물을 올립니다.. Managed DirectX 입문에는 약간 도움이 되지 않을까 하네요 -_-;;

'컴퓨터 프로그래밍 > Direct3D' 카테고리의 다른 글

Direct3D projection Effect  (0) 2009.12.02
[C# + MDX 프로그래밍] HLSL  (0) 2008.12.17
Posted by orange code
컴퓨터 프로그래밍2008. 10. 30. 17:02

Visual Studio도 MSDN도 없이 C# 프로그래밍을 한 적이 있습니다. (인터넷도 안됩니다..)
csc와 메모장만으로 프로그래밍을 했었는데 그 때 제가 알고 있던 System.Reflection의 기능들 덕분에 많은 일이 가능했습니다..
알고 있던건 내용으로 우선 typeof로 Type 개체를 가져오고 GetMethods, GetProperties등의 함수로 타입들의 함수, 속성, 이벤트등을 알수 있었습니다. 그래서 이 기능을 이용해서 닷넷 dll을 다 읽어와 모든 타입의 정보를 html로 저장해버렸고, 원하는 타입의 함수, 속성등을 찾아볼 수 있게 되었습니다.
하지만 html파일에 없는 정보를 알고 싶을때는 프로그램을 수정하여 다시 html를 만들어야했기 때문에 시간이 오래걸렸습니다. 그래서 나중에는 System.Net 에 있는 소켓을 사용하여 작은 웹서버를 만들어 원하는 타입의 이름을 입력하면 즉석에서 정보를 가져와 보여주도록 했고, 이것으로 html을 매번 만들필요도 없어졌습니다.

그렇다면 그런 일을 가능하게 해준 이 기능은 어떻게 쓰는 것인가...

일단 Type의 개체는 typeof(타입이름) 혹은 변수.GetType()으로 가져올 수 있습니다.

Type type = typeof(string);

string str = "abc";
Type type = str.GetType();

설명은 일단 MSDN으로 대체합니다.

Posted by orange code