0

我正在尝试使用 OpenGL 绘制一条线,而该线的两端坐标都在空闲函数中设置,但是当我使用套接字通过网络发送端点坐标时,它没有被绘制。下面是代码的快照

int  main(int argc, char **argv) 
{
glutInit(&argc,argv);
glutInitWindowSize( 1024,1024);       /* A x A pixel screen window  */

glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("Skeleton Tracker"); /* window title                   */
glutDisplayFunc(display);         /* tell OpenGL main loop what     */
glutIdleFunc(idle);

//first create the connection then we wil talk about the data transfer...
 /*****Code for server connection *****/

processRequest();
return 0;
}

void processrequest()
{
byte_sent = send(ClientSocket,(char*)&msg_pkt,sizeof(MSG_PACKET),0);
ofile<<"\nByte sent for start generating "<<byte_sent<<endl;
Sleep(1000);

memset(buf,0,sizeof(buf));

glutMainLoop(); 
}

void display(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);                
glClear(GL_COLOR_BUFFER_BIT);     /* clear the window */
glColor3f ( 0.0, 1.0 , 0.0);       /* draw in light red */
glBegin(GL_LINES);
glVertex2f(x[0] , y[0]);
glVertex2f(x[1] , y[1]);
glEnd();

glEnd();
glFlush();

}


void idle(void)
{

printf("\nIn Idle function\n");

nRetVal = recv(ClientSocket , (char*)mainbuf , 192,0);

printf("\nAmount of data received : %d\n" , nRetVal);
memcpy(buf , mainbuf ,  sizeof(buf));   //buf is of 8 bytes to hold 2 floating nos.

memcpy( &x[p] ,buf , 4); // upto 3
x[p] = x[p]/10.0;

memcpy( &y[p] ,buf+4 , 4); //upto 7
y[p] = y[p]/10.0;

glutPostRedisplay();

  } 
4

2 回答 2

0

你的程序设计是有问题的——你的空闲函数中有阻塞的 recv() 函数,这不好,空闲应该尽可能快,以免影响你的渲染。

考虑创建一个用于渲染的线程和第二个用于网络通信的线程,或者至少在您的空闲函数中使用不可阻塞的 recv() 来检查套接字上是否有任何可用数据,然后再从中读取(recv'ing)。

于 2012-09-10T08:45:22.197 回答
0

感谢哥们您的时间......实际上我忘记在调用 glutMainloop 之前定义正交投影矩阵......

gluOrtho2D( -250, 250, -250, 250);

它现在工作。

于 2012-09-10T09:14:36.787 回答