這是一個賦值,我需要使用OpenGL渲染線條,但僅使用GL_POINTS。OpenGL:僅使用GL_POINTS渲染線條
我正在與一個水平線P1測試它(-1,-1)到P2(1,-1)。
我的函數使用線函數y = MX + C:
void line2(double x1, double y1, double x2, double y2, double precision, int r, int g, int b){
double m = 0.0; // slope
double c = (y1 - m*x1); // constant
double j = y1; // starting y value
// check division by 0
if (x2-x1 == 0)
m = 0;
else
m = (y2-y1)/(x2-x1);
glColor3f(r,g,b);
glBegin(GL_POINTS);
for (double i = x1; i < x2; i+=precision){
j = m*i + c; // result of y from line function
glVertex2f(i,j);
}
glEnd();
}
與調用它:
line2(-1,-1,1,-1,0.000001, 102, 102, 255);
給了我一個水平虛線。這不是連續的。如果我添加更多的精度,我的程序可能由於內存而掛起。
更新:我現在注意到的是,呈現多行,第一個是虛線!所以如果我多次調用line(),不管參數如何,第一行總是點綴而其他行都是完美的。
是否有更好的方法(公式或循環)來渲染一條線?
謝謝!
嘗試使用多個繪製調用(但讓他們小,例如<40)。將頂點創建拆分爲塊(頂點數量/ 40)併發出每個問題的繪製調用。 在OpenGL中3.3+,你主要通過頂點緩衝區和着色器做到這一點,你也許可以做到folling: 1.提交你的起點和終點通過頂點緩衝區 2.呼叫幾何着色器添加額外的頂點。將精度作爲統一變量傳遞(用於將內存從CPU推送到GPU)。 3.渲染:) – somnium
您應該先創建一個向量值,然後將它們作爲頂點屬性傳遞 – Charlie
也可以避免每次計算'j',因爲j的增量也是常量: 'double jInc = m * precision' 然後改變你的循環: 'for(double i = x1,j = y1; i
JMA