glutkeyboardfunc呼叫功能不起作用
glutKeyboardFunc calling function not working
我只是在按下" SpaceBar"时尝试调用功能。它的关键代码是32。
#include <GL/glut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <cmath>
#include <iostream>
#include <string.h>
using namespace std;
GLuint window, View1;
void Display_Mid_Ellipse()
{
double xc=0.0, yc=0.0, rx=140.0, ry=200.0;
double rxSq = rx * rx;
double rySq = ry * ry;
double x = 0, y = ry, p;
double px = 0, py = 2 * rxSq * y;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f( 1 ,0, 0);
glBegin(GL_POINTS);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
p = rySq - (rxSq * ry) + (0.25 * rxSq);
while (px < py)
{
x++;
px = px + 2 * rySq;
if (p < 0)
p = p + rySq + px;
else
{
y--;
py = py - 2 * rxSq;
p = p + rySq + px - py;
}
glBegin(GL_POINTS);
glVertex2d(xc+x,yc+y);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
}
p = rySq*(x+0.5)*(x+0.5) + rxSq*(y-1)*(y-1) - rxSq*rySq;
while (y > 0)
{
y--;
py = py - 2 * rxSq;
if (p > 0)
p = p + rxSq - py;
else
{
x++;
px = px + 2 * rySq;
p = p + rxSq - py + px;
}
glBegin(GL_POINTS);
glVertex2d(xc+x,yc+y);
glVertex2d(xc+x,yc-y);
glVertex2d(xc-x,yc-y);
glVertex2d(xc-x,yc+y);
glEnd();
glFlush();
}
} //end_MIDPOINT_ELLIPSE
void init () {
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.3,0.3,0.3,0.7);
gluOrtho2D(-500.0,500.0,-500.0,500.0);
}
void View1Display()
{
glutSetWindow(View1);
gluOrtho2D(-500.0,500.0,-500.0,500.0);
Display_Mid_Ellipse();
}
void Display()
{
glutSetWindow(window);
glClear(GL_COLOR_BUFFER_BIT);
//View1Display();
}
void keyFunc(unsigned char ch, int x, int y){
if(ch==32){
View1Display();
}
}
int main (int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(750, 750);
glutInitWindowPosition(0, 0);
window=glutCreateWindow("Circle and ellipse");
init();
View1 = glutCreateSubWindow(window,20,40, 340,340);
glutDisplayFunc(Display);
glutKeyboardFunc(keyFunc);
glutMainLoop();
return 0;
}
当我从display()函数调用相同的View1Display时,它可以很好地工作。我很困惑。我已经尝试了我可以但找不到解决方案的替代方案。请帮忙。谢谢
- 为活动窗口注册了回调(创建一个窗口隐式激活它),因此您可以为Toplevel窗口和您的Subwindow注册单独的显示回调。
- 不要从键盘回调调用您的子窗显示功能。切换共享变量&amp;使用
glutPostWindowRedisplay()
代替重复。 - 如果要使用
GLUT_SINGLE
,请确保glFlush()
强制更新到Framebuffer。
一起:
#include <GL/glut.h>
#include <cmath>
using namespace std;
void Display_Mid_Ellipse()
{
double xc = 0.0, yc = 0.0, rx = 140.0, ry = 200.0;
double rxSq = rx * rx;
double rySq = ry * ry;
double x = 0, y = ry, p;
double px = 0, py = 2 * rxSq * y;
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 1, 0, 0 );
glBegin( GL_POINTS );
glVertex2d( xc + x, yc - y );
glVertex2d( xc - x, yc - y );
glVertex2d( xc - x, yc + y );
glEnd();
p = rySq - ( rxSq * ry ) + ( 0.25 * rxSq );
while( px < py )
{
x++;
px = px + 2 * rySq;
if( p < 0 )
p = p + rySq + px;
else
{
y--;
py = py - 2 * rxSq;
p = p + rySq + px - py;
}
glBegin( GL_POINTS );
glVertex2d( xc + x, yc + y );
glVertex2d( xc + x, yc - y );
glVertex2d( xc - x, yc - y );
glVertex2d( xc - x, yc + y );
glEnd();
}
p = rySq*( x + 0.5 )*( x + 0.5 ) + rxSq*( y - 1 )*( y - 1 ) - rxSq*rySq;
while( y > 0 )
{
y--;
py = py - 2 * rxSq;
if( p > 0 )
p = p + rxSq - py;
else
{
x++;
px = px + 2 * rySq;
p = p + rxSq - py + px;
}
glBegin( GL_POINTS );
glVertex2d( xc + x, yc + y );
glVertex2d( xc + x, yc - y );
glVertex2d( xc - x, yc - y );
glVertex2d( xc - x, yc + y );
glEnd();
glFlush();
}
} //end_MIDPOINT_ELLIPSE
bool displayEllipse = false;
void View1Display()
{
glClearColor( 0.3, 0.3, 0.3, 0.7 );
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( -500.0, 500.0, -500.0, 500.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
if( displayEllipse )
Display_Mid_Ellipse();
glFlush();
}
void Display()
{
glClearColor( 0.0, 0.0, 0.0, 1.0 );
glClear( GL_COLOR_BUFFER_BIT );
glFlush();
}
GLuint window;
GLuint View1;
void keyFunc( unsigned char ch, int x, int y )
{
if( ch == 32 )
{
displayEllipse = !displayEllipse;
glutPostWindowRedisplay( View1 );
}
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize( 750, 750 );
glutInitWindowPosition( 0, 0 );
window = glutCreateWindow( "Circle and ellipse" );
glutDisplayFunc( Display );
glutKeyboardFunc( keyFunc );
View1 = glutCreateSubWindow( window, 20, 40, 340, 340 );
glutDisplayFunc( View1Display );
glutMainLoop();
return 0;
}
相关文章:
- 为什么我的打印功能不起作用?链表
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 我做错了什么?GetDiskFreeSpaceExA的功能根本不起作用
- 虚拟功能不起作用
- C++插入排序错误功能不起作用
- 使用链表.为什么我的插入功能不起作用?
- 功能指针不起作用(C )
- 为什么功能对我不起作用?C
- C 所有质数功能不起作用
- 朋友功能不起作用(语法错误)
- Winpcap:暂停/停止嗅探pcap_breakloop功能不起作用
- 我的模板功能具有通用引用不起作用
- C 类是功能不起作用的参数
- 现在将功能从主型到原型不起作用
- 排序功能不起作用
- TIM6,基本时间生成功能不起作用
- 功能调用不起作用,但控制台仍允许输入
- 二进制树级别明智的打印功能不起作用
- glutkeyboardfunc呼叫功能不起作用
- 为什么COUT在朋友函数中不起作用,该功能超载了操作员&lt;&lt;这是一个iStream运算符