'AIR'에 해당하는 글 6건

NATELIB
( NateOn Lib for Actionscript 3.0 )

네이트온 메신저에 접속하기위한 라이브러리 입니다.

이것 역시 as3msn 처럼 액션스크립트 3.0 을 기반으로 만들었구요.

사용법 역시 동일합니다.

var a:Account = new Account();
a.connect('your_email', 'your_password', Account.ONLINE);

접속 완료이벤트, 친구 접속 이벤트 등 이벤트 중심으로 동작하고 as3msn의 기본 설계나 구조는 natelib에 기반하고 있습니다.

주석을 꼭 필요한곳에만 달아놓았고 아직 asdoc은 작성하지 않았습니다.



WRITTEN BY
buzzler

,
AS3MSN
( MSNP Lib for Actionscript 3.0 )

MSN 메신져에 접속하기 위한 액션스크립트 라이브러리 입니다.

작년 Apolo alpha 에서 작업했던걸 토대로 새롭게 만들었습니다.

기본 구조와 사용법은 natelib과 동일하게 유지하면서 MSN의 특성에 맞게끔 변형.

var a:Account = new Account();
a.connect('your_email', 'your_password', AccountState.ONLINE);

단 두줄로 msn에 접속이 가능해지고 모든 프로세스는 이벤트에 의해서 진행됩니다.

클래스별 이벤트는 주석으로 달아놓았구요.

아직 문서작업이 안되어 있지만 언젠가 다 채워 놓겠죠. ㄱ-

(사실 네이트온 라이브러리 문서작업하다 시작한 프로젝트라서..)


'programming > as3msn' 카테고리의 다른 글

AS3MSN (MSN messenger library for actionscript)  (2) 2008.10.08

WRITTEN BY
buzzler

,
nateilb에 이어서 msn을 위한 라이브러리를 일주일 전부터 준비하고 있었다.
나의 습성중 하나는.. 내가 짜놓은 소스를 잘 기억 못한다는것.
natelib 문서화 작업 때문에 소스를 살펴보고 있었는데.. 시간에 쫓기면 만들었던것 치곤 의외로 깔끔하게 잘 정리된 소스에 감탄하고 msn으로 포팅을 시작. (덕분에 natelib의 문서화 작업은 중단 되었다.)
Enterprise Architect 로 소스를 보기좋게 그려놓으니 이거이거 꽤 괜찮다.

인증방법이 조금 다르고, MSN은 거의다 동기식 프로토콜이라서 달라지는 부분을 제외하고는 거의 비슷한 구조로 만들어질 예정이다.
현제 진행상황은 초기의 인증을 통과한 시작단계. 네이트온 프로토콜 자체가 MSN 프로토콜을 많이 따라한 형태라 그런지 구조 자체는 똑같이 가지고 가도 문제 없는 수준.

예전 Mobsword의 초기 버전에서는 인증을 위해서 HTMLLoader 객체안에서 Ajax 오브젝트를 통해서 인증을 하고 결과를 다시 AS3 로 받아와서 처리를 했었다. 그 이유는 URLLoader나 URLStream으로 인증을 받을 수는 있지만 인증시 MSN서버로부터 부여받는 티켓 데이타가 MIME 헤더에 들어있는데.. 그 헤더를 볼 수가 없었던것. BODY는 볼 수 있지만 HEADER는 볼 수가 없다.
그런데 그런 코드를 똑같이 이번에도 포팅을 하려니 어딘가 있는 자존심이 꿈틀거려서 as3httpclient 라이브러리로 해결을 했다.
덕분에 코드도 깔끔해지고 인증 속도도 살짝 빨라지고. 머지않아 완성된 as3msn가 나올듯.

'programming > as3msn' 카테고리의 다른 글

as3msn ver 0.1 alpha  (0) 2008.10.28

WRITTEN BY
buzzler

,
스케칭이된 표면을 만들기 까지는 성공했으나..

가장 큰 숙제로 남아 있던 문제가 표면의 각도에 따라 해칭이 이루어지지 않아서 동적인 화면에 스케치 쉐이더필터를 적용했을때 화면에 스크레치가 생긴듯한 현상을 일으키는 문제였다.

이를 해결하기 위한 방법으로 각 표면의 각도에 맞게 텍스쳐를 회전시키는 것을 생각해봤지만.. 그 표면의 각도를 알기 위해선 표면의 법선 벡터 (Normal Vector)를 알아야 한다. 그 정보는 Rasterize 되기전의 정보이므로 Fragment Shader에서나 가능한 내용이다. 결국 PV3D 에서 출력해낸 2D 이미지에 Pixel Bender를 적용해야하므로 한계가 있다는 말이다.

그래서 짱구를 굴리고 굴려서 생각해낸 방법이...

생상정보 RGBA 중에서 A는 Light에 관한 정보를 담고, RGB에 Normal Vector를 담는 방법이겠다. 즉 R에는 Normal Vector의 x 값을, G에는 y값을, B에는 z값을 넣어 Pixel Bender에서 각 픽셀에서의 법선 정보를 알 수 있게끔 하고, 음영정보는 A에 담긴 정보를 사용한다는 뜻!

그러나 그런 방법은 있지만 PV3D에는 그렇게 렌더링 할 수 있는 방법이 없다.. 그런 이유로 Pixel Bender에 불탔던 열정이 잠시 식었었으나! 방법을 찾았다.

AbstractSmoothShadeMaterial 클래스를 상속받은 Custom Material을 만들면 되는것. 어렵지 않을까해서 EnvMapMaterial 이나 CellMaterial을 열어봤지만 크게 복잡한건 없는것 같다. 둘다 AbstractSmoothShadeMaterial의 서브클래스. 물론 EnvMapMaterial은 수식 자체가 뭘 하겠다는건지 알아먹을 수 없었으나 Custom Material을 만드는데에 문제가 있어보이지는 않는다.

 package org.papervision3d.materials.shadematerials

{

import fl.motion.Color;

import flash.display.BitmapData;

import flash.display.Graphics;

import flash.geom.Matrix;

import org.papervision3d.cameras.Camera3D;

import org.papervision3d.core.math.Number3D;

import org.papervision3d.core.proto.CameraObject3D;

import org.papervision3d.core.geom.renderables.Triangle3D;

import org.papervision3d.core.geom.renderables.Vertex3DInstance;

import org.papervision3d.core.material.AbstractSmoothShadeMaterial;

import org.papervision3d.core.math.Matrix3D;

import org.papervision3d.core.proto.LightObject3D;

import org.papervision3d.core.render.data.RenderSessionData;

import org.papervision3d.core.render.draw.ITriangleDrawer;

/**

* @Author Buzzler

*/

public class NormalMaterial extends AbstractSmoothShadeMaterial implements ITriangleDrawer

{

private static var x1:Number;

private static var x0:Number;

private static var x2:Number;

private static var y0:Number;

private static var y1:Number;

private static var y2:Number;

private var camera:CameraObject3D;

private var tmpN:Number3D;

private var tmpL:Number3D;

private var tmpR:uint;

private var tmpG:uint;

private var tmpB:uint;

private var tmpRGB:uint;

public function NormalMaterial(light:LightObject3D, camera:CameraObject3D)

{

super();

this.light = light;

this.camera = camera;

}

private static var useMap:BitmapData;

override public function drawTriangle(face3D:Triangle3D, graphics:Graphics, renderSessionData:RenderSessionData, altBitmap:BitmapData = null, altUV:Matrix = null):void

{

x0 = face3D.v0.vertex3DInstance.x;

   y0 = face3D.v0.vertex3DInstance.y;

x1 = face3D.v1.vertex3DInstance.x;

y1 = face3D.v1.vertex3DInstance.y;

x2 = face3D.v2.vertex3DInstance.x;

y2 = face3D.v2.vertex3DInstance.y;

triMatrix.a = x1 - x0;

triMatrix.b = y1 - y0;

triMatrix.c = x2 - x0;

triMatrix.d = y2 - y0;

triMatrix.tx = x0;

triMatrix.ty = y0;


tmpN = face3D.faceNormal.clone();

tmpL = new Number3D(-light.x,-light.y,-light.z);

tmpR = uint((tmpN.x + 1.0) * 127.5);

tmpG = uint((tmpN.y + 1.0) * 127.5);

tmpB = uint((tmpN.z + 1.0) * 127.5);

tmpRGB = (tmpR << 16) | (tmpG << 8) | (tmpB);

graphics.beginFill(tmpRGB, brightness(tmpN, tmpL));

   graphics.moveTo( x0, y0 );

graphics.lineTo( x1, y1 );

graphics.lineTo( x2, y2 );

graphics.lineTo( x0, y0 );

graphics.endFill();

renderSessionData.renderStatistics.shadedTriangles++;

}

private function brightness(n1:Number3D, n2:Number3D):Number

{

n1.normalize();

n2.normalize();

var result:Number = Math.acos(Number3D.dot(n1, n2)) - Math.PI / 2;

result = Math.max(result, 0) / (Math.PI / 2);

return 1 - result;

}

}

}

 

이게 NormalMaterial 이라는 직접 만든 재질을 입혀 많은 구(Sphere)이다.
알파값으로 Light와의 관계를 알 수 있고, 색상으로 면의 방향을 나타내는 법선 벡터를 알 수 있다.

자.. 숙제가 또 남았다. Face3D 단위가 아닌 Vertex 단위로 Color Interpolation이 필요해 보인다. 그래야 더욱 자연스러운 법선 백터가 생성되지 않을까. 안그럼 엄청나게 폴리곤이 많은 모델이어야 자여스럽게 보이는 상황이 발생 할 테니. 어쨌거나 당장 필요한 수준의 Material을 만들었으니 일단 만족.

추가: 3포인트 그래디언트를 만들어주는 픽셀벤더 필터가 있으니 도움이 되지 않을까

'Pixel Bender' 카테고리의 다른 글

PixelBender Outline View  (0) 2008.11.05
Flex와 Pixel Bender로 iChat 흉내내기  (0) 2008.09.25
Human Detector!  (2) 2008.09.25
Sketch Shader  (0) 2008.09.18
Sobel Operation 의 간단한 응용  (0) 2008.09.18

WRITTEN BY
buzzler

,
invalid-file

Mobsword Lite Messenger alpha version

제 1회 Flex Camp의 발표 자료용으로 제작한 Mobsword Messenger의 lite 버전이다.
Mobsword의 기능들 중에서 nateon만 뽑아내고 소스를 철저하게 공개용으로 제작한것.

메신져는 code와 layout과 style을 철저하게 분리시켜 제작되었고
code는 UI를 위한 모듈과 networking을 위한 모듈을 철저하게 분리시켰다.
한마디로 mobsword 의 소스를 공개하지 못한 원인을 반성한 결과랄까
아니면 이제 사회생활 조금 해봤다고 티내는 짓거리랄까.
위의 동영상중 natelib는 google code에 공개하여 업데이트중이다. 아직 문서를 못만들었지만..
일단 보너스로 mobsword messenger의 소스도 같이 올려두었고 mobslite는 아직이다.
이것도 아직 UI가 완벽하지 않은 상태이고 다듬을 부분이 훨씬 많지만 일단 보류.


WRITTEN BY
buzzler

,
invalid-file

Mobsword Messenger

invalid-file

Live Chat app for RED5

만든지 어언 1년이 훌쩍 넘은 나의 첫 AIR 작품이다.
Apollo Alpha 때 첫 릴리즈를 했으니 어쩌면 국내 첫 AIR작품이 될지도 모르고..
업데이트 안한지 한참 지났지만 다시 올려놓고 언젠가 눈에 띄면 다시 업데이트를 하고싶지 않을까.
특징을 요약하면 다음과 같다.
  • 멀티플랫폼 (OSX / Windows)
  • 통합메신져 (Nateon / MSN)
  • 화상&음성 대화
  • 병렬접속
메신저를 만들고 싶었던건 2001년도 부터지만 보안 제약상의 문제로 네트워크에 접근이 어려웠다. 그 제약사항을 AIR 플랫폼에서 풀어준 것.
플렉스를 공부하면서 동시에 AIR를 공부하면서 동시에 as 3.0은 잘 모르고 만들었던 터라서 소스는 매우 엉망이다. 그래서 오픈소스를 하기도 민망하다.
그래도 일단 되니깐. 다만 MSN은 접속이 되질 않고 있다. 뭔가 문제가 생긴것 같은데 디버깅하지 않고 방치중.
이런 개으름에 경종을 울려줄 사람 급구함.

WRITTEN BY
buzzler

,