Скачать 0.59 Mb.
|
largeBitmap.DrwaChar(&ch, 0, (scalar)large_width/8, (scalar)large_height/16); } void UpdateFrameBuffer() { frame_buffer.Clear(RGBA(255, 255, 255, 255)); Copy(frame_buffer, smallBitmap, 0, 0, 0, 0, smallBitmap.GetWidth(), smallBitmap.GetHeight()); Copy(frame_buffer, largeBitmap, smallBitmap.GetWidth()+8, 0, 0, 0, largeBitmap.GetWidth(), largeBitmap.GetHeight()); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_RASTERSCALE, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_RASTERSCALE); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } // // FUNCTION: MyRegisterClass() // // PURPOSE: Registers the window class. // // COMMENTS: // // This function and its usage is only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx' // function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated // with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_RASTERSCALE); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_RASTERSCALE; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); } // // FUNCTION: InitInstance(HANDLE, int) // // PURPOSE: Saves instance handle and creates main window // // COMMENTS: // // In this function, we save the instance handle in a global variable and // create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 1024, 768, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // // FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the main window. // // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... frame_buffer.BitBlt(hdc); EndPaint(hWnd, &ps); break; case WM_SIZE: GetClientRect(hWnd, &fb_rt); frame_buffer.Init(fb_rt.right, fb_rt.bottom); UpdateFrameBuffer(); break; case WM_KEYDOWN: switch (wParam) { case 0x41: //a large_width+=1; large_height+=2; break; case 0x5a: //z large_width-=1; large_height-=2; break; case 0x53: //s large_width++; break; case 0x58: //x large_width--; break; case 0x44: //d large_height++; break; case 0x43: //c large_height--; break; case 0x46: //f line_offset+=0.1; break; case 0x56: //v line_offset-=0.1; break; case 0x47: //g curve_offset+=0.1; break; case 0x42: //b curve_offset-=0.1; break; case 0x48: //h weight *= 1.1; break; case 0x4e: //n weight /= 1.1; break; case VK_SPACE: draw_curve=!draw_curve; break; case VK_CONTROL: color_curve=!color_curve; break; case VK_ESCAPE: PostMessage(hWnd, WM_QUIT, 0, 0); break; } Init(); UpdateFrameBuffer(); InvalidateRect(hWnd, NULL, FALSE); break; case WM_CREATE: Init(); break; case WM_DESTROY: // delete largeBitmap; PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // Mesage handler for about box. LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; } return FALSE; } shadowmap.fx //----------------------------------------------------------------------------- // File: ShadowMap.fx // // Desc: Effect file for high dynamic range cube mapping sample. // // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- #define SMAP_SIZE 512 #define SHADOW_EPSILON 0.000005f//0.00005f #define SlopeScale 1.0f float4x4 g_mWorldView; float4x4 g_mProj; float4x4 g_mViewToLightProj; // Transform from view space to light projection space float4 g_vMaterial; texture g_txScene; texture g_txShadow; float3 g_vLightPos; // Light position in view space float3 g_vLightDir; // Light direction in view space float4 g_vLightDiffuse = float4( 1.0f, 1.0f, 1.0f, 1.0f ); // Light diffuse color float4 g_vLightAmbient = float4( 0.3f, 0.3f, 0.3f, 1.0f ); // Use an ambient light of 0.3 float g_fCosTheta; // Cosine of theta of the spot light float g_grad_begin_fade = 0.001; float g_grad_end_fade = 0.002; float2 g_screen_res = { 640, 480 }; sampler2D g_samScene = sampler_state { Texture = MinFilter = Point; MagFilter = Linear; MipFilter = Linear; }; sampler2D g_samShadow = sampler_state { Texture = MinFilter = Point; MagFilter = Point; MipFilter = Point; AddressU = Clamp; AddressV = Clamp; }; //----------------------------------------------------------------------------- // Vertex Shader: VertScene // Desc: Process vertex for scene //----------------------------------------------------------------------------- void VertScene( float4 iPos : POSITION, float3 iNormal : NORMAL, float2 iTex : TEXCOORD0, out float4 oPos : POSITION, out float2 Tex : TEXCOORD0, out float4 vPos : TEXCOORD1, out float3 vNormal : TEXCOORD2, out float4 vPosLight : TEXCOORD3 ) { // // Transform position to view space // vPos = mul( iPos, g_mWorldView ); // // Transform to screen coord // oPos = mul( vPos, g_mProj ); // // Compute view space normal // vNormal = mul( iNormal, (float3x3)g_mWorldView ); // // Propagate texture coord // Tex = iTex; // // Transform the position to light projection space, or the // projection space as if the camera is looking out from // the spotlight. // vPosLight = mul( vPos, g_mViewToLightProj ); } //----------------------------------------------------------------------------- // Pixel Shader: PixScene // Desc: Process pixel (do per-pixel lighting) for enabled scene //----------------------------------------------------------------------------- float4 PixScene( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR { float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 ); ShadowTexC.y = 1.0f - ShadowTexC.y; // transform to texel space float2 texelpos = SMAP_SIZE * ShadowTexC; // Determine the lerp amounts float2 lerps = frac( texelpos ); //read in bilerp stamp, doing the shadow checks float sourcevals[4]; sourcevals[0] = (tex2D( g_samShadow, ShadowTexC ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f; sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f; sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f; sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f; // lerp between the shadow values to calculate our light amount float LightAmount = lerp( lerp( sourcevals[0], sourcevals[1], lerps.x ), lerp( sourcevals[2], sourcevals[3], lerps.x ), lerps.y ); // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * LightAmount * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } // Point float4 PixScenePoint( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR { float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5 + 0.5/SMAP_SIZE, 0.5 - 0.5/SMAP_SIZE ); ShadowTexC.y = 1.0f - ShadowTexC.y; // do the shadow check float Depth = tex2D( g_samShadow, ShadowTexC ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w ? 0.0f : 1.0f; // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * Depth * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } // Bilinear float4 PixSceneBilinear( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR { float4 Diffuse; // vLight is the unit vector from the light to this pixel float3 vLight = normalize( float3( vPos - g_vLightPos ) ); // Compute diffuse from the light if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta) { // Pixel is in lit area. Find out if it's // in shadow using 2x2 percentage closest filtering //transform from RT space to texture space. float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 ); ShadowTexC.y = 1.0f - ShadowTexC.y; // transform to texel space float2 texelpos = SMAP_SIZE * ShadowTexC; // Determine the lerp amounts float2 lerps = frac( texelpos ); //read in bilerp stamp float sourcevals[4]; sourcevals[0] = (tex2D( g_samShadow, ShadowTexC )); sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) )); sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) )); sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) )); // lerp between the depth values float Depth = lerp( lerp( sourcevals[0], sourcevals[1], lerps.x ), lerp( sourcevals[2], sourcevals[3], lerps.x ), lerps.y ); Depth = Depth + SHADOW_EPSILON < vPosLight.z / vPosLight.w ? 0.0f : 1.0f; // Light it Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * Depth * ( 1 - g_vLightAmbient ) + g_vLightAmbient ) * g_vMaterial; } else { Diffuse = g_vLightAmbient * g_vMaterial; } return tex2D( g_samScene, Tex ) * Diffuse; } // MaxDepth float4 PixSceneMaxDepth( float2 Tex : TEXCOORD0, float4 vPos : TEXCOORD1, float3 vNormal : TEXCOORD2, float4 vPosLight : TEXCOORD3 ) : COLOR |
Реферат: Коваленко А. Е. Разработка системы научной визуализации.... Коваленко А. Е. Разработка системы научной визуализации. Квалификационная работа на степень магистра наук по направлению «Математика.... | Реферат Флягина Т. А. Проблемы разработки многооконных интерфейсов,... Флягина Т. А. Проблемы разработки многооконных интерфейсов, квалификационная работа на степень бакалавра наук | ||
Квалификационной работы на факультете математики и компьютерных наук В соответствии с действующими государственными образовательными стандартами выпускная квалификационная работа по специальности «Математика»... | Диссертация на степень магистра наук по направлению «Математика, компьютерные науки» Федеральное государственное автономное образовательное учреждение высшего профессионального образования | ||
Дипломная работа по направлению Математика. Прикладная математика студента гр. Мт 505 Федеральное государственное автономное образовательное учреждение высшего профессионального образования | Программа дисциплины Современные методы принятия решений для направления... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 010400.... | ||
Программа дисциплины «Герменевтика» для направления 010400. 68 «Прикладная... Программа предназначена для преподавателей, ведущих данную дисциплину, и студентов направления подготовки 010400. 68 "Прикладная... | 1 Нормативные документы для разработки ооп впо по направлению подготовки... Общая характеристика вузовской основной образовательной программы высшего профессионального образования по направлению подготовки... | ||
Реферат Тычинин И. А. Разработка приложения для портативных устройств... Тычинин И. А. Разработка приложения для портативных устройств с использованием qt framework, квалификационная работа на степень бакалавра... | Основная образовательная программа (ооп) бакалавриата, реализуемая... Нормативные документы для разработки ооп бакалавриата по направлению подготовки «Прикладная математика и информатика» | ||
Программа дисциплины Архитектура ЭВМ для направления 010400. 68 «Прикладная... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направлений подготовки 010400.... | Образовательная программа высшего образования, реализуемая университетом... ... | ||
Литература Уросов А. П. Разработка методик визуализации для представления работы параллельных программ, квалификационная работа на степень бакалавра... | ЕН. Ф. 1 Математика и информатика: математика Учебная дисциплина Математика и информатика: "Математика" введена в процесс обучения для бакалавров по направлению подготовки "Художественное... | ||
Программа дисциплины «Модели корпусной лингвистики» для направления... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления 010400. 68 "Прикладная... | Программа дисциплины «История» для направления 231300. 62 и 230700.... Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 231300.... |