资源简介
DirectX3D 旋转 彩色 球体 索引
代码片段和文件信息
#include “d3d9.h“
#include “d3dx9.h“
#define USE_INDEX_STRIP
LPDIRECT3D9 g_pD3D=NULL;
LPDIRECT3DDEVICE9 g_pd3dDevice=NULL;
LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;
LPDIRECT3DINDEXBUFFER9 g_pIB=NULL;
int g_rings=10;//y方向的环数
int g_segments=10;//xz平面的环数
struct CUSTOMVERTEX
{
float xyz;
D3DCOLOR color;
float nxnynz;
};
#ifndef USE_INDEX_STRIP
struct MYINDEX
{
WORD _0_1_2;
};
#endif
#define D3DFVF_CUSTOM (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_NORMAL)
HRESULT InitD3D(HWND hwnd)
{
if (NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
{
return E_FAIL;
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dppsizeof(d3dpp));
d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;
d3dpp.Windowed=TRUE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.EnableAutoDepthStencil=TRUE;
d3dpp.AutoDepthStencilFormat=D3DFMT_D16;
if (FAILED(g_pD3D->CreateDevice( D3DADAPTER_DEFAULTD3DDEVTYPE_HAL hwndD3DCREATE_SOFTWARE_VERTEXPROCESSING&d3dpp&g_pd3dDevice)))
{
return E_FAIL;
}
g_pd3dDevice->SetRenderState(D3DRS_ZENABLETRUE);
g_pd3dDevice->SetRenderState(D3DRS_LIGHTINGFALSE);
g_pd3dDevice->SetRenderState(D3DRS_CULLMODED3DCULL_NONE);
// g_pd3dDevice->SetRenderState(D3DRS_FILLMODED3DFILL_WIREframe );
return S_OK;
}
HRESULT InitGeometry()
{
//使用D3DPT_TRIANGLESTRIP来索引描绘球体比较简单,索引建立的空间也较小
#ifdef USE_INDEX_STRIP
if (FAILED(g_pd3dDevice->CreateVertexBuffer((g_rings+1)*(g_segments+1)*sizeof(CUSTOMVERTEX)0D3DFVF_CUSTOMD3DPOOL_MANAGED&g_pVBNULL)))
return E_FAIL;
if (FAILED(g_pd3dDevice->CreateIndexBuffer(g_rings*(g_segments+1)*2*sizeof(WORD)0D3DFMT_INDEX16 D3DPOOL_MANAGED&g_pIBNULL)))
{
return E_FAIL;
}
CUSTOMVERTEX* vertics;
if (FAILED(g_pVB->Lock(00(VOID**)&vertics0)))
return E_FAIL;
WORD* indices=0;
WORD vindex=0;
if (FAILED(g_pIB->Lock(00(VOID**)&indices0)))
{
return E_FAIL;
}
float deltaRing=D3DX_PI/(g_rings);
float deltaSegment=2.0f*D3DX_PI/g_segments;
//经典的球体建立算法
for(int j=0;j {
float radius=sinf(j*deltaRing);
float y0=cosf(j*deltaRing);
for (int i=0;i {
float x0=radius*sinf(i*deltaSegment);
float z0=radius*cosf(i*deltaSegment);
vertics->x=x0;
vertics->y=y0;
vertics->z=z0;
vertics->nx=x0;
vertics->ny=y0;
vertics->nz=z0;
vertics->color=0xff4040;
vertics++;
if (j!=g_rings)//除了第一点和最后一点只有一次,其他都由点都有两次索引
{
*in
- 上一篇:C编写的读取BMP文件的程序
- 下一篇:遗传算法、免疫算法源码C
相关资源
- VC++旋转风车代码
- 计算机图形学,实现茶壶旋转,颜色
- MFC+OPENGL实现3D茶壶的旋转、平移
- MFC数字图像处理BMP格式读取 保存 DF
- 图像处理 图像旋转 C/C++语言实现
- 带旋转的模板匹配的原理及算法实现
- C++实现灰度图像的几何变换,包括转
- qt5 旋转(.patch文件源码)
- Qt实现可拉伸矩形、圆等,可旋转角度
- C++实战源码-图像旋转
- C++实战源码-可任意旋转的文字
- C++实战源码-空间旋转字体
- C++实战源码-旋转的文字
- VC++截屏,并截屏图像旋转(简单)
- c++ 旋转的图像(遮罩贴图)
- 利用OpenGL函数画一个三维物体实现在
- Adobe Photoshop CS6中文版经典教程(彩色
- c++ 图片立体旋转源码
- C++坦克大战彩色(控制台小游戏源码
- 编程实现图片的翻转效果翻转90度和任
- mfc 二维图形的平移、旋转、比例变换
- MFC中OpenGL移动缩放旋转.rar
- 24位真彩色转单色bmp1位
- 纯C++实现bmp图片旋转
- 基于opencv的彩色图像分解为hsv单通道
- 带旋转的模板匹配的原理及算法实现
- MFC调用Opengl实现三维图形的旋转平移
- c++ 图像中值梯度锐化、拉普拉斯锐化
- C语言实现二值图像旋转任意角度
- 计算机图形学旋转茶壶
评论
共有 条评论