光线追踪源程序


一个光线追踪的源程序,有助于了解相关的渲染技术
资源截图
代码片段和文件信息
/******************************************************************************
Author: Xiaoqiang ding
Email:  xiaoqiangding@126.com
******************************************************************************/

#include “declares.h“

HWND hWnd;
BITMAPINFO bmpInfo;
HDC hDC;
COLOR32 buffer[SCREEN_HEIGHT*SCREEN_WIDTH];
CRayTracer* tracer = 0;

LRESULT CALLBACK WndProc(HWND hWnd UINT message WPARAM wParam LPARAM lParam);
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance int nCmdShow);

int APIENTRY WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR lpCmdLineint nCmdShow)
{
MyRegisterClass(hInstance);
    if (!InitInstance (hInstance nCmdShow)) 
    {
return FALSE;
    }

ZeroMemory(&bmpInfo sizeof(bmpInfo));
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 32;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biWidth = SCREEN_WIDTH;
bmpInfo.bmiHeader.biHeight = -SCREEN_HEIGHT;
hDC = GetDC(hWnd);

tracer = new CRayTracer();
tracer->GetScene()->InitScene();
tracer->SetBuffer(buffer SCREEN_WIDTH SCREEN_HEIGHT);

MSG message;
tracer->InitRender();
while(1)
{
if(tracer->Render())
tracer->InitRender();
while(PeekMessage(&message hWnd 0 0 PM_REMOVE))
{
TranslateMessage(&message );
DispatchMessage(&message );
}
StretchDIBits(hDC 0 0 SCREEN_WIDTH SCREEN_HEIGHT 0 0 SCREEN_WIDTH SCREEN_HEIGHT buffer &bmpInfo DIB_RGB_COLORS SRCCOPY);
}
return 1;
}


///////////////////////////////////////////////////////////////////////////////
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         = NULL;
wcex.hCursor       = NULL;
wcex.hCursor       = LoadCursor(NULL IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName  = NULL;
wcex.lpszClassName = “Raytracer“;
wcex.hIconSm       = NULL;
return RegisterClassEx(&wcex);
}


///////////////////////////////////////////////////////////////////////////////
BOOL InitInstance(HINSTANCE hInstance int nCmdShow)
{
// hInst = hInstance;

// make the window show at the center of the screen and the client area size is 800*600
RECT rect;
rect.left = 0;
rect.top = 0;
rect.right = SCREEN_WIDTH;
rect.bottom = SCREEN_HEIGHT;
AdjustWindowRect(&rect WS_POPUP | WS_SYSMENU | WS_CAPTION NULL);
int windowWidth = rect.right - rect.left;
int windowHeight = rect.bottom - rect.top;
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
int windowLeft = (screenWidth - windowWidth) / 2;
int windowTop = (screenHeight - windowHeight) / 2;

hWnd = CreateWindow(“R

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-04-09 16:26  Raytracer
     目录           0  2013-04-09 16:26  RaytracerDebug
     文件       11740  2012-11-12 09:30  RaytracerDebugBuildLog.htm
     文件        3054  2012-04-11 15:55  RaytracerDebugPoint3.obj
     文件      411136  2012-11-12 09:30  RaytracerDebugRaytracer.exe
     文件         406  2012-11-12 09:30  RaytracerDebugRaytracer.exe.embed.manifest
     文件         472  2012-11-12 09:30  RaytracerDebugRaytracer.exe.embed.manifest.res
     文件         381  2012-11-12 09:30  RaytracerDebugRaytracer.exe.intermediate.manifest
     文件      278852  2012-11-12 09:30  RaytracerDebugRaytracer.ilk
     文件     2157568  2012-11-12 09:30  RaytracerDebugRaytracer.pdb
     文件       29477  2012-11-12 09:30  RaytracerDebugmain.obj
     文件       29478  2012-11-12 09:30  RaytracerDebugmaterial.obj
     文件          65  2012-11-12 09:30  RaytracerDebugmt.dep
     文件       28856  2012-11-12 09:30  RaytracerDebugplane.obj
     文件       28089  2012-11-12 09:30  RaytracerDebugprimitive.obj
     文件       24142  2012-11-12 09:30  RaytracerDebug
ay.obj
     文件       38724  2012-11-12 09:30  RaytracerDebug
aytracer.obj
     文件       37700  2012-11-12 09:30  RaytracerDebugscene.obj
     文件       31298  2012-11-12 09:30  RaytracerDebugsphere.obj
     文件       11979  2012-04-14 15:46  RaytracerDebugsurface.obj
     文件      156672  2012-04-16 15:35  RaytracerDebugvc60.idb
     文件       77824  2012-04-16 15:35  RaytracerDebugvc60.pdb
     文件      486400  2012-11-12 09:30  RaytracerDebugvc90.idb
     文件      118784  2012-11-12 09:30  RaytracerDebugvc90.pdb
     文件       33013  2012-11-12 09:30  RaytracerDebugvector3.obj
     文件         340  2012-04-14 21:23  RaytracerPlane.h
     文件        5012  2012-04-14 21:22  RaytracerRaytracer.dsp
     文件         526  2012-04-11 15:34  RaytracerRaytracer.dsw
     文件     7605248  2013-03-06 08:59  RaytracerRaytracer.ncb
     文件       52736  2012-04-28 10:22  RaytracerRaytracer.opt
     文件        1321  2012-04-28 10:21  RaytracerRaytracer.plg
............此处省略33个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)