#
摘要: 上次说过要在这里把最新的地形设计写出来,不过一直没时间写,也想画些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的原理与步骤。
阅读全文