我试图在窗口上打印一些点,但窗口上没有显示任何内容。窗口背景设置为灰色,就是这样。屏幕上没有点出现。这是我的代码
#include <GL/freeglut.h>
#include <GL/gl.h>
#include<unistd.h>
#include<iostream>
using namespace std;
float a[2]={0,0.7},b[2]={-0.3,-0.5},c[2]={0.5,-0.55};
float m[2]={0.0,0.0};
int roll_die() {
int k= (rand()%6) + 1;
return k;
}
void midpoint(float p[],float q[],float *k )
{
for(int i=0;i<2;i++)
{
k[i]=(p[i]+q[i])/2;
}
}
void displaypoint(float a[])
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POINT);
glVertex2f(a[0], a[1]);
glEnd();
glPointSize(8.0);
glFlush();
}
void setup()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex2f(a[0], a[1]);
glVertex2f(b[0],b[1]);
glVertex2f(c[0],c[1]);
glEnd();
glPointSize(8.0);
glFlush();
}
void chaos()
{
int num;
for(int i=0;i<1000;i++)
{
num=roll_die();
if(num==1 || num==2)
midpoint(m,a,m);
else if(num==3 || num==4)
midpoint(m,b,m);
else
midpoint(m,c,m);
displaypoint(m);
usleep(2000);
}
}
int main(int argc, char **argv)
{
int num;
float a[2]={0,0.7},b[2]={-0.3,-0.5},c[2]={0.5,-0.55};
float m[2]={0.0,0.0};
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL - Creating a triangle");
glClearColor(0.4, 0.4, 0.4, 0.4);
glutDisplayFunc(setup);
glutDisplayFunc(chaos);
glutMainLoop();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有几个问题。为了找到它们,我自己编译并完成了它们:
GL_POINT应该GL_POINTS在显示点。 GL_POINT完全意味着别的东西——GL_POINTS即使你只显示一个点,你仍然在使用-Wall如果您还没有添加到您的编译器标志,我建议您添加,因为编译器会告诉您这一点:)真正的失败之处在于,您每次绘制一个点时都在清除,而由于使用GL_POINT.
由于您是 GL 的新手,我将提到glGetError()作为第一遍调试机制非常有用。您可以调用它并检查程序中各个点的返回值,以查看 GL 是否告诉您您做错了什么。例如,在这种情况下,glGetError()在您的 drawpoint 函数之后调用将返回 error GL_INVALID_ENUM,因为您在调用 时使用了无效的枚举值(GL_POINT而不是GL_POINTS)glBegin()。
这是一个工作示例,以防万一。我希望你不介意我重新格式化并压缩它以便更容易在这里分享(有些是为了帮助我阅读和理解它)。这是一个简洁的程序,我不知道它会在我运行时输出它所做的事情。凉爽的 :)
#include <GL/freeglut.h>
#include <GL/gl.h>
#include <unistd.h>
float a[2] = { 0.0f, 0.70f };
float b[2] = { -0.3f, -0.50f };
float c[2] = { 0.5f, -0.55f };
float m[2] = { 0.0f, 0.00f };
void midpoint(float p[], float q[], float* k) {
for (int i = 0; i < 2; i++)
k[i] = (p[i] + q[i]) / 2;
}
void chaos() {
glPointSize(1.0);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
for(int i = 0; i < 100000; i++) {
int num = (rand() % 6) + 1;
if (num < 3)
midpoint(m, a, m);
else if (num < 5)
midpoint(m, b, m);
else
midpoint(m, c, m);
glBegin(GL_POINTS);
glVertex2f(m[0], m[1]);
glEnd();
glFlush();
}
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL - Creating a triangle");
glutDisplayFunc(chaos);
glutMainLoop();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
如果有什么没有意义,请告诉我。
| 归档时间: |
|
| 查看次数: |
2878 次 |
| 最近记录: |