Я пытаюсь создать простой трассировщик луча, и я нахожу отображение текстуры в квадрат для визуализации. Разрешение, с которым я начал работать, - 250X250, но когда я его изменяю, скажем, 300X300, он компилируется и вылетает.Почему этот ящик пикселя не позволяет мне изменить размер окна/количество пикселей?
#include <stdlib.h>
#include <GL/glut.h>
using namespace std;
const int window_w = 250;
const int window_h = 250;
struct RGBType
{
float r;
float g;
float b;
};
GLuint tex = 0;
void init()
{
RGBType pixels[ window_w*window_h ];
RGBType* temp = pixels;
for (int x = 0; x < window_w*window_h; x++)
{
temp->r = 0;
temp->g = 0;
temp->b = 1;
temp++;
}
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, window_w, window_h, 0, GL_RGB, GL_FLOAT, NULL);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,window_w,window_h,GL_RGB,GL_FLOAT,pixels);
}
void display(void)
{
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1, 0, 1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3ub(255, 255, 255);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_QUADS);
glTexCoord2i(0, 0);
glVertex2i(0, 0);
glTexCoord2i(1, 0);
glVertex2i(1, 0);
glTexCoord2i(1, 1);
glVertex2i(1, 1);
glTexCoord2i(0, 1);
glVertex2i(0, 1);
glEnd();
glutSwapBuffers();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(window_w,window_h);
glutCreateWindow("Ray Tracer");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Я также интересен, как я мог бы использовать двойники вместо поплавков, потому что, когда я изменить типы и GL_DOUBLE, экран становится белым. – whoadrian
@AdrianCristea: 'GL_DOUBLE' не является принятым типом передачи пикселей. То есть ваш экран становится белым, потому что вызов 'glTexImage2D (...)' завершается с 'GL_INVALID_ENUM'. Вы должны проверить 'glGetError (...)' в какой-то момент. –