簡體   English   中英

opengGL畫一條線

[英]opengGL drawing a line

到目前為止這是我的代碼:

#include <iostream>
#include <cstdlib>
#include <GL/glut.h>
#include <cmath>

void keyboard(unsigned char key, int x, int y);
void display(void);
void timer(int);
static float x=0.0f,y=0.0f;

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(200,200);
glutInitWindowSize(640,480);
glutCreateWindow("draw a line");
glutKeyboardFunc(&keyboard);
glutDisplayFunc(&display);

glutTimerFunc(10,timer,0);

glutMainLoop();

return EXIT_SUCCESS;
}


void keyboard(unsigned char key, int x, int y)
{
switch (key)
 {
 case '\x1B':
  exit(EXIT_SUCCESS);
  break;
}
}

void timer(int value){
x+=0.001;
y+=0.0005;
glutPostRedisplay();
glutTimerFunc(10,timer,0);
 }

void display()
 {

glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity ();
 glColor3f(0.0f, 1.0f, 0.0f);

glBegin(GL_POINTS);
glVertex2f(x,y);
glEnd();


glFlush();
}

這樣做的是它從點(0,0)到(1,0.5)每10毫秒點亮一個像素。 我想要的是當一個像素亮起時它會保持在那個狀態,所以最終你會看到一條線。 我怎樣才能做到這一點?

我不熟悉glut但我猜測display是每次重繪時調用的函數。 此函數以glClear(GL_COLOR_BUFFER_BIT)開頭。 此函數會在每次重繪時清除顏色緩沖區。

您可能會發現刪除glClear並不能完全解決您的問題。 這可能是因為您的圖形上下文可能是雙緩沖的並且為了提高效率,前緩沖區不會在每次動畫運行時復制到后台緩沖區。

最好的辦法是獲得所需的效果,可能是在每次動畫運行時繪制一條線。

為什么事情艱難? 雖然舊的OGL API已棄用,但您可以使用GL_LINES執行此操作:

glBegin(GL_LINES);
glVertex2f(x_start,y_start);
glVertex2f(x_end,y_end);
glEnd();

這將一次完全繪制線,這更容易,更有效(它還允許您從線抗鋸齒提示中受益)。

每次調用glutPostRedisplay()時都會調用display函數。 每次調用顯示功能時,都會清除屏幕。

您需要編寫一個函數來迭代您想要顯示的所有點。 每次迭代都會調用類似drawPoint()函數的東西。

也許是這樣的:

void display()
{
  glClear(GL_COLOR_BUFFER_BIT);
  glColor3f(0.0f, 1.0f, 0.0f);
  for (int i = 0; i < num_points; i++)
  {
      drawPoint(points(i));
  }
  glFlush();
}

或者,您可以跳過編寫新函數並執行此操作:

 glBegin(GL_POINTS);
 for (int i = 0; i < num_points; i++)
 {
     glVertex2f(points(i).getX(), points(i).getY());
 }
 glEnd();

如果您使用,請使用GL_LINES。 一種方法是讓你想要繪制一個點數組EG:p [0],p [1],p [2],p [3],p [4],p [5] ......然后使用一些for循環繪制它

glBegin(GL_LINES);
for(...) {
  glVertex2f(p[i  ]->x,p[i  ]->y);
  glVertex2f(p[i+1]->x,p[i+1]->y);
}
glEnd();

因此,使用此方法可以將p []替換為允許您制作漂亮形狀的函數

glVertex2f(functionx(i  ),functiony(i  ));
glVertex2f(functionx(i+1),functiony(i+1));

注意:線條工作奇怪他們沒有鏈接你需要有一個起點到終點類的東西因此i + 1

我猜你試圖使用極坐標繪制像心形的東西?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM