DirectX正方體類的封裝個人思路

2021-10-24 00:24:46 字數 2074 閱讀 4236

首先,我們封裝正方體類的時候要考慮乙個正方體呈現在我們面前需要一些什麼東西然後開始動手

1)乙個正方體有8個頂點(這是必備條件不考慮如何繪製的情況下8個頂點)

2)有了頂點我們需要儲存這8個頂點以便後面使用(儲存資料是需要頂點緩衝區)

3)要將正方體展現出來需要的變換

4)最後一部繪製正方形

這是我想的4個步驟,有了四個步驟之後要劃分每個步驟之後明白每個步驟在類中稱當什麼角色:

1)首先8個頂點毫無疑問應該屬於正方體的資料成員;而在directx中頂點需要定義頂點結構和靈活頂點格式。

2)後面3個步驟要對資料進行一些處理,處理資料成員便寫成成員函式。

有了上面的分析就只用碼**了,**如下:

一、將上面寫的資料成員和成員函式插入類中 `

#pragma once

#pragma comment(lib,"d3d9.lib")

#pragma comment(lib,"winmm.lib")

#pragma comment(lib,"d3dx9.lib")

#include

"camera.h"

//頂點結構

struct customvertex

;//靈活頂點格式

#define d3dfvf_customvertex (d3dfvf_xyz|d3dfvf_diffuse)

class

ccube

;

之所以用18個頂點是因為用三角形帶去繪製的時候10個點繪製4個面,上下兩個面分別用4個頂點繪製所以一共18個點

還可以定義乙個帶參的建構函式來接收你要畫的正方體座標,這樣你可以根據你的喜好來繪製正方體(建議以原點為正方體中心)

二、完善類中的成員函式

1)hresult initgeometry();

hresult ccube::

initgeometry()

,,,,

,,,,

,,,,

,,,,

,,};

//將18個點儲存在頂點快取區if(

failed

(g_pd3ddevice-

>

createvertexbuffer(18

*sizeof

(customvertex),0

, d3dfvf_customvertex,

d3dpool_default,

&g_pvb,

null))

) void* pvertices;

//加鎖if(

failed

(g_pvb-

>

lock(0

,sizeof

(g_vertices),(

void**

)&pvertices,0)

))return e_fail;

//記憶體拷貝

memcpy

(pvertices, g_vertices,

sizeof

(g_vertices));

//解鎖

g_pvb-

>

unlock()

;return s_ok;

}

2)void setupmatrices();

void ccube::

setupmatrices()

這裡我建議可以寫兩個函式乙個是平移乙個是旋轉,這樣你定義二個正方體是可以通過平移旋轉將第乙個移動開這樣不會使得正方體重合

3) void render();

void ccube::

render()

g_pd3ddevice-

>

present

(null

,null

,null

,null);

}

這樣乙個正方體的類就封裝好了,這是我的思路有更好的歡迎投稿;

PTA 計算正方體體積與表面積(c ,類)

本題要求定義乙個box類,包含三個私有成員a 立方體邊長 volume 體積 和area 表面積 都為float型別。另有兩個建構函式以及seta 設定立方體邊長 getvolume 計算體積 getarea 計算表面積 和disp 輸出結果 裁判測試程式樣例 include using names...

用html標籤 css寫出旋轉的正方體

有一段時間沒寫 了,剛寫有點手生,無從下手,為了能快速進入狀態,就寫了這乙個小東西,純用標籤和樣式表寫。下面看一下我寫的。這一段是樣式表 style ul,li ulul hover lili nth child 1 li nth child 2 li nth child 3 li nth chil...

CSS3 3D變換例項 滾動的正方體

筆記 2d變換 transform 位移 translatex translatey 簡寫 translate x值,y值 正值向右,負值向左 旋轉 rotate rotate deg 括號中為角度值 正值是順時針旋轉,負值是逆時針旋轉 縮放scale scale 括號中為數值,可以為浮點數 如大於...