c-openglgl
我是图形编程新手。我正在尝试使用glDrawPixels绘制,但我的程序没有任何输出。 我在网上进行了研究,我不断地得到不同的答案,关于我应该把什么样的数据传递给GLD。 我看过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++) {
数据[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;
}