DX學習筆記(具有顏色的三角形)

2021-07-13 16:52:39 字數 2017 閱讀 4409

這個demo主要演示了用平面著色模式與gouraud著色模式對三角形進行著色的不同

首先新增了全域性變數與其他demo不同的是多了個世界變化矩陣

idirect3ddevice9* device;

d3dxmatrix worldmatrix;//所儲存三角形的世界變化矩陣

idirect3dvertexbuffer9* ******** = 0;

const int width = 640;

const int height = 480;

首先我們需定義乙個結構體colorvertex,包含著頂點位置,頂點型別,以及顏色,與其的構造方法。

struct colorvertex;

colorvertex(float x, float y, float z, d3dcolor color)

float _x, _y, _z;

d3dcolor _color;

static const dword fvf;

};const dword colorvertex::fvf = d3dfvf_xyz | d3dfvf_diffuse;

接著便是setup()方法,先建立了頂點快取,並用所要繪製的三角形中帶有顏色資訊的頂點對該快取進行填充。並設定投影矩陣,並將光照禁用(不然會使三角形都是黑色。)

bool setup()

最後需要改動的方法便是display(),它在本例中繪製了2個不同著色模式下的三角形。(三角形的位置是通過世界矩陣確定的)

bool display(float timedelta)

return true;

}

corlor********.cpp

//平面著色模式和gouraud著色模式對三角形著色

#include"d3dutility.h"

idirect3ddevice9* device;

d3dxmatrix worldmatrix;//所儲存三角形的世界變化矩陣

idirect3dvertexbuffer9* ******** = 0;

const int width = 640;

const int height = 480;

struct colorvertex;

colorvertex(float x, float y, float z, d3dcolor color)

float _x, _y, _z;

d3dcolor _color;

static const dword fvf;

};const dword colorvertex::fvf = d3dfvf_xyz | d3dfvf_diffuse;

bool display(float timedelta)

return true;

}void cleanup()

bool setup()

lresult callback d3d::wndproc(hwnd hwnd, uint msg, wparam wparam, lparam lparam)

return ::defwindowproc(hwnd, msg, wparam, lparam);

}int winapi winmain(hinstance hinstance, hinstance previnstance, pstr cmdline, int showcmd)

if (!setup())

d3d::entermsgloop(display);

cleanup();

device->release();

return 0;

}

至於d3dutility.cpp和d3dutili.h可以去此鏈結領取

例程:

求大三角形中三角形個數

一道筆試程式設計題要求求乙個大三角形中所有小三角形的個數,大約是下面這種情況 首先想到是的將問題由求邊長為n的三角形個數 求邊長為n 1的三角形個數 求邊長為1的三角形個數 1,回溯求得所有三角形個數。但是再仔細一看因為有重疊三角形和倒置的三角形,所以這個方法不可行。接著找到三角形個數由三部分組成 ...

經典演算法 (三)帕斯卡三角形(楊輝三角形)

楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年。簡介 楊輝三角,是二項式係數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡 1623 1662 是在165...

三角形面積

算是自己第一道正式寫的演算法幾何吧,先從簡單的開始吧,加油!描述 給你三個點,表示乙個三角形的三個頂點,現你的任務是求出該三角形的面積 輸入 每行是一組測試資料,有6個整數x1,y1,x2,y2,x3,y3分別表示三個點的橫縱座標。座標值都在0到10000之間 輸入0 0 0 0 0 0表示輸入結束...