3D软引擎之深度排序
来源:互联网 发布:油耗测试软件 编辑:程序博客网 时间:2024/06/07 17:57
花了不少时间去实现了这个功能,大多问题都出现在低级错误,看来以后要提醒十二分精神!错误的原因是:
<span style="color: rgb(255, 255, 255); font-family: Arial; font-size: 14px; line-height: 22px;"> </span>void CTriangle2DUtils::DrawSolidGeneralClipZOrder( D3DXVECTOR3 p0, D3DXVECTOR3 p1, D3DXVECTOR3 p2, int color ){if (p0.y > p1.y) Math3D::Swap(p0 , p1);if (p0.y > p2.y) Math3D::Swap(p0 , p2);if (p1.y > p2.y) Math3D::Swap(p2 , p1);if (p0.y > BTM_BORDER_SCR ||p2.y < TOP_BORDER_SCR ||(p0.x < LEFT_BORDER_SCR && p1.x < LEFT_BORDER_SCR && p2.x < LEFT_BORDER_SCR) ||(p0.x > RIGHT_BORDER_SCR && p1.x > RIGHT_BORDER_SCR && p2.x > RIGHT_BORDER_SCR) )return;//在可显区域外//inv zp0.z = 1.0f / p0.z;p1.z = 1.0f / p1.z;p2.z = 1.0f / p2.z;if (FCMP( p0.x , p1.x ) && FCMP( p1.x, p2.x ) || FCMP( p0.y , p1.y ) && FCMP( p1.y, p2.y ) ){//绘制退化直线DrawDeclineClip(p0 , p1, p2 , color);}else if (FCMP( p0.y , p1.y ) ){CTriangle2DUtils::DrawSolidFlatTopClipZOrder(p0 , p1, p2, color);}else if ( FCMP( p1.y , p2.y ) ){CTriangle2DUtils::DrawSolidFlatBottomClipZOrder(p0 , p1, p2, color);}else{//had inve z float dzdy = (p2.z - p0.z ) / (p2.y - p0.y);//float newz = dzdy * (p2.y - p0.y) + p0.z;---------------就这里没有改回来导致了z排序错误float newz = dzdy * (p1.y - p0.y) + p0.z;//应该改成这样---------------//float newzInv = 1.0f / newz;D3DXVECTOR3 pc( LINE_X_NOF(p0.x, p0.y, p2.x, p2.y, p1.y) , p1.y , newz);CTriangle2DUtils::DrawSolidFlatBottomClipZOrder(p0 , p1, pc, color); CTriangle2DUtils::DrawSolidFlatTopClipZOrder(p1 , pc, p2, color);}}
0 0
- 3D软引擎之深度排序
- 3D软引擎之三角形光栅化
- Android之3D物理引擎
- 3D图形软引擎开发总结
- ZLib2000 3D引擎
- 3D引擎架构
- 3D引擎数据库
- 3D物理引擎
- 3D引擎简介
- 3D引擎
- 3D引擎
- 3D引擎CopperLicht
- 3D游戏引擎
- 3D引擎架构
- web 3d引擎
- 开源3d引擎
- Android 3D引擎
- 3D引擎
- python爬虫学习日记(1)--获取验证码
- 数据结构之链栈的所有操作
- C++ 深拷贝 与 浅拷贝
- spring-mongodb-data存储文件
- 测试测试测试
- 3D软引擎之深度排序
- [Emacs学习笔记]使用Emacs写c语言并编译运行
- ABI EABI
- C# 发送邮件
- c语言学习感受
- jquery inArray JSON解析
- ASM迁移至文件系统
- IOS菜鸟的所感所思(八)——coreData与网络歌曲的本地化
- LeetCode 137:Single Number II