c-openglgl

c-openglgl,c,opengl,C,Opengl,我是图形编程新手。我正在尝试使用glDrawPixels绘制,但我的程序没有任何输出。 我在网上进行了研究,我不断地得到不同的答案,关于我应该把什么样的数据传递给GLD。 我看过数据[w*h*3],数据[w*h][3],以及数据[w][h][3]哪一个是最好的 到目前为止,, 我正在显示功能下存储我的RGB值: float pixels[1024][768][3]; int i,j; //Should give me all red for (i = 0; i < 768; i++) {

我是图形编程新手。我正在尝试使用glDrawPixels绘制,但我的程序没有任何输出。 我在网上进行了研究,我不断地得到不同的答案,关于我应该把什么样的数据传递给GLD。 我看过
数据[w*h*3]
数据[w*h][3]
,以及
数据[w][h][3]
哪一个是最好的

到目前为止,, 我正在显示功能下存储我的RGB值:

float pixels[1024][768][3];
int i,j;

//Should give me all red
for (i = 0; i < 768; i++) { 
  for (j = 0; j < 1024; j++) { 
     pixels[j][i][0] = 255.0;
     pixels[j][i][1] = 0.0;
     pixels[j][i][2] = 0.0;
  }
}
glDrawPixels(1024,768,GL_RGB,GL_FLOAT,pixels);
我得到的输出只是一个空窗口,我做错了什么


提前感谢。

您需要指定像素在视口中的位置(根据您提供的内容,该位置与窗口相同)

在进行
glDrawPixels
调用之前,请尝试调用
glWindowPos2i(0,0)
。这应该将所谓的光栅位置定位在窗口的左下角


至于您关于声明像素的最佳方式的问题,您建议的任何形式都足够了,因为它们创建了一个具有传染性的存储像素数据的内存阵列。声明的数组上不同的维数只会影响索引到数组中的方式。

不幸的是,在glDrawPixels之前添加glWindowPos2i(0,0)不起作用。我的窗口仍然是空白(白色)首先,渲染后是否交换缓冲区?也就是说,由于在
glutInitDisplayMode
行中指定了
glutdouble
,因此需要在渲染结束时通过调用
glutSwapBuffers
交换缓冲区。此外,如果使用
GL\u FLOAT
作为
glDrawPixels
的类型,则最大颜色值为1.0。这里没有问题;只是您的值将被限制为1.0。数据的最佳类型是什么?另外,你的意思是如果我想要红色,它将是rgb(100)?使用你最方便的类型。重要的是,最大像素值与像素的类型有关。例如,对于float,最大像素值为1.0。如果类型是say GLubyte(在C语言中是无符号字符),则值为255。基本上,无符号整数类型使用其最大值作为最大颜色强度。对于浮点类型,最大值为1.0。因此,对于您的示例,(1,0,0)as floats是正确的像素值。实际上,您希望在
display
函数中的所有渲染之后调用
glutSwapBuffers
(就像
display
返回之前的最后一次函数调用)
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize (1024, 768);
    glutCreateWindow (argv[0]);

    glutDisplayFunc(display);
    glutMainLoop();
    return 0; 
}