'Interesting'에 해당되는 글 192

  1. 2008.07.24 [구글 라이블리] My room 만들기 1
  2. 2008.07.18 구글 라이블리 체험 (1)
  3. 2008.07.17 Wiimote Library 분석 (1)



[구글 라이블리] My room 만들기

구글 라이블리에 내방을 만들어 보았다.

물론 현재까지는 기능을 확인하는 정도만 해봤는데, 세컨드라이프보다는 간단하다는 느낌이고, 아이템이 현재는 무료이겠지만, 향후에는 아이템을 구입하기 위해 돈을 들여야 되겠구나 하는 생각이 들었다.

앞으로 가능할지 어쩔지는 두고 봐야 겠지만, 포스팅자체를 라이블리에 할 수 있는 것도 하나의 좋은 모델이 되지 않을까 싶다. 현재는 무료아이템을 이용해서 궁색하지만 화분이나 침대 소파 등을 놓아 보았다.

에드 클릭스와 같은 광고 컨텐츠도 방을 꾸미는 아이템처럼 사용하고 말이다.

현재 사용가능한 기능중에는 PDP TV를 놓았는데, 그 아이템에서 유투브의 동영상을 재생할 수 있게 되어 있다.
그렇다고 하면 광고를 클릭해서 라이블리에서 수익을 얻게 만들지 말란법은 없을 것 같다.

물론 사람들이 얼마나 이 라이블리에 얽메여 사는가에 달린 문제일 것이다.

세컨드 라이프와 또하나의 차이점을 생각해 보면, 개인의 영역이 지도에서 연결되어 있는 세컨드라이프와 달리 구글 라이블리는 독자영역을 무한히 만들 수 있다. 그리고 주소만 안다면 그곳으로 가볼 수 있는 것이다. 영역에 제약 받지 않고 사용할 수 있도록 한 점이 웹의 특성을 살렸다고 본다.

사용자 삽입 이미지





Interesting/About Google | Posted by hyena0 2008. 7. 18. 00:05

구글 라이블리 체험 (1)




구글 라이블리 체험 (1)

구글라이블리는 구글 계정이 있으면 로그인 할 수 있다 .  물론 APP를 설치해야 하는데, 설치하고 나면 세컨드라이프 처럼 별도의 APP가 나타나지 않는다.

웹상에서 동작하므로 별도의 프로그램을 동작시킬 필요가 없다는 것이 사용하기 쉬운점 중에 하나라고 하겠다.

일단 잘 몰라서 Popular rooms 중에 하나를 선택해서 들어가 보니 내 아바타가 흑인이었다.

사용자 삽입 이미지


일단 적당히 캐릭터를 바꾸고서 다시 다른 방으로 가보았다.

사용자 삽입 이미지

데이트 룸이었는데, 일단 돌아다녀 보기만 하고 오늘은 여기까지 해본다.

사용자 삽입 이미지

사용법은 웹에서 동작하므로 세컨드라이프와는 여러부분이 달랐는데, 사용하기에는 라이블리가 더 편하다는 느낌을 받았다.

다음엔 아이템을 구입한다던지 사용하는 법을 좀 익혀봐야 겠다.

Interesting/Wii | Posted by hyena0 2008. 7. 17. 00:37

Wiimote Library 분석 (1)




Wiimote Library

Wiimote Library 내용을 알아야 응용프로그램을 만들 수 있기 때문에 라이브러리 내용을 살펴보도록 하겠다.

위모트 라이브러리는 C#으로 작성되어 있고, Wiimote.cs, HIDImports.cs, Events.cs, DataTypes.cs 네가지 파일로 구성된다.

Wiimote.cs는 wiimote class가 있고 위모트를 연결하고 동작하기 위한 Method 들을 포함하고 있어서 , 윈도우프로그램에서 초기화와 데이터입출력을 처리하는 부분이 된다.
HIDImports.cs는 인식된 위모트를 연결해주는 역할을 하고, Events.cs는 이벤트 처리에 해당하는 부분이고, DataTypes.cs는 데이터처리에 필요한 구조체들을 정의하고 있다.  

각 해당 파일에 대한 클래스와 메소드를 정리해 보았다.

------------------------
*Wiimote.cs

namespace WiimoteLib
{
public class Wiimote : IDisposable
{
public Wiimote();
public void Connect();
public void Disconnect();
private void BeginAsyncRead();
private void OnReadData(IAsyncResult ar);
private bool ParseInput(byte[] buff);
private void InitializeExtension();
private byte[] DecryptBuffer(byte[] buff);
private void ParseButtons(byte[] buff);
private void ParseAccel(byte[] buff);
private void ParseIR(byte[] buff);
private void ParseExtension(byte[] buff, int offset);
private void ParseReadData(byte[] buff);
private byte GetRumbleBit();
public void SetReportType(InputReport type, bool continuous);
public void SetLEDs(bool led1, bool led2, bool led3, bool led4);
public void SetLEDs(int leds);
public void SetRumble(bool on);
public void GetStatus();
private void EnableIR(IRMode mode);
private void DisableIR();
private void ClearReport();
private void WriteReport();
public byte[] ReadData(int address, short size);
public void WriteData(int address, byte data);
public void WriteData(int address, byte size, byte[] buff);
}
}
---------------------------
* HIDImports.cs

class HIDImports
{
[DllImport("hid.dll")]
public static extern void HidD_GetHidGuid(out Guid gHid);
public static extern Boolean HidD_GetAttributes(IntPtr HidDeviceObject, ref HIDD_ATTRIBUTES Attributes);
internal extern static bool HidD_SetOutputReport(
   IntPtr HidDeviceObject,
   byte[] lpReportBuffer,
   uint ReportBufferLength);
[DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetupDiGetClassDevs(
   ref Guid ClassGuid,
   [MarshalAs(UnmanagedType.LPTStr)] string Enumerator,
   IntPtr hwndParent,
   UInt32 Flags
   );
public static extern Boolean SetupDiEnumDeviceInterfaces(
   IntPtr hDevInfo,
   //ref SP_DEVINFO_DATA devInfo,
   IntPtr devInvo,
   ref Guid interfaceClassGuid,
   Int32 memberIndex,
   ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData
  );
public static extern UInt16 SetupDiDestroyDeviceInfoList( IntPtr hDevInfo );

[DllImport(@"setupapi.dll", SetLastError = true)]
public static extern Boolean SetupDiGetDeviceInterfaceDetail(
   IntPtr hDevInfo,
   ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
   IntPtr deviceInterfaceDetailData,
   UInt32 deviceInterfaceDetailDataSize,
   out UInt32 requiredSize,
   IntPtr deviceInfoData
  );
public static extern Boolean SetupDiGetDeviceInterfaceDetail(
   IntPtr hDevInfo,
   ref SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
   ref SP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData,
   UInt32 deviceInterfaceDetailDataSize,
   out UInt32 requiredSize,
   IntPtr deviceInfoData
  );

[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern SafeFileHandle CreateFile(
   string fileName,
   [MarshalAs(UnmanagedType.U4)] FileAccess fileAccess,
   [MarshalAs(UnmanagedType.U4)] FileShare fileShare,
   IntPtr securityAttributes,
   [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
   [MarshalAs(UnmanagedType.U4)] EFileAttributes flags,
   IntPtr template);

[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool CloseHandle(IntPtr hObject);
}
---------------------------
* Events.cs

public delegate void WiimoteChangedEventHandler(object sender, WiimoteChangedEventArgs args);
public delegate void WiimoteExtensionChangedEventHandler(object sender, WiimoteExtensionChangedEventArgs args);
public class WiimoteExtensionChangedEventArgs: EventArgs
public class WiimoteChangedEventArgs: EventArgs
{
public WiimoteExtensionChangedEventArgs(ExtensionType type, bool inserted);
}
public class WiimoteChangedEventArgs: EventArgs
{
public WiimoteChangedEventArgs(WiimoteState ws);
}
---------------------------
*DataTypes.cs

public class WiimoteState
public struct LEDState
public struct NunchukCalibrationInfo
public struct ClassicControllerCalibrationInfo
public struct NunchukState
public struct ClassicControllerButtonState
public struct ClassicControllerState
public struct IRState
public struct AccelState
public struct AccelCalibrationInfo
public struct ButtonState
public enum ExtensionType : byte
public enum IRMode : byte
---------------------------