none
OPENGL. Выдает ошибку : Необработанное исключение в "0x1000bc48" в "Kopo4eZpa0I0uka.exe": 0xC0000005: Нарушение прав доступа при чтении "0x000000b4". RRS feed

  • Вопрос

  • Ошибка на три строчки :  glutMotionFunc(MPM);  glutPassiveMotionFunc(MM); glutMouseFunc(MP);. Если их закомментировать ошибка пропадает. MicrosoftVisualStudioC++2010

    #include "stdafx.h"
    #include <stdlib.h>
    #include <math.h>
    #include <GL/glut.h>
    #include <gl/GL.h>
    #include <gl/GLU.h>
    
    float winWid=400;
    float winHei=400;
    int Angle=0.0; float Scale=1.0;
    char buf [500];
    int x=0,y=0;
    
    void MM(int ax,int ay)
    {
     int x=ax;
     int y=ay;
    }
    
    void MPM(int ax,int ay)
    {
    
    }
    
    void MP(int button,int state,int x,int y)
    {
    
    }
     
     void Draw()
    {
    	Angle%=360;
    	glClear(GL_COLOR_BUFFER_BIT);
    	glPushMatrix();
    	Scale=1.0-abs(sin(3.14*Angle/90.0)/sqrt(3.0)/2);
    	glRotatef(Angle,0.0,0.0,1.0);
    	glScalef(Scale,Scale,1.0);
    	glBegin(GL_LINES);
    	/*for(float i=-winWid/2;i<=winWid/2;i+=20)
    	{
    		glVertex2f(i, -winHei/2);
    		glVertex2f(i, winHei/2);
    	}
    	for(float i=-winHei/2;i<=winHei/2;i+=20)
    	{
    		glVertex2f(-winWid/2,i );
    		glVertex2f(winWid/2,i );
    	}*/
    	for(float i=0+x;i<winWid+x;i+=20)
    	{
    		glVertex2f(i,0+y);
    		glVertex2f(i, winHei+y);
    	}
    	for(float i=0+y;i<winHei+y;i+=20)
    	{
    		glVertex2f(0+x,i);
    		glVertex2f(winWid+x,i);
    	}
    	glEnd();
    	glPopMatrix();
    	glutSwapBuffers();
    	
    	}
    
    void Initializate()
    {
    	glClearColor(0.0,0.0,0.0,1.0);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	//glOrtho(-winWid/2,winWid/2,-winHei/2,winHei/2,-200,200);
        glOrtho(0,winWid,winHei,0,-200,200);
    	glMatrixMode(GL_MODELVIEW);
    	
    }
    
    void Timer(int)
    {
    	glColor3f(1.0,1.0,1.0);
    	glutPostRedisplay();
    	glutTimerFunc(20, Timer, 0);
    }
    
    void KB(unsigned char Key,int x,int y)
    {
    	switch(Key)
    	{
    	case 'a' : Angle++;
    		break;
    	case 'd': Angle++;
    		break;
    	case '+': winWid++;winHei++;
    		break;
    	case '-': winWid--;winHei--;
    		break;
    	};
    }
    
    void SKB(int key,int x,int y)
    {
    	switch(key)
        {
    	case GLUT_KEY_LEFT : Angle++;
    	    break;
    	case GLUT_KEY_RIGHT :Angle--;
    		break;
    	};
    }
    int main(int argc, char **argv,char envp) 
    {
    	
    	glutInit (&argc, argv);
    		glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    
            
            glutMotionFunc(MPM);
            glutPassiveMotionFunc(MM);
    	glutMouseFunc(MP);
    		glutInitWindowSize (winWid, winHei);
            glutCreateWindow("LomayuSistemu");
            
    		glutDisplayFunc(Draw);
    		glutTimerFunc(500, Timer,0);
    		glutKeyboardFunc(KB);
    		glutSpecialFunc(SKB);
    		
    		Initializate();
            glutMainLoop ();
    	return 1;
    }
    
    Как исправить без удаления строчек?

    26 июля 2017 г. 18:13

Ответы

Все ответы