OpenGL текстурирование - PullRequest
2 голосов
/ 09 мая 2011

Я пытаюсь создать карту нормалей в opengl, которую я могу загрузить в шейдер и динамически изменять, хотя в настоящее время я застрял в том, как создать текстуру.

У меня сейчас есть это:

glActiveTexture(GL_TEXTURE7);
glGenTextures(1, &normals);
glBindTexture(GL_TEXTURE_2D, normals);
texels = new Vector3f*[256];

for(int i = 0; i < 256; ++i){
    texels[i] = new Vector3f[256];
}
this->setup_normals();

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
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, 3, 256, 256, 0, GL_RGB, GL_FLOAT, texels);

...

void setup_normals(){
for(int i = 0; i < 256; ++i){
        for(int j = 0; j < 256; ++j){
            texels[i][j][0] = 0.0f;
            texels[i][j][1] = 1.0f;
            texels[i][j][2] = 0.0f;
        }
    }
}

где Vector3f: typedef float Vector3f [3];

и тексели: Vector3f ** тексели;

Когда я рисую эту текстуру в экранном квадрате, используя ортогональную матрицу (которая работает для загруженных текстур), я получаю this.

Я не уверен, почему он не выглядит полностью зеленым, а также то, что заставляет черные полосы появляться внутри него. Любая помощь приветствуется.

1 Ответ

1 голос
/ 09 мая 2011

Ваш массив должен быть смежным, поскольку glTexImage2D() не принимает никаких параметров шага или отображения строк:

texels = new Vector3f[256*256];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...