OpenGL:为什么是这个白色的scrreen
OpenGL: Why this white scrreen
为什么我会得到一个完整的白色窗口作为该程序的输出期望一个盒子
代码在这里
#include<Gl/glut.h>
static GLfloat vertices[] = {0.0, 0.0, 0.0,
0.5, 0.0, 0.0,
0.5, 0.5, 0.0,
0.0, 0.5, 0.0,
};
void reshape(int w, int h)
{
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 0.0);
}
void Draw()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBegin(GL_LINES);
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glArrayElement(3);
glEnd();
glDisableClientState(GL_VERTEX_ARRAY);
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("vectors");
glClearColor(0.0,0.0,0.0,0.0);
glutReshapeFunc(reshape);
glutDisplayFunc(Draw);
glutMainLoop();
}
已将GL_LINES更正为 GL_QUADS
多个问题:
-
reshape()
被打破了;glOrtho()
当前矩阵的倍数,如果多次调整窗口大小,将给出无意义的结果。 - 您请求双缓冲 (
GLUT_DOUBLE
) 上下文,但无法交换缓冲区。glFlush()
是不够的。 请尝试glutSwapBuffers()
。 - 您确实应该在每一帧重置投影/模型视图矩阵。 有助于防止错误。
一试:
#include<Gl/glut.h>
static GLfloat vertices[] =
{
0.0, 0.0,
0.5, 0.0,
0.5, 0.5,
0.0, 0.5,
};
void Draw()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -2, 2, -2, 2, -1, 1 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glColor3f(1.0,1.0,1.0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer( 2, GL_FLOAT, 0, vertices );
glBegin(GL_QUADS);
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glArrayElement(3);
glEnd();
glDisableClientState(GL_VERTEX_ARRAY);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowSize(400,400);
glutInitWindowPosition(100,100);
glutCreateWindow("vectors");
glutDisplayFunc(Draw);
glutMainLoop();
}
我怀疑问题是你对glVertexPointer()
的调用。最后一个参数应该是指向您正在使用的数组开头的指针,但目前您只是向它传递一个空指针,因此它没有任何可处理的内容。
试试这个:
glVertexPointer(3, GL_FLOAT, 0, vertices);
编辑:顺便说一下,你的代码不会给你一个盒子。如果它有效,我想它只会给你两行。尝试使用 GL_QUADS 而不是GL_LINES。
我突然想到的主要内容是数组: //static GLfloat vertices[] = {0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0, };
应该是
static GLfloat vertices[] = {0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.5, 0.0 };
(注意删除的逗号)
客户端状态:例如,这可以在主循环中完成,因为启用和禁用的成本很高,并且您的绘制循环将因此受到影响。
相关文章:
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- SFML白色矩形
- 帧缓冲纹理变为白色(片段着色器不会影响它)
- 如何在SDL2窗口上使用Cairo绘制一条白色直线
- 为什么在使用VK_PRESENT_MODE_FIFO_KHR呈现模式调整交换链图像大小时出现白色闪烁
- OpenGL 混合会在纹理周围创建白色边框
- 如何使白色透明
- 连接信号(Qstring)白色插槽(字符串)的2个不同类别
- 在 SFML 中不使用动态内存时显示白色纹理代替实际纹理
- 使用 FreeType 和 SDL2 渲染文本会生成白色方块而不是字符
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- 如何在 Win32 应用中拖动纯色矩形,而不会产生白色闪烁,也不会干扰其他屏幕对象
- C 提升ifstream读取文件内容,带有白色空间,折断,标签等
- 从字符串中剥离白色空间
- 现代OpenGL,在对象上获得白色纹理
- 用SFML和OpenGL显示白色三角形
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- OpenGL绘制三角形只有白色
- 命名课程中的白色空间
- OpenGL:为什么是这个白色的scrreen