C++ 使用Direct x创建球形网格?
如何在Direct-x中使用网格创建球体?我使用C++,程序只在Windows上运行。C++ 使用Direct x创建球形网格?,c++,directx,mesh,C++,Directx,Mesh,如何在Direct-x中使用网格创建球体?我使用C++,程序只在Windows上运行。 当前所有内容都通过IDiRECT3DDEVICE9对象进行渲染。您可以使用该函数。创建球体的方法很多 一种是使用极坐标生成球体的切片 struct Vertex { float x, y, z; float nx, ny, nz; }; 考虑到该结构,您将按如下方式生成球体(我还没有对此进行测试,所以可能会有点错误) 然后对要细分的面的每条边的中点重复此过程 现在可以将每个面拆分为4个新的四
当前所有内容都通过IDiRECT3DDEVICE9对象进行渲染。您可以使用该函数。创建球体的方法很多 一种是使用极坐标生成球体的切片
struct Vertex
{
float x, y, z;
float nx, ny, nz;
};
考虑到该结构,您将按如下方式生成球体(我还没有对此进行测试,所以可能会有点错误)
然后对要细分的面的每条边的中点重复此过程
现在可以将每个面拆分为4个新的四边形面。然后,您可以将这些四边形细分为4个新四边形,依此类推,直到达到所需的细化级别
就我个人而言,我发现这个过程在球体上提供了比第一种方法更好的顶点分布。我的答案应该很好,如果你需要帮助让它工作,请告诉我。太好了,我会检查这个:)现在投票赞成。我要到早上才能测试这段代码。如果我给你留言,如果这不起作用,你能回复吗?是的,每次我上车(这是经常的),我都会检查我留言的所有问题和答案,以获得回复。当然,你可以在我的回答上留下你的评论,我会自动得到通知。所以我已经这样做了,我觉得它是有效的(盲目的),但是,它不会有纹理,对吗?当一系列其他东西同时展出时,我什么也看不到。我可以给这个添加纹理吗?或者我如何确保它已正确显示?我不确定
D3DXCreateSphere
是否生成纹理坐标。这里有一个教程[1]演示了如何执行此操作。[1] 我想不管怎样,我都会遇到CreateSphere函数进入fail if语句的问题,不是吗?事实上,我认为如果它返回0,那么它就成功了。尝试使用失败的宏。(或者:如果(/*create sphere*/!=D3D_OK)
你是对的,我已经检查了HRESULT,它似乎已经成功了。不知道为什么它会进入那个循环。酷,谢谢!我会继续用它做我的研究:)对不起,这是我第一次做这种类型的编程。你在胡说很多我根本不懂的数学知识,你能不能详细说明一下?你想让我详细说明什么?
std::vector< Vertex > verts;
int count = 0;
while( count < numSlices )
{
const float phi = M_PI / numSlices;
int count2 = 0;
while( count2 < numSegments )
{
const float theta = M_2PI / numSegments
const float xzRadius = fabsf( sphereRadius * cosf( phi ) );
Vertex v;
v.x = xzRadius * cosf( theta );
v.y = sphereRadius * sinf( phi );
v.z = xzRadius * sinf( theta );
const float fRcpLen = 1.0f / sqrtf( (v.x * v.x) + (v.y * v.y) + (v.z * v.z) );
v.nx = v.x * fRcpLen;
v.ny = v.y * fRcpLen;
v.nz = v.z * fRcpLen;
verts.push_back( v );
count2++;
}
count++;
}
v.x = v.nx * sphereRadius;
v.y = v.ny * sphereRadius;
v.z = v.nz * sphereRadius;