我正在用C / C ++编写代码,我遇到了错误。
#include "glut.h"
#include <random>
// Classes and structs //
struct GLPoint {
GLfloat x, y;
};
// Method(s) Declration //
void drawDot(GLfloat, GLfloat);
void serpinski_render(void);
void myInti(void);
// Method(s) Implementation //
void drawDot(GLfloat x, GLfloat y){
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void serpinski_render(void)
{
glClear(GL_COLOR_BUFFER_BIT); // Clear the screen from anything is displayed on it
GLPoint T[3] = { { 10, 10 }, { 600, 10 }, { 300, 600 } }; // the three points of parent triangle
int index = rand() % 3; // this mean i will choose a random number between 0 , 3
GLPoint point = T[index];
drawDot(point.x, point.y);
for (unsigned int i = 0; i < 5500; i++) // a loop that going to run 5500 ( a very big number )
{
index = rand() % 3;
point.x = (point.x + T[index].x) / 2;
point.y = (point.y + T[index].y) / 2;
drawDot(point.x, point.y);
}
glFlush();
}
void myInti(void)
{
glClearColor(1, 1, 1, 0); // a white background
glColor3f(0, 0, 0); // black points
glPointSize(3); // 3 pixel point size
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, 640, 0, 480);
}
// Main Method //
void main(int argc ,char ** argv )
{
glutInit(&argc, argv); // intilize toolkit
glutInitWindowPosition(100, 150);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480); // windows size is 640 x 480
glutDisplayFunc(serpinski_render);
myInti();
glutMainLoop();
}
我不知道它是否会正常工作,但这段代码应该让我产生Sierpinski三角形。 而且每次我使用C ++库时都会面对这种情况下随机lib这个stdlib.h中的问题让我感到困惑从来没有像以前那样面对它
错误1错误C2381:'退出':重新定义; __declspec(noreturn)不同c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ stdlib.h 376
答案 0 :(得分:2)
在glut.h和Visual Studio .NET之间存在不兼容性,这是“glut.h”和你的情况下的用法。 你可以通过声明来解决它:
#include <random>
#include "glut.h"
而不是:
#include "glut.h"
#include <random>
请阅读this description以获取更多信息和其他解决方案。 (“标题(.h)文件”部分)
由于没有创建窗口,您的代码也可能会失败。您可以使用glutCreateWindow创建一个窗口。你也可以通过如下安排你的主要来解决这个问题:
void main(int argc ,char ** argv )
{
glutInit(&argc, argv); // intilize toolkit
glutInitWindowPosition(100, 150);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(640, 480); // windows size is 640 x 480
glutCreateWindow("A title");
myInti();
glutDisplayFunc(serpinski_render);
glutMainLoop();
}
请同时阅读this information了解glutCreateWindow函数。
答案 1 :(得分:0)
您可能在glut.h
:
# ifndef GLUT_BUILDING_LIB
extern _CRTIMP void __cdecl exit(int);
# endif
glut.h
标题很旧。这可能是旧VC缺乏的一种解决方法。 Visual C现在似乎有一个与此冲突的声明。简单的解决方案是从标题中删除这些行,因为stdlib.h
中有一个有效的定义。
顺便说一下,所有glVertex
,glBegin
,glEnd
,矩阵堆栈和许多其他OpenGL调用都不推荐使用着色器。
也许还有更新/更好的glut
可用。我要检查一下。