본문 바로가기

전체 글54

software rendering 텍스쳐 샘플러 큰 원본 텍스쳐를 확대하는 경우 해상도가 엄청나게 높지 않은이상 픽셀이 깨져보이기 마련이다. 해결하는 방법으로는 레티나 디스플레이처럼 특정 거리 내에서는 인간의 눈으로 화소를 구분하지 못할 정도로 화소를 높이는 방법이 있겠으나 아무래도 비싼 비용이 소모된다. 또 다른 방법으로는 밉맵을 이용하는 방법이 있다. 밉맵은 큰 원본 텍스쳐와 그 외에 작은 해상도의 텍스쳐를 미리 준비하고, 확대될 경우 미리 만들어져있는 해상도의 텍스쳐와 바꿔서 출력하는 기술이다. 렌더링에 사용되는 픽셀 자체의 수가 줄어들기 때문에 실시간 렌더링에 부하가 적게 들고, 렌더링 과정에서 일어나는 손실도 줄일 수 있다. 이때 밉맵에는 안티앨리언싱 효과도 함께 들어가있다. 이는 인접한 픽셀이 맞닥뜨릴때, 이를 보간을 통하여 자연스러운 색 .. 2013. 12. 11.
Vector와 Scalar 스칼라 : 크기만 갖는 물리량. 크기만으로 그 물리량이 결정된다. 벡터 : 크기와 방향을 갖는 물리량. 크기와 방향이 정해져야 그 물리량이 결정된다. 벡터의 크기와 단위벡터(방향)로 표현 Size : 벡터는 크기와 방향을 가지는데 크기를 나타내는 것이 벡터의 길이이다. 벡터의 길이는 당연히 스칼라값이다. 벡터의 길이를 나타내기 위해 ||v||와 같은 방식으로 표기한다. 벡터의 길이를 구하는 공식은 ||v|| = sqrt(v0^2 + v1^2 + v2^2...+vn^2) Normalization : 벡터의 정규화는 크기가 1이 아닌 벡터를 단위 벡터(1인 벡터)로 만들어 주는 것이다. 1의 크기를 가지고 있는 단위벡터는 방향을 표현하는데 유용하게 사용되며 컴퓨터 그래픽스에서 광원의 방향, 평면의 법선 방향.. 2013. 12. 11.
VB 6.0에서 Recordset의 Value 가져오기 예상외로 난해함. 필드명이나 제일 상단 Value는 가져오나 index로 가져오기 어려움. 일단 쿼리를 통해 Recordset을 가져왔다는 가정하에서 진행. myRectSet As New ADODB.Recordset 를 통해 myRectSet로 테이블을 가져왔음. Dim var As Variant var = myRectSet.GetRows(myRectSet.RecordCount) For i =0 To UBound(var, 2) MsgBox (var(0, i)) Next myRectSet.Close 이게 다임. GetRows시 i를 넣어서 가져오는 줄 알았으나 전체 갯수를 가져와야 됨. 이 후 UBound를 통해 다시 전체갯수를 알아올수 있는 듯. MsgBox에 var()를 통해, 첫번째는 필드, 두번째는.. 2012. 5. 12.
VB 6.0에서 MSSQL 접근하기 우선 VB 6.0을 실행. 켜서 간단하게 표준 EXE를 생성. 여기서 마우스 포인터가 가르키는 컨트롤을 클릭하고 창 안에다가 드래그해서 컨트롤 생성. Command1_Click()라는 메서드 안에 코드 작성. Private Sub Command1_Click() Dim MyConnObj As New ADODB.Connection Dim myRectSet As New ADODB.Recordset MyConnObj.Open "Provider = sqloledb;Data Source=서버이름;Initial Catalog=테이블이름", "아이디", "패스워드", -1 Dim sqlStr As String sqlStr = "select * from 테이블이름" myRectSet.Open sqlStr, MyConnO.. 2012. 5. 12.
회전하는 입방체 만들기 #include "d3dUtility.h" // 장치를 위한 전역 변수 생성 IDirect3DDevice9* Device=0; // 화면의 해상도를 정의할 상수 전역 변수 인스턴스 const int Width = 800; const int Height = 600; // 버텍스 버퍼와 인덱스 버퍼를 저장할 전역 변수 인스턴스 생성 IDirect3DVertexBuffer9* VB = 0; IDirect3DIndexBuffer9* IB = 0; // 커스텀 버텍스 포맷을 만들기 위한 구조체 struct Vertex { Vertex(){} // 버텍스의 위치 정보만을 보관 Vertex(float x, float y, float z) { _x=x; _y=y; _z=z; } float _x, _y, _z; stat.. 2011. 11. 9.
Triangle 그리기 #include "d3dUtility.h" // 장치를 위한 전역 변수 생성 IDirect3DDevice9* Device=0; // 화면의 해상도를 정의할 상수 전역 변수 인스턴스 const int Width = 640; const int Height = 480; // 버텍스 버퍼를 저장할 전역 변수 인스턴스 생성 IDirect3DVertexBuffer9* Triangle = 0; // 커스텀 버텍스 포맷을 만들기 위한 구조체 struct Vertex { Vertex(){} // 버텍스의 위치 정보만을 보관 Vertex(float x, float y, float z) { _x=x; _y=y; _z=z; } float _x, _y, _z; static const DWORD FVF; }; // 구조체의 유연.. 2011. 11. 9.
DirectX 기본 코드 구조. // D3D 초기화를 위해 준비한 헤더를 포함 #include "d3dUtility.h" // 장치를 위한 전역 변수를 인스턴스화 IDirect3DDevice9* Device = 0; // 프레임웍 함수를 구현 (기본구조 : Setup, Cleanup, Display) bool Setup() { return true; } void Cleanup() { } bool Display(float timeDelta) { // 후면 버퍼를 소거하고 깊이/스텐실 버퍼를 각각 검은색과 1.0으로 초기화하는 Clear 메서드를 호출. if( Device ) { // 첫번째 인자 : pRects 배열 내의 사각형의 수 // 두번째 인자 : 소거하려는 화면 사각형의 배열, 표면의 특정 영역만을 소거할 수 있도록 해준다. /.. 2011. 11. 9.
Direct3D 초기화를 위한 예제 준비 (구현) #include "d3dUtility.h" // Direct3D 초기화 메서드 bool d3d::InitD3D( HINSTANCE hInstance, int width, int height, bool windowed, D3DDEVTYPE deviceType, IDirect3DDevice9** device) { // 메인 애플리케이션 생성 WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)d3d::WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hCursor = L.. 2011. 11. 9.
Direct3D 초기화를 위한 예제 준비 (헤더) // 메인 Direct3DX 헤더 포함 #include namespace d3d { // 메인 애플리케이션 윈도우를 초기화하고, Direct3D 초기화 코드를 구현하는 메서드 // 성공적으로 리턴될 경우 IDirect3DDevice9 인터페이스를 가르키는 포인터를 리턴. bool InitD3D( HINSTANCE hInstance, int width, int height, bool windowed, D3DDEVTYPE deviceType, IDirect3DDevice9** device); // 애플리케이션 메세지 루프를 포장. // 디스플레이 함수가 될 함수의 포인터를 받는다. // 디스플레이 함수는 드로잉 코드가 구현되어있다. int EnterMsgLoop( bool (*ptr_display)(floa.. 2011. 11. 9.