资源简介
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
相关资源
- 基于STM32F103ZET6控制舵机旋转(ts90a/
- 彩色贪吃蛇.c
- C语言通讯录管理系统彩色界面
- 池塘夜降彩色雨
-
Unreal Engine 4 sc
ripting with C++ Cookbook - C++图像伪彩色处理源代码
- MFC实现简易画图程序
- MFC 单文档 实现opengl 三维旋转 缩放
- 计算BMP24位真彩色图像PSNR的C++小程序
- MFC绘制的移动小车,包含了图形的平
- 24位BMP图像用C++实现平移、旋转、镜像
- MFC 图像处理之几何运算 图像平移旋转
- 图像按任意角度旋转C++
- C语言实现图像的旋转缩放裁切
- VC C++数字图像处理实验程序
- 3D图形旋转
- MFC制作的风车可以控制叶片大小和旋
- OpenGL实现鼠标绕任意轴旋转/平移/缩放
- bmp24位彩色图像转8位灰度图像纯C++
- opengl光照旋转交互
- mfc 二维图形的变换 旋转 平移 比例
- vc++MFC画彩色五角星
- 计算机图形学实验代码包括图形旋转
- 伪彩色增强算法 适用于c、matlab编程
- 数字图像处理实习程序
- 数据结构、算法与应用-C++描述超高清
- 旋转和移动的三维sierpinski镂垫
- GDI+绘制矩形,并且实现可旋转、缩放
- opengl在MFC平台上绘制三维图形并实现
- 基于mfc中opengl鼠标控制视图旋转缩放
评论
共有 条评论