В OpenGL я рисую 2D-изометрическую сетку. (картинка: http://i.imgur.com/nUZax.png). Пожалуйста, не возражайте против неаккуратного кода, так как большая часть этого просто пробует что-то, я пытаюсь испачкать руки этим материалом, прежде чем я правильно напишу часть мозаики мой настоящий двигатель.
Каждая плитка имеет ширину 76 пикселей и высоту 38 пикселей. Теперь я хочу текстурировать каждую плитку с помощью небольшой текстуры травы, которую я сделал. Тем не менее, это не будет хорошо!
Моя проблема в том, что текстура продолжает выглядеть испорченной. Это намного меньше, чем должно быть (примерно вдвое меньше), и оно окружено белым. Это код, который я использую, чтобы применить текстуру (размером 76x38, конечно!).
void drawSquare(int x, int y) {
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
glTexCoord2i( 38, -19); glVertex2i(x+38, y);
glTexCoord2i(-38, 19); glVertex2i(x, y+19);
glTexCoord2i( 38, -19); glVertex2i(x-38, y);
glTexCoord2i(-38, 19); glVertex2i(x, y-19);
glEnd();
}
Это часть кода, которая вычисляет X и Y.
for (int y = 1; y < gridY+1; y++) {
for (int x = 1; x < gridX+1; x++) {
drawSquare((x-y) * 38 + (SCREEN_SIZE_X/2), (x+y) * 19);
}
}
Вероятно, мне следует добавить, что я выставил настройки моего орто следующим образом.
glOrtho(0, SCREEN_SIZE_X, 0, SCREEN_SIZE_Y, -1, 1);
(SCREEN_SIZE_X и SCREEN_SIZE_Y просто 800x600)
Кто-нибудь, кто мог бы помочь мне здесь? Это будет с благодарностью. Возможно, чтобы сделать это более понятным, вот как это выглядит прямо сейчас!
EDIT:
После некоторой помощи это было изменено на это.
glBegin(GL_QUADS);
//glColor3f(r, g, b);
glTexCoord2f(0,1); glVertex2i(x+38, y);
glTexCoord2f(1,1); glVertex2i(x, y+19);
glTexCoord2f(1,0); glVertex2i(x-38, y);
glTexCoord2f(0,0); glVertex2i(x, y-19);
glEnd();
Результат: http://i.imgur.com/sOqsH.png