資源簡介
基于OPENGL制作的描點式Bezier曲線繪制,功能較為完善,有多種鍵盤回調功能,代碼簡單,有詳細注釋,適合初學者學習借鑒,在VS2013調試無誤

代碼片段和文件信息
#include“stdafx.h“
#include?
#include
#include
#define?XVALUE?800//視口大小
#define?YVALUE?600
#define?ZVALUE?200
#define?MAX_CPTX?50?//最大控制點數
#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;//實際控制點數
int?type?=?GL_LINE_STRIP?v;
int?rubberbanding?antialiasing;//彈性的、消除走樣標志位
typedef?struct
{
GLfloat?x?y;
}?POINT;
POINT?Control_Local[MAX_CPTX];//存儲控制點坐標
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時第一次迭代由已知控制點計算????
{
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時通過上一次迭代的結果計算????
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)//初始化繪制環境
{
glClearColor(0.0f?0.0f?0.0f?0.0f);//用于清除的顏色
glClear(GL_COLOR_BUFFER_BIT);//清除顏色緩沖以及深度緩沖
glMatrixMode(GL_PROJECTION);//指定當前矩陣對投影矩陣應用隨后的矩陣操作.
glLoadIdentity();//對當前矩陣進行初始化
gluOrtho2D(0?XVALUE?0?YVALUE);
glBlendFunc(GL_SRC_ALPHA?GL_ONE_MINUS_SRC_ALPHA);//指定紅綠藍和?alpha?目標混合因子?源混合因子如何計算
}
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);//點模式,把每一個頂點作為一個點進行處理
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)//出現兩條邊后開始繪制Bezier曲線
{
bezier();
}
glutSwapBuffers();//雙緩沖區圖形繪制
}
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);
//透視視窗轉換
glMatrixMode(GL_PROJECTION);//指定當前矩陣對投影矩陣應用隨后的矩陣操作.
glLoadIdentity();//對當前矩陣進行初始化?
gluOrtho2D(0?1?0?1);
}
void?Keyboard(unsigned?char?key?int?x?int?y)//普通鍵盤回調
{
switch?(key)
{
case?‘a‘://消除鋸齒,使線段平滑
{
antialiasing?=?!antialiasing;//消除走樣標志位
if?(antialias
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????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個文件信息
- 上一篇:struts2配置 用戶注冊登錄
- 下一篇:eps文助力轉向相關論文
評論
共有 條評論