資源簡(jiǎn)介
基于OPENGL制作的描點(diǎn)式Bezier曲線繪制,功能較為完善,有多種鍵盤(pán)回調(diào)功能,代碼簡(jiǎn)單,有詳細(xì)注釋,適合初學(xué)者學(xué)習(xí)借鑒,在VS2013調(diào)試無(wú)誤

代碼片段和文件信息
#include“stdafx.h“
#include?
#include
#include
#define?XVALUE?800//視口大小
#define?YVALUE?600
#define?ZVALUE?200
#define?MAX_CPTX?50?//最大控制點(diǎn)數(shù)
#define?float_x(x)?((float)x)/XVALUE
#define?float_y(y)?(float(W_height?-?1?-?y))/YVALUE
int?W_width?=?XVALUE?W_height?=?YVALUE;
int?Ctrl_P_Num?=?0;//實(shí)際控制點(diǎn)數(shù)
int?type?=?GL_LINE_STRIP?v;
int?rubberbanding?antialiasing;//彈性的、消除走樣標(biāo)志位
typedef?struct
{
GLfloat?x?y;
}?POINT;
POINT?Control_Local[MAX_CPTX];//存儲(chǔ)控制點(diǎn)坐標(biāo)
void?bezier()?//德卡斯特里奧算法
{
float?Approach_x[1000];
float?Approach_y[1000];
GLfloat?Path_Point[1000][2];
int?k?=?0;
for?(double?t?=?0.0;?t?<=?1;?t?+=?0.001)
{
for?(int?i?=?1;?i? {
for?(int?j?=?0;?j? {
if?(i?==?1)?//?i==1時(shí)第一次迭代由已知控制點(diǎn)計(jì)算????
{
Approach_x[j]?=?Control_Local[j].x?*?(1?-?t)?+?Control_Local[j?+?1].x?*?t;
Approach_y[j]?=?Control_Local[j].y?*?(1?-?t)?+?Control_Local[j?+?1].y?*?t;
continue;
}
//?i?!=?1時(shí)通過(guò)上一次迭代的結(jié)果計(jì)算????
Approach_x[j]?=?Approach_x[j]?*?(1?-?t)?+?Approach_x[j?+?1]?*?t;
Approach_y[j]?=?Approach_y[j]?*?(1?-?t)?+?Approach_y[j?+?1]?*?t;
}
}
Path_Point[k][0]?=?Approach_x[0];
Path_Point[k][1]?=?Approach_y[0];
k++;
}
glColor3f(1.0?1.0?0.0);
glBegin(GL_LINE_STRIP);
for?(int?i?=?0;?i?1000;?i++)
{
glVertex2fv(Path_Point[i]);
}
glEnd();
}
void?SetupRc(void)//初始化繪制環(huán)境
{
glClearColor(0.0f?0.0f?0.0f?0.0f);//用于清除的顏色
glClear(GL_COLOR_BUFFER_BIT);//清除顏色緩沖以及深度緩沖
glMatrixMode(GL_PROJECTION);//指定當(dāng)前矩陣對(duì)投影矩陣應(yīng)用隨后的矩陣操作.
glLoadIdentity();//對(duì)當(dāng)前矩陣進(jìn)行初始化
gluOrtho2D(0?XVALUE?0?YVALUE);
glBlendFunc(GL_SRC_ALPHA?GL_ONE_MINUS_SRC_ALPHA);//指定紅綠藍(lán)和?alpha?目標(biāo)混合因子?源混合因子如何計(jì)算
}
void?RenderScene(void)//渲染
{
int?i;
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(5.0);
if?(Ctrl_P_Num?==?1?&&?(type?==?GL_LINE_STRIP?||?type?==?GL_LINE_LOOP))
{
glBegin(GL_POINTS);//點(diǎn)模式,把每一個(gè)頂點(diǎn)作為一個(gè)點(diǎn)進(jìn)行處理
glVertex2f(Control_Local[0].x?Control_Local[0].y);//
glEnd();
}
glLineWidth(5.0f);//指定線的寬度
glBegin(type);
glColor3f(0.0?0.0?1.0);
for?(i?=?0;?i? {
glVertex2f(Control_Local[i].x?Control_Local[i].y);
}
glEnd();
if?(Ctrl_P_Num?>=?3)//出現(xiàn)兩條邊后開(kāi)始繪制Bezier曲線
{
bezier();
}
glutSwapBuffers();//雙緩沖區(qū)圖形繪制
}
void?Reshape(int?width?int?height)
{
float?w_aspect?=?((float)XVALUE)?/?YVALUE?aspect?=?((float)width)?/?height;
if?(aspect?<=?w_aspect)//視口保持w_aspect的縱橫比
glViewport(0?(height?-?width?/?w_aspect)?/?2?width?width?/?w_aspect);
else
glViewport((width?-?height*w_aspect)?/?2?0?height*w_aspect?height);
//透視視窗轉(zhuǎn)換
glMatrixMode(GL_PROJECTION);//指定當(dāng)前矩陣對(duì)投影矩陣應(yīng)用隨后的矩陣操作.
glLoadIdentity();//對(duì)當(dāng)前矩陣進(jìn)行初始化?
gluOrtho2D(0?1?0?1);
}
void?Keyboard(unsigned?char?key?int?x?int?y)//普通鍵盤(pán)回調(diào)
{
switch?(key)
{
case?‘a(chǎn)‘://消除鋸齒,使線段平滑
{
antialiasing?=?!antialiasing;//消除走樣標(biāo)志位
if?(antialias
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????6584??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Bezier_experiment.cpp
?????文件???????4553??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\Bezier_experiment.vcxproj
?????文件???????1324??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\Bezier_experiment.vcxproj.filters
?????文件????????174??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\Bezier_experiment.lastbuildstate
?????文件???????1662??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\cl.command.1.tlog
?????文件???????4262??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\CL.read.1.tlog
?????文件???????1426??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\CL.write.1.tlog
?????文件???????1502??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\li
?????文件???????3404??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\li
?????文件????????752??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog\li
?????文件???????1628??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_experiment.log
?????文件??????22741??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_experiment.obj
?????文件????1703936??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\Debug\Bezier_experiment.pch
?????文件??????11741??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\Debug\stdafx.obj
?????文件??????84992??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\vc120.idb
?????文件?????151552??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\vc120.pdb
?????文件???????1580??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\ReadMe.txt
?????文件????????223??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\stdafx.cpp
?????文件????????234??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\stdafx.h
?????文件????????236??2017-04-02?09:43??Bezier_experiment\Bezier_experiment\targetver.h
?????文件???30212096??2017-05-13?21:54??Bezier_experiment\Bezier_experiment.sdf
?????文件????????997??2017-04-02?09:43??Bezier_experiment\Bezier_experiment.sln
????..A..H.?????19968??2017-05-13?21:54??Bezier_experiment\Bezier_experiment.v12.suo
?????文件??????41984??2017-04-04?22:54??Bezier_experiment\Debug\Bezier_experiment.exe
?????文件?????470584??2017-04-04?22:54??Bezier_experiment\Debug\Bezier_experiment.ilk
?????文件?????741376??2017-04-04?22:54??Bezier_experiment\Debug\Bezier_experiment.pdb
?????文件????3080192??2017-04-02?09:43??Bezier_experiment\ipch\bezier_experiment-e39e0123\bezier_experiment-128d144d.ipch
?????目錄??????????0??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug\Bezier_e.BE11A5C9.tlog
?????目錄??????????0??2017-04-04?22:54??Bezier_experiment\Bezier_experiment\Debug
?????目錄??????????0??2017-04-02?09:43??Bezier_experiment\ipch\bezier_experiment-e39e0123
............此處省略7個(gè)文件信息
評(píng)論
共有 條評(píng)論