【发布时间】:2013-11-18 19:31:16
【问题描述】:
我有一个三维数组
unsigned int window_RGBData[3][640][480];
void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawPixels(window_Width,window_Height,GL_RGB,GL_UNSIGNED_INT, window_RGBData);
glutSwapBuffers();
}
无论数组中的值是什么,它都只会显示黑屏。数组是这样的,第1维是红色,第2维是绿色,第3维是蓝色。 当我使用 gl_unsinged_byte 而不是 int 时,我得到黑白线(如果所有数组都是 255)。所以它正在从数组中读取。 但我想我无法为opengl指定正确的数组格式。我可以使用
glBegin(GL_POINT)
// code here
glEnd
但由于特定原因,这种方式超出了范围。
关于如何在 gldrawpixels 函数或任何其他方式中指定格式的任何想法。
初始化等:
int Image::OpenGLShow(){
// Display onscreen
int argc=1;
char* argv[1];
argv[0]=strdup("Helloguys");
glutInit(&argc, argv);
window_Height=Height;
window_Width= Width;
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(Width, Height);
glutCreateWindow("OpenGL glDrawPixels demo");
glutDisplayFunc(display);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return 0;
}
编辑: 我相信问题出在我放入数组中的值上。现在这是填充数组的方式:
for(int i =0;i<200;i++){
for (int j=0; j<200;j++){
// rgb values at i*j point on screen.
window_RGBData[0][i][j]=red_value; // 0-255
window_RGBData[1][i][j]=green_value;
window_RGBData[2][i][j]=blue_value;
}
}
所以基本上我假设 gldrawpixels 方法会将这三者组合在一起并显示像素,具体取决于我提供的格式。这绝对不是 gldrawpixels 正在做的事情。那么我应该更改填充数组的方式还是更改甲酸盐值?
【问题讨论】:
-
你能展示你的opengl上下文的设置吗?具体来说,设置你的显示模式?
-
我编辑了这个问题.. 必须注意的是我已经尝试使用 glbegin() 和 glend() 绘制一个三角形并且它显示正确..
-
“第 1 维是红色,第 2 维是蓝色,第 3 维是绿色”——你是从哪里得到这个想法的?它(可能!)与您的问题无关,但肯定是对基础知识的误解。
-
我的 rgb fomat 不好。但我说的是我的数组是如何填充的。
标签: c++ arrays opengl freeglut