平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

纹理投射Demo

本Demo测试RenderCraft图形底层对OpenGL和DirectX的兼容性
OpenGL可以使用固定流水线和Shader两种方式渲染.
DirectX下只能用Shader渲染方式.

纹理投射注意点:
1.基本概念为使用投射纹理作第2遍渲染,利用纹理坐标自动生成机制(或Shader), 使用投射矩阵从顶点坐标计算投射纹理坐标.
2.注意投射纹理必须使用CLAMP模式,并且不能使用MIPMAP,否则出现边框纹理带Bug.
3.固定流水线不能直接解决投射纹理背向作用问题,使用Shader可以判断w值正负解决.

http://www.cnitblog.com/Files/linghuye/ProjectTextureDemo.rar

posted on 2008-01-06 17:49 linghuye 阅读(1136) 评论(5)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: 纹理投射Demo  回复  更多评论   

文件是坏的啊。。。
2008-01-10 09:04 | qrn

# re: 纹理投射Demo  回复  更多评论   

测试过,文件是好的,大概需要用最新的WinRar解压.
2008-01-11 13:27 | linghuye

# 请教有关SOLID库使用问题  回复  更多评论   

您好!看过您的博客,很有收获。我现在正在使用DirectX9和SOLID碰撞检测库做一个简单的游戏引擎。我想知道能否通过.X文件的顶点数组建立DT_NewComplexShape?因为我原来用的是包围盒创建的DT_ShapeHandle,但有的模型包围盒太大,比如树,效果不好。我的创建shapeHandle的程序段如下:

BYTE* v = 0;
_pMesh->m_pMesh->LockVertexBuffer( 0, (void**) &v);
// Get Properties
DWORD numVertices = _pMesh->m_pMesh->GetNumVertices();
UINT stride = D3DXGetFVFVertexSize(_pMesh->m_pMesh->GetFVF());
// Create Vertex Base
DT_VertexBaseHandle base = DT_NewVertexBase( v, (DT_Size)stride );
// Compute Bounding Box
hr = D3DXComputeBoundingBox(
(D3DXVECTOR3*)v,
numVertices,
stride,
&boundingBox.vMin,
&boundingBox.vMax
);
// Create shape
_shapeCD = DT_NewComplexShape( base );
DT_VertexRange( 0, (DT_Count)numVertices);
DT_EndComplexShape();
// Unlock
_pMesh->m_pMesh->UnlockVertexBuffer();
程序运行后只有0.xxFPS……我不知道是因为顶点太多还是什么别的原因?谢谢!
2008-01-12 20:46 | zl

# re: 纹理投射Demo  回复  更多评论   

请问能不能发送一份该Demo的源代码学习一下,谢谢~

coderwu@126.com
2008-04-07 16:20 | coderwu

# re: 纹理投射Demo  回复  更多评论   

我最近也在做这东西,很希望能看看你这个程序的源码!
2008-05-25 18:06 | gaowenbina@sina.com
只有注册用户登录后才能发表评论。