LINUX.ORG.RU

OpenGl не корректно отображает картинку

 , ,


0

1

Здравствуйте! Начал изучать OpenGl, накидал функцию для отрисовки картинки. Рисует не корректно.

void window::drawImage(int num, int w, int h, int x, int y){ 
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();
	glColor3f(1.0f, 1.0f, 1.0f);
	glTranslatef(x, y, 0.0f);
	glBindTexture(GL_TEXTURE_2D, textures[num]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(x, 0, 0);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(y, 128.0f, 0.0f);
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f(x+w, 0, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(y+h, 0, 0.0f);
	glEnd();
	glPopMatrix();
}

Не пинайте, пожалуйста. Пока толком ничего не понимаю. Что надо исправить?

Вот, что получается: https://lh3.googleusercontent.com/-Ld-b5l8c2J0/VMIHea6vaTI/AAAAAAAAAzI/RIzcITBHVnE/w503-h104-no/Screenshot%2Bfrom%2B2015-01-23%2B12%3A33%3A14.png



Последнее исправление: egordorichev (всего исправлений: 1)

Попробуй объяснить из каких соображений ты выбирал координаты вершин, возможно сам всё поймешь.

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)
Ответ на: комментарий от egordorichev

Подумай ещё раз. Координаты - это 12 значений, 4 трёхмерных вектора. И ещё подумай над разницей между осями x и y.

slovazap ★★★★★
()

Ты смотришь на картинку с неправильной стороны.

nikolnik ★★★
()
Ответ на: комментарий от slovazap

Действительно, я мыслю в 2D. Прости. В 3D я почти не разбираюсь, так как работаю с 2D. Соотвественно, для каждой вершины свои x и y.

egordorichev
() автор топика
Ответ на: комментарий от egordorichev

Да не «спасибо», показывай исправленный код. У тебя ещё во втором glTexCoord2f ошибка.

slovazap ★★★★★
()
Ответ на: комментарий от Deleted

Да уж(

	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();
	glColor3f(1.0f, 1.0f, 1.0f);
	glTranslatef(x, y, 0.0f);
	glBindTexture(GL_TEXTURE_2D, textures[num]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(0.0f, 0.0f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(x+w, 0.0f, 0.0f);
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f(0.0f, y, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(x+w, y+h, 0.0f);
	glEnd();
	glPopMatrix();
egordorichev
() автор топика
Ответ на: комментарий от egordorichev

все функции которые ты используешь, давно уже deprecated

RisuX3
()
Ответ на: комментарий от egordorichev

Так, понял - не в том порядке вершины рисовал

	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	glClear(GL_COLOR_BUFFER_BIT);
	glPushMatrix();
	glColor3f(1.0f, 1.0f, 1.0f);
	glTranslatef(x, y, 0.0f);
	glBindTexture(GL_TEXTURE_2D, textures[num]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(0.0f, 0.0f, 0.0f);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(x+w, 0.0f, 0.0f);
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f(x+w, y+h, 0.0f);
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(y+h, 0.0f, 0.0f);
	glEnd();
	glPopMatrix();
egordorichev
() автор топика
Ответ на: комментарий от egordorichev

Ок! Теперь все ок, только кверх ногами)

	glBegin(GL_QUADS);
	glTexCoord2f(0, 0); glVertex3f(0, 0, 0);
	glTexCoord2f(0, 1); glVertex3f(0, y+h, 0);
	glTexCoord2f(1, 1); glVertex3f(x+w, y+h, 0);
	glTexCoord2f(1, 0); glVertex3f(x+w, 0, 0);
	glEnd();
egordorichev
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.