openGL 中點Bresenham繪製直線演算法

2021-08-16 23:29:03 字數 1835 閱讀 3650

macos xcode編譯器

#include 

#include

#include

#include

#include

using

namespace

std;

float wid = 400; //設定視窗的大小,約定視窗必須為正方形

float height = wid; //設定視窗的大小

int numbers = 20; //設定劃分的網格的個數

float t = wid/numbers; //模擬畫素下的單位1

/* 引數設定說明:

輸入直線的兩點a(x1,y1);b(x2,y2)

您應當確保引數範圍在-400~400.且為整數。

*支援不同斜率

*支援兩點位置顛倒

*/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)

void bresenham(int x1, int y1,int x2, int y2)

int dx = abs(x2-x1), dy = abs(y2-y1);

if (y1 > y2)

if (dy > dx)

float d = (dy +dy -dx)*t; //令d為決策量(這裡利用d = dx*w*2避免浮點運算)

float x = x1+0.0,y = y1+0.0;

draw_point(translater(x),translater(y),k_kind,d_kind); //繪製下乙個點

while( x < x2)

else

x= x + t;

draw_point(translater(x),translater(y),k_kind,d_kind); //繪製下乙個點

}}float translater(int x)

void draw_point(float x , float y, int k_kind,int d_kind)else

if (k_kind ==1 &&d_kind==1)else

if (k_kind==1&&d_kind ==0)

glvertex3f(x,y,0.0);

glend();

glflush();

}void grid()

glcolor3f(1.0,0,0);

glbegin(gl_lines); //繪製座標系,便於觀察

glvertex2f(-1,0);

glvertex2f(1,0);

glvertex2f(0,-1);

glvertex2f(0,1);

glend();

glflush();

glbegin(gl_lines);

glcolor3f(1.0,0.0,0.0);

glvertex2f(translater(x1),translater(y1)); //定點座標範圍

glvertex2f(translater(x2),translater(y2));

glend();

glflush();

//重新整理緩衝,保證繪圖命令能被執行

bresenham(x1, y1,x2,y2);

}int main(int argc, char *argv)

opengl中點精靈的使用

本人的個人部落格首頁為 csdn部落格首頁為 現在假設在乙個opengl的場景中存在大量的點,在繪製中你可以使用glvertex3d函式,繪製出來後,如果點很小,你看到了是場景中大量的 點 如果用glpointsize使點變大,你看到的是場景中有大量的 方格 是的,opengl中的點,其實都是方格,...

OpenGL 利用中點演算法畫y kx b直線

本文直接用 0 k 1 來說明中點演算法畫直線。其他的斜率可直接按照此方法進行類推。1。設乙個函式為f x,y y kx b 若f x,y 0,那麼該點在這條直線的上方 若f x,y 0,那麼該點在這條直線上 若f x,y 0,那麼該點在這條直線下方 2。因為k的範圍是 0 k 1,那麼x平均每單位...

中點Bresenham畫圓

這裡不仔細講原理,只是把我寫的演算法發出來,跟大家分享下,如果有錯誤的話,還請大家告訴我,如果寫的不好,也請指出來,一起討論進步。演算法步驟 1 輸入圓的半徑r。2 計算初始值d 1 r,x 0 y r。3 繪製點 x,y 及其在八分圓中的另外7個對稱點。4 判斷d的符號,若d 0,則先將d更新為d...