[英]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.