형법 2016. 6. 2. 11:41

미수범

1.     범죄실현의 단계

범죄결심 예비, 음모 실행의 착수 미수 종료

                                                → 기수 종료

2.     미수범

가.   의의(형법 제25)

-       범죄의 실행에 착수하여 행위를 종료하지 못하였거나 결과가 발생하지 않은 것

-       미수범을 처벌하기 위해서는 형법 각칙에 미수범 처벌 규정이 존재해야 한다.

-       미수범의 형은 기수범보다 감경할 수 있다.(임의적 감경)

나.   성립요건

(1)   주관적 구성요건: 고의(기수의 고의)

(2)   실행의 착수(★) – 범죄를 실행해야 처벌 가능

(3)   범죄의 미완성

다.   미수범의 종류

(1)   장애미수: 실행의 착수시기 실행하였으나 실패한 것

(2)   중지미수: 자의성 판단 기준 실행 도중 스스로 중지한 것 (필요적 감면)

(3)   불능미수: 위험성 판단 기준 절대로 결과가 일어날 수 없는 행위

   (ex) 설탕 먹여서 사람 죽이기

3.     실행의 착수(사례)

가.   절도죄

-       자동차 안에 있는 물건을 훔칠 생각을 가지고 유리창을 따기 위해 면 장갑을 끼고 칼을 소지한 상태에서 노상에 세워 놓은 자동차의 유리창을 통하여 그 내부를 손전등으로 비추어 보다가 체포된 경우 (실행의 착수: 인정 X)

-       자동차에 있는 물건을 훔칠 생각을 가지고 손전등과 노끈을 소지한 상태에서 자동차의 문이 잠겨 있는지 확인하기 위해 양 손으로 운전석 문의 손잡이를 잡고 열려고 하던 중에 체포된 경우 (실행의 착수: 인정 O)

-       야간에 타인의 재물을 절취하기 위하여 다른 사람의 집의 담을 넘은 경우 (실행의 착수: 인정 O)

나.   주거침입죄

-       2008도1464

-       문이 열려있으면 들어가서 절도할 생각으로 다세대 주택의 모든 문을 열어보았으나 모두 잠겨있어 절취하지 못한 경우(실행의 착수: O)

다.   강간죄 폭행 또는 협박이 필요

-       90도607 (미수범 성립 X)

-       99도5187 (미수범 성립 O)

라.   살인죄

-       85도2773 (미수범 성립 O)

4.     중지미수

(가) 의의(형법 제26)

범인이 자의로 실행에 착수한 행위를 중지하거나 그 행위로 인한 결과의 발생을 방지한 때에는 형을 감경 또는 면제한다.

자의성: 행위자 스스로 실행에 착수한 행위를 중지하거나 결과의 발생을 방지했을 것

(나) 자의성 판단기준

-       객관설: 외부적 사정 & 내부적 동기

-       주관설: 후회, 동정, 연민 등 윤리적 동기

-       Frank의 공식: “할 수 있었음에도 불구하고 하기를 원치 않아서

-       절충설: 사회일반의 경험상 강제적 장애사유로 인하여 타율적으로 중지한 경우가 장애미수이고, 이러한 사유가 없었음에도 불구하고 자율적 동기에 의하여 중지한 때에는 중지미수(판례)

(다) 구체적 사례

-       피고인들이 피해자를 강간하려고 하던 중 피해자가 수술한지 얼마 안되어 배가 아프다면서 애원하는 바람에 그 뜻을 이루지 못한 경우 (자의성: X) – 장애미수

-       범행 당일 미리 제보를 받은 세관직원들이 범행현장 주변에 잠복근무를 하고 있어 그들이 왔다갔다 하는 것을 본 피고인이 범행의 발각을 두려워한 나머지 자신이 분담하기로 한 실행행위에 이르지 못한 경우 (자의성: X)

-       피고인이 피해자를 살해하려고 그의 목 부위와 왼쪽 가슴부위를 칼로 수회 찔렀으나 피해자의 가슴 부위에서 많은 피가 흘러나오는 것을 발견하고 겁을 먹고 그만두는 바람에 미수에 그친 경우(자의성: X)

-       피고인이 피해자를 강간하려다 피해자의 다음번에 만나 친해지면 응해주겠다는 취지의 간곡한 부탁으로 인하여 그 목적을 이루지 못한 후 피해자를 자신의 차에 태워 집에까지 데려다 준 경우(자의성: O)

5.     불능미수

(가) 의의(형법 제27)

실행의 수단 또는 대상의 착오로 인하여 결과의 발생이 불가능하더라도 위험성이 있는 때에는 처벌한다. 단 형을 감경 또는 면제할 수 있다.

☞ 불능범&불능미수의 구별

-       불능범: 절대로 일어날 수 없는 것을 가능하다고 믿는 사람

-       불능미수

(나) 위험성 판단 기준

-       구객관설

-       법률적 불능, 사실적 불능설

-       구체적 위험설(신객관설)

-       추상적 위험설

-       주관설

-       인상설

(다) 구체적 사례

-       향정신서의약품인 메스암페타민 속칭히로뽕제조를 위하여 그 원료인 염산에 페트린 및 수종의 약품을 교반하여 히로뽕제조를 시도하였으나 그 약품배합 미숙으로 완제품을 제조하지 못한 경우 (위험성: O)

-       피고인이 주민을 살해할 목적으로 마을 우물에 농약(스미치온)을 뿌렸으나 심한 악취로 인하여 마시기 어렵고 치사량에 미달하여 사람을 살해하기 불가능 했던 경우 (위험성: O)

'형법' 카테고리의 다른 글

절도  (0) 2016.06.02
정범 및 공범론  (0) 2016.06.02
책임론  (0) 2016.04.15
위법성론  (0) 2016.04.15
구성요건적 착오  (0) 2016.04.15
posted by 천마서생
:
프로그래밍/DirectX 9 2016. 5. 3. 03:00

버텍스(Vertex) - 정점

  • 버텍스는 3D 공간에서 위치를 가지는 정점 -> 벡터라고 함
  • 버텍스들이 모여서 Direct3D의 Primitive에 의하여 선이나 삼각형을 형성하면서 3D 모델을 형성함
  • 버텍스의 물리적인 특성으로써 위치만 존재하고 크기는 무시됨
  • Direct3D에서 사용되는 버텍스는 위치 값 이외에도 색상이나 텍스쳐 좌표 가질 수 있는 다양한 부가적인 특성 가지고 있음
  • Direct3D에서는 FVF라는 개념을 사용하여 필요에 따라 버텍스의 특성을 지정하여 사용할 수 있음

버텍스 포맷

 정점의 좌표

RHW 

결합 가중치 

정점의 법선 벡터 

정점의 점 크기 

확산광 색 

반사광 색 

텍스쳐 좌표 1 



FVF


  • Direct3D에서 지원하는 FVF 방식은 메모리와 실행 시간 절약 할 수 있는 효율적인 방법임


FVF 사용의 효율성


  • 1 프레임안에서의 버텍스 출력

- 버텍스 1개

80(Byte) - 16(Byte) = 64(Byte)

- 버텍스 1000개
64,000(Byte) 차이가 발생
  •  초당 60프레임을 보여줄때 (표준)
- 버텍스 1000개
60 (프레임) * 64,000 (Byte) = 3,840,000(Byte) 의 차이가 발생

FVF를 사용하는 이유
  • 메모리 낭비와 처리 속도의 저하로 인하여 Direct3D에서는 FVF(Flexible Vertex Format)라는 방식을 사용하여 다양한 경우에 적절한 버텍스 포맷을 구성하여 사용하도록 함

  • CUSTOMVERTEX 구조체
 - 이름 관계없음
 - 버텍스 버퍼라는 버텍스들을 보관하기 위한 메모리 영역을 생성할 때 사용

ex) struct CUSTOMVERTEX
{    
float x,y,z;       // 3D 공간상에 위치하는 좌표
DWORD color; // 버텍스의 색상
};
  • D3DFVF_XYZ  (버텍스의 위치) | D3DFVF_DIFFUSE (버텍스의 색상) – Direct3D에 미리 정의되어 있음 – 이 값은 Direct3D에게 전달되어 구조체 CUSTOMVERTEX가 어떤 구조를 가지고 있는지를 알려준다.
ex) #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)

버텍스 버퍼


  • 버텍스 버퍼란
- 버텍스의 구조를 Direct3D로 전달하기 위한 버퍼
- 필요한 수의 버텍스를 저장할 수 있는 메모리를 생성하고, 이 곳에 버텍스의 위치, 색상등과 같은 특성들을 저장하는 메모리 영역
- 버텍스의 수가 얼마가 될지 모르므로 포인터로 생성해 놓고
CreateVertexBuffer()라는 함수를 사용하여 메모리를 할당 받는다.
- 전역변수
LPDIRECT3DVERTEXBUFFER g_pVB = NULL; // 버텍스 버퍼

임시 배열 생성
  • 버텍스 버퍼 생성 후 버텍스로 채움

- vertices[] 라는 배열은 버텍스 버퍼에 넣을 버텍스들을 임시로 보관하기 위한 배열


ex) CUSTOMVERTEX vertices[] =
    {

{150.0f,50.0f,0.5f,0xffff0000,},    //버텍스의 위치와 색상

{250.0f,250.0f,0.5f,0xff00ff00,},

{50.0f,250.0f,0.5f,0xff00ffff,},

    };

{50.0f , 250.0f, 0.5f,   0x     ff        00        ff        ff    }
 x좌표  y좌표  z좌표      투명도    Red    Green    Blue

                                0~255   0~255  0~255  0~255 (10진수)


CreateVertexBuffer( ) 함수

  • 정점 버퍼를  생성하는 함수 – 3*sizeof(CUSTOMVERTEX) : 버텍스 버퍼의 크기가 3개 들어갈 만큼의 양 명시
  • 버퍼를 사용하는 방법 : 0 (USAGE방법을 사용하지 않겠다) – 정적 버퍼 / 동적 버퍼 설정
  • D3DFMT_CUSTOMVERTEX : 버텍스의 포맷을 알려줌 
  • D3DPOOL_DEFAULT : 비디오 메모리 사용 – 가장 적절한 메모리 역을 할당. 대부분 비디오 메모리 된다. 비디오 메모리 내에 버텍스 버퍼가 생성되면 출력 속도가 매우 빨라짐
  • 버텍스 버퍼 변수 g_pVB의 포인터를 넘겨줌

ex) if(FAILED(g_pd3dDevice->CreateVertexBuffer(

3*sizeof(CUSTOMVERTEX),

0,

D3DFMT_CUSTOMVERTEX,

D3DPOOL_DEFAULT,

&g_pVB,

NULL)))

{

return E_FAIL;

}


버텍스 버퍼 채우기

  • 버텍스 버퍼 채우기 단계
– ① 버텍스 버퍼에 락을 건다. (Lock( ) 함수 사용)
– ② 접근용 포인터를 사용하여 버텍스의 내부에 버텍스들을 복사한다. (memcpy( ) 함수 사용)
– ③ 버텍스 버퍼에 락을 푼다. (Unlock( ) 함수 사용)
– Lock()과 Unlock()을 사용하는 이유는 그래픽카드라는 하드웨어를 접근하기 위해, 다른 응용프로그램들이 사용하지 않도록 방지함이 목적

ex)
VOID* pVertices; // 버텍스 버퍼의 접근용 포인터
if(FAILED(g_pVB->Lock(0,sizeof(vertices),(void**)&pVertices,0)))
// Lock함수를 사용하는 이유는 버텍스 버퍼를 할당 받은 메모리가 비디오 메모리이기 때문
// pVertices 변수는 버텍스 버퍼에 락을 걸기 위하여 Lock()함수를 호출할 때 전달되어 락
이 걸린후 접근할 수 있는 포인터를 받아온다.
return E_FAIL;
memcpy(pVertices,vertices,sizeof(vertices));
// Vertices[]안에 있던 버텍스들을 모두 버텍스 버퍼로 복사한다.
g_pVB->Unlock();


  • 버텍스 출력 단계 (크기,구조,그린다)

– ① 출력 대상이 되는 버텍스와 각 버텍스의 크기 지정하여 디바이스에 바인딩 한다.

– ② 버텍스의 구조 디바이스에 지정 (앞에서 지정한 D3DFVF_CUSTOMVERTEX 값)

– ③ DrawPrimitive( ) 함수를 사용하여 버텍스 버퍼안의 내용을 폴리곤 형태로 그린다.


ex)
VOID Render()
{
if(NULL == g_pd3dDevice) return;

//후면 버퍼를 파란색(0,0,255)로 채운다.
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);

//렌더링 시작
if(SUCCEEDED(g_pd3dDevice->BeginScene()))
{
g_pd3dDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX));
//g_pVB : 버텍스 버퍼
//sizeof(CUSTOMVERTEX : 버텍스 버퍼의 크기
g_pd3dDevice->SetFVF(D3DFMT_CUSTOMVERTEX);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
//버텍스 3개를 사용하여 D3DPT_TRIANGLELIST로 그리라고 하였으므로, 한개의 삼각형이 그려진다.

g_pd3dDevice->EndScene();
//렌더링 종료
}


g_pd3dDevice->Present(NULL,NULL,NULL,NULL);

// 후면 버퍼를 보이는 화면으로

}


  • (1) 스트림 소스 지정
- 스트림 소스를 버텍스 버퍼와 연결
- 버퍼의 기하정보를 랜더링 파이프라인에 전달

ex)
HRESULT SetStreamSource(
UINT StreamNumber, // 버텍스 버퍼를 연결할 스트림 소스
IDirect3DVertexBuffer9 * pStreamData, // 스트림과 연결될 VB
UINT OffsetInBytex, // 버텍스 데이터의 시작 오프셋, 0 이외의 값일 경우 장치 지원여부를 확인 필요
UINT Stride // 버텍스 버퍼 내 요소의 바이트 수
);
- Device->SetStreamSource(0,VB,0,sizeof(Vertex));


  • (2) 버텍스 포멧 지정 – 이후의 드로잉 과정에서 이용될 버텍스 포멧 – Device->SetFVF(Vertex::FVF);
  • (3) 인덱스 버퍼 지정 – 이후의 드로잉 과정에서 이용될 인덱스 버퍼 – Device->SetIndices(IB);
  • (4) 폴리곤 그리는 방식 지정
DrawPrimitive( ) : 일반적인 방법
DrawIndexedPrimitive( ) : 중복되는 버텍스를 없애 속도를 높임(가장 빠름)
– DrawPrimitiveUP( ) : 버텍스 버퍼를 생성하지 않고 그림 (속도가 느림)
– DrawIndexedPrimitiveUP( ) : DrawPrimitiveUP()에 인덱스 기능을 추가함

  • D3DFVF_XYZRHW

- 고정 파이프라인을 거치지 않고 x,y 좌표가 바로 윈도우 좌표로 된다.

- 즉, 행렬변환이나 좌표계 설정을 해주어도 먹히지 않는다.

• 월드 이동 자체가 안됨.

- 윈도우 창에 2D 좌표값을 사용하고 싶을 때 사용하는 값

• 인터페이스를 위한 2D 코딩할 때 반드시 사용됨.

  • D3DFVF_XYZ

- 정점 포맷이 변환되지 않은 정점의 위치 좌표를 포함한다.

- 윈도우 창을 로컬 좌표계처럼 사용하겠다.



posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:





호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
:



호서대학교 게임학과 16년도 중간고사 해설동영상.

posted by 천마서생
: