#
摘要: 上次說過要在這里把最新的地形設計寫出來,不過一直沒時間寫,也想畫些UML圖,但沒工具畫,呵呵,只能通過手寫了。希望大家看得明白吧。
閱讀全文
摘要: 首先總結一下上一階段的成果。
1、 LOD大規模地形已經進行了優化與重構,實現了1024x1024大規模地形,并實現了地形的光照模型,DEBUG版本平均幀數已經達到40,稍后會寫上最新的LOD地形設計思想。
閱讀全文
要實現目標,就要有計劃的執行,最近發現有些混亂,要整理一下計劃。計劃如下:
1、實現室外地形:LOD大規模地形,shader紋理混合。
2、實現水波:包括反射與透明(shader實現,可能非常難,參考nVidia SDK),并實現水底下的霧化。
3、實現模型,包括骨骼動畫和多幀動畫。
4、實現特效粒子。
摘要: Skybox搞好后,發現在邊線有很明顯的裂縫,一開始時不知道如何解決,后來問了人,有人說把紋理采樣改成Point,有人說紋理坐標改成0.001到0.999,這兩樣我都試過,發現改成Point裂縫是消除了,但看起來很不好看,改成0.001到0.999也有裂縫。
閱讀全文
摘要: 地形從一開始研究,到實現,分了好多個版本,重構了好多次……主要問題在于對LOD數據結構的不熟悉和對索引用法的不熟悉。經過一系列的研究與學習,總結了如下實現LOD的方法
閱讀全文
今天重寫了一下3D程序的架構,基本上是參考DX9b那套構架寫的,發現CreateWindow返回NULL,而且GetLastError()也返回0,一時很奇怪,后來上網查了一下,才發現是WndProc函數的問題,我代碼如下:
if( m_hWnd == NULL)

{
// Register the windows class

WNDCLASS wndClass =
{ 0, WndProc, 0, 0, hInst,
LoadIcon( hInst, MAKEINTRESOURCE(IDI_MY3DGRAPHIC) ),
LoadCursor( NULL, IDC_ARROW ),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL, m_szWindowClass };
RegisterClass( &wndClass );

// Set the window's initial style
m_dwWindowStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE;

// Set the window's initial width
RECT rc;
SetRect( &rc, 0, 0, m_dwCreationWidth, m_dwCreationHeight );
AdjustWindowRect( &rc, m_dwWindowStyle, true );

// Create the render window
m_hWnd = CreateWindow( m_szWindowClass,
m_strWindowTitle,
m_dwWindowStyle,
CW_USEDEFAULT,
CW_USEDEFAULT,
(rc.right - rc.left),
(rc.bottom - rc.top),
0,
NULL, //LoadMenu( hInstance, MAKEINTRESOURCE(IDC_MY3DGRAPHIC) ),
hInstance,
0 );

WndProc代碼如下:
LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )


{
return g_sApp->MsgProc( hWnd, uMsg, wParam, lParam );
}
因為在WndProc中,g_sApp指針此時還為NULL,所以創建不成功。
調用CreateWindow時,CreateWindow會調用一次WndProc,并且要求WndProc返回TRUE,因此要注意該問題。
摘要: 男人不壞,女人不愛。這句話在現實中非常準確。雖然很多女人會矢口否認這一點甚至對此嗤之以鼻。
閱讀全文
摘要: 用DX實現Skybox的原理與步驟。
閱讀全文