真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

OpenGL中點(diǎn)Bresenham怎么繪制直線算法

這篇文章主要介紹OpenGL中點(diǎn)Bresenham怎么繪制直線算法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、城北網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

具體內(nèi)容如下

環(huán)境

macos xcode編譯器

代碼

#include 
#include 
#include
#include
#include
using namespace std;
float wid = 400;  //設(shè)置窗口的大小,約定窗口必須為正方形
float height = wid; //設(shè)置窗口的大小
int numbers = 20; //設(shè)置劃分的網(wǎng)格的個(gè)數(shù)
float t = wid/numbers; //模擬像素下的單位1
/*
 參數(shù)設(shè)置說明:
 輸入直線的兩點(diǎn)A(x1,y1);B(x2,y2)
 您應(yīng)當(dāng)確保參數(shù)范圍在-400~400.且為整數(shù)。
 *支持不同斜率
 *支持兩點(diǎn)位置顛倒
 */
int x1 = -300,y1=-400,x2 =400,y2 = 100;
void draw_point(float x, float y,int k_kind,int d_kind);
float translater(int x);
void swap(int &a, int &b)
{ int tmp = 0;
 tmp = b;
 b = a;
 a = tmp; }
void bresenham(int x1, int y1,int x2, int y2){
 /*
 函數(shù)說明:bresenham算法部分
 參數(shù)說明:與openGL已有的劃線函數(shù)一樣,要求用戶提供的是點(diǎn)的起點(diǎn)(x1,y1)和終點(diǎn)(x2,y2)
 為了便于觀察,我們會(huì)繪制原像素下的直線。
 這里的坐標(biāo)要求是-1 ~ 1
 */
 int k_kind = 0; //k_kind用來表示斜率的類型。0是0~1;1是1~無窮;2是0~-1;3是負(fù)無窮~-1
 int d_kind =0; //d_kind用來表示dy正負(fù)的類型。
 if (x1 > x2) {
 swap(x1,x2);
 swap(y1,y2);
 }
 int dx = abs(x2-x1), dy = abs(y2-y1);
 if (y1 > y2) {//如果是向下的
 y1 = -y1;
 y2 = -y2;
 d_kind = 1;
 }
 if (dy > dx) { //斜率介于1~無窮的,將看作坐標(biāo)系變換(這里將坐標(biāo)變換)。
 swap(x1, y1);
 swap(x2,y2);
 swap(dx,dy);
 k_kind = 1;
 }
 float d = (dy +dy -dx)*t; //令d為決策量(這里利用d = dx*w*2避免浮點(diǎn)運(yùn)算)
 float x = x1+0.0,y = y1+0.0;
 draw_point(translater(x),translater(y),k_kind,d_kind); //繪制下一個(gè)點(diǎn)
 while( x < x2){  //以x為步長
 if (d < 0){
  d += 2*dy*t;
 }
 else{
  d += 2*(dy-dx)*t;
  y += t; //說明應(yīng)該畫在上面那個(gè)位置
 }
 x= x + t;
 draw_point(translater(x),translater(y),k_kind,d_kind); //繪制下一個(gè)點(diǎn)
 }
}
float translater(int x){
 /*
 函數(shù)說明:將像素坐標(biāo)下的坐標(biāo)轉(zhuǎn)化為openGL坐標(biāo)
 參數(shù)說明:傳入點(diǎn)像素坐標(biāo)-wid-wid,返回-1~1坐標(biāo)
 */
 return x/wid;
}
void draw_point(float x , float y, int k_kind,int d_kind){
 /*
 函數(shù)說明:繪制像素的點(diǎn),這里將點(diǎn)的大小設(shè)置為7。
 顏色采用藍(lán)色。
 參數(shù)說明:浮點(diǎn)數(shù)x,y是openGl坐標(biāo)系。kind是指明斜率的類型
 */
 glPointSize(7);
 glColor3f(0.0,0.0,1.0);
 glBegin(GL_POINTS);
 cout <<"k:"<

以上是“OpenGL中點(diǎn)Bresenham怎么繪制直線算法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


文章標(biāo)題:OpenGL中點(diǎn)Bresenham怎么繪制直線算法
新聞來源:http://weahome.cn/article/gesgss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部